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]

c++/5007: binderfirst<> not constructable if second arg is const reference + ice



>Number:         5007
>Category:       c++
>Synopsis:       binderfirst<> not constructable if second arg is const reference + ice
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-illegal-code
>Submitter-Id:   net
>Arrival-Date:   Tue Dec 04 03:36:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Arnold Metselaar
>Release:        unknown-1.0
>Organization:
>Environment:
Linux 2.2.14 #1 Sat Mar 25 00:45:35 GMT 2000 i686 unknown 
>Description:
instantiation of `binder1st<mem_fun1_t<void,
unary_functor<const int &,void>,const int &> >' fails and
provokes internal compiler error.

transcript:

metselaa@utmws217:~/klad > g++ -Wall testun.ii
/usr/include/g++/stl_function.h: In instantiation of `binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >':
../include/sf_mult/sf_func.h:15:   instantiated from `unary_functor<const int &,void>::func()'
testun.cpp:13:   instantiated from here
/usr/include/g++/stl_function.h:198: forming reference to reference type `const
int &const'
/usr/include/g++/stl_function.h:198: `binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >::operator ()(...)' must be a nonstatic member function
/usr/include/g++/stl_function.h: In instantiation of `binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >::operator ()(...)':
/usr/include/g++/stl_algo.h:83:   instantiated from `for_each<int *, binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> > >(int *, int *, binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >)'
testun.cpp:13:   instantiated from here
/usr/include/g++/stl_function.h:198: `binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >::operator ()(...)' must be a nonstatic member function
/usr/include/g++/stl_function.h: In function `{error} binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >::operator ()(...)':
/usr/include/g++/stl_function.h:198: Internal compiler error in `layout_decl', at stor-layout.c:274 
>How-To-Repeat:
g++ testun.ii
>Fix:
unknown
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="testun.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="testun.ii"

IyAxICJ0ZXN0dW4uY3BwIgojIDEgIi4uL2luY2x1ZGUvc2ZfbXVsdC9zZl9mdW5jLmgiIDEKIAog
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9mdW5jdGlvbmFsIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL3N0bF9jb25maWcuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKIAogCiAK
IAogCiAKIAogCiAKIAogCgoKIAoKIAogCiAKIAogCiAKIAoKCgoKCgoKCiMgMTQ4ICIvdXNyL2lu
Y2x1ZGUvZysrL3N0bF9jb25maWcuaCIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcu
aCIgMSAzCiAKCgoKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoK
CgogCgoKCgoKCgogCiMgMTM4ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKCiAKCgoKCgoK
CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxOTYgIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAK
CgoKCgoKCgogCgoKCgogCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKCiAKCgoKCiMgNzEgIi91c3Iv
aW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCiAKCgoKCgoKCiAKCgoKIyAxMDMgIi91c3IvaW5jbHVk
ZS9zeXMvY2RlZnMuaCIgMwoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
IAoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKIyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAyIDMKCgogCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS9nbnUvc3R1YnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDI3OCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCgoKIyAyNiAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2Ut
bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoK
IAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45
NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4
LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1s
aWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiAK
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9f
dV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFk
X3Q7CiMgNDggIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKCnR5cGVkZWYgc2lnbmVkIGNo
YXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2ln
bmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWlu
dDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50
IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBf
X3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVh
ZF90IF9fZGV2X3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX3VpZF90OwkJIAp0eXBlZGVmIF9fdV9p
bnQgX19naWRfdDsJCSAKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190OwkJIAp0eXBlZGVmIF9fdV9p
bnQgX19tb2RlX3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7IAkJIAp0eXBlZGVmIGxv
bmcgaW50IF9fb2ZmX3Q7CQkgCnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CQkgCnR5cGVkZWYg
aW50IF9fcGlkX3Q7CQkJIAp0eXBlZGVmIGludCBfX3NzaXplX3Q7CQkJIAp0eXBlZGVmIF9fdV9s
b25nIF9fcmxpbV90OwkJIAp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsJCSAKdHlwZWRl
ZiBfX3VfaW50IF9faWRfdDsJCQkgCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsy
XTsKICB9IF9fZnNpZF90OwkJCQkgCgogCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsJCQkgCnR5cGVk
ZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIGxv
bmcgaW50IF9fc3dibGtfdDsJCSAKDAp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCiAKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7CgogCgoKIAoKCgoKIAp0eXBlZGVmIHN0
cnVjdAogIHsKICAgICAKCgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNbMTAyNCAgLyAoOCAq
IHNpemVvZiAoX19mZF9tYXNrKSkgXTsKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19r
ZXlfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKIAoKIAp0
eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90
OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9f
ZnNibGtjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBf
X3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9faW5vNjRfdDsK
CiAKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgogCnR5cGVkZWYgbG9uZyBpbnQgX190X3Nj
YWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgogCnR5cGVk
ZWYgaW50IF9faW50cHRyX3Q7CgoKIAoKCgoKCiMgOSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o
IiAyIDMKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTQ4
Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoK
CiMgNjEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMx
ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45
NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2ludF90OwoKCgoKIAoKIAoKIyAzMTcgIi91c3Iv
bGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIg
MiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3Vp
bnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgMTUxICIvdXNy
L2luY2x1ZGUvZysrL3N0bF9jb25maWcuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCiAgICAgIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMzQgIi91c3IvaW5jbHVk
ZS9nKysvc3RsX2NvbmZpZy5oIiAzCgoKIyAyNDggIi91c3IvaW5jbHVkZS9nKysvc3RsX2NvbmZp
Zy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAoKCgoKCgoK
CgoKCgoKCgoKCgogCiAKIyAzMTYgIi91c3IvaW5jbHVkZS9nKysvc3RsX2NvbmZpZy5oIiAzCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIyAxOCAiL3Vzci9pbmNs
dWRlL2crKy9mdW5jdGlvbmFsIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2Ut
bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKCgoKCgogCgogCgoK
CgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8y
Ljk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKCgoK
CgoKCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51
eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoK
CgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51
eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
IyAxOSAiL3Vzci9pbmNsdWRlL2crKy9mdW5jdGlvbmFsIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRl
L2crKy9zdGxfZnVuY3Rpb24uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9m
dW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0
IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xh
c3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJz
dF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAg
dHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OyAgICAgIAoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IHBsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAg
X1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl
dHVybiBfX3ggKyBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAtIF9feTsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7IH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBkaXZpZGVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194IC8gX195OyB9Cn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQocGx1czxfVHA+KSB7CiAgcmV0dXJuIF9U
cCgwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQo
bXVsdGlwbGllczxfVHA+KSB7CiAgcmV0dXJuIF9UcCgxKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiAK
ewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg
eyByZXR1cm4gX194ICUgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbmVn
YXRlIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IAp7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4g
CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z
dCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
Z3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPiAKewogIGJvb2wg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu
IF9feCA+IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3MgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2VxdWFsIDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxib29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwg
Y29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBfX3k7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+
IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVu
YXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9f
eCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4gCm5vdDEoY29u
c3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRl
PihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4gCmNsYXNzIGJpbmFyeV9u
ZWdhdGUgCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZp
cnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Q
cmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBs
aWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkg
e30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJn
dW1lbnRfdHlwZSYgX194LCAKICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRp
Y2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9N
X3ByZWQoX194LCBfX3kpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5s
aW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4gCm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19w
cmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+IApjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4g
ewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJz
dF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRp
b24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn
dW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9w
KHZhbHVlLCBfX3gpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3Mg
X1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+IApiaW5kMXN0KGNvbnN0IF9PcGVyYXRp
b24mIF9fb3BlciwgY29uc3QgX1RwJiBfX3gpIAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0
aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxf
T3BlcmF0aW9uPihfX29wZXIsIF9BcmcxX3R5cGUoX194KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
T3BlcmF0aW9uPiAKY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlw
ZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAg
X09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlw
ZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAg
ICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBf
X3kpIAogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmly
c3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7
IAogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBi
aW5kZXIybmQ8X09wZXJhdGlvbj4gCmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19vcGVyLCBj
b25zdCBfVHAmIF9feCkgCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9h
cmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihf
X29wZXIsIF9BcmcyX3R5cGUoX194KSk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9u
MSwgY2xhc3MgX09wZXJhdGlvbjI+CmNsYXNzIHVuYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+IAp7CnBy
b3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfX29wMTsKICBfT3BlcmF0aW9uMiBfX29wMjsKcHVibGlj
OgogIHVuYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlv
bjImIF9feSkgCiAgICA6IF9fb3AxKF9feCksIF9fb3AyKF9feSkge30KICB0eXBlbmFtZSBfT3Bl
cmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp
b24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX29wMShfX29wMihf
X3gpKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRp
b24yPgppbmxpbmUgdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4gCmNvbXBv
c2UxKGNvbnN0IF9PcGVyYXRpb24xJiBfX29wMSwgY29uc3QgX09wZXJhdGlvbjImIF9fb3AyKQp7
CiAgcmV0dXJuIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+KF9fb3AxLCBf
X29wMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIs
IGNsYXNzIF9PcGVyYXRpb24zPgpjbGFzcyBiaW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4gewpwcm90
ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX01fb3AxOwogIF9PcGVyYXRpb24yIF9NX29wMjsKICBfT3Bl
cmF0aW9uMyBfTV9vcDM7CnB1YmxpYzoKICBiaW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9u
MSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195LCAKICAgICAgICAgICAgICAgICBjb25zdCBf
T3BlcmF0aW9uMyYgX196KSAKICAgIDogX01fb3AxKF9feCksIF9NX29wMihfX3kpLCBfTV9vcDMo
X196KSB7IH0KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigp
KGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfTV9vcDEoX01fb3AyKF9feCksIF9NX29wMyhfX3gpKTsKICB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0
aW9uMz4KaW5saW5lIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLCBfT3BlcmF0aW9uMiwgX09w
ZXJhdGlvbjM+IApjb21wb3NlMihjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEsIGNvbnN0IF9PcGVy
YXRpb24yJiBfX29wMiwgCiAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX29wMykKewogIHJl
dHVybiBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMixfT3BlcmF0aW9uMz4K
ICAgIChfX29wMSwgX19vcDIsIF9fb3AzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNz
IF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0ciko
X0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNp
dCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0
cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBf
TV9wdHIoX194KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+Cmlu
bGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jl
c3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxf
QXJnLCBfUmVzdWx0PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9Bcmcy
LCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6IAogIHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAg
ICBfUmVzdWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3Rv
X2JpbmFyeV9mdW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5j
dGlvbihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSAKICAgICAgOiBfTV9wdHIoX194KSB7
fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25zdCB7CiAg
ICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9B
cmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5
X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IApwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9B
cmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEs
X0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lk
ZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBjb25zdCBfVHAmIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4gc3RydWN0IGlkZW50aXR5IDogcHVibGljIF9JZGVudGl0eTxfVHA+IHt9
OwoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIGNvbnN0
IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Q
YWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlw
ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29u
ZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf
X3guc2Vjb25kOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDFz
dCA6IHB1YmxpYyBfU2VsZWN0MXN0PF9QYWlyPiB7fTsKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBz
dHJ1Y3Qgc2VsZWN0Mm5kIDogcHVibGljIF9TZWxlY3QybmQ8X1BhaXI+IHt9OwoKIAp0ZW1wbGF0
ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3Qxc3QgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzE+IHsKICBfQXJnMSBvcGVyYXRvcigp
KGNvbnN0IF9BcmcxJiBfX3gsIGNvbnN0IF9BcmcyJikgY29uc3QgeyByZXR1cm4gX194OyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3QybmQg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+IHsKICBfQXJnMiBv
cGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkgY29uc3QgeyByZXR1cm4g
X195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPiAKc3RydWN0IHBy
b2plY3Qxc3QgOiBwdWJsaWMgX1Byb2plY3Qxc3Q8X0FyZzEsIF9BcmcyPiB7fTsKCnRlbXBsYXRl
IDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBwcm9qZWN0Mm5kIDogcHVibGljIF9Q
cm9qZWN0Mm5kPF9BcmcxLCBfQXJnMj4ge307CgogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3Vs
dD4Kc3RydWN0IGNvbnN0YW50X3ZvaWRfZnVuCnsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5
cGU7CiAgcmVzdWx0X3R5cGUgX192YWw7CiAgY29uc3RhbnRfdm9pZF9mdW4oY29uc3QgcmVzdWx0
X3R5cGUmIF9fdikgOiBfX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9y
KCkoKSBjb25zdCB7IHJldHVybiBfX3ZhbDsgfQp9OyAgCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1
bHQsIGNsYXNzIF9Bcmd1bWVudCA9IF9SZXN1bHQ+CgoKCnN0cnVjdCBjb25zdGFudF91bmFyeV9m
dW4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZ3VtZW50LCBfUmVzdWx0PiB7CiAgX1Jlc3Vs
dCBfTV92YWw7CiAgY29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92
YWwoX192KSB7fQogIGNvbnN0IF9SZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50Jikg
Y29uc3QgeyByZXR1cm4gX01fdmFsOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNs
YXNzIF9BcmcxID0gX1Jlc3VsdCwgY2xhc3MgX0FyZzIgPSBfQXJnMT4KCgoKc3RydWN0IGNvbnN0
YW50X2JpbmFyeV9mdW4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX1Jl
c3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50X2JpbmFyeV9mdW4oY29uc3QgX1Jl
c3VsdCYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgX1Jlc3VsdCYgb3BlcmF0b3IoKShj
b25zdCBfQXJnMSYsIGNvbnN0IF9BcmcyJikgY29uc3QgewogICAgcmV0dXJuIF9NX3ZhbDsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3ZvaWRfZnVuPF9S
ZXN1bHQ+IGNvbnN0YW50MChjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFu
dF92b2lkX2Z1bjxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0Pgpp
bmxpbmUgY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4gY29uc3RhbnQxKGNvbnN0
IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9S
ZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFu
dF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PiAKY29uc3RhbnQyKGNvbnN0IF9S
ZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVz
dWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQoKIAogCmNsYXNzIHN1YnRyYWN0aXZlX3JuZyA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4gewpwcml2YXRlOgog
IHVuc2lnbmVkIGludCBfTV90YWJsZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4MTsKICBzaXplX3Qg
X01faW5kZXgyOwpwdWJsaWM6CiAgdW5zaWduZWQgaW50IG9wZXJhdG9yKCkodW5zaWduZWQgaW50
IF9fbGltaXQpIHsKICAgIF9NX2luZGV4MSA9IChfTV9pbmRleDEgKyAxKSAlIDU1OwogICAgX01f
aW5kZXgyID0gKF9NX2luZGV4MiArIDEpICUgNTU7CiAgICBfTV90YWJsZVtfTV9pbmRleDFdID0g
X01fdGFibGVbX01faW5kZXgxXSAtIF9NX3RhYmxlW19NX2luZGV4Ml07CiAgICByZXR1cm4gX01f
dGFibGVbX01faW5kZXgxXSAlIF9fbGltaXQ7CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemUodW5z
aWduZWQgaW50IF9fc2VlZCkKICB7CiAgICB1bnNpZ25lZCBpbnQgX19rID0gMTsKICAgIF9NX3Rh
YmxlWzU0XSA9IF9fc2VlZDsKICAgIHNpemVfdCBfX2k7CiAgICBmb3IgKF9faSA9IDA7IF9faSA8
IDU0OyBfX2krKykgewogICAgICAgIHNpemVfdCBfX2lpID0gKDIxICogKF9faSArIDEpICUgNTUp
IC0gMTsKICAgICAgICBfTV90YWJsZVtfX2lpXSA9IF9fazsKICAgICAgICBfX2sgPSBfX3NlZWQg
LSBfX2s7CiAgICAgICAgX19zZWVkID0gX01fdGFibGVbX19paV07CiAgICB9CiAgICBmb3IgKGlu
dCBfX2xvb3AgPSAwOyBfX2xvb3AgPCA0OyBfX2xvb3ArKykgewogICAgICAgIGZvciAoX19pID0g
MDsgX19pIDwgNTU7IF9faSsrKQogICAgICAgICAgICBfTV90YWJsZVtfX2ldID0gX01fdGFibGVb
X19pXSAtIF9NX3RhYmxlWygxICsgX19pICsgMzApICUgNTVdOwogICAgfQogICAgX01faW5kZXgx
ID0gMDsKICAgIF9NX2luZGV4MiA9IDMxOwogIH0KCiAgc3VidHJhY3RpdmVfcm5nKHVuc2lnbmVk
IGludCBfX3NlZWQpIHsgX01faW5pdGlhbGl6ZShfX3NlZWQpOyB9CiAgc3VidHJhY3RpdmVfcm5n
KCkgeyBfTV9pbml0aWFsaXplKDE2MTgwMzM5OHUpOyB9Cn07CgoKIAoKIAogCiAKIAogCiAKIAoK
IAogCiAKIAogCgogCiAKIAogCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpj
bGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYp
IHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01f
ZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248Y29uc3QgX1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f
ZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsg
fQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdChfUmV0
IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBf
X3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6
OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29u
c3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJs
aWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNv
bnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNv
bnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m
KSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLF9S
ZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0Fy
ZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gp
IGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1Rw
OjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxj
b25zdCBfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFf
dChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIChf
X3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29u
c3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz
cyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0Fy
ZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gp
IGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6
OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNz
IF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZf
dChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4q
X01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9
OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m
dW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y
KCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1
bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7
CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBj
b25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBj
b25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBj
b25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8dm9pZCwg
X1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2
b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRl
OgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBj
b25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw
LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1Rw
OjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0
IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6
OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh
c3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6
OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19w
LCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQg
KF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
Y2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IAogIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u
c3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYp
IHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAo
X19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNv
bnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFf
cmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0Fy
Zyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6Oipf
X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yLCBf
QXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1Rw
OjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz
cyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m
dW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K
ICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3Iu
Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsK
fTsKCgoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1l
bV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4g
bWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg
X1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6
Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3JlZl90
PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpIAogIHsgcmV0dXJuIG1l
bV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihf
UmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxf
UmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6
OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsg
fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNv
bnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9B
cmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19m
KTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5l
IG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9f
ZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsg
fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNv
bnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6
Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxf
VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1Rw
OjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBj
b25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZiko
X0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihf
X2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxp
bmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6
Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19m
KTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5l
IGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW4xX3JlZihfUmV0IChf
VHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9S
ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCiAKCgoKIAogCiAKIyAyMCAiL3Vzci9pbmNsdWRlL2crKy9m
dW5jdGlvbmFsIiAyIDMKCgoKCiAKIAogCiMgNiAiLi4vaW5jbHVkZS9zZl9tdWx0L3NmX2Z1bmMu
aCIgMgoKCnRlbXBsYXRlIDxjbGFzcyBBcmcsIGNsYXNzIFJlcz4gCnN0cnVjdCB1bmFyeV9mdW5j
dG9yIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPEFyZyxSZXM+CnsKICB2aXJ0dWFsIH51bmFyeV9m
dW5jdG9yKCkge30KICB2aXJ0dWFsIFJlcyBvcGVyYXRvcigpIChBcmcgeCkgPTA7CiAgYmluZGVy
MXN0PG1lbV9mdW4xX3Q8UmVzLCB1bmFyeV9mdW5jdG9yPEFyZyxSZXM+LCBBcmc+ID4gCiAgZnVu
YygpCiAgeyByZXR1cm4gYmluZDFzdChtZW1fZnVuKCZ1bmFyeV9mdW5jdG9yPEFyZyxSZXM+Ojpv
cGVyYXRvcigpKSx0aGlzKTsgfQp9IDsKCnRlbXBsYXRlIDxjbGFzcyBBcmcxLCBjbGFzcyBBcmcy
LCBjbGFzcyBSZXM+IApzdHJ1Y3QgYmluYXJ5X2Z1bmN0b3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPEFyZzEsQXJnMixSZXM+CnsKICB2aXJ0dWFsIH5iaW5hcnlfZnVuY3RvcigpIHt9CiAgdmly
dHVhbCBSZXMgb3BlcmF0b3IoKSAoQXJnMSB4LCBBcmcyIHkpID0wOwp9IDsKCgoKCiAKIAogCiMg
MSAidGVzdHVuLmNwcCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2FsZ29yaXRobSIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9zdGxfYWxn
b2Jhc2UuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9nKysvc3RsX3JlbG9wcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBf
X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCiAKCgoKIAogCiAKIyAzOSAiL3Vzci9pbmNs
dWRlL2crKy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9zdGxf
cGFpci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJz
dF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNl
Y29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSksIHNlY29uZChfVDIoKSkge30KICBwYWlyKGNv
bnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7
fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxf
VTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30K
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkK
eyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5z
ZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwgCiAgICAgICAgICghKF9f
eS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOyAKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9w
YWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBfVDImIF9feSkKewogIHJldHVybiBwYWlyPF9UMSwg
X1QyPihfX3gsIF9feSk7Cn0KCiAKCgoKIAogCiAKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy9zdGxf
YWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy90eXBlX3RyYWl0cy5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgpzdHJ1Y3QgX190cnVlX3R5cGUgewp9OwoKc3RydWN0IF9fZmFsc2VfdHlwZSB7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7IAogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgICB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwogICAgICAgICAgICAg
ICAgICAgIAoKCgoKCiAgICAKCgoKCgoKCgogCgogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAg
ICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAg
ICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlw
ZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBp
c19QT0RfdHlwZTsKfTsKCgoKIAogCiAKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFp
dHM8Ym9vbD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBs
YXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVk
IGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1w
bGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNp
Z25lZCBzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu
ZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQg
bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRl
PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNp
Z25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoK
Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0
czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190
eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsK
CiMgMjk1ICIvdXNyL2luY2x1ZGUvZysrL3R5cGVfdHJhaXRzLmgiIDMKCgoKIAogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0
IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2Vy
PHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoK
dGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHNo
b3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBz
dHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNf
aW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5z
aWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1w
bGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWdu
ZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCgoK
IAogCiAKIyA0NSAiL3Vzci9pbmNsdWRlL2crKy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgpl
eHRlcm4gIkMiIHsgCgogCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8y
Ljk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2Mt
bGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoK
CgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgog
CgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2
OSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKIyAzMyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKIApleHRlcm4gdm9p
ZCAqICBtZW1jcHkgICh2b2lkICogIF9fcmVzdHJpY3QgX19kZXN0LAoJCQkgICAgX19jb25zdCB2
b2lkICogIF9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwogCgpleHRl
cm4gdm9pZCAqICBtZW1tb3ZlICAodm9pZCAqICBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqICBfX3Ny
YywKCQkJICAgICBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKCgoKZXh0ZXJuIHZvaWQgKiAg
bWVtY2NweSAgKHZvaWQgKiAgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiAgX19zcmMsCgkJCSAgICAg
aW50IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIHZvaWQgKiAgbWVt
c2V0ICAodm9pZCAqICBfX3MsIGludCBfX2MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApl
eHRlcm4gaW50IG1lbWNtcCAgKF9fY29uc3Qgdm9pZCAqICBfX3MxLCBfX2NvbnN0IHZvaWQgKiAg
X19zMiwKCQkJc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkICogIG1lbWNo
ciAgKF9fY29uc3Qgdm9pZCAqICBfX3MsIGludCBfX2MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAg
OwoKCgoKCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cmNweSAgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0
LAoJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykgIHRocm93ICgpICA7CiAKZXh0
ZXJuIGNoYXIgKnN0cm5jcHkgIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0
ZXJuIGNoYXIgKnN0cmNhdCAgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAoJCQkgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYykgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cm5j
YXQgIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBzdHJjbXAg
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7CiAK
ZXh0ZXJuIGludCBzdHJuY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHN0cmNvbGwgIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7CiAKZXh0ZXJu
IHNpemVfdCBzdHJ4ZnJtICAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIyAxMDcg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVybiBjaGFyICpfX3N0cmR1cCAgKF9f
Y29uc3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGNoYXIgKnN0cmR1cCAgKF9fY29u
c3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCgogCgoKCgoKCiMgMTQzICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMKCgogCmV4dGVybiBjaGFyICpzdHJjaHIgIChfX2NvbnN0IGNoYXIgKl9fcywg
aW50IF9fYykgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgIChfX2NvbnN0IGNo
YXIgKl9fcywgaW50IF9fYykgIHRocm93ICgpICA7CgoKCgoKCgogCgpleHRlcm4gc2l6ZV90IHN0
cmNzcG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkgIHRocm93
ICgpICA7CiAKCmV4dGVybiBzaXplX3Qgc3Ryc3BuICAoX19jb25zdCBjaGFyICpfX3MsIF9fY29u
c3QgY2hhciAqX19hY2NlcHQpICB0aHJvdyAoKSAgOwogCmV4dGVybiBjaGFyICpzdHJwYnJrICAo
X19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpICB0aHJvdyAoKSAgOwog
CmV4dGVybiBjaGFyICpzdHJzdHIgIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3Qg
Y2hhciAqX19uZWVkbGUpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgogCmV4dGVybiBjaGFyICpzdHJ0
b2sgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19kZWxpbSkgIHRocm93ICgpICA7CgogCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLAoJCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxp
bSwKCQkJICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgIHRocm93ICgpICA7Cgpl
eHRlcm4gY2hhciAqc3RydG9rX3IgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAoJCQkgICAgY2hhciAqKl9fcmVzdHJpY3QgX19z
YXZlX3B0cikgIHRocm93ICgpICA7CgoKIyAyMDMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoK
CgogCmV4dGVybiBzaXplX3Qgc3RybGVuICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAg
OwoKCgoKCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cmVycm9yICAoaW50IF9fZXJybnVtKSAgdGhyb3cg
KCkgIDsKCiAKCmV4dGVybiBjaGFyICpfX3N0cmVycm9yX3IgIChpbnQgX19lcnJudW0sIGNoYXIg
Kl9fYnVmLCBzaXplX3QgX19idWZsZW4pICB0aHJvdyAoKSAgOwpleHRlcm4gY2hhciAqc3RyZXJy
b3JfciAgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgIHRocm93
ICgpICA7CgoKIAoKZXh0ZXJuIHZvaWQgX19iemVybyAgKHZvaWQgKiAgX19zLCBzaXplX3QgX19u
KSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiB2b2lkIGJjb3B5ICAoX19jb25zdCB2b2lkICogIF9f
c3JjLCB2b2lkICogIF9fZGVzdCwgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiB2
b2lkIGJ6ZXJvICAodm9pZCAqICBfX3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gaW50IGJjbXAgIChfX2NvbnN0IHZvaWQgKiAgX19zMSwgX19jb25zdCB2b2lkICogIF9fczIs
IHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gY2hhciAqaW5kZXggIChfX2NvbnN0
IGNoYXIgKl9fcywgaW50IF9fYykgIHRocm93ICgpICA7CgogCmV4dGVybiBjaGFyICpyaW5kZXgg
IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50
IF9fZmZzICAoaW50IF9faSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4
dGVybiBpbnQgZmZzICAoaW50IF9faSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKGNvbnN0
KSk7CgogCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXAgIChfX2NvbnN0IGNoYXIg
Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc3RyY2Fz
ZWNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSAgdGhyb3cgKCkg
IDsKCiAKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z
dCBjaGFyICpfX3MyLAoJCQkgICAgIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKCiMgMjc3ICIv
dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKIAoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAgKGNoYXIg
KipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k
ZWxpbSkgIHRocm93ICgpICA7CgoKIyAzMTkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgoK
IyAzNDcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgp9IAoKCiMgNDggIi91c3IvaW5jbHVk
ZS9nKysvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz
ZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAKCgogCgoKCgoKIAojIDEgIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N5c2xpbWl0cy5o
IiAxIDMKIAoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4y
L2luY2x1ZGUvbGltaXRzLmgiIDEgMwogCgoKIAoKIyAxMTQgIi91c3IvbGliL2djYy1saWIvaTQ4
Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2xpbWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCiAKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAK
CgogCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCgog
CgoKIAoKCiAKCgogCgoKIAoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4
L2xpbWl0cy5oIiAxIDMKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRz
L2xvY2FsX2xpbS5oIiAyIDMKCgogCgoKCgoKIAoKIAoKCiAKCiAKCgogCgogCgoKIAoKCgogCgoj
IDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKCgoKCgoKCgogCgoKCgoK
CgojIDMwICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9wb3NpeDJfbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgoKCiAKCgoKCiAKCgoKIAoKCiAKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDM0ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoK
CgoKCgoKCiAKCgoKCgogCgojIDEyMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCgogIAoK
CgoKCgoKCiMgMTE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5j
bHVkZS9saW1pdHMuaCIgMiAzCgoKCgojIDcgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxp
bnV4LzIuOTUuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKCgojIDExICIvdXNyL2xpYi9nY2Mt
bGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgoKIAoK
CgogCgoKCiAKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKIAoKIAoKCgoKIAoKCgogCgoK
CgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCgogCgoKCiMgMTA3ICIvdXNyL2xpYi9nY2MtbGliL2k0
ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMwoKCgoKIAoKCgoKCgoKCgoj
IDQ5ICIvdXNyL2luY2x1ZGUvZysrL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgojIDEg
Ii91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2Nj
LWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgog
CgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2k0
ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoK
IAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDMzICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICBpbnQgcXVvdDsJCQkgCiAgICBpbnQgcmVtOwkJCSAKICB9IGRpdl90OwoKIAoKdHlw
ZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwkJIAogICAgbG9uZyBpbnQgcmVtOwkJ
IAogIH0gbGRpdl90OwoKCgojIDY1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIAoKCgog
CgoKCgoKIAoKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICAodm9pZCkgIHRo
cm93ICgpICA7CgoKIApleHRlcm4gZG91YmxlIGF0b2YgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg
IHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBhdG9pICAoX19jb25zdCBjaGFyICpfX25wdHIpICB0
aHJvdyAoKSAgOwogCmV4dGVybiBsb25nIGludCBhdG9sICAoX19jb25zdCBjaGFyICpfX25wdHIp
ICB0aHJvdyAoKSAgOwoKCiAKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9s
bCAgKF9fY29uc3QgY2hhciAqX19ucHRyKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBkb3VibGUg
c3RydG9kICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKIApleHRlcm4gbG9uZyBp
bnQgc3RydG9sICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CiAKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAoJCQkJICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJICAgICAgIGlu
dCBfX2Jhc2UpICB0aHJvdyAoKSAgOwoKCiAKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25n
IGludCBzdHJ0b3EgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CiAKX19leHRl
bnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxICAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCgkJCQkJICAgIGludCBfX2Jhc2UpICB0aHJvdyAoKSAgOwoKCgogCgogCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCgkJCQkgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
IHRocm93ICgpICA7CiAKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBzdHJ0b3VsbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkgICAgIGludCBfX2Jhc2UpICB0aHJvdyAo
KSAgOwoKCgojIDE5MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCiAKCgpleHRlcm4gZG91
YmxlIF9fc3RydG9kX2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
CQkJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJICAgICAgaW50IF9fZ3Jv
dXApICB0aHJvdyAoKSAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwpleHRlcm4gbG9uZyBkb3VibGUgIF9fc3Ry
dG9sZF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqCgkJCQkJCV9fcmVzdHJpY3QgX19ucHRyLAoJ
CQkJCQljaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkJaW50IF9fZ3JvdXApICB0aHJv
dyAoKSAgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsICAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQljaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJ
CQlpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93ICgpICA7CgoKCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKgoJCQkJCQkgIF9f
cmVzdHJpY3QgX19ucHRyLAoJCQkJCQkgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJ
CQkgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsICAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKCQkJCQkgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93ICgpICA7CgoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRl
cm5hbCAgKF9fY29uc3QgY2hhciAqCgkJCQkJCQlfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkJCWNo
YXIgKioKCQkJCQkJCV9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJCQlpbnQgX19iYXNlLAoJCQkJ
CQkJaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKCgoKIyAzMjYgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwoKCgoKIAoKCmV4dGVybiBjaGFyICpsNjRhICAobG9uZyBpbnQgX19uKSAgdGhyb3cg
KCkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGE2NGwgIChfX2NvbnN0IGNoYXIgKl9fcykgIHRocm93
ICgpICA7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFy
Owp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVk
ZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3Vf
cXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9m
Zl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgoKCgoKCnR5cGVkZWYg
X19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19t
b2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYg
X191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCgoKCgoKdHlw
ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKdHlwZWRlZiBf
X3NzaXplX3Qgc3NpemVfdDsKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYg
X19jYWRkcl90IGNhZGRyX3Q7CgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKCgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK
CgojIDUxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNjIgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDMKCgoKCgoKCgogCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgoKCiMgODkgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMKCgoKCiMgMjc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMg
MTIyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoK
CiMgMTkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1z
dXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2Ut
bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8y
Ljk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDEyNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAyIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CgoKIAoK
IyAxNTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCiAKCgoKCgoKCnR5cGVkZWYgaW50
IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19RSV9fICkpKSA7CnR5cGVkZWYg
aW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fSElfXyApKSkgOwp0eXBl
ZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX1NJX18gKSkpIDsK
dHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ESV9fICkp
KSA7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fICggIF9fUUlfXyApKSkgOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fSElfXyApKSkgOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1
X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fU0lfXyApKSkgOwp0eXBlZGVm
IHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fRElf
XyApKSkgOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fd29yZF9fKSkpOwoKCiAKCgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL2VuZGlhbi5oIiAxIDMKIAoKCgoKCgojIDM1ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIg
MwoKCiAKCgoKCgoKCgoKCgoKCiMgMTkxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK
CiAKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCiAKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIg
MwoKCgoKCgoKCgoKCgojIDU2ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMwoKIyA3MiAi
L3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDIgMwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgogCgoKdHlwZWRl
ZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6
ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKSBdOwogIH0gX19zaWdzZXRfdDsKCgoKCiAKCgoKCgoj
IDEyNSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKCiMgMzQgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDIgMwoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyA1MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MwoKCgojIDYyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNzMgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMKCgoKCgoKCgogCgpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9z
ZWM7CQkgCiAgICBsb25nIGludCB0dl9uc2VjOwkJIAogIH07CgoKCgoKIyAyNzkgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDMKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK
ZXh0ZXJuICJDIiB7IAoKIAoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZk
X21hc2s7CgogCnR5cGVkZWYgX19mZF9zZXQgZmRfc2V0OwoKIAoKCgogCgoKCgogCgoKCgoKCiAK
CgoKCmV4dGVybiBpbnQgX19zZWxlY3QgIChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRz
LAoJCQkgIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsCgkJCSAg
c3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2VsZWN0
ICAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJX19mZF9zZXQgKl9fd3JpdGVm
ZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywKCQkJc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkg
IHRocm93ICgpICA7CgojIDkxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgoKfSAKCgoj
IDE5NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy9zeXNtYWNyb3MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMg
NDcgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDMKCgoKIyAxOTcgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgogCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CSAg
CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7ICAKdHlwZWRlZiBfX2ZzZmlsY250X3Qg
ZnNmaWxjbnRfdDsgIAoKCgoKCgoKCgoKCgp9IAoKCiMgMzM5ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDIgMwoKCiAKCgoKIApleHRlcm4gaW50MzJfdCByYW5kb20gICh2b2lkKSAgdGhyb3cgKCkg
IDsKCiAKZXh0ZXJuIHZvaWQgc3JhbmRvbSAgKHVuc2lnbmVkIGludCBfX3NlZWQpICB0aHJvdyAo
KSAgOwoKIAoKCgpleHRlcm4gdm9pZCAqICBpbml0c3RhdGUgICh1bnNpZ25lZCBpbnQgX19zZWVk
LCB2b2lkICogIF9fc3RhdGVidWYsCgkJCSAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgIHRocm93
ICgpICA7CgogCgpleHRlcm4gdm9pZCAqICBzZXRzdGF0ZSAgKHZvaWQgKiAgX19zdGF0ZWJ1Zikg
IHRocm93ICgpICA7CgoKCiAKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAq
ZnB0cjsJCSAKICAgIGludDMyX3QgKnJwdHI7CQkgCiAgICBpbnQzMl90ICpzdGF0ZTsJCSAKICAg
IGludCByYW5kX3R5cGU7CQkgCiAgICBpbnQgcmFuZF9kZWc7CQkgCiAgICBpbnQgcmFuZF9zZXA7
CQkgCiAgICBpbnQzMl90ICplbmRfcHRyOwkJIAogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yICAo
c3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAoJCQkgIGludDMyX3QgKl9fcmVz
dHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgICh1bnNp
Z25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSAgdGhyb3cgKCkgIDsK
CmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgICh1bnNpZ25lZCBpbnQgX19zZWVkLAoJCQkgICAgIHZv
aWQgKiAgX19yZXN0cmljdCBfX3N0YXRlYnVmLAoJCQkgICAgIHNpemVfdCBfX3N0YXRlbGVuLAoJ
CQkgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgIHRocm93ICgpICA7
CgpleHRlcm4gaW50IHNldHN0YXRlX3IgICh2b2lkICogIF9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwK
CQkJICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgIHRocm93ICgpICA7
CgoKCgogCmV4dGVybiBpbnQgcmFuZCAgKHZvaWQpICB0aHJvdyAoKSAgOwogCmV4dGVybiB2b2lk
IHNyYW5kICAodW5zaWduZWQgaW50IF9fc2VlZCkgIHRocm93ICgpICA7CgoKIApleHRlcm4gaW50
IHJhbmRfciAgKHVuc2lnbmVkIGludCAqX19zZWVkKSAgdGhyb3cgKCkgIDsKCgoKCiAKCiAKZXh0
ZXJuIGRvdWJsZSBkcmFuZDQ4ICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBkb3VibGUgZXJh
bmQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSAgdGhyb3cgKCkgIDsKCiAKZXh0
ZXJuIGxvbmcgaW50IGxyYW5kNDggICh2b2lkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGxvbmcgaW50
IG5yYW5kNDggICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgIHRocm93ICgpICA7Cgog
CmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBsb25n
IGludCBqcmFuZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICB0aHJvdyAoKSAg
OwoKIApleHRlcm4gdm9pZCBzcmFuZDQ4ICAobG9uZyBpbnQgX19zZWVkdmFsKSAgdGhyb3cgKCkg
IDsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50
IF9fc2VlZDE2dlszXSkgIHRocm93ICgpICA7CmV4dGVybiB2b2lkIGxjb25nNDggICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgIHRocm93ICgpICA7CgogCnN0cnVjdCBkcmFuZDQ4X2Rh
dGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgeFszXTsJIAogICAgdW5zaWduZWQgc2hvcnQg
aW50IGFbM107CSAKICAgIHVuc2lnbmVkIHNob3J0IGludCBjOwkgCiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgb2xkX3hbM107ICAKICAgIGludCBpbml0OwkJCSAKICB9OwoKCiAKZXh0ZXJuIGludCBk
cmFuZDQ4X3IgIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCQkg
ICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGVy
YW5kNDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAoJCQkgICBzdHJ1Y3QgZHJh
bmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCQkgICBkb3VibGUgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IGxyYW5kNDhfciAgKHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0
cmljdCBfX2J1ZmZlciwKCQkJICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJv
dyAoKSAgOwoKIApleHRlcm4gaW50IG1yYW5kNDhfciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
cmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAg
dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX194
c3ViaVszXSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwK
CQkJICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gaW50IHNyYW5kNDhfciAgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19idWZmZXIpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAgKHVuc2lnbmVk
IHNob3J0IGludCBfX3NlZWQxNnZbM10sCgkJCSAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZm
ZXIpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgICh1bnNpZ25lZCBzaG9ydCBp
bnQgX19wYXJhbVs3XSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICB0aHJv
dyAoKSAgOwoKCgoKCgoKIApleHRlcm4gdm9pZCAqICBtYWxsb2MgIChzaXplX3QgX19zaXplKSAg
dGhyb3cgKCkgIDsKIApleHRlcm4gdm9pZCAqICBjYWxsb2MgIChzaXplX3QgX19ubWVtYiwgc2l6
ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CgoKCiAKCmV4dGVybiB2b2lkICogIHJlYWxsb2MgICh2
b2lkICogIF9fcHRyLCBzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gdm9pZCBm
cmVlICAodm9pZCAqICBfX3B0cikgIHRocm93ICgpICA7CgoKIApleHRlcm4gdm9pZCBjZnJlZSAg
KHZvaWQgKiAgX19wdHIpICB0aHJvdyAoKSAgOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2Eu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4
Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkg
Ii91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxp
bnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgv
Mi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoK
IAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgog
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoK
CmV4dGVybiAiQyIgeyAKCiAKCgogCmV4dGVybiB2b2lkICogIGFsbG9jYSAgKHNpemVfdCBfX3Np
emUpICB0aHJvdyAoKSAgOwoKCgoKCn0gCgoKIyA0OTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MiAzCgoKCgogCmV4dGVybiB2b2lkICogIHZhbGxvYyAgKHNpemVfdCBfX3NpemUpICB0aHJvdyAo
KSAgOwoKCgogCmV4dGVybiB2b2lkIGFib3J0ICAodm9pZCkgIHRocm93ICgpICAgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAKZXh0ZXJuIGludCBhdGV4aXQgICh2b2lkICgqX19m
dW5jKSAodm9pZCkpICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVybiBpbnQgX19vbl9leGl0ICAodm9p
ZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqICBfX2FyZyksCgkJCSAgIHZvaWQgKiAg
X19hcmcpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IG9uX2V4aXQgICh2b2lkICgqX19mdW5jKSAo
aW50IF9fc3RhdHVzLCB2b2lkICogIF9fYXJnKSwKCQkJIHZvaWQgKiAgX19hcmcpICB0aHJvdyAo
KSAgOwoKCiAKCgpleHRlcm4gdm9pZCBleGl0ICAoaW50IF9fc3RhdHVzKSAgdGhyb3cgKCkgICBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCgoKIApleHRlcm4gY2hhciAqZ2V0
ZW52ICAoX19jb25zdCBjaGFyICpfX25hbWUpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGNoYXIg
Kl9fc2VjdXJlX2dldGVudiAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsKCgog
CiAKCmV4dGVybiBpbnQgcHV0ZW52ICAoY2hhciAqX19zdHJpbmcpICB0aHJvdyAoKSAgOwoKCgog
CgpleHRlcm4gaW50IHNldGVudiAgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIg
Kl9fdmFsdWUsCgkJCWludCBfX3JlcGxhY2UpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCB1
bnNldGVudiAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsKCgoKIAoKCmV4dGVy
biBpbnQgY2xlYXJlbnYgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgoKCiAKCgoKZXh0ZXJuIGNoYXIg
Km1rdGVtcCAgKGNoYXIgKl9fdGVtcGxhdGUpICB0aHJvdyAoKSAgOwoKIAoKCgoKZXh0ZXJuIGlu
dCBta3N0ZW1wICAoY2hhciAqX190ZW1wbGF0ZSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGlu
dCBzeXN0ZW0gIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgIHRocm93ICgpICA7CgoKCgoKCgoK
CgogCgoKCgoKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbmFtZSwKCQkJICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgIHRocm93ICgpICA7
CgoKCiAKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpICAoX19jb25zdCB2b2lkICogLCBf
X2NvbnN0IHZvaWQgKiApICA7CgoKCgoKCiAKCmV4dGVybiB2b2lkICogIGJzZWFyY2ggIChfX2Nv
bnN0IHZvaWQgKiAgX19rZXksIF9fY29uc3Qgdm9pZCAqICBfX2Jhc2UsCgkJCSAgICAgICBzaXpl
X3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21w
YXIpICA7CgogCgpleHRlcm4gdm9pZCBxc29ydCAgKHZvaWQgKiAgX19iYXNlLCBzaXplX3QgX19u
bWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkJICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKSAgOwoKCiAK
ZXh0ZXJuIGludCBhYnMgIChpbnQgX194KSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzICAobG9uZyBpbnQgX194KSAgdGhyb3cgKCkg
ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCiAKCiAKZXh0ZXJuIGRpdl90IGRp
diAgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgIChsb25nIGludCBfX251bWVyLCBsb25n
IGludCBfX2Rlbm9tKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCgoKCgogCgoKIAoKCmV4dGVybiBjaGFyICplY3Z0ICAoZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCgkJCWludCAqX19yZXN0cmljdCBf
X3NpZ24pICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBjaGFyICpmY3Z0ICAoZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCgkJCWludCAqX19yZXN0
cmljdCBfX3NpZ24pICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBjaGFyICpnY3Z0ICAoZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gY2hhciAqcWVjdnQgIChsb25nIGRvdWJsZSAgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAoJCQkg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pICB0aHJvdyAo
KSAgOwpleHRlcm4gY2hhciAqcWZjdnQgIChsb25nIGRvdWJsZSAgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LAoJCQkgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24p
ICB0aHJvdyAoKSAgOwpleHRlcm4gY2hhciAqcWdjdnQgIChsb25nIGRvdWJsZSAgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgIHRocm93ICgpICA7CgoKCiAKCmV4dGVybiBpbnQg
ZWN2dF9yICAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f
ZGVjcHQsCgkJCWludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs
CgkJCXNpemVfdCBfX2xlbikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgZmN2dF9yICAoZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCgkJCWludCAq
X19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJCXNpemVfdCBfX2xl
bikgIHRocm93ICgpICA7CgpleHRlcm4gaW50IHFlY3Z0X3IgIChsb25nIGRvdWJsZSAgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LAoJCQkgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0
cmljdCBfX3NpZ24sCgkJCSBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pICB0
aHJvdyAoKSAgOwpleHRlcm4gaW50IHFmY3Z0X3IgIChsb25nIGRvdWJsZSAgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LAoJCQkgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBf
X3NpZ24sCgkJCSBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pICB0aHJvdyAo
KSAgOwoKCgoKIAoKZXh0ZXJuIGludCBtYmxlbiAgKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3Qg
X19uKSAgdGhyb3cgKCkgIDsKIAoKZXh0ZXJuIGludCBtYnRvd2MgICh3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fcHdjLAoJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSAg
dGhyb3cgKCkgIDsKIAoKZXh0ZXJuIGludCB3Y3RvbWIgIChjaGFyICpfX3MsIHdjaGFyX3QgX193
Y2hhcikgIHRocm93ICgpICA7CgoKIApleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICAod2NoYXJfdCAq
X19yZXN0cmljdCAgX19wd2NzLAoJCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwogCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywKCQkJICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19w
d2NzLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCgoKIAoKCgpleHRlcm4gaW50IHJwbWF0Y2gg
IChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpICB0aHJvdyAoKSAgOwoKCgojIDczMiAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzCgoKCiMgNzU2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoj
IDc2NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCgoKfSAKCgojIDUwICIvdXNyL2luY2x1
ZGUvZysrL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1
c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2Nj
LWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgNTEgIi91
c3IvaW5jbHVkZS9nKysvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9uZXcuaCIgMSAzCiAKCgoKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvbmV3IiAxIDMKIAog
CgoKCgojcHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1z
dXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3IvbGliL2dj
Yy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDggIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL25ldyIgMiAzCgoj
IDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL2V4Y2Vw
dGlvbiIgMSAzCiAKIAoKCgoKI3ByYWdtYSBpbnRlcmZhY2UgImV4Y2VwdGlvbiIKCmV4dGVybiAi
QysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCmNsYXNzIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBleGNl
cHRpb24gKCkgeyB9CiAgdmlydHVhbCB+ZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgY29uc3Qg
Y2hhciogd2hhdCAoKSBjb25zdDsKfTsKCmNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhj
ZXB0aW9uIHsKcHVibGljOgogIGJhZF9leGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCB+YmFkX2V4
Y2VwdGlvbiAoKSB7IH0KfTsKCnR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsK
dHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCnRlcm1pbmF0ZV9oYW5kbGVy
IHNldF90ZXJtaW5hdGUgKHRlcm1pbmF0ZV9oYW5kbGVyKTsKdm9pZCB0ZXJtaW5hdGUgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwp1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhw
ZWN0ZWQgKHVuZXhwZWN0ZWRfaGFuZGxlcik7CnZvaWQgdW5leHBlY3RlZCAoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CmJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uICgpOwoKfSAgCgp9
ICAKCgojIDkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRl
L25ldyIgMiAzCgoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBiYWRf
YWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKCiAg
c3RydWN0IG5vdGhyb3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CiAg
dHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5k
bGVyIChuZXdfaGFuZGxlcik7Cgp9ICAKCiAKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QpIHRo
cm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93
IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93KCk7
CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3Ig
bmV3IChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0
b3IgbmV3W10gKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9w
ZXJhdG9yIGRlbGV0ZSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZv
aWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJv
dygpOwoKIAppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcGxhY2UpIHRo
cm93KCkgeyByZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNpemVf
dCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfSAgCgoKIyA2ICIvdXNy
L2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9uZXcuaCIgMiAzCgoK
dXNpbmcgc3RkOjpuZXdfaGFuZGxlcjsKdXNpbmcgc3RkOjpzZXRfbmV3X2hhbmRsZXI7CgoKIyA1
MiAiL3Vzci9pbmNsdWRlL2crKy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk
ZS9nKysvaW9zdHJlYW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEg
aW50ZXJmYWNlCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCiAgIAoKCgpleHRlcm4g
IkMiIHsKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1z
dXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgp0
eXBlZGVmIHZvaWQgKl9fZ251Y192YV9saXN0OwoKCgogCgojIDEyMiAiL3Vzci9saWIvZ2NjLWxp
Yi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgoKCgoKCgoKCgoK
CgoKCgoKCgojIDIwOSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2lu
Y2x1ZGUvc3RkYXJnLmgiIDMKCgoKCiMgNDggIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoK
CgoKCiMgNjcgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiMg
OTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX0lPX2p1bXBfdDsgIHN0cnVjdCBf
SU9fRklMRTsKCiAKCgoKCgoKCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgogCgpzdHJ1Y3Qg
X0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklM
RSAqX3NidWY7CiAgIAoKICAgCiAgaW50IF9wb3M7CiMgMTg2ICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMwoKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsJCSAKCgogICAKICAgCiAg
Y2hhciogX0lPX3JlYWRfcHRyOwkgCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgCiAgY2hhciogX0lP
X3JlYWRfYmFzZTsJIAogIGNoYXIqIF9JT193cml0ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRl
X3B0cjsJIAogIGNoYXIqIF9JT193cml0ZV9lbmQ7CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CSAK
ICBjaGFyKiBfSU9fYnVmX2VuZDsJIAogICAKICBjaGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAgY2hh
ciAqX0lPX2JhY2t1cF9iYXNlOyAgIAogIGNoYXIgKl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1Y3Qg
X0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQg
X2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCAgIF9vbGRfb2Zmc2V0OyAgCgoKICAg
CiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZz
ZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgogICAKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CgoKCgoK
CgoKICBfX29mZjY0X3QgICBfb2Zmc2V0OwogICAKICBpbnQgX3VudXNlZDJbMTZdOwoKfTsKCgoK
CgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18y
XzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpl
eHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwoKCgoKCgoKCgoKCiAK
CiAKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAgKHZvaWQgKiAgX19jb29raWUsIGNo
YXIgKl9fYnVmLAoJCQkJICAgICAgIHNpemVfdCBfX25ieXRlcykgIDsKCiAKCgoKCgp0eXBlZGVm
IF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICAodm9pZCAqICBfX2Nvb2tpZSwgX19jb25zdCBjaGFy
ICpfX2J1ZiwKCQkJCSAgICAgIHNpemVfdCBfX24pICA7CgogCgoKCgoKdHlwZWRlZiBpbnQgX19p
b19zZWVrX2ZuICAodm9pZCAqICBfX2Nvb2tpZSwgX19vZmZfdCAgIF9fcG9zLCBpbnQgX193KSAg
OwoKIAp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICAodm9pZCAqICBfX2Nvb2tpZSkgIDsKCgoj
IDMxMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBp
bnQgX191bmRlcmZsb3cgIChfSU9fRklMRSAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBfX3Vm
bG93ICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9J
T19GSUxFICosIGludCkgIHRocm93ICgpICA7CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9J
T19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IF9JT19wdXRj
ICAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IF9JT19m
ZW9mICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3Ig
IChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2Nr
ZWQgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19m
bG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxv
Y2tmaWxlICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2Nr
ZmlsZSAgKF9JT19GSUxFICopICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9J
T192ZnNjYW5mICAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmlj
dCwKCQkJICAgICBfX2dudWNfdmFfbGlzdCAsIGludCAqX19yZXN0cmljdCkgIHRocm93ICgpICA7
CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmICAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNo
YXIgKl9fcmVzdHJpY3QsCgkJCSAgICAgIF9fZ251Y192YV9saXN0ICkgIHRocm93ICgpICA7CmV4
dGVybiBfX3NzaXplX3QgICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90ICAp
ICB0aHJvdyAoKSAgOwpleHRlcm4gc2l6ZV90ICAgX0lPX3NnZXRuICAoX0lPX0ZJTEUgKiwgdm9p
ZCAqLCBzaXplX3QgICkgIHRocm93ICgpICA7CgpleHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtv
ZmYgIChfSU9fRklMRSAqLCBfX29mZjY0X3QgICwgaW50LCBpbnQpICB0aHJvdyAoKSAgOwpleHRl
cm4gX19vZmY2NF90ICAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfX29mZjY0X3QgICwgaW50
KSAgdGhyb3cgKCkgIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhICAoX0lPX0ZJ
TEUgKikgIHRocm93ICgpICA7CgoKfQoKCgojIDM2ICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1
Zi5oIiAyIDMKCn0KIAoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1
LjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCnZvaWQgdmFfZW5kIChfX2dudWNfdmFfbGlzdCk7CQkgCgoKIAoKCgogCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKCgoKCgoKCgoKCgoKCiMgMTc1
ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcu
aCIgMwoKCiAKCgoKCiAKCiAKCiAKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIg
MiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFt
OyAgCmNsYXNzIG9zdHJlYW07IGNsYXNzIHN0cmVhbWJ1ZjsKCiAKCgoKCnR5cGVkZWYgX19vZmY2
NF90ICAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9fb2ZmNjRfdCAgIHN0cmVhbXBvczsKCgoKCnR5cGVk
ZWYgX19zc2l6ZV90ICAgc3RyZWFtc2l6ZTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZs
YWdzOwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19pb3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRz
CnsgIAogICAgc3RyZWFtYnVmICpfc3RyYnVmOwogICAgb3N0cmVhbSogX3RpZTsKICAgIGludCBf
d2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9mbGFnczsKICAgIHdjaGFyX3QgICBfZmlsbDsKICAgIF9f
aW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNp
c2lvbjsKCiAgICB2b2lkICpfYXJyYXlzOyAgCn07CgoKCgoKCgoKCgoKCgoKCiMgMTI0ICIvdXNy
L2luY2x1ZGUvZysrL3N0cmVhbWJ1Zi5oIiAzCgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmll
bGRzIHsKICBpb3MmIG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAg
cHVibGljOgogICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQg
aW9zdGF0ZTsKICAgIHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBfX3NzaXplX3Qg
ICBzdHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0gMCAsCgllb2ZiaXQg
PSAxICwKCWZhaWxiaXQgPSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVtIG9wZW5fbW9kZSB7
CglpbiA9IDEgLAoJb3V0ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJdHJ1bmMgPSAxNiAs
Cglub2NyZWF0ZSA9IDMyICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEyOCAsICAKCWJpbmFy
eSA9IDEyOCAgfTsKICAgIGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5kfTsKICAgIHR5cGVk
ZWYgZW51bSBzZWVrX2RpciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNraXB3cz0gMDEgLAoJ
ICAgbGVmdD0gMDIgLCByaWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAgIGRlYz0gMDIwICwg
b2N0PSAwNDAgLCBoZXg9IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBzaG93cG9pbnQ9IDA0
MDAgLAoJICAgdXBwZXJjYXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwKCSAgIHNjaWVudGlm
aWM9IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAwMDAgLCBzdGRpbz0g
MDQwMDAwIAoKCgoJICAgfTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29jdCtoZXgsCglm
bG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtp
bnRlcm5hbAogICAgfTsKCiMgMTc3ICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1Zi5oIiAzCgoK
ICAgIG9zdHJlYW0qIHRpZSgpIGNvbnN0IHsgcmV0dXJuIF90aWU7IH0KICAgIG9zdHJlYW0qIHRp
ZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGllOyBfdGllPXZhbDsgcmV0dXJuIHNh
dmU7IH0KCiAgICAgCiAgICB3Y2hhcl90ICAgZmlsbCgpIGNvbnN0IHsgcmV0dXJuIF9maWxsOyB9
CiAgICB3Y2hhcl90ICAgZmlsbCh3Y2hhcl90ICAgbmV3ZikKCXt3Y2hhcl90ICAgb2xkZiA9IF9m
aWxsOyBfZmlsbCA9IG5ld2Y7IHJldHVybiBvbGRmO30KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29u
c3QgeyByZXR1cm4gX2ZsYWdzOyB9CiAgICBmbXRmbGFncyBmbGFncyhmbXRmbGFncyBuZXdfdmFs
KSB7CglmbXRmbGFncyBvbGRfdmFsID0gX2ZsYWdzOyBfZmxhZ3MgPSBuZXdfdmFsOyByZXR1cm4g
b2xkX3ZhbDsgfQogICAgaW50IHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNpb247
IH0KICAgIGludCBwcmVjaXNpb24oaW50IG5ld3ApIHsKCXVuc2lnbmVkIHNob3J0IG9sZHAgPSBf
cHJlY2lzaW9uOyBfcHJlY2lzaW9uID0gKHVuc2lnbmVkIHNob3J0KW5ld3A7CglyZXR1cm4gb2xk
cDsgfQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRmbGFncyB2YWwpIHsKCWZtdGZsYWdzIG9sZGJpdHMg
PSBfZmxhZ3M7CglfZmxhZ3MgfD0gdmFsOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10ZmxhZ3Mg
c2V0ZihmbXRmbGFncyB2YWwsIGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBf
ZmxhZ3M7CglfZmxhZ3MgPSAoX2ZsYWdzICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOyByZXR1cm4g
b2xkYml0czsgfQogICAgZm10ZmxhZ3MgdW5zZXRmKGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdz
IG9sZGJpdHMgPSBfZmxhZ3M7CglfZmxhZ3MgJj0gfm1hc2s7IHJldHVybiBvbGRiaXRzOyB9CiAg
ICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfd2lkdGg7IH0KICAgIGludCB3aWR0aChpbnQg
dmFsKSB7IGludCBzYXZlID0gX3dpZHRoOyBfd2lkdGggPSB2YWw7IHJldHVybiBzYXZlOyB9CgoK
CgogICAgdm9pZCBfdGhyb3dfZmFpbHVyZSgpIGNvbnN0IHsgfQoKICAgIHZvaWQgY2xlYXIoaW9z
dGF0ZSBzdGF0ZSA9IDApIHsKCV9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJhZGJp
dDsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9p
ZCBzZXQoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOwoJaWYgKF9zdGF0ZSAmIF9leGNl
cHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUgZmxh
ZykgeyBfc3RhdGUgfD0gZmxhZzsgIAoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3df
ZmFpbHVyZSgpOyB9CiAgICBpbnQgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAwOyB9
CiAgICBpbnQgZW9mKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0KICAg
IGludCBmYWlsKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6ZmFp
bGJpdCk7IH0KICAgIGludCBiYWQoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJhZGJp
dDsgfQogICAgaW9zdGF0ZSByZHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAgICBv
cGVyYXRvciB2b2lkKigpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZvaWQq
KSgtMSk7IH0KICAgIGludCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0KICAg
IGlvc3RhdGUgZXhjZXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAgICB2
b2lkIGV4Y2VwdGlvbnMoaW9zdGF0ZSBlbmFibGUpIHsKCV9leGNlcHRpb25zID0gZW5hYmxlOwoJ
aWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CgogICAgc3RyZWFt
YnVmKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9zdHJidWY7IH0KICAgIHN0cmVhbWJ1ZiogcmRi
dWYoc3RyZWFtYnVmICpfcykgewogICAgICBzdHJlYW1idWYgKl9vbGQgPSBfc3RyYnVmOyBfc3Ry
YnVmID0gX3M7IGNsZWFyICgpOyByZXR1cm4gX29sZDsgfQoKICAgIHN0YXRpYyBpbnQgc3luY193
aXRoX3N0ZGlvKGludCBvbik7CiAgICBzdGF0aWMgdm9pZCBzeW5jX3dpdGhfc3RkaW8oKSB7IHN5
bmNfd2l0aF9zdGRpbygxKTsgfQogICAgc3RhdGljIGZtdGZsYWdzIGJpdGFsbG9jKCk7CiAgICBz
dGF0aWMgaW50IHhhbGxvYygpOwogICAgdm9pZComIHB3b3JkKGludCk7CiAgICB2b2lkKiBwd29y
ZChpbnQpIGNvbnN0OwogICAgbG9uZyYgaXdvcmQoaW50KTsKICAgIGxvbmcgaXdvcmQoaW50KSBj
b25zdDsKCgoKCgoKCgoKICAgICAKICAgIGNsYXNzIEluaXQgewogICAgcHVibGljOgogICAgICBJ
bml0ICgpIHsgfQogICAgfTsKCiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYq
IHNiID0gMCwgb3N0cmVhbSogdGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7
CiAgICBpbmxpbmUgdm9pZCBpbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9
OwoKCgoKdHlwZWRlZiBpb3M6OnNlZWtfZGlyIF9zZWVrX2RpcjsKCgogCiAKIAogCiAKCiAKIApj
bGFzcyBzdHJlYW1tYXJrZXIgOiBwcml2YXRlIF9JT19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNz
IHN0cmVhbWJ1ZjsKICAgIHZvaWQgc2V0X29mZnNldChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZz
ZXQ7IH0KICBwdWJsaWM6CiAgICBzdHJlYW1tYXJrZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3Ry
ZWFtbWFya2VyKCk7CiAgICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gIDE7IH0KICAgIGludCBkZWx0
YShzdHJlYW1tYXJrZXImKTsKICAgIGludCBkZWx0YSgpOwp9OwoKc3RydWN0IHN0cmVhbWJ1ZiA6
IHB1YmxpYyBfSU9fRklMRSB7ICAKICAgIGZyaWVuZCBjbGFzcyBpb3M7CiAgICBmcmllbmQgY2xh
c3MgaXN0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIHN0
cmVhbW1hcmtlcjsKICAgIGNvbnN0IHZvaWQgKiZfdnRhYmxlKCkgeyByZXR1cm4gKihjb25zdCB2
b2lkKiopKChfSU9fRklMRSopdGhpcyArIDEpOyB9CiAgcHJvdGVjdGVkOgogICAgc3RhdGljIHN0
cmVhbWJ1ZiogX2xpc3RfYWxsOyAgCiAgICBfSU9fRklMRSomIHhjaGFpbigpIHsgcmV0dXJuIF9j
aGFpbjsgfQogICAgdm9pZCBfdW5fbGluaygpOwogICAgdm9pZCBfbGlua19pbigpOwogICAgY2hh
ciogZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2
ZV9iYXNlIDogX0lPX3JlYWRfcHRyOyB9CiAgICBjaGFyKiBwcHRyKCkgY29uc3QgeyByZXR1cm4g
X0lPX3dyaXRlX3B0cjsgfQogICAgY2hhciogZWdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBf
ZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBjaGFy
KiBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBiYXNl
KCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkgY29u
c3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9f
cmVhZF9iYXNlO30KICAgIGNoYXIqIGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2Jhc2U7
IH0KICAgIGNoYXIqIGVidWYoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZDsgfQogICAgaW50
IGJsZW4oKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZCAtIF9JT19idWZfYmFzZTsgfQogICAg
dm9pZCB4cHV0X2NoYXIoY2hhciBjKSB7ICpfSU9fd3JpdGVfcHRyKysgPSBjOyB9CiAgICBpbnQg
eGZsYWdzKCkgeyByZXR1cm4gX2ZsYWdzIDsgfQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBm
bCA9IF9mbGFncyA7IF9mbGFncyAgPSBmOyByZXR1cm4gZmw7fQogICAgdm9pZCB4c2V0ZmxhZ3Mo
aW50IGYpIHsgX2ZsYWdzICB8PSBmOyB9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1h
c2spCiAgICAgIHsgX2ZsYWdzICA9IChfZmxhZ3MgICYgfm1hc2spIHwgKGYgJiBtYXNrKTsgfQog
ICAgdm9pZCBnYnVtcChpbnQgbikKICAgICAgeyBfZmxhZ3MgICYgMHgxMDAgID8gKF9JT19zYXZl
X2Jhc2UrPW4pOihfSU9fcmVhZF9wdHIrPW4pO30KICAgIHZvaWQgcGJ1bXAoaW50IG4pIHsgX0lP
X3dyaXRlX3B0ciArPSBuOyB9CiAgICB2b2lkIHNldGIoY2hhciogYiwgY2hhciogZWIsIGludCBh
PTApOwogICAgdm9pZCBzZXRwKGNoYXIqIHAsIGNoYXIqIGVwKQogICAgICB7IF9JT193cml0ZV9i
YXNlPV9JT193cml0ZV9wdHI9cDsgX0lPX3dyaXRlX2VuZD1lcDsgfQogICAgdm9pZCBzZXRnKGNo
YXIqIGViLCBjaGFyKiBnLCBjaGFyICplZykgewogICAgICBpZiAoX2ZsYWdzICAmIDB4MTAwICkg
X0lPX2ZyZWVfYmFja3VwX2FyZWEodGhpcyk7IAogICAgICBfSU9fcmVhZF9iYXNlID0gZWI7IF9J
T19yZWFkX3B0ciA9IGc7IF9JT19yZWFkX2VuZCA9IGVnOyB9CiAgICBjaGFyICpzaG9ydGJ1Zigp
IHsgcmV0dXJuIF9zaG9ydGJ1ZjsgfQoKICAgIGludCBpbl9iYWNrdXAoKSB7IHJldHVybiBfZmxh
Z3MgJiAweDEwMCA7IH0KICAgICAKICAgIGNoYXIgKkdiYXNlKCkgeyByZXR1cm4gaW5fYmFja3Vw
KCkgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUdw
dHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsg
fQogICAgIAogICAgY2hhciAqQmJhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFk
X2Jhc2UgOiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICpCcHRyKCkgeyByZXR1cm4gX0lPX2Jh
Y2t1cF9iYXNlOyB9CiAgICAgCiAgICBjaGFyICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgp
ID8gX0lPX3JlYWRfZW5kIDogX0lPX3NhdmVfZW5kOyB9CiAgICBjaGFyICpOYmFzZSgpIHsgcmV0
dXJuIF9JT19zYXZlX2Jhc2U7IH0KICAgIGNoYXIgKmVOcHRyKCkgeyByZXR1cm4gX0lPX3NhdmVf
ZW5kOyB9CiAgICBpbnQgaGF2ZV9iYWNrdXAoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IF9f
bnVsbCA7IH0KICAgIGludCBoYXZlX21hcmtlcnMoKSB7IHJldHVybiBfbWFya2VycyAhPSBfX251
bGwgOyB9CiAgICB2b2lkIGZyZWVfYmFja3VwX2FyZWEoKTsKICAgIHZvaWQgdW5zYXZlX21hcmtl
cnMoKTsgIAogICAgaW50IHB1dF9tb2RlKCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4MDAgOyB9CiAg
ICBpbnQgc3dpdGNoX3RvX2dldF9tb2RlKCk7CiAgICAKICAgIHN0cmVhbWJ1ZihpbnQgZmxhZ3M9
MCk7CiAgcHVibGljOgogICAgc3RhdGljIGludCBmbHVzaF9hbGwoKTsKICAgIHN0YXRpYyB2b2lk
IGZsdXNoX2FsbF9saW5lYnVmZmVyZWQoKTsgIAogICAgdmlydHVhbCB+c3RyZWFtYnVmKCk7CiAg
ICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsgIAogICAgdmlydHVhbCBpbnQg
dW5kZXJmbG93KCk7ICAKICAgIHZpcnR1YWwgaW50IHVmbG93KCk7ICAKICAgIHZpcnR1YWwgaW50
IHBiYWNrZmFpbChpbnQgYyk7CiAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3Qg
Y2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c2dldG4oY2hh
ciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFt
b2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBz
dHJlYW1wb3Mgc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpv
dXQpOwoKICAgIHN0cmVhbXBvcyBwdWJzZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwg
aW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtvZmYgKHRo
aXMsIG8sIGQsIG1vZGUpOyB9CiAgICBzdHJlYW1wb3MgcHVic2Vla3BvcyhzdHJlYW1wb3MgcG9z
LCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9z
ICh0aGlzLCBwb3MsIG1vZGUpOyB9CiAgICBzdHJlYW1wb3Mgc3NlZWtvZmYoc3RyZWFtb2ZmLCBf
c2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgc3RyZWFtcG9zIHNzZWVr
cG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0
dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgdmlydHVhbCBpbnQg
c3luYygpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwoKICAgIGludCBzZWVrbWFyayhz
dHJlYW1tYXJrZXImIG1hcmssIGludCBkZWx0YSA9IDApOwogICAgaW50IHNwdXRiYWNrYyhjaGFy
IGMpOwogICAgaW50IHN1bmdldGMoKTsKICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1cm4gX2Zs
YWdzICYgMiAgPyAxIDogMDsgfQogICAgaW50IGxpbmVidWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFn
cyAmIDB4MjAwICA/IDEgOiAwOyB9CiAgICB2b2lkIHVuYnVmZmVyZWQoaW50IGkpCgl7IGlmIChp
KSBfZmxhZ3MgfD0gMiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsgfQogICAgdm9pZCBsaW5lYnVmZmVy
ZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDAgOyBlbHNlIF9mbGFncyAmPSB+MHgy
MDAgOyB9CiAgICBpbnQgYWxsb2NhdGUoKSB7ICAKCWlmIChiYXNlKCkgfHwgdW5idWZmZXJlZCgp
KSByZXR1cm4gMDsKCWVsc2UgcmV0dXJuIGRvYWxsb2NhdGUoKTsgfQogICAgIAogICAgdm9pZCBh
bGxvY2J1ZigpIHsgaWYgKGJhc2UoKSA9PSBfX251bGwgKSBkb2FsbG9jYnVmKCk7IH0KICAgIHZv
aWQgZG9hbGxvY2J1ZigpOwogICAgaW50IGluX2F2YWlsKCkgeyByZXR1cm4gX0lPX3JlYWRfZW5k
IC0gX0lPX3JlYWRfcHRyOyB9CiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3Jp
dGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIHN0cmVhbXNpemUgc3B1dG4oY29uc3QgY2hh
ciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiB4c3B1dG4ocywgbik7IH0KICAgIHN0cmVhbXNp
emUgcGFkbihjaGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fcGFkbih0aGlzLCBw
YWQsIG4pOyB9CiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyBy
ZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9CiAgICBpbnQgaWdub3JlKGludCk7CiAgICBp
bnQgZ2V0X2NvbHVtbigpOwogICAgaW50IHNldF9jb2x1bW4oaW50KTsKICAgIGxvbmcgc2dldGxp
bmUoY2hhciogYnVmLCBzaXplX3QgICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7
CiAgICBpbnQgc3B1dGMoaW50IGMpIHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBp
bnQgc2J1bXBjKCkgeyByZXR1cm4gX0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsg
cmV0dXJuICgoICB0aGlzICApLT5fSU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRf
ZW5kICYmIF9fdW5kZXJmbG93ICggIHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWdu
ZWQgY2hhciAqKSAoICB0aGlzICApLT5fSU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMo
KSB7CglpZiAoX0lPX3JlYWRfcHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlz
KSA9PSAoLTEpICkKCSAgcmV0dXJuICgtMSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyss
IHNnZXRjKCk7IH0KICAgIHZvaWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3Jl
YWRfZW5kKSBfSU9fcmVhZF9wdHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAs
IF9fZ251Y192YV9saXN0ICBhcCwgaW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2Fu
KGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBf
X2dudWNfdmFfbGlzdCAgYXApOwogICAgaW50IGZvcm0oY2hhciBjb25zdCAqZm10MCAuLi4pOwoK
CgoKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUg
c2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJl
YW1zaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtf
ZGlyKTsKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0
YXQodm9pZCopOyAgCgogICAgdmlydHVhbCBpbnQgc2hvd21hbnljKCk7CiAgICB2aXJ0dWFsIHZv
aWQgaW1idWUodm9pZCAqKTsKCn07CgogCiAKCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFt
YnVmIHsKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMg
Y29uc3QgaW50IG9wZW5wcm90OyAgCiAgICBmaWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7
CiAgICBmaWxlYnVmKGludCBmZCwgY2hhciogcCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1Zigp
OwogICAgZmlsZWJ1ZiogYXR0YWNoKGludCBmZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNo
YXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3Qg
Y2hhciAqZmlsZW5hbWUsIGlvczo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAg
IHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMg
PSAoLTEpICk7CiAgICBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsg
fQogICAgaW50IGZkKCkgY29uc3QgeyByZXR1cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkg
OyB9CiAgICBmaWxlYnVmKiBjbG9zZSgpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwog
ICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1v
ZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIq
IHAsIGludCBsZW4pOwogICAgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFt
c2l6ZSBuKTsKICAgIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAg
ICB2aXJ0dWFsIGludCBzeW5jKCk7CiAgcHJvdGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5n
KCkgeyByZXR1cm4gZWJhY2soKSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyBy
ZXR1cm4gaXNfcmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciog
ZmlsZV9wdHIoKSB7IHJldHVybiBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNp
emUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJl
YW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1z
aXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBz
eXNfc3RhdCh2b2lkKik7ICAKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlu
bGluZSB2b2lkIGlvczo6aW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlf
c3RhdGUgPSBzYiA/IGlvczo6Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJ
CV9zdHJidWY9c2I7IF90aWUgPSB0aWVfdG87IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFn
cz1pb3M6OnNraXB3c3xpb3M6OmRlYzsKCgoKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9
CgppbmxpbmUgaW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQo
c2IsIHRpZV90byk7IH0KCmlubGluZSBpb3M6On5pb3MoKSB7CgoKCiAgICAgCiAgICAgCiAgICBv
cGVyYXRvciBkZWxldGVbXSAoX2FycmF5cyk7Cn0KfSAgCgojIDMxICIvdXNyL2luY2x1ZGUvZysr
L2lvc3RyZWFtLmgiIDIgMwoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9z
dHJlYW07CnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgq
X19pbWFuaXApKGlzdHJlYW0mKTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFt
Jik7CgpleHRlcm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZs
dXNoKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsK
ZXh0ZXJuIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmly
dHVhbCBwdWJsaWMgaW9zCnsKICAgICAKICAgIHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAg
IG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD0g
X19udWxsICk7CiAgICBpbnQgb3BmeCgpIHsKCWlmICghZ29vZCgpKSByZXR1cm4gMDsKCWVsc2Ug
eyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsgIDsgcmV0dXJuIDE7fSB9CiAgICB2b2lkIG9zZngo
KSB7ICA7CgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCgkJICAg
ICAgZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFtJiBmbHVzaCgpOwogICAgb3N0cmVhbSYgcHV0KGNo
YXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIG9zdHJl
YW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0
ZShjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdy
aXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQg
Y2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciop
cywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQog
ICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vl
a3Aoc3RyZWFtcG9zKTsKICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsK
ICAgIHN0cmVhbXBvcyB0ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3Jt
YXQgLi4uKTsKICAgIG9zdHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgIGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY2hhciBjKTsKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFy
KWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0
aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMp
OwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNpZ25lZCBjaGFyICpzKQoJeyByZXR1
cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChj
b25zdCBzaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7
IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4p
OwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PCh1bnNpZ25lZCBsb25nIG4pOwoKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8
PChsb25nIGxvbmcgbik7CiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5z
aWduZWQgbG9uZyBsb25nIG4pOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2hvcnQgbikge3Jl
dHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGludCluKTt9CgogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGludCliKTsgfQoK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4pOwoKCgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChf
X29tYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PChfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RyZWFtYnVmKik7CgoKCn07CgpjbGFzcyBpc3RyZWFtIDog
dmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKcHJvdGVjdGVkOgogICAgc2l6ZV90ICAgX2djb3Vu
dDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3RyZWFtKCk6IF9nY291bnQg
KDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCAp
OwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicp
OwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxp
bSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlz
dHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyJiBjKSB7
IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKGNoYXIqIHB0ciwg
aW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0bGluZSh1bnNpZ25l
ZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGlu
ZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFy
JiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBj
aGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFy
KilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKHNpZ25lZCBjaGFyKiBw
dHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciop
cHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpwdHIsIHN0cmVhbXNp
emUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBu
KQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFk
KHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hh
ciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0cmVhbXNpemUgbikK
ICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgZ2V0KHN0
cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldHMoY2hhciAq
KnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVkID0gMCkgewoJaWYg
KCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsK
CSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFpbCgpIDwgbmVlZCkp
IF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSkg
cmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBm
eDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJ
ZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoZmxhZ3MoKSAm
IGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAg
IH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7
IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgcmRidWYoKS0+aW5fYXZh
aWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0KICAgIH0KICAgIHZvaWQg
aXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7
CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAgICAgICBpZiAoY2ggPT0g
KC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsKCQkgICAgICAgcmV0dXJu
IGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgc2l6ZV90ICAgZ2NvdW50KCkgeyBy
ZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9
ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtcG9zKTsK
ICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0
ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7CglpZiAoZ29vZCgpICYmIF9z
dHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVy
biAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+
c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQog
ICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIGlzdHJlYW0mIHZz
Y2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFyZ3MpOwoKCgoKCgogICAg
aXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2ln
bmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFt
JiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXAp
OyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0
b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+Pigo
Y2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pihs
b25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25l
ZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNob3J0Jik7CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1
bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0Jik7
CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+
PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUmKTsKICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oIF9fbWFu
aXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgaXN0
cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNzIGlvc3RyZWFtIDogcHVibGlj
IGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAgICBpb3N0cmVhbSgpIHsgfQog
ICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBfX251bGwgKTsKfTsKCmNs
YXNzIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBf
SU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFt
X3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7
IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKCmNs
YXNzIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgb3N0cmVhbSB7CnB1YmxpYzoKICBf
SU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0ob3N0cmVhbSYpOwogIF9JT19vc3RyZWFt
X3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9fb3N0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7
IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PG9zdHJlYW0mPiAocmhzKSk7IH0KfTsKCmV4
dGVybiBfSU9faXN0cmVhbV93aXRoYXNzaWduIGNpbjsKIApleHRlcm4gX0lPX29zdHJlYW1fd2l0
aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoK
Cgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYg
dW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMp
OwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoKc3RydWN0IElvc3RyZWFt
X2luaXQgeyB9IDsgICAKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVj
LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIGhl
eChpb3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7
IHJldHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5zZXRmKGlvczo6b2N0LCBp
b3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0gIAoKCiMgNTMgIi91c3Iv
aW5jbHVkZS9nKysvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9nKysv
c3RsX2l0ZXJhdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK
CnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFn
IHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3Jf
dGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1
YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCiAKIAogCiAKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0eXBl
ZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAg
ICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRfaXRl
cmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg
ICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0
ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9E
aXN0YW5jZSAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg
ICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICByZWZlcmVu
Y2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwog
IHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAg
ICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIyA5OCAiL3Vzci9pbmNsdWRlL2cr
Ky9zdGxfaXRlcmF0b3IuaCIgMwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0
IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9y
X2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y
Ojp2YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJh
dG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXRlcmF0b3I6OnBvaW50ZXIgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5cGVkZWYgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgICAg
ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAg
ICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAg
ICByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJh
aXRzPGNvbnN0IF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0
ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAg
dHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIAogCiAK
IAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBf
SXRlciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJh
dG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBz
dGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVyJikK
ewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2
YWx1ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVn
b3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsg
fQoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYgX19p
KSB7IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFs
dWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQoK
CgoKCiMgMjU5ICIvdXNyL2luY2x1ZGUvZysrL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlz
dGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsK
ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsgKytfX2ZpcnN0OyArK19fbjsgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIAogICAgICAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykK
ewogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwg
X0Rpc3RhbmNlJiBfX24pCnsKICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uLCBpdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAo
X19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBf
X247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp
IHsKICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlCmRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9f
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfQ2F0ZWdvcnkoKSk7Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9J
bnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgd2hp
bGUgKF9fbi0tKSArK19faTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sIAogICAgICAgICAgICAgICAgICAgICAg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpIHsKICBpZiAoX19uID49IDApCiAgICB3aGlsZSAo
X19uLS0pICsrX19pOwogIGVsc2UKICAgIHdoaWxlIChfX24rKykgLS1fX2k7Cn0KCgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9f
biwgCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewog
IF9faSArPSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5j
ZSBfX24pIHsKICBfX2FkdmFuY2UoX19pLCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBf
Q29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAg
ICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
KF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6
dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9
OwoKIyAzNzggIi91c3IvaW5jbHVkZS9nKysvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpj
bGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29u
dGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90
eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAg
ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAg
ICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4
cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVy
KCZfX3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9y
PShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAogICAg
Y29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBm
cm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0
aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkg
eyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9w
ZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0MTcgIi91c3IvaW5jbHVkZS9n
Kysvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5l
IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFp
bmVyJiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9f
eCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWlu
ZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAg
Y29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVy
ZW5jZTsKCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRh
aW5lcjo6aXRlcmF0b3IgX19pKSAKICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30K
ICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1l
IF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAgICBpdGVyID0gY29udGFpbmVy
LT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo
aXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVy
biAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuICp0aGlzOyB9Cn07CgojIDQ1OSAiL3Vzci9pbmNsdWRlL2crKy9zdGxfaXRlcmF0
b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyLCBjbGFzcyBfSXRlcmF0b3I+Cmlu
bGluZSAKaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9f
eCwgX0l0ZXJhdG9yIF9faSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0
b3IgX19pdGVyOwogIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0
ZXIoX19pKSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xh
c3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwgCiAgICAgICAgICBjbGFzcyBfRGlzdGFu
Y2UgPSBwdHJkaWZmX3Q+IAoKCgoKY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
IHsKICB0eXBlZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yLCBfVHAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4gIF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX0JpZGlyZWN0aW9u
YWxJdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2lu
dGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBy
ZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2VfYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9feCkKICAgIDogY3Vy
cmVudChfX3gpIHt9CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBiYXNlKCkgY29uc3QgeyByZXR1
cm4gY3VycmVudDsgfQogIF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0JpZGly
ZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAg
fQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsg
fQoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7
CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0t
KCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRv
ci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJl
dHVybiBfX3RtcDsKICB9Cn07CgojIDU1MCAiL3Vzci9pbmNsdWRlL2crKy9zdGxfaXRlcmF0b3Iu
aCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsCiAg
ICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0oCiAgICBjb25z
dCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlz
dGFuY2U+JiBfX3gsIAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9C
aUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuIF9feC5iYXNlKCkg
PT0gX195LmJhc2UoKTsKfQoKCgogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+
CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IgCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50
OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6
aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAg
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9p
bnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZl
cmVuY2UKICAgICAgICAgIHJlZmVyZW5jZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3Jf
dHlwZTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1Ymxp
YzoKICByZXZlcnNlX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0
ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNv
bnN0IF9TZWxmJiBfX3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKICAgIAogIGl0ZXJhdG9yX3R5
cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3Iq
KCkgY29uc3QgewogICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1f
X3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0
b3IqKCkpOyB9CgoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1w
ID0gKnRoaXM7CiAgICAtLW