From mboxrd@z Thu Jan 1 00:00:00 1970 From: junkmacc@hotmail.com To: gcc-gnats@gcc.gnu.org Cc: junkmacc@hotmail.com Subject: c++/4614: "c:/dos/pub/djgpp/lang/cxx/stl_vector.h:95: Internal compiler error in `layout_decl', at stor-layout.c:247" Date: Thu, 18 Oct 2001 16:56:00 -0000 Message-id: <20011018234852.12621.qmail@sourceware.cygnus.com> X-SW-Source: 2001-10/msg00385.html List-Id: >Number: 4614 >Category: c++ >Synopsis: "c:/dos/pub/djgpp/lang/cxx/stl_vector.h:95: Internal compiler error in `layout_decl', at stor-layout.c:247" >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Oct 18 16:56:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: ? >Release: gcc 2.952 >Organization: >Environment: djgpp >Description: received message: c:/dos/pub/djgpp/lang/cxx/stl_vector.h:95: Internal compiler error in `layout_decl', at stor-layout.c:247 Please submit a full bug report. See for instructions. Very simple program that caused it: #include #include using namespace std; class class_1 {}; class class_2 : public class_1 {}; void main() { vector input; input.push_back(*new class_2()); } Appears to be connected with some kind of memory leak as compiler appears to correctly bail out some times; other times I get the above internal error. I think it could be connected with too many error messages being generated. Hmm. Lemme know. Sorry I can't help fix this or even verify it better. Hopefully someone out there will at leat be able to duplicate it. I don't need it fixed. It's just that if this error exists, perhaps it's caused by a larger bug. If I use -O, message appears to go away. >How-To-Repeat: Using Windows ME, go to the command prompt and run the following command: gcc -c qd__gcc__bug.ii Because of the possibility that this is connected to memory leaking, I advise creating a _NEW_ DOS command prompt and IMMEDIATELY compiling the above file, rather than first compiling something else etc. Dunno. >Fix: ? >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="qd__gcc__bug.ii"; name="qd__gcc__bug.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="qd__gcc__bug.ii" IyAxICJxZF9fZ2NjX19idWcuY3BwIg0KDQogDQogDQoNCiMgMSAiYzovZG9zL3B1Yi9kamdwcC9s YW5nL2N4eC9pb3N0cmVhbSIgMSAzDQogDQogDQoNCg0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAv bGFuZy9jeHgvaW9zdHJlYW0uaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiNwcmFnbWEgaW50ZXJmYWNlDQoNCg0KDQogDQojIDEgImM6 L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RyZWFtfjEuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KI3ByYWdtYSBpbnRlcmZhY2UN Cg0KDQogICANCg0KDQoNCmV4dGVybiAiQyIgew0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcv Y3h4L2xpYmlvLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQogDQojIDEgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvX0df Y29ufjEuaCIgMSAzDQogIA0KDQoNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiAgICAgICAgICBpbnQg ICBfR19pbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOw0KdHlwZWRlZiB1 bnNpZ25lZCBpbnQgIF9HX3VpbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkp Ow0KdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXygoX19tb2Rl X18oX19ISV9fKSkpOw0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1 dGVfXygoX19tb2RlX18oX19ISV9fKSkpOw0KdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDMy X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOw0KdHlwZWRlZiB1bnNpZ25lZCBp bnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOw0KdHlwZWRl ZiAgICAgICAgICBpbnQgIF9HX2ludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9f KSkpOw0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19t b2RlX18oX19ESV9fKSkpOw0KDQpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIF9HX2xs b25nOw0KX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfR191bGxvbmc7 DQoNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBpbnQgX0dfY2xvY2tfdDsNCnR5cGVkZWYgaW50IF9H X2Rldl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX2Zwb3NfdDsNCnR5cGVkZWYgaW50IF9H X2dpZF90Ow0KdHlwZWRlZiBpbnQgX0dfaW5vX3Q7DQp0eXBlZGVmIGludCBfR19tb2RlX3Q7DQp0 eXBlZGVmIGludCBfR19ubGlua190Ow0KdHlwZWRlZiBpbnQgX0dfb2ZmX3Q7DQp0eXBlZGVmIGlu dCBfR19waWRfdDsNCg0KDQoNCnR5cGVkZWYgbG9uZyBpbnQgX0dfcHRyZGlmZl90Ow0KdHlwZWRl ZiBpbnQgICBfR19zaWdzZXRfdDsNCg0KDQoNCnR5cGVkZWYgbG9uZyB1bnNpZ25lZCBpbnQgX0df c2l6ZV90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdGltZV90Ow0KdHlwZWRlZiBpbnQgX0df dWlkX3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9HX3djaGFyX3Q7DQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIGludCBfR19zc2l6ZV90Ow0KdHlwZWRlZiBpbnQgX0df d2ludF90Ow0KdHlwZWRlZiB2b2lkICogX0dfdmFfbGlzdDsNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAvaW5jbHVkZS9zdGRkZWYuaCIgMSAz DQogDQoNCg0KDQoNCmV4dGVybiAiQyIgew0KDQoNCiMgMSAiYzovZG9zL3B1Yi9kamdwcC9pbmNs dWRlL3N5cy9kanR5cGVzLmgiIDEgMw0KIA0KIA0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCiMgOSAiYzovZG9zL3B1Yi9kamdwcC9pbmNsdWRlL3N0 ZGRlZi5oIiAyIDMNCg0KICANCg0KDQp0eXBlZGVmIGludCBwdHJkaWZmX3Q7DQoNCnR5cGVkZWYg bG9uZyB1bnNpZ25lZCBpbnQgc2l6ZV90OyANCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KfQ0KDQoNCg0KIyA4NiAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9fR19j b25+MS5oIiAyIDMNCg0KDQojIDMxICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L2xpYmlvLmgi IDIgMw0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyA1NyAiYzovZG9zL3B1 Yi9kamdwcC9sYW5nL2N4eC9saWJpby5oIiAzDQoNCg0KDQoNCiMgMSAiYzovZG9zL3B1Yi9kamdw cC9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMNCiANCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIDYxICJj Oi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L2xpYmlvLmgiIDIgMw0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAxMDYg ImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvbGliaW8uaCIgMw0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0Kc3RydWN0IF9JT19qdW1wX3Q7 ICBzdHJ1Y3QgX0lPX0ZJTEU7DQoNCiANCiMgMTc2ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4 L2xpYmlvLmgiIDMNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICB0eXBlZGVmIHZvaWQgX0lPX2xvY2tf dDsNCg0KDQoNCg0KDQogDQoNCnN0cnVjdCBfSU9fbWFya2VyIHsNCiAgc3RydWN0IF9JT19tYXJr ZXIgKl9uZXh0Ow0KICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOw0KICAgDQoNCiAgIA0KICBpbnQg X3BvczsNCiMgMjA5ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L2xpYmlvLmgiIDMNCg0KfTsN Cg0Kc3RydWN0IF9JT19GSUxFIHsNCiAgaW50IF9mbGFnczsJCSANCg0KDQogICANCiAgIA0KICBj aGFyKiBfSU9fcmVhZF9wdHI7CSANCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgDQogIGNoYXIqIF9J T19yZWFkX2Jhc2U7CSANCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSANCiAgY2hhciogX0lPX3dy aXRlX3B0cjsJIA0KICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkgDQogIGNoYXIqIF9JT19idWZfYmFz ZTsJIA0KICBjaGFyKiBfSU9fYnVmX2VuZDsJIA0KICAgDQogIGNoYXIgKl9JT19zYXZlX2Jhc2U7 ICANCiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOyAgIA0KICBjaGFyICpfSU9fc2F2ZV9lbmQ7ICAN Cg0KICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7DQoNCiAgc3RydWN0IF9JT19GSUxFICpf Y2hhaW47DQoNCiAgaW50IF9maWxlbm87DQogIGludCBfYmxrc2l6ZTsNCg0KDQoNCiAgX0dfb2Zm X3QgIF9vZmZzZXQ7DQoNCg0KDQogICANCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47DQog IGNoYXIgX3VudXNlZDsNCiAgY2hhciBfc2hvcnRidWZbMV07DQoNCiAgIA0KDQoNCg0KDQoNCg0K DQoNCn07DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0Kc3RydWN0IF9JT19GSUxFX3BsdXM7DQpleHRl cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPX3N0ZGluXywgX0lPX3N0ZG91dF8sIF9JT19zdGRl cnJfOw0KDQoNCg0KDQoNCiANCnR5cGVkZWYgc3RydWN0DQp7DQogIF9HX3NzaXplX3QgICgqcmVh ZCkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgdm9pZCAqLCBfR19zc2l6ZV90ICkgIDsNCiAgX0dfc3Np emVfdCAgKCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBfR19zc2l6 ZV90ICkgIDsNCiAgX0dfZnBvc190ICAoKnNlZWspICAoc3RydWN0IF9JT19GSUxFICosIF9HX29m Zl90ICwgaW50KSAgOw0KICBpbnQgKCpjbG9zZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKikgIDsNCn0g X0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsNCg0KIA0Kc3RydWN0IF9JT19jb29raWVfZmlsZQ0K ew0KICBzdHJ1Y3QgX0lPX0ZJTEUgZmlsZTsNCiAgY29uc3Qgdm9pZCAqdnRhYmxlOw0KICB2b2lk ICpjb29raWU7DQogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgaW9fZnVuY3Rpb25zOw0KfTsN Cg0KDQoNCmV4dGVybiAiQyIgew0KDQoNCmV4dGVybiBpbnQgX191bmRlcmZsb3cgIChfSU9fRklM RSAqKSAgOw0KZXh0ZXJuIGludCBfX3VmbG93ICAoX0lPX0ZJTEUgKikgIDsNCmV4dGVybiBpbnQg X19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7DQpleHRl cm4gaW50IF9JT19wdXRjICAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApICA7DQpleHRlcm4gaW50 IF9JT19mZW9mICAoX0lPX0ZJTEUgKl9fZnApICA7DQpleHRlcm4gaW50IF9JT19mZXJyb3IgIChf SU9fRklMRSAqX19mcCkgIDsNCg0KZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkICAoX0lPX0ZJ TEUgKl9fZnApICA7DQoNCiANCg0KDQoNCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgIChfSU9f RklMRSAqKSAgOw0KZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsN CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAgKF9JT19GSUxFICopICA7DQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgIChfSU9fRklMRSAqLCBjb25z dCBjaGFyICosIF9HX3ZhX2xpc3QgLCBpbnQgKikgIDsNCmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRm ICAoX0lPX0ZJTEUgKiwgY29uc3QgY2hhciAqLCBfR192YV9saXN0ICkgIDsNCmV4dGVybiBfR19z c2l6ZV90ICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX0dfc3NpemVfdCApICA7DQpleHRl cm4gX0dfc2l6ZV90ICBfSU9fc2dldG4gIChfSU9fRklMRSAqLCB2b2lkICosIF9HX3NpemVfdCAp ICA7DQoNCg0KDQoNCg0KZXh0ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSAq LCBfR19vZmZfdCAsIGludCwgaW50KSAgOw0KZXh0ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtwb3Mg IChfSU9fRklMRSAqLCBfR19mcG9zX3QgLCBpbnQpICA7DQoNCg0KZXh0ZXJuIHZvaWQgX0lPX2Zy ZWVfYmFja3VwX2FyZWEgIChfSU9fRklMRSAqKSAgOw0KDQoNCn0NCg0KDQoNCiMgMzYgImM6L2Rv cy9wdWIvZGpncHAvbGFuZy9jeHgvc3RyZWFtfjEuaCIgMiAzDQoNCn0NCiANCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQpleHRlcm4gIkMrKyIgew0K Y2xhc3MgaXN0cmVhbTsgIA0KY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOw0KDQogDQoN Cg0KDQoNCg0KDQoNCnR5cGVkZWYgX0dfb2ZmX3QgIHN0cmVhbW9mZjsNCnR5cGVkZWYgX0dfZnBv c190ICBzdHJlYW1wb3M7DQoNCnR5cGVkZWYgX0dfc3NpemVfdCAgc3RyZWFtc2l6ZTsNCg0KdHlw ZWRlZiB1bnNpZ25lZCBsb25nIF9fZm10ZmxhZ3M7DQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19p b3N0YXRlOw0KDQpzdHJ1Y3QgX2lvc19maWVsZHMNCnsgIA0KICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1 ZjsNCiAgICBvc3RyZWFtKiBfdGllOw0KICAgIGludCBfd2lkdGg7DQogICAgX19mbXRmbGFncyBf ZmxhZ3M7DQogICAgc2hvcnQgIF9maWxsOw0KICAgIF9faW9zdGF0ZSBfc3RhdGU7DQogICAgX19p b3N0YXRlIF9leGNlcHRpb25zOw0KICAgIGludCBfcHJlY2lzaW9uOw0KDQogICAgdm9pZCAqX2Fy cmF5czsgIA0KfTsNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiMgMTI0ICJjOi9kb3Mv cHViL2RqZ3BwL2xhbmcvY3h4L3N0cmVhbX4xLmgiIDMNCg0KDQpjbGFzcyBpb3MgOiBwdWJsaWMg X2lvc19maWVsZHMgew0KICBpb3MmIG9wZXJhdG9yPShpb3MmKTsgICANCiAgaW9zIChjb25zdCBp b3MmKTsgIA0KICBwdWJsaWM6DQogICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOw0KICAg IHR5cGVkZWYgaW50IGlvc3RhdGU7DQogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7DQogICAgdHlw ZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOw0KICAgIGVudW0gaW9fc3RhdGUgew0KCWdvb2Ri aXQgPSAwICwNCgllb2ZiaXQgPSAxICwNCglmYWlsYml0ID0gMiAsDQoJYmFkYml0ID0gNCAgfTsN CiAgICBlbnVtIG9wZW5fbW9kZSB7DQoJaW4gPSAxICwNCglvdXQgPSAyICwNCglhdGUgPSA0ICwN CglhcHAgPSA4ICwNCgl0cnVuYyA9IDE2ICwNCglub2NyZWF0ZSA9IDMyICwNCglub3JlcGxhY2Ug PSA2NCAsDQoJYmluID0gMTI4ICwgIA0KCWJpbmFyeSA9IDEyOCAgfTsNCiAgICBlbnVtIHNlZWtf ZGlyIHsgYmVnLCBjdXIsIGVuZH07DQogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7 DQogICAgIA0KICAgIGVudW0geyBza2lwd3M9IDAxICwNCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAw NCAsIGludGVybmFsPSAwMTAgLA0KCSAgIGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9IDAxMDAg LA0KCSAgIHNob3diYXNlPSAwMjAwICwgc2hvd3BvaW50PSAwNDAwICwNCgkgICB1cHBlcmNhc2U9 IDAxMDAwICwgc2hvd3Bvcz0gMDIwMDAgLA0KCSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4ZWQ9 IDAxMDAwMCAsDQoJICAgdW5pdGJ1Zj0gMDIwMDAwICwgc3RkaW89IDA0MDAwMCANCg0KDQoNCgkg ICB9Ow0KICAgIGVudW0geyAgDQoJYmFzZWZpZWxkPWRlYytvY3QraGV4LA0KCWZsb2F0ZmllbGQg PSBzY2llbnRpZmljK2ZpeGVkLA0KCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtpbnRlcm5hbA0K ICAgIH07DQoNCiMgMTc3ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0cmVhbX4xLmgiIDMN Cg0KDQogICAgb3N0cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3RpZTsgfQ0KICAgIG9zdHJl YW0qIHRpZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGllOyBfdGllPXZhbDsgcmV0 dXJuIHNhdmU7IH0NCg0KICAgICANCiAgICBzaG9ydCAgZmlsbCgpIGNvbnN0IHsgcmV0dXJuIF9m aWxsOyB9DQogICAgc2hvcnQgIGZpbGwoc2hvcnQgIG5ld2YpDQoJe3Nob3J0ICBvbGRmID0gX2Zp bGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQ0KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29u c3QgeyByZXR1cm4gX2ZsYWdzOyB9DQogICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3Zh bCkgew0KCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7IHJldHVy biBvbGRfdmFsOyB9DQogICAgaW50IHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNp b247IH0NCiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7DQoJdW5zaWduZWQgc2hvcnQgb2xk cCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsNCglyZXR1 cm4gb2xkcDsgfQ0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsKSB7DQoJZm10ZmxhZ3Mg b2xkYml0cyA9IF9mbGFnczsNCglfZmxhZ3MgfD0gdmFsOyByZXR1cm4gb2xkYml0czsgfQ0KICAg IGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7DQoJZm10ZmxhZ3Mg b2xkYml0cyA9IF9mbGFnczsNCglfZmxhZ3MgPSAoX2ZsYWdzICYgfm1hc2spIHwgKHZhbCAmIG1h c2spOyByZXR1cm4gb2xkYml0czsgfQ0KICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFncyBtYXNr KSB7DQoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsNCglfZmxhZ3MgJj0gfm1hc2s7IHJldHVy biBvbGRiaXRzOyB9DQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9DQog ICAgaW50IHdpZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsg cmV0dXJuIHNhdmU7IH0NCg0KDQoNCg0KICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7 IH0NCg0KICAgIHZvaWQgY2xlYXIoaW9zdGF0ZSBzdGF0ZSA9IDApIHsNCglfc3RhdGUgPSBfc3Ry YnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7DQoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBf dGhyb3dfZmFpbHVyZSgpOyB9DQogICAgdm9pZCBzZXQoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8 PSBmbGFnOw0KCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQ0K ICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOyAgDQoJaWYg KF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9DQogICAgaW50IGdvb2Qo KSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQ0KICAgIGludCBlb2YoKSBjb25zdCB7IHJl dHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQ0KICAgIGludCBmYWlsKCkgY29uc3QgeyByZXR1 cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6ZmFpbGJpdCk7IH0NCiAgICBpbnQgYmFkKCkg Y29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0NCiAgICBpb3N0YXRlIHJkc3Rh dGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0NCiAgICBvcGVyYXRvciB2b2lkKigpIGNvbnN0 IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZvaWQqKSgtMSk7IH0NCiAgICBpbnQgb3Bl cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9DQogICAgaW9zdGF0ZSBleGNlcHRpb25z KCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0NCiAgICB2b2lkIGV4Y2VwdGlvbnMoaW9z dGF0ZSBlbmFibGUpIHsNCglfZXhjZXB0aW9ucyA9IGVuYWJsZTsNCglpZiAoX3N0YXRlICYgX2V4 Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0NCg0KICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBj b25zdCB7IHJldHVybiBfc3RyYnVmOyB9DQogICAgc3RyZWFtYnVmKiByZGJ1ZihzdHJlYW1idWYg Kl9zKSB7DQogICAgICBzdHJlYW1idWYgKl9vbGQgPSBfc3RyYnVmOyBfc3RyYnVmID0gX3M7IGNs ZWFyICgpOyByZXR1cm4gX29sZDsgfQ0KDQogICAgc3RhdGljIGludCBzeW5jX3dpdGhfc3RkaW8o aW50IG9uKTsNCiAgICBzdGF0aWMgdm9pZCBzeW5jX3dpdGhfc3RkaW8oKSB7IHN5bmNfd2l0aF9z dGRpbygxKTsgfQ0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOw0KICAgIHN0YXRpYyBp bnQgeGFsbG9jKCk7DQogICAgdm9pZComIHB3b3JkKGludCk7DQogICAgdm9pZCogcHdvcmQoaW50 KSBjb25zdDsNCiAgICBsb25nJiBpd29yZChpbnQpOw0KICAgIGxvbmcgaXdvcmQoaW50KSBjb25z dDsNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgDQogICAgY2xhc3MgSW5pdCB7DQogICAgcHVibGlj Og0KICAgICAgSW5pdCAoKSB7IH0NCiAgICB9Ow0KDQogIHByb3RlY3RlZDoNCiAgICBpbmxpbmUg aW9zKHN0cmVhbWJ1Ziogc2IgPSAwLCBvc3RyZWFtKiB0aWVfdG8gPSAwKTsNCiAgICBpbmxpbmUg dmlydHVhbCB+aW9zKCk7DQogICAgaW5saW5lIHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBvc3Ry ZWFtKiB0aWUgPSAwKTsNCn07DQoNCg0KDQoNCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vla19k aXI7DQoNCg0KIA0KIA0KIA0KIA0KIA0KDQogDQogDQpjbGFzcyBzdHJlYW1tYXJrZXIgOiBwcml2 YXRlIF9JT19tYXJrZXIgew0KICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7DQogICAgdm9pZCBz ZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9IG9mZnNldDsgfQ0KICBwdWJsaWM6DQogICAg c3RyZWFtbWFya2VyKHN0cmVhbWJ1ZiAqc2IpOw0KICAgIH5zdHJlYW1tYXJrZXIoKTsNCiAgICBp bnQgc2F2aW5nKCkgeyByZXR1cm4gIDE7IH0NCiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7 DQogICAgaW50IGRlbHRhKCk7DQp9Ow0KDQpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19G SUxFIHsgIA0KICAgIGZyaWVuZCBjbGFzcyBpb3M7DQogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07 DQogICAgZnJpZW5kIGNsYXNzIG9zdHJlYW07DQogICAgZnJpZW5kIGNsYXNzIHN0cmVhbW1hcmtl cjsNCiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgo X0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQ0KICBwcm90ZWN0ZWQ6DQogICAgc3RhdGljIHN0cmVhbWJ1 ZiogX2xpc3RfYWxsOyAgDQogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47 IH0NCiAgICB2b2lkIF91bl9saW5rKCk7DQogICAgdm9pZCBfbGlua19pbigpOw0KICAgIGNoYXIq IGdwdHIoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZl X2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0NCiAgICBjaGFyKiBwcHRyKCkgY29uc3QgeyByZXR1cm4g X0lPX3dyaXRlX3B0cjsgfQ0KICAgIGNoYXIqIGVncHRyKCkgY29uc3QNCiAgICAgIHsgcmV0dXJu IF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0NCiAgICBj aGFyKiBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9lbmQ7IH0NCiAgICBjaGFyKiBw YmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9iYXNlOyB9DQogICAgY2hhciogZWJhY2so KSBjb25zdA0KICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2Ug OiBfSU9fcmVhZF9iYXNlO30NCiAgICBjaGFyKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1 Zl9iYXNlOyB9DQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9 DQogICAgaW50IGJsZW4oKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZCAtIF9JT19idWZfYmFz ZTsgfQ0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsg fQ0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9DQogICAgaW50IHhmbGFncyhp bnQgZikge2ludCBmbCA9IF9mbGFncyA7IF9mbGFncyAgPSBmOyByZXR1cm4gZmw7fQ0KICAgIHZv aWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsgfQ0KICAgIHZvaWQgeHNldGZsYWdz KGludCBmLCBpbnQgbWFzaykNCiAgICAgIHsgX2ZsYWdzICA9IChfZmxhZ3MgICYgfm1hc2spIHwg KGYgJiBtYXNrKTsgfQ0KICAgIHZvaWQgZ2J1bXAoaW50IG4pDQogICAgICB7IF9mbGFncyAgJiAw eDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQ0KICAgIHZvaWQg cGJ1bXAoaW50IG4pIHsgX0lPX3dyaXRlX3B0ciArPSBuOyB9DQogICAgdm9pZCBzZXRiKGNoYXIq IGIsIGNoYXIqIGViLCBpbnQgYT0wKTsNCiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hhciogZXAp DQogICAgICB7IF9JT193cml0ZV9iYXNlPV9JT193cml0ZV9wdHI9cDsgX0lPX3dyaXRlX2VuZD1l cDsgfQ0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsNCiAgICAg IGlmIChfZmxhZ3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgDQogICAg ICBfSU9fcmVhZF9iYXNlID0gZWI7IF9JT19yZWFkX3B0ciA9IGc7IF9JT19yZWFkX2VuZCA9IGVn OyB9DQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0NCg0KICAgIGlu dCBpbl9iYWNrdXAoKSB7IHJldHVybiBfZmxhZ3MgJiAweDEwMCA7IH0NCiAgICAgDQogICAgY2hh ciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVh ZF9iYXNlOyB9DQogICAgIA0KICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkg PyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0NCiAgICAgDQogICAgY2hhciAqQmJhc2Uo KSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2Jhc2UgOiBfSU9fc2F2ZV9iYXNlOyB9 DQogICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQ0KICAgICANCiAg ICBjaGFyICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRfZW5kIDogX0lP X3NhdmVfZW5kOyB9DQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9 DQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2ZV9lbmQ7IH0NCiAgICBpbnQgaGF2 ZV9iYWNrdXAoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IDAgOyB9DQogICAgaW50IGhhdmVf bWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IDAgOyB9DQogICAgdm9pZCBmcmVlX2JhY2t1 cF9hcmVhKCk7DQogICAgdm9pZCB1bnNhdmVfbWFya2VycygpOyAgDQogICAgaW50IHB1dF9tb2Rl KCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4MDAgOyB9DQogICAgaW50IHN3aXRjaF90b19nZXRfbW9k ZSgpOw0KICAgIA0KICAgIHN0cmVhbWJ1ZihpbnQgZmxhZ3M9MCk7DQogIHB1YmxpYzoNCiAgICBz dGF0aWMgaW50IGZsdXNoX2FsbCgpOw0KICAgIHN0YXRpYyB2b2lkIGZsdXNoX2FsbF9saW5lYnVm ZmVyZWQoKTsgIA0KICAgIHZpcnR1YWwgfnN0cmVhbWJ1ZigpOw0KICAgIHZpcnR1YWwgaW50IG92 ZXJmbG93KGludCBjID0gKC0xKSApOyAgDQogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7ICAN CiAgICB2aXJ0dWFsIGludCB1ZmxvdygpOyAgDQogICAgdmlydHVhbCBpbnQgcGJhY2tmYWlsKGlu dCBjKTsNCiANCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0 cmVhbXNpemUgbik7DQogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJl YW1zaXplIG4pOw0KICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vl a19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOw0KICAgIHZpcnR1YWwgc3RyZWFtcG9z IHNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsNCg0K ICAgIHN0cmVhbXBvcyBwdWJzZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwgaW50IG1v ZGU9aW9zOjppbnxpb3M6Om91dCkNCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBv LCBkLCBtb2RlKTsgfQ0KICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGlu dCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCkNCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9zICh0 aGlzLCBwb3MsIG1vZGUpOyB9DQogICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3Nl ZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsNCiAgICBzdHJlYW1wb3Mgc3NlZWtw b3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsNCiAgICB2aXJ0 dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOw0KICAgIHZpcnR1YWwgaW50 IHN5bmMoKTsNCiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7DQoNCiAgICBpbnQgc2Vla21h cmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAwKTsNCiAgICBpbnQgc3B1dGJhY2tj KGNoYXIgYyk7DQogICAgaW50IHN1bmdldGMoKTsNCiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0 dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0NCiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1 cm4gX2ZsYWdzICYgMHgyMDAgID8gMSA6IDA7IH0NCiAgICB2b2lkIHVuYnVmZmVyZWQoaW50IGkp DQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9mbGFncyAmPSB+MiA7IH0NCiAgICB2b2lk IGxpbmVidWZmZXJlZChpbnQgaSkNCgl7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDAgOyBlbHNlIF9m bGFncyAmPSB+MHgyMDAgOyB9DQogICAgaW50IGFsbG9jYXRlKCkgeyAgDQoJaWYgKGJhc2UoKSB8 fCB1bmJ1ZmZlcmVkKCkpIHJldHVybiAwOw0KCWVsc2UgcmV0dXJuIGRvYWxsb2NhdGUoKTsgfQ0K ICAgICANCiAgICB2b2lkIGFsbG9jYnVmKCkgeyBpZiAoYmFzZSgpID09IDAgKSBkb2FsbG9jYnVm KCk7IH0NCiAgICB2b2lkIGRvYWxsb2NidWYoKTsNCiAgICBpbnQgaW5fYXZhaWwoKSB7IHJldHVy biBfSU9fcmVhZF9lbmQgLSBfSU9fcmVhZF9wdHI7IH0NCiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7 IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0NCiAgICBzdHJlYW1zaXpl IHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNwdXRuKHMsIG4p OyB9DQogICAgc3RyZWFtc2l6ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJu IF9JT19wYWRuKHRoaXMsIHBhZCwgbik7IH0NCiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIqIHMs IHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9DQogICAgaW50 IGlnbm9yZShpbnQpOw0KICAgIGludCBnZXRfY29sdW1uKCk7DQogICAgaW50IHNldF9jb2x1bW4o aW50KTsNCiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1ZiwgX0dfc2l6ZV90ICBuLCBjaGFyIGRl bGltLCBpbnQgcHV0YmFja19kZWxpbSk7DQogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBf SU9fcHV0YyhjLCB0aGlzKTsgfQ0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0 aGlzKTsgfQ0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICApLT5fSU9fcmVhZF9w dHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93ICggIHRoaXMgICkg PT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAqKSAoICB0aGlzICApLT5fSU9fcmVh ZF9wdHIpICA7IH0NCiAgICBpbnQgc25leHRjKCkgew0KCWlmIChfSU9fcmVhZF9wdHIgPj0gX0lP X3JlYWRfZW5kICYmIF9fdW5kZXJmbG93KHRoaXMpID09ICgtMSkgKQ0KCSAgcmV0dXJuICgtMSkg Ow0KCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9DQogICAgdm9pZCBzdG9z c2MoKSB7IGlmIChfSU9fcmVhZF9wdHIgPCBfSU9fcmVhZF9lbmQpIF9JT19yZWFkX3B0cisrOyB9 DQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwLCBpb3MqIHN0 cmVhbSA9IDAgKTsNCiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7DQogICAgaW50 IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwKTsNCiAgICBpbnQgZm9ybShj aGFyIGNvbnN0ICpmbXQwIC4uLik7DQoNCg0KDQoNCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOw0KICAgIHZpcnR1YWwgc3RyZWFtc2l6 ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUpOw0KICAgIHZpcnR1YWwgc3RyZWFt cG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsNCiAgICB2aXJ0dWFsIGludCBzeXNf Y2xvc2UoKTsNCiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICANCg0KDQoNCg0KfTsN Cg0KIA0KIA0KDQpjbGFzcyBmaWxlYnVmIDogcHVibGljIHN0cmVhbWJ1ZiB7DQogIHByb3RlY3Rl ZDoNCiAgICB2b2lkIGluaXQoKTsNCiAgcHVibGljOg0KICAgIHN0YXRpYyBjb25zdCBpbnQgb3Bl bnByb3Q7ICANCiAgICBmaWxlYnVmKCk7DQogICAgZmlsZWJ1ZihpbnQgZmQpOw0KICAgIGZpbGVi dWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsNCg0KDQoNCiAgICB+ZmlsZWJ1ZigpOw0KICAg IGZpbGVidWYqIGF0dGFjaChpbnQgZmQpOw0KICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAq ZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOw0KICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hh ciAqZmlsZW5hbWUsIGlvczo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsNCiAgICB2 aXJ0dWFsIGludCB1bmRlcmZsb3coKTsNCiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9 ICgtMSkgKTsNCiAgICBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsg fQ0KICAgIGludCBmZCgpIGNvbnN0IHsgcmV0dXJuIGlzX29wZW4oKSA/IF9maWxlbm8gOiAoLTEp IDsgfQ0KICAgIGZpbGVidWYqIGNsb3NlKCk7DQogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgp Ow0KICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGlu dCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOw0KICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYo Y2hhciogcCwgaW50IGxlbik7DQogICAgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywg c3RyZWFtc2l6ZSBuKTsNCiAgICBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXpl IG4pOw0KICAgIHZpcnR1YWwgaW50IHN5bmMoKTsNCiAgcHJvdGVjdGVkOiAgDQogDQogICAgaW50 IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0NCiAgICBjaGFyKiBj dXJfcHRyKCkgeyByZXR1cm4gaXNfcmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQ0KICAg ICANCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0NCiAgICAgDQogICAg dmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsN CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7DQog ICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7 DQogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOyAgDQogICAgdmlydHVhbCBpbnQgc3lz X2Nsb3NlKCk7DQoNCg0KDQoNCn07DQoNCmlubGluZSB2b2lkIGlvczo6aW5pdChzdHJlYW1idWYq IHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsNCgkJX3N0YXRlID0gc2IgPyBpb3M6Omdvb2RiaXQgOiBp b3M6OmJhZGJpdDsgX2V4Y2VwdGlvbnM9MDsNCgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsg X3dpZHRoPTA7IF9maWxsPScgJzsNCg0KCQlfZmxhZ3M9aW9zOjpza2lwd3N8aW9zOjpkZWM7DQoN Cg0KDQoJCV9wcmVjaXNpb249NjsgX2FycmF5cyA9IDA7IH0NCg0KaW5saW5lIGlvczo6aW9zKHN0 cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgeyBpbml0KHNiLCB0aWVfdG8pOyB9DQoNCmlu bGluZSBpb3M6On5pb3MoKSB7DQoNCg0KDQogICAgIA0KICAgICANCiAgICBvcGVyYXRvciBkZWxl dGVbXSAoX2FycmF5cyk7DQp9DQp9ICANCg0KIyAzMiAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4 eC9pb3N0cmVhbS5oIiAyIDMNCg0KDQpleHRlcm4gIkMrKyIgew0KY2xhc3MgaXN0cmVhbTsgY2xh c3Mgb3N0cmVhbTsNCnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOw0KdHlwZWRlZiBpc3Ry ZWFtJiAoKl9faW1hbmlwKShpc3RyZWFtJik7DQp0eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXAp KG9zdHJlYW0mKTsNCg0KZXh0ZXJuIGlzdHJlYW0mIHdzKGlzdHJlYW0mIGlucyk7DQpleHRlcm4g b3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7DQpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3Ry ZWFtJiBvdXRzKTsNCmV4dGVybiBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mIG91dHMpOw0KDQpjbGFz cyBvc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zDQp7DQogICAgIA0KICAgIHZvaWQgZG9fb3Nm eCgpOw0KICBwdWJsaWM6DQogICAgb3N0cmVhbSgpIHsgfQ0KICAgIG9zdHJlYW0oc3RyZWFtYnVm KiBzYiwgb3N0cmVhbSogdGllZD0gMCApOw0KICAgIGludCBvcGZ4KCkgew0KCWlmICghZ29vZCgp KSByZXR1cm4gMDsNCgllbHNlIHsgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7ICA7IHJldHVybiAx O30gfQ0KICAgIHZvaWQgb3NmeCgpIHsgIDsNCgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVuaXRi dWZ8aW9zOjpzdGRpbykpDQoJCSAgICAgIGRvX29zZngoKTsgfQ0KICAgIG9zdHJlYW0mIGZsdXNo KCk7DQogICAgb3N0cmVhbSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJu ICp0aGlzOyB9DQoNCg0KDQoNCg0KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0 cmVhbXNpemUgbik7DQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgdW5zaWduZWQgY2hhciAqcywg c3RyZWFtc2l6ZSBuKQ0KICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30N CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQ0K ICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30NCiAgICBvc3RyZWFtJiB3 cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pDQogICAgICB7IHJldHVybiB3cml0ZSgo Y29uc3QgY2hhciopcywgbik7fQ0KICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbXBvcyk7DQogICAg b3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOw0KICAgIHN0cmVhbXBvcyB0ZWxs cCgpOw0KICAgIG9zdHJlYW0mIGZvcm0oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7DQogICAgb3N0 cmVhbSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsNCg0KICAg IG9zdHJlYW0mIG9wZXJhdG9yPDwoY2hhciBjKTsNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVu c2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9DQogICAgb3N0cmVh bSYgb3BlcmF0b3I8PChzaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7 IH0NCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMpOw0KICAgIG9zdHJlYW0m IG9wZXJhdG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykNCgl7IHJldHVybiAoKnRoaXMpIDw8 IChjb25zdCBjaGFyKilzOyB9DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBzaWduZWQg Y2hhciAqcykNCgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9DQogICAgb3N0 cmVhbSYgb3BlcmF0b3I8PChjb25zdCB2b2lkICpwKTsNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8 KGludCBuKTsNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsNCiAgICBv c3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbik7DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNp Z25lZCBsb25nIG4pOw0KDQogICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxv bmcgbG9uZyBuKTsNCiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWdu ZWQgbG9uZyBsb25nIG4pOw0KDQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0 dXJuIG9wZXJhdG9yPDwoKGludCluKTt9DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25l ZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGludCluKTt9DQoNCiAgICBv c3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9 DQoNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJsZSBuKTsNCiAgICBvc3RyZWFtJiBvcGVy YXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQ0KDQoNCg0K ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgbikgeyByZXR1cm4gb3BlcmF0b3I8 PCgoZG91YmxlKW4pOyB9DQoNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMp IHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX21h bmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30NCiAgICBvc3RyZWFtJiBv cGVyYXRvcjw8KHN0cmVhbWJ1ZiopOw0KDQoNCg0KfTsNCg0KY2xhc3MgaXN0cmVhbSA6IHZpcnR1 YWwgcHVibGljIGlvcw0Kew0KICAgICANCnByb3RlY3RlZDoNCiAgICBfR19zaXplX3QgIF9nY291 bnQ7DQoNCiAgICBpbnQgX3NraXBfd3MoKTsNCiAgcHVibGljOg0KICAgIGlzdHJlYW0oKTogX2dj b3VudCAoMCkgeyB9DQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IDAg KTsNCiAgICBpc3RyZWFtJiBnZXQoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu Jyk7DQogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBk ZWxpbSA9ICdcbicpDQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9DQog ICAgaXN0cmVhbSYgZ2V0KGNoYXImIGMpOw0KICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFy JiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9DQogICAgaXN0cmVhbSYgZ2V0bGluZShjaGFy KiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsNCiAgICBpc3RyZWFtJiBnZXRsaW5l KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpDQoJeyByZXR1 cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQ0KICAgIGlzdHJlYW0mIGdldChz aWduZWQgY2hhciYgYykgIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0NCiAgICBpc3RyZWFtJiBn ZXQoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpDQoJeyByZXR1 cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9DQogICAgaXN0cmVhbSYgZ2V0bGluZShz aWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykNCgl7IHJldHVybiBn ZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9DQogICAgaXN0cmVhbSYgcmVhZChjaGFy ICpwdHIsIHN0cmVhbXNpemUgbik7DQogICAgaXN0cmVhbSYgcmVhZCh1bnNpZ25lZCBjaGFyICpw dHIsIHN0cmVhbXNpemUgbikNCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0N CiAgICBpc3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikNCiAgICAg IHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0NCiAgICBpc3RyZWFtJiByZWFkKHZvaWQg KnB0ciwgc3RyZWFtc2l6ZSBuKQ0KICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsg fQ0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBjaGFyIGRlbGltID0gJ1xuJyk7DQog ICAgaXN0cmVhbSYgZ2V0cyhjaGFyICoqcywgY2hhciBkZWxpbSA9ICdcbicpOw0KICAgIGludCBp cGZ4KGludCBuZWVkID0gMCkgew0KCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyBy ZXR1cm4gMDsgfQ0KCWVsc2Ugew0KCSAgIDsNCgkgIGlmIChfdGllICYmIChuZWVkID09IDAgfHwg cmRidWYoKS0+aW5fYXZhaWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgpOw0KCSAgaWYgKCFuZWVk ICYmIChmbGFncygpICYgaW9zOjpza2lwd3MpKSByZXR1cm4gX3NraXBfd3MoKTsNCgkgIGVsc2Ug cmV0dXJuIDE7DQoJfQ0KICAgIH0NCiAgICBpbnQgaXBmeDAoKSB7ICANCglpZiAoIWdvb2QoKSkg eyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0NCgllbHNlIHsNCgkgICA7DQoJICBpZiAo X3RpZSkgX3RpZS0+Zmx1c2goKTsNCgkgIGlmIChmbGFncygpICYgaW9zOjpza2lwd3MpIHJldHVy biBfc2tpcF93cygpOw0KCSAgZWxzZSByZXR1cm4gMTsNCgl9DQogICAgfQ0KICAgIGludCBpcGZ4 MSgpIHsgIA0KCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQ0K CWVsc2Ugew0KCSAgIDsNCgkgIGlmIChfdGllICYmIHJkYnVmKCktPmluX2F2YWlsKCkgPT0gMCkg X3RpZS0+Zmx1c2goKTsNCgkgIHJldHVybiAxOw0KCX0NCiAgICB9DQogICAgdm9pZCBpc2Z4KCkg eyAgOyB9DQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7DQoJCWVs c2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5zYnVtcGMoKTsNCgkJICAgICAgIGlmIChjaCA9PSAoLTEp ICkgc2V0KGlvczo6ZW9mYml0KTsNCgkJICAgICAgIGlzZngoKTsNCgkJICAgICAgIHJldHVybiBj aDsNCgkJICAgICB9IH0NCiAgICBpbnQgcGVlaygpOw0KICAgIF9HX3NpemVfdCAgZ2NvdW50KCkg eyByZXR1cm4gX2djb3VudDsgfQ0KICAgIGlzdHJlYW0mIGlnbm9yZShpbnQgbj0xLCBpbnQgZGVs aW0gPSAoLTEpICk7DQogICAgaW50IHN5bmMgKCk7DQogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFt cG9zKTsNCiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7DQogICAgc3Ry ZWFtcG9zIHRlbGxnKCk7DQogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7DQoJaWYgKGdv b2QoKSAmJiBfc3RyYnVmLT5zcHV0YmFja2MoY2gpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJp dCk7DQoJcmV0dXJuICp0aGlzO30NCiAgICBpc3RyZWFtJiB1bmdldCgpIHsNCglpZiAoZ29vZCgp ICYmIF9zdHJidWYtPnN1bmdldGMoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQpOw0KCXJl dHVybiAqdGhpczt9DQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsN CiAgICBpc3RyZWFtJiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9HX3ZhX2xpc3QgIGFyZ3Mp Ow0KDQoNCg0KDQoNCg0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOw0KICAgIGlzdHJl YW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciogcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hh ciopcCk7IH0NCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJu IG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBj KTsNCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3Bl cmF0b3I+PigoY2hhciYpYyk7fQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIm IGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9y Pj4oaW50Jik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nJik7DQoNCiAgICBfX2V4dGVu c2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBsb25nJik7DQogICAgX19leHRlbnNpb25f XyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYpOw0KDQogICAgaXN0cmVh bSYgb3BlcmF0b3I+PihzaG9ydCYpOw0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQg aW50Jik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7DQogICAgaXN0 cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYpOw0KDQogICAgaXN0cmVhbSYgb3BlcmF0 b3I+Pihib29sJik7DQoNCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGZsb2F0Jik7DQogICAgaXN0 cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUmKTsNCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcg ZG91YmxlJik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7KCpmdW5j KSgqdGhpcyk7IHJldHVybiAqdGhpczt9DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5p cCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9y Pj4oc3RyZWFtYnVmKik7DQp9Ow0KDQpjbGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBw dWJsaWMgb3N0cmVhbQ0Kew0KICBwdWJsaWM6DQogICAgaW9zdHJlYW0oKSB7IH0NCiAgICBpb3N0 cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IDAgKTsNCn07DQoNCmNsYXNzIF9JT19p c3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7DQpwdWJsaWM6DQogIF9JT19pc3Ry ZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShpc3RyZWFtJik7DQogIF9JT19pc3RyZWFtX3dpdGhh c3NpZ24mIG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpDQogICAgeyByZXR1 cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykpOyB9DQp9Ow0KDQpjbGFz cyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gew0KcHVibGljOg0KICBf SU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0ob3N0cmVhbSYpOw0KICBfSU9fb3N0cmVh bV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQ0KICAg IHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQ0KfTsN Cg0KZXh0ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2luOw0KIA0KZXh0ZXJuIF9JT19vc3Ry ZWFtX3dpdGhhc3NpZ24gY291dCwgY2VycjsNCg0KZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3Np Z24gY2xvZw0KDQoNCg0KOw0KDQpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOw0K ZXh0ZXJuIGlzdHJlYW0mIHVubG9jayhpc3RyZWFtJiBpbnMpOw0KZXh0ZXJuIG9zdHJlYW0mIGxv Y2sob3N0cmVhbSYgb3V0cyk7DQpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMp Ow0KDQpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIA0KDQppbmxpbmUgaW9zJiBkZWMoaW9z JiBpKQ0KeyBpLnNldGYoaW9zOjpkZWMsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0 dXJuIGk7IH0NCmlubGluZSBpb3MmIGhleChpb3MmIGkpDQp7IGkuc2V0Zihpb3M6OmhleCwgaW9z OjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQ0KaW5saW5lIGlvcyYgb2N0KGlv cyYgaSkNCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJl dHVybiBpOyB9DQp9ICANCg0KDQojIDYgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvaW9zdHJl YW0iIDIgMw0KDQoNCiMgNSAicWRfX2djY19fYnVnLmNwcCIgMg0KDQojIDEgImM6L2Rvcy9wdWIv ZGpncHAvbGFuZy9jeHgvdmVjdG9yIiAxIDMNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcv Y3h4L3N0bGFsZ29iYXNlLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KIyAxICJjOi9kb3MvcHViL2Rq Z3BwL2xhbmcvY3h4L3N0bF9jb25maWcuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCiANCiANCiANCiANCiANCiANCiAN CiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiAN CiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCg0K DQogDQogDQogDQogDQogDQogDQogDQogDQogDQogDQogDQoNCg0KIA0KDQogDQogDQogDQogDQog DQogDQogDQoNCg0KDQoNCg0KDQoNCg0KIyAxNDggImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgv c3RsX2NvbmZpZy5oIiAzDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K IyAxNzggImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2NvbmZpZy5oIiAzDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQojIDIzOCAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfY29uZmlnLmgiIDMN Cg0KDQojIDI1MiAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfY29uZmlnLmgiIDMNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQogDQogDQogDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQogDQogDQojIDMyMCAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfY29uZmlnLmgiIDMN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQogDQogDQogDQojIDM2ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcv Y3h4L3N0bGFsZ29iYXNlLmgiIDIgMw0KDQoNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcv Y3h4L3N0bF9yZWxvcHMuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9U cD4NCmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195 KSB7DQogIHJldHVybiAhKF9feCA9PSBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0K aW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgew0K ICByZXR1cm4gX195IDwgX194Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIGJv b2wgb3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsNCiAgcmV0dXJu ICEoX195IDwgX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBib29sIG9w ZXJhdG9yPj0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7DQogIHJldHVybiAhKF9f eCA8IF9feSk7DQp9DQoNCiANCg0KDQoNCiANCiANCiANCiMgMzkgImM6L2Rvcy9wdWIvZGpncHAv bGFuZy9jeHgvc3RsYWxnb2Jhc2UuaCIgMiAzDQoNCg0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAv bGFuZy9jeHgvc3RsX3BhaXIuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCiANCg0KdGVtcGxhdGUgPGNsYXNz IF9UMSwgY2xhc3MgX1QyPg0Kc3RydWN0IHBhaXIgew0KICB0eXBlZGVmIF9UMSBmaXJzdF90eXBl Ow0KICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsNCg0KICBfVDEgZmlyc3Q7DQogIF9UMiBzZWNv bmQ7DQogIHBhaXIoKSA6IGZpcnN0KF9UMSgpKSwgc2Vjb25kKF9UMigpKSB7fQ0KICBwYWlyKGNv bnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7 fQ0KDQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPg0KICBwYWlyKGNvbnN0IHBh aXI8X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQp IHt9DQoNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29s IG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9U Mj4mIF9feSkNCnsgDQogIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNv bmQgPT0gX195LnNlY29uZDsgDQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4N CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBw YWlyPF9UMSwgX1QyPiYgX195KQ0KeyANCiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8 fCANCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9f eS5zZWNvbmQpOyANCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5l IHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihjb25zdCBfVDEmIF9feCwgY29uc3QgX1QyJiBfX3kp DQp7DQogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7DQp9DQoNCiANCg0KDQoNCiAN CiANCiANCiMgNDIgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsYWxnb2Jhc2UuaCIgMiAz DQoNCg0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvdHlwZV90cmFpdHMuaCIgMSAz DQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCnN0 cnVjdCBfX3RydWVfdHlwZSB7DQp9Ow0KDQpzdHJ1Y3QgX19mYWxzZV90eXBlIHsNCn07DQoNCnRl bXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7IA0KICAgdHlwZWRlZiBf X3RydWVfdHlwZSAgICAgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsNCiAgICAgICAg ICAgICAgICAgICAgDQoNCg0KDQoNCg0KICAgIA0KDQoNCg0KDQoNCg0KDQoNCiANCg0KICAgdHlw ZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAg IHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQog ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y Ow0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAg IHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGlzX1BPRF90eXBlOw0KfTsNCg0KDQoNCiANCiANCiAN Cg0KDQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQoNCg0KdGVtcGxhdGU8PiAgc3Ry dWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg ICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19Q T0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBj aGFyPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29u c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29u c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l bnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVt cGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gew0KICAgdHlwZWRl ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAg dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRl ZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsNCn07DQoNCg0KDQp0ZW1wbGF0ZTw+ICBzdHJ1 Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlz X1BPRF90eXBlOw0KfTsNCg0KDQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNo b3J0PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29u c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29u c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l bnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVt cGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg X190eXBlX3RyYWl0czxpbnQ+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5 cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+ IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1 Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0 ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8 dW5zaWduZWQgbG9uZz4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh bF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsN Cn07DQoNCg0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsN CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsN CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQoNCg0KdGVtcGxhdGU8PiAgc3RydWN0 IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E X3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsN CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsN CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gew0KICAgdHlwZWRlZiBfX3RydWVf dHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBf X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf dHlwZSAgICBpc19QT0RfdHlwZTsNCn07DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3Ry dWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg ICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19Q T0RfdHlwZTsNCn07DQoNCiMgMjk1ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3R5cGVfdHJh aXRzLmgiIDMNCg0KDQoNCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19p bnRlZ2VyIHsNCiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KDQoNCnRl bXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7DQogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOw0KfTsNCg0KDQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxj aGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8 PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln bmVkIGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQoNCg0K dGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsNCiAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQoNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRl Z2VyPHNob3J0PiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVt cGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7DQogIHR5cGVkZWYg X190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRl Z2VyPGludD4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBs YXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsNCiAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8 bG9uZz4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRl PD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7DQogIHR5cGVkZWYgX190cnVl X3R5cGUgX0ludGVncmFsOw0KfTsNCg0KDQoNCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdl cjxsb25nIGxvbmc+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0 ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7DQogIHR5 cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KDQoNCg0KDQogDQogDQogDQojIDQ1 ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bGFsZ29iYXNlLmgiIDIgMw0KDQoNCg0KIyAx ICJjOi9kb3MvcHViL2RqZ3BwL2luY2x1ZGUvc3RyaW5nLmgiIDEgMw0KIA0KIA0KDQoNCg0KDQpl eHRlcm4gIkMiIHsNCg0KDQoNCg0KDQogICAgDQogDQoNCg0KDQogDQoNCg0KDQp2b2lkICoJbWVt Y2hyKGNvbnN0IHZvaWQgKl9zLCBpbnQgX2MsIHNpemVfdCBfbik7DQppbnQJbWVtY21wKGNvbnN0 IHZvaWQgKl9zMSwgY29uc3Qgdm9pZCAqX3MyLCBzaXplX3QgX24pOw0Kdm9pZCAqCW1lbWNweSh2 b2lkICpfZGVzdCwgY29uc3Qgdm9pZCAqX3NyYywgc2l6ZV90IF9uKTsNCnZvaWQgKgltZW1tb3Zl KHZvaWQgKl9zMSwgY29uc3Qgdm9pZCAqX3MyLCBzaXplX3QgX24pOw0Kdm9pZCAqCW1lbXNldCh2 b2lkICpfcywgaW50IF9jLCBzaXplX3QgX24pOw0KY2hhciAqCXN0cmNhdChjaGFyICpfczEsIGNv bnN0IGNoYXIgKl9zMik7DQpjaGFyICoJc3RyY2hyKGNvbnN0IGNoYXIgKl9zLCBpbnQgX2MpOw0K aW50CXN0cmNtcChjb25zdCBjaGFyICpfczEsIGNvbnN0IGNoYXIgKl9zMik7DQppbnQJc3RyY29s bChjb25zdCBjaGFyICpfczEsIGNvbnN0IGNoYXIgKl9zMik7DQpjaGFyICoJc3RyY3B5KGNoYXIg Kl9zMSwgY29uc3QgY2hhciAqX3MyKTsNCnNpemVfdAlzdHJjc3BuKGNvbnN0IGNoYXIgKl9zMSwg Y29uc3QgY2hhciAqX3MyKTsNCmNoYXIgKglzdHJlcnJvcihpbnQgX2VycmNvZGUpOw0Kc2l6ZV90 CXN0cmxlbihjb25zdCBjaGFyICpfcyk7DQpjaGFyICoJc3RybmNhdChjaGFyICpfczEsIGNvbnN0 IGNoYXIgKl9zMiwgc2l6ZV90IF9uKTsNCmludAlzdHJuY21wKGNvbnN0IGNoYXIgKl9zMSwgY29u c3QgY2hhciAqX3MyLCBzaXplX3QgX24pOw0KY2hhciAqCXN0cm5jcHkoY2hhciAqX3MxLCBjb25z dCBjaGFyICpfczIsIHNpemVfdCBfbik7DQpjaGFyICoJc3RycGJyayhjb25zdCBjaGFyICpfczEs IGNvbnN0IGNoYXIgKl9zMik7DQpjaGFyICoJc3RycmNocihjb25zdCBjaGFyICpfcywgaW50IF9j KTsNCnNpemVfdAlzdHJzcG4oY29uc3QgY2hhciAqX3MxLCBjb25zdCBjaGFyICpfczIpOw0KY2hh ciAqCXN0cnN0cihjb25zdCBjaGFyICpfczEsIGNvbnN0IGNoYXIgKl9zMik7DQpjaGFyICoJc3Ry dG9rKGNoYXIgKl9zMSwgY29uc3QgY2hhciAqX3MyKTsNCnNpemVfdAlzdHJ4ZnJtKGNoYXIgKl9z MSwgY29uc3QgY2hhciAqX3MyLCBzaXplX3QgX24pOw0KDQoNCg0KDQoNCiMgMSAiYzovZG9zL3B1 Yi9kamdwcC9pbmNsdWRlL3N5cy9tb3ZlZGF0YS5oIiAxIDMNCiANCiANCg0KDQoNCg0KZXh0ZXJu ICJDIiB7DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCiANCg0KDQoNCiANCnZvaWQgZG9z bWVtZ2V0KHVuc2lnbmVkIGxvbmcgX29mZnNldCwgc2l6ZV90IF9sZW5ndGgsIHZvaWQgKl9idWZm ZXIpOw0Kdm9pZCBkb3NtZW1wdXQoY29uc3Qgdm9pZCAqX2J1ZmZlciwgc2l6ZV90IF9sZW5ndGgs IHVuc2lnbmVkIGxvbmcgX29mZnNldCk7DQoNCiANCnZvaWQgX2Rvc21lbWdldGIodW5zaWduZWQg bG9uZyBfb2Zmc2V0LCBzaXplX3QgX3hmZXJzLCB2b2lkICpfYnVmZmVyKTsNCnZvaWQgX2Rvc21l bWdldHcodW5zaWduZWQgbG9uZyBfb2Zmc2V0LCBzaXplX3QgX3hmZXJzLCB2b2lkICpfYnVmZmVy KTsNCnZvaWQgX2Rvc21lbWdldGwodW5zaWduZWQgbG9uZyBfb2Zmc2V0LCBzaXplX3QgX3hmZXJz LCB2b2lkICpfYnVmZmVyKTsNCnZvaWQgX2Rvc21lbXB1dGIoY29uc3Qgdm9pZCAqX2J1ZmZlciwg c2l6ZV90IF94ZmVycywgdW5zaWduZWQgbG9uZyBfb2Zmc2V0KTsNCnZvaWQgX2Rvc21lbXB1dHco Y29uc3Qgdm9pZCAqX2J1ZmZlciwgc2l6ZV90IF94ZmVycywgdW5zaWduZWQgbG9uZyBfb2Zmc2V0 KTsNCnZvaWQgX2Rvc21lbXB1dGwoY29uc3Qgdm9pZCAqX2J1ZmZlciwgc2l6ZV90IF94ZmVycywg dW5zaWduZWQgbG9uZyBfb2Zmc2V0KTsNCg0KDQogDQp2b2lkIG1vdmVkYXRhKHVuc2lnbmVkIF9z b3VyY2Vfc2VsZWN0b3IsIHVuc2lnbmVkIF9zb3VyY2Vfb2Zmc2V0LA0KCSAgICAgICB1bnNpZ25l ZCBfZGVzdF9zZWxlY3RvciwgdW5zaWduZWQgX2Rlc3Rfb2Zmc2V0LA0KCSAgICAgICBzaXplX3Qg X2xlbmd0aCk7DQoNCiANCnZvaWQgX21vdmVkYXRhYih1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2ln bmVkLCB1bnNpZ25lZCwgc2l6ZV90KTsNCnZvaWQgX21vdmVkYXRhdyh1bnNpZ25lZCwgdW5zaWdu ZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgc2l6ZV90KTsNCnZvaWQgX21vdmVkYXRhbCh1bnNpZ25l ZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgc2l6ZV90KTsNCiAgDQoNCg0KDQoNCg0K DQoNCg0KfQ0KDQoNCg0KIyA0OSAiYzovZG9zL3B1Yi9kamdwcC9pbmNsdWRlL3N0cmluZy5oIiAy IDMNCg0KDQppbnQJYmNtcChjb25zdCB2b2lkICpfcHRyMSwgY29uc3Qgdm9pZCAqX3B0cjIsIGlu dCBfbGVuZ3RoKTsNCnZvaWQgKgliY29weShjb25zdCB2b2lkICpfYSwgdm9pZCAqX2IsIHNpemVf dCBfbGVuKTsNCnZvaWQgKgliemVybyh2b2lkICpwdHIsIHNpemVfdCBfbGVuKTsNCmludAlmZnMo aW50IF9tYXNrKTsNCmNoYXIgKiAgaW5kZXgoY29uc3QgY2hhciAqX3N0cmluZywgaW50IF9jKTsN CnZvaWQgKgltZW1jY3B5KHZvaWQgKl90bywgY29uc3Qgdm9pZCAqX2Zyb20sIGludCBjLCBzaXpl X3Qgbik7DQppbnQJbWVtaWNtcChjb25zdCB2b2lkICpfczEsIGNvbnN0IHZvaWQgKl9zMiwgc2l6 ZV90IF9uKTsNCmNoYXIgKiAgcmluZGV4KGNvbnN0IGNoYXIgKl9zdHJpbmcsIGludCBfYyk7DQpj aGFyICoJc3RwY3B5KGNoYXIgKl9kZXN0LCBjb25zdCBjaGFyICpfc3JjKTsNCmNoYXIgKglzdHJk dXAoY29uc3QgY2hhciAqX3MpOw0KY2hhciAqCXN0cmx3cihjaGFyICpfcyk7DQppbnQJc3RyY2Fz ZWNtcChjb25zdCBjaGFyICpfczEsIGNvbnN0IGNoYXIgKl9zMik7DQppbnQJc3RyaWNtcChjb25z dCBjaGFyICpfczEsIGNvbnN0IGNoYXIgKl9zMik7DQppbnQJc3RybmNhc2VjbXAoY29uc3QgY2hh ciAqX3MxLCBjb25zdCBjaGFyICpfczIsIHNpemVfdCBfbik7DQppbnQJc3RybmljbXAoY29uc3Qg Y2hhciAqX3MxLCBjb25zdCBjaGFyICpfczIsIHNpemVfdCBfbik7DQpjaGFyICoJc3Ryc2VwKGNo YXIgKipfc3RyaW5ncCwgY29uc3QgY2hhciAqX2RlbGltKTsNCmNoYXIgKglzdHJ1cHIoY2hhciAq X3MpOw0KDQoNCg0KDQoNCg0KDQoNCg0KfQ0KDQoNCg0KIyA0OCAiYzovZG9zL3B1Yi9kamdwcC9s YW5nL2N4eC9zdGxhbGdvYmFzZS5oIiAyIDMNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2luY2x1 ZGUvbGltaXRzLmgiIDEgMw0KIA0KIA0KDQoNCg0KDQpleHRlcm4gIkMiIHsNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KIA0KDQogDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAN Cg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCn0NCg0KDQoNCiMgNDkgImM6L2Rvcy9w dWIvZGpncHAvbGFuZy9jeHgvc3RsYWxnb2Jhc2UuaCIgMiAzDQoNCiMgMSAiYzovZG9zL3B1Yi9k amdwcC9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMNCiANCiANCiANCg0KDQoNCg0KZXh0ZXJuICJDIiB7 DQoNCg0KDQoNCg0KICANCiANCg0KDQoNCg0KDQoNCg0KDQpleHRlcm4gaW50IF9fZGpfbWJfY3Vy X21heDsNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICBpbnQgcXVvdDsNCiAgaW50IHJlbTsNCn0gZGl2 X3Q7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgbG9uZyBxdW90Ow0KICBsb25nIHJlbTsNCn0gbGRp dl90Ow0KDQogDQoNCg0KIA0KDQoNCg0Kdm9pZAlhYm9ydCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChu b3JldHVybikpOw0KaW50CWFicyhpbnQgX2kpOw0KaW50CWF0ZXhpdCh2b2lkICgqX2Z1bmMpKHZv aWQpKTsNCmRvdWJsZQlhdG9mKGNvbnN0IGNoYXIgKl9zKTsNCmludAlhdG9pKGNvbnN0IGNoYXIg Kl9zKTsNCmxvbmcJYXRvbChjb25zdCBjaGFyICpfcyk7DQp2b2lkICoJYnNlYXJjaChjb25zdCB2 b2lkICpfa2V5LCBjb25zdCB2b2lkICpfYmFzZSwgc2l6ZV90IF9uZWxlbSwNCgkJc2l6ZV90IF9z aXplLCBpbnQgKCpfY21wKShjb25zdCB2b2lkICpfY2ssIGNvbnN0IHZvaWQgKl9jZSkpOw0Kdm9p ZCAqCWNhbGxvYyhzaXplX3QgX25lbGVtLCBzaXplX3QgX3NpemUpOw0KZGl2X3QJZGl2KGludCBf bnVtZXIsIGludCBfZGVub20pOw0Kdm9pZAlleGl0KGludCBfc3RhdHVzKSBfX2F0dHJpYnV0ZV9f KChub3JldHVybikpOw0Kdm9pZAlmcmVlKHZvaWQgKl9wdHIpOw0KY2hhciAqIGdldGVudihjb25z dCBjaGFyICpfbmFtZSk7DQpsb25nCWxhYnMobG9uZyBfaSk7DQpsZGl2X3QJbGRpdihsb25nIF9u dW1lciwgbG9uZyBfZGVub20pOw0Kdm9pZCAqCW1hbGxvYyhzaXplX3QgX3NpemUpOw0KaW50CW1i bGVuKGNvbnN0IGNoYXIgKl9zLCBzaXplX3QgX24pOw0Kc2l6ZV90CW1ic3Rvd2NzKHdjaGFyX3Qg Kl93Y3MsIGNvbnN0IGNoYXIgKl9zLCBzaXplX3QgX24pOw0KaW50CW1idG93Yyh3Y2hhcl90ICpf cHdjLCBjb25zdCBjaGFyICpfcywgc2l6ZV90IF9uKTsNCnZvaWQJcXNvcnQodm9pZCAqX2Jhc2Us IHNpemVfdCBfbmVsZW0sIHNpemVfdCBfc2l6ZSwNCgkgICAgICBpbnQgKCpfY21wKShjb25zdCB2 b2lkICpfZTEsIGNvbnN0IHZvaWQgKl9lMikpOw0KaW50CXJhbmQodm9pZCk7DQp2b2lkICoJcmVh bGxvYyh2b2lkICpfcHRyLCBzaXplX3QgX3NpemUpOw0Kdm9pZAlzcmFuZCh1bnNpZ25lZCBfc2Vl ZCk7DQpkb3VibGUJc3RydG9kKGNvbnN0IGNoYXIgKl9zLCBjaGFyICoqX2VuZHB0cik7DQpsb25n CXN0cnRvbChjb25zdCBjaGFyICpfcywgY2hhciAqKl9lbmRwdHIsIGludCBfYmFzZSk7DQp1bnNp Z25lZCBsb25nCXN0cnRvdWwoY29uc3QgY2hhciAqX3MsIGNoYXIgKipfZW5kcHRyLCBpbnQgX2Jh c2UpOw0KaW50CXN5c3RlbShjb25zdCBjaGFyICpfcyk7DQpzaXplX3QJd2NzdG9tYnMoY2hhciAq X3MsIGNvbnN0IHdjaGFyX3QgKl93Y3MsIHNpemVfdCBfbik7DQppbnQJd2N0b21iKGNoYXIgKl9z LCB3Y2hhcl90IF93Y2hhcik7DQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICBsb25nIGxv bmcgcXVvdDsNCiAgbG9uZyBsb25nIHJlbTsNCn0gbGxkaXZfdDsNCg0Kdm9pZCAqCQlhbGxvY2Eo c2l6ZV90IF9zaXplKTsNCmxvbmcgZG91YmxlCV9hdG9sZChjb25zdCBjaGFyICpfcyk7DQpsb25n IGxvbmcJYXRvbGwoY29uc3QgY2hhciAqX3MpOw0Kdm9pZAkJY2ZyZWUodm9pZCAqX3B0cik7DQpk b3VibGUgICAgICAgICAgZHJhbmQ0OCh2b2lkKTsNCmNoYXIgKgkJZWN2dGJ1Zihkb3VibGUgX3Zh bCwgaW50IF9uZCwgaW50ICpfZHAsIGludCAqX3NuLCBjaGFyICpfYmYpOw0KY2hhciAqCQllY3Z0 KGRvdWJsZSBfdmFsLCBpbnQgX25kLCBpbnQgKl9kcCwgaW50ICpfc24pOw0KZG91YmxlICAgICAg ICAgIGVyYW5kNDgodW5zaWduZWQgc2hvcnQgc3RhdGVbM10pOw0KY2hhciAqCQlmY3Z0YnVmKGRv dWJsZSBfdmFsLCBpbnQgX25kLCBpbnQgKl9kcCwgaW50ICpfc24sIGNoYXIgKl9iZik7DQpjaGFy ICoJCWZjdnQoZG91YmxlIF92YWwsIGludCBfbmQsIGludCAqX2RwLCBpbnQgKl9zbik7DQpjaGFy ICoJCWdjdnQoZG91YmxlIF92YWwsIGludCBfbmQsIGNoYXIgKl9idWYpOw0KY2hhciAqCQlnZXRw YXNzKGNvbnN0IGNoYXIgKl9wcm9tcHQpOw0KaW50CQlnZXRsb25ncGFzcyhjb25zdCBjaGFyICpf cHJvbXB0LCBjaGFyICpfYnVmZmVyLCBpbnQgX21heF9sZW4pOw0KY2hhciAqCQlpdG9hKGludCB2 YWx1ZSwgY2hhciAqYnVmZmVyLCBpbnQgcmFkaXgpOw0KbG9uZyAgICAgICAgICAgIGpyYW5kNDgo dW5zaWduZWQgc2hvcnQgc3RhdGVbM10pOw0KbG9uZyBsb25nCWxsYWJzKGxvbmcgbG9uZyBfaSk7 DQpsbGRpdl90CQlsbGRpdihsb25nIGxvbmcgX251bWVyLCBsb25nIGxvbmcgX2Rlbm9tKTsNCnZv aWQgICAgICAgICAgICBsY29uZzQ4KHVuc2lnbmVkIHNob3J0IHBhcmFtWzddKTsNCnVuc2lnbmVk IGxvbmcgICBscmFuZDQ4KHZvaWQpOw0KbG9uZyAgICAgICAgICAgIG1yYW5kNDgodm9pZCk7DQp1 bnNpZ25lZCBsb25nICAgbnJhbmQ0OCh1bnNpZ25lZCBzaG9ydCBzdGF0ZVszXSk7DQppbnQJCXB1 dGVudihjb25zdCBjaGFyICpfdmFsKTsNCnVuc2lnbmVkIHNob3J0ICpzZWVkNDgodW5zaWduZWQg c2hvcnQgc3RhdGVfc2VlZFszXSk7DQppbnQJCXNldGVudihjb25zdCBjaGFyICpfdmFyLCBjb25z dCBjaGFyICpfdmFsLCBpbnQgX3JlcGxhY2UpOw0Kdm9pZCAgICAgICAgICAgIHNyYW5kNDgobG9u ZyBzZWVkdmFsKTsNCmludAkJc3RhY2thdmFpbCh2b2lkKTsNCmxvbmcgZG91YmxlCV9zdHJ0b2xk KGNvbnN0IGNoYXIgKl9zLCBjaGFyICoqX2VuZHB0cik7DQpsb25nIGxvbmcJc3RydG9sbChjb25z dCBjaGFyICpfcywgY2hhciAqKl9lbmRwdHIsIGludCBfYmFzZSk7DQp1bnNpZ25lZCBsb25nIGxv bmcgc3RydG91bGwoY29uc3QgY2hhciAqX3MsIGNoYXIgKipfZW5kcHRyLCBpbnQgX2Jhc2UpOw0K dm9pZAkJc3dhYihjb25zdCB2b2lkICpmcm9tLCB2b2lkICp0bywgaW50IG5ieXRlcyk7DQoNCg0K DQoNCg0KIA0KY2hhciAgKglpbml0c3RhdGUgKHVuc2lnbmVkIF9zZWVkLCBjaGFyICpfYXJnX3N0 YXRlLCBpbnQgX24pOw0KY2hhciAgKglzZXRzdGF0ZShjaGFyICpfYXJnX3N0YXRlKTsNCmxvbmcJ cmFuZG9tKHZvaWQpOw0KaW50CXNyYW5kb20oaW50IF9zZWVkKTsNCg0KIA0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KZXh0ZXJuIGludCBfX3N5c3RlbV9mbGFnczsNCg0KDQoNCg0KDQoN Cg0KDQoNCn0NCg0KDQoNCiMgNTAgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsYWxnb2Jh c2UuaCIgMiAzDQoNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xpYi9nY2MtbGliL2RqZ3BwLzIu OTUyL2luY2x1ZGUvbmV3LmgiIDEgMw0KIA0KDQoNCg0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAv bGliL2djYy1saWIvZGpncHAvMi45NTIvaW5jbHVkZS9uZXciIDEgMw0KIA0KIA0KDQoNCg0KDQoj cHJhZ21hIGludGVyZmFjZSAibmV3Ig0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAvbGliL2djYy1s aWIvZGpncHAvMi45NTIvaW5jbHVkZS9leGNlcHRpb24iIDEgMw0KIA0KIA0KDQoNCg0KDQojcHJh Z21hIGludGVyZmFjZSAiZXhjZXB0aW9uIg0KDQpleHRlcm4gIkMrKyIgew0KDQpuYW1lc3BhY2Ug c3RkIHsNCg0KY2xhc3MgZXhjZXB0aW9uIHsNCnB1YmxpYzoNCiAgZXhjZXB0aW9uICgpIHsgfQ0K ICB2aXJ0dWFsIH5leGNlcHRpb24gKCkgeyB9DQogIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCAo KSBjb25zdDsNCn07DQoNCmNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uIHsN CnB1YmxpYzoNCiAgYmFkX2V4Y2VwdGlvbiAoKSB7IH0NCiAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv biAoKSB7IH0NCn07DQoNCnR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsNCnR5 cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7DQoNCnRlcm1pbmF0ZV9oYW5kbGVy IHNldF90ZXJtaW5hdGUgKHRlcm1pbmF0ZV9oYW5kbGVyKTsNCnZvaWQgdGVybWluYXRlICgpIF9f YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCnVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5l eHBlY3RlZCAodW5leHBlY3RlZF9oYW5kbGVyKTsNCnZvaWQgdW5leHBlY3RlZCAoKSBfX2F0dHJp YnV0ZV9fICgoX19ub3JldHVybl9fKSk7DQpib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbiAoKTsNCg0K fSAgDQoNCn0gIA0KDQoNCiMgOSAiYzovZG9zL3B1Yi9kamdwcC9saWIvZ2NjLWxpYi9kamdwcC8y Ljk1Mi9pbmNsdWRlL25ldyIgMiAzDQoNCg0KZXh0ZXJuICJDKysiIHsNCg0KbmFtZXNwYWNlIHN0 ZCB7DQoNCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbiB7DQogIHB1YmxpYzoN CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJi YWRfYWxsb2MiOyB9DQogIH07DQoNCiAgc3RydWN0IG5vdGhyb3dfdCB7fTsNCiAgZXh0ZXJuIGNv bnN0IG5vdGhyb3dfdCBub3Rocm93Ow0KICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsN CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyIChuZXdfaGFuZGxlcik7DQoNCn0gIA0KDQog DQp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsNCnZv aWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7DQp2b2lk IG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBkZWxldGVb XSAodm9pZCAqKSB0aHJvdygpOw0Kdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QsIGNvbnN0IHN0 ZDo6bm90aHJvd190JikgdGhyb3coKTsNCnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QsIGNv bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lk ICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRl W10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0KDQogDQppbmxpbmUg dm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4g cGxhY2U7IH0NCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKnBsYWNl KSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9DQp9ICANCg0KDQojIDYgImM6L2Rvcy9wdWIvZGpn cHAvbGliL2djYy1saWIvZGpncHAvMi45NTIvaW5jbHVkZS9uZXcuaCIgMiAzDQoNCg0KdXNpbmcg c3RkOjpuZXdfaGFuZGxlcjsNCnVzaW5nIHN0ZDo6c2V0X25ld19oYW5kbGVyOw0KDQoNCiMgNTIg ImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsYWxnb2Jhc2UuaCIgMiAzDQoNCg0KDQoNCiMg MSAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfaXRlcmF0b3IuaCIgMSAzDQogDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0K DQoNCiANCg0Kc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCBvdXRwdXRfaXRl cmF0b3JfdGFnIHt9Ow0Kc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0 X2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1 YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJh dG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsNCg0KIA0KIA0K IA0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1 dF9pdGVyYXRvciB7DQogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn b3J5Ow0KICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOw0KICB0eXBlZGVm IF9EaXN0YW5jZSAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1RwKiAgICAg ICAgICAgICAgIHBvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5j ZTsNCn07DQoNCnN0cnVjdCBvdXRwdXRfaXRlcmF0b3Igew0KICB0eXBlZGVmIG91dHB1dF9pdGVy YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAg ICB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90 eXBlOw0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsNCiAgdHlwZWRlZiB2 b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRlcmF0b3Igew0KICB0eXBlZGVmIGZv cndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCAgICAg ICAgICAgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAg ZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgIHBvaW50ZXI7 DQogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOw0KfTsNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0 ZXJhdG9yIHsNCiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j YXRlZ29yeTsNCiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBl Ow0KICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsN CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVm IF9UcCYgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Ig ew0KICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5 Ow0KICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5 cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBl ZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiAg ICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOw0KfTsNCg0KIyA5OCAiYzovZG9zL3B1Yi9k amdwcC9sYW5nL2N4eC9zdGxfaXRlcmF0b3IuaCIgMw0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0l0ZXJhdG9yPg0Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7DQogIHR5cGVkZWYgdHlwZW5hbWUg X0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRl ZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5 cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5 cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyICAgICAgICAgICBwb2lu dGVyOw0KICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlICAgICAgICAgcmVm ZXJlbmNlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBpdGVyYXRvcl90cmFp dHM8X1RwKj4gew0KICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y X2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90 eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5 cGU7DQogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7DQogIHR5 cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBs YXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsNCiAg dHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAg dHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRl ZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVm IGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9U cCYgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7DQp9Ow0KDQogDQogDQogDQogDQoNCiANCg0K dGVtcGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5DQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVy JikNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRv cl9jYXRlZ29yeSBfQ2F0ZWdvcnk7DQogIHJldHVybiBfQ2F0ZWdvcnkoKTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46 OmRpZmZlcmVuY2VfdHlwZSoNCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpDQp7DQogIHJl dHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJl bmNlX3R5cGUqPigwKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqDQpfX3ZhbHVlX3R5cGUoY29u c3QgX0l0ZXImKQ0Kew0KICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+KDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+ DQppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdv cnkNCml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0 b3JfY2F0ZWdvcnkoX19pKTsgfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCmlubGluZSB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqDQpkaXN0YW5j ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9 DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKg0KdmFsdWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJl dHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQ0KDQoNCg0KDQoNCiMgMjU5ICJjOi9kb3MvcHViL2Rq Z3BwL2xhbmcvY3h4L3N0bF9pdGVyYXRvci5oIiAzDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgd2hpbGUg KF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0NCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZv aWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgDQogICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIA0KICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQp7 DQogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIA0KICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19s YXN0LCBfRGlzdGFuY2UmIF9fbikNCnsNCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9f biwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9f biA9IDA7DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICsrX19maXJzdDsgKytf X247DQogIH0NCiAgcmV0dXJuIF9fbjsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyYXRvcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgew0KICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsN Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KaW5saW5lIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KZGlzdGFuY2Uo X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0 ZWdvcnkgDQogICAgX0NhdGVnb3J5Ow0KICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xh c3QsIF9DYXRlZ29yeSgpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBf RGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpIHsNCiAgd2hpbGUgKF9fbi0tKSArK19f aTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwg Y2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRl cmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgDQogICAgICAgICAgICAgICAgICAgICAgYmlkaXJl Y3Rpb25hbF9pdGVyYXRvcl90YWcpIHsNCiAgaWYgKF9fbiA+PSAwKQ0KICAgIHdoaWxlIChfX24t LSkgKytfX2k7DQogIGVsc2UNCiAgICB3aGlsZSAoX19uKyspIC0tX19pOw0KfQ0KDQoNCg0KDQoN CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4N CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3Rh bmNlIF9fbiwgDQogICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90 YWcpIHsNCiAgX19pICs9IF9fbjsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y LCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBf X2ksIF9EaXN0YW5jZSBfX24pIHsNCiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRl Z29yeShfX2kpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+DQpjbGFzcyBiYWNr X2luc2VydF9pdGVyYXRvciB7DQpwcm90ZWN0ZWQ6DQogIF9Db250YWluZXIqIGNvbnRhaW5lcjsN CnB1YmxpYzoNCiAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOw0K ICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVk ZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHZvaWQgICAgICAg ICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAg cG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCg0KICBl eHBsaWNpdCBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVy KCZfX3gpIHt9DQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+Jg0KICBvcGVyYXRv cj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyANCiAg ICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0N CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJu ICp0aGlzOyB9DQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisr KCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4m IG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQ0KfTsNCg0KIyAzNzggImM6L2Rvcy9w dWIvZGpncHAvbGFuZy9jeHgvc3RsX2l0ZXJhdG9yLmgiIDMNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0NvbnRhaW5lcj4NCmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBiYWNr X2luc2VydGVyKF9Db250YWluZXImIF9feCkgew0KICByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0 b3I8X0NvbnRhaW5lcj4oX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+DQpj bGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igew0KcHJvdGVjdGVkOg0KICBfQ29udGFpbmVyKiBj b250YWluZXI7DQpwdWJsaWM6DQogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWlu ZXJfdHlwZTsNCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5 Ow0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB2 b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2b2lkICAgICAg ICAgICAgICAgIHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVu Y2U7DQoNCiAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkg OiBjb250YWluZXIoJl9feCkge30NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ Jg0KICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192 YWx1ZSkgeyANCiAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7DQogICAgcmV0dXJu ICp0aGlzOw0KICB9DQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0 b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu ZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0NCn07DQoN CiMgNDE3ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9pdGVyYXRvci5oIiAzDQoNCg0K dGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+DQppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkgew0KICByZXR1cm4g ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfQ29udGFpbmVyPg0KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAg X0NvbnRhaW5lciogY29udGFpbmVyOw0KICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBp dGVyOw0KcHVibGljOg0KICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5 cGU7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAg dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCAg ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg ICAgICBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOw0K DQogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6 Oml0ZXJhdG9yIF9faSkgDQogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQ0KICBp bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mDQogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBf Q29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IA0KICAgIGl0ZXIgPSBjb250YWluZXIt Pmluc2VydChpdGVyLCBfX3ZhbHVlKTsNCiAgICArK2l0ZXI7DQogICAgcmV0dXJuICp0aGlzOw0K ICB9DQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4g KnRoaXM7IH0NCiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyBy ZXR1cm4gKnRoaXM7IH0NCiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisr KGludCkgeyByZXR1cm4gKnRoaXM7IH0NCn07DQoNCiMgNDU5ICJjOi9kb3MvcHViL2RqZ3BwL2xh bmcvY3h4L3N0bF9pdGVyYXRvci5oIiAzDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIs IGNsYXNzIF9JdGVyYXRvcj4NCmlubGluZSANCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBp bnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpDQp7DQogIHR5cGVkZWYgdHlw ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOw0KICByZXR1cm4gaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFz cyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVuY2UgPSBf VHAmLCANCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+IA0KDQoNCg0KDQpj bGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Igew0KICB0eXBlZGVmIHJldmVyc2Vf YmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBfVHAsIA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFu Y2U+ICBfU2VsZjsNCnByb3RlY3RlZDoNCiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBjdXJyZW50 Ow0KcHVibGljOg0KICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y X2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5 cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl Ow0KICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7DQogIHR5cGVk ZWYgX1JlZmVyZW5jZSAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOw0KDQogIHJldmVyc2VfYmlk aXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9DQogIGV4cGxpY2l0IHJldmVyc2VfYmlkaXJlY3Rpb25h bF9pdGVyYXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9feCkNCiAgICA6IGN1cnJlbnQoX194 KSB7fQ0KICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJy ZW50OyB9DQogIF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qgew0KICAgIF9CaWRpcmVjdGlv bmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50Ow0KICAgIHJldHVybiAqLS1fX3RtcDsNCiAgfQ0K DQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9 DQoNCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7DQogICAgLS1jdXJyZW50Ow0KICAgIHJldHVybiAq dGhpczsNCiAgfQ0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgew0KICAgIF9TZWxmIF9fdG1wID0g KnRoaXM7DQogICAgLS1jdXJyZW50Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBfU2VsZiYg b3BlcmF0b3ItLSgpIHsNCiAgICArK2N1cnJlbnQ7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQog IF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7DQogICAgX1NlbGYgX190bXAgPSAqdGhpczsNCiAgICAr K2N1cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQp9Ow0KDQojIDU1MCAiYzovZG9zL3B1 Yi9kamdwcC9sYW5nL2N4eC9zdGxfaXRlcmF0b3IuaCIgMw0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf QmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsDQogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl Pg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgNCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9u YWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsIA0KICAgIGNv bnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9E aXN0YW5jZT4mIF9feSkNCnsNCiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsNCn0N Cg0KDQoNCiANCiANCiANCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4NCmNsYXNz IHJldmVyc2VfaXRlcmF0b3IgDQp7DQpwcm90ZWN0ZWQ6DQogIF9JdGVyYXRvciBjdXJyZW50Ow0K cHVibGljOg0KICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpp dGVyYXRvcl9jYXRlZ29yeQ0KICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlDQogICAgICAg ICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh dG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyDQogICAgICAg ICAgcG9pbnRlcjsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y Pjo6cmVmZXJlbmNlDQogICAgICAgICAgcmVmZXJlbmNlOw0KDQogIHR5cGVkZWYgX0l0ZXJhdG9y IGl0ZXJhdG9yX3R5cGU7DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9T ZWxmOw0KDQpwdWJsaWM6DQogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQ0KICBleHBsaWNpdCByZXZl cnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQ0KDQogIHJl dmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7 fQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQ0KICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7 fQ0KDQogICAgDQogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7 IH0NCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsNCiAgICBfSXRlcmF0b3IgX190bXAg PSBjdXJyZW50Ow0KICAgIHJldHVybiAqLS1fX3RtcDsNCiAgfQ0KDQogIHBvaW50ZXIgb3BlcmF0 b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9DQoNCg0KICBfU2VsZiYgb3Bl cmF0b3IrKygpIHsNCiAgICAtLWN1cnJlbnQ7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIF9T ZWxmIG9wZXJhdG9yKysoaW50KSB7DQogICAgX1NlbGYgX190bXAgPSAqdGhpczsNCiAgICAtLWN1 cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQogIF9TZWxmJiBvcGVyYXRvci0tKCkgew0K ICAgICsrY3VycmVudDsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgX1NlbGYgb3BlcmF0b3It LShpbnQpIHsNCiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOw0KICAgICsrY3VycmVudDsNCiAgICBy ZXR1cm4gX190bXA7DQogIH0NCg0KICBfU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9f bikgY29uc3Qgew0KICAgIHJldHVybiBfU2VsZihjdXJyZW50IC0gX19uKTsNCiAgfQ0KICBfU2Vs ZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7DQogICAgY3VycmVudCAtPSBfX247 DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5 cGUgX19uKSBjb25zdCB7DQogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOw0KICB9DQog IF9TZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsNCiAgICBjdXJyZW50ICs9 IF9fbjsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlm ZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0gIA0KfTsg DQogDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgDQogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVy biBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0 b3I+DQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+JiBfX3gsIA0KICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsNCn0N Cg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4NCmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0Kb3BlcmF0b3ItKGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCANCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNl KCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQppbmxpbmUgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcmF0b3I+IA0Kb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwNCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgew0KICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOw0KfQ0KDQojIDgwNSAiYzovZG9zL3B1Yi9kamdwcC9s YW5nL2N4eC9zdGxfaXRlcmF0b3IuaCIgMw0KDQoNCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+IA0KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7DQog IGZyaWVuZCBib29sIG9wZXJhdG9yPT0gPD4gIChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVh bV9pdGVyYXRvciYpOw0KcHJvdGVjdGVkOg0KICBpc3RyZWFtKiBfTV9zdHJlYW07DQogIF9UcCBf TV92YWx1ZTsNCiAgYm9vbCBfTV9lbmRfbWFya2VyOw0KICB2b2lkIF9NX3JlYWQoKSB7DQogICAg X01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsNCiAgICBpZiAoX01f ZW5kX21hcmtlcikgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsNCiAgICBfTV9lbmRfbWFya2VyID0g KCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOw0KICB9DQpwdWJsaWM6DQogIHR5cGVkZWYgaW5w dXRfaXRlcmF0b3JfdGFnICBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBfVHAgICAgICAg ICAgICAgICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3QgICAgICAgICAgICAgICBkaWZm ZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICBwb2ludGVyOw0KICB0 eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgcmVmZXJlbmNlOw0KDQogIGlzdHJlYW1faXRlcmF0 b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21hcmtlcihmYWxzZSkge30NCiAgaXN0cmVh bV9pdGVyYXRvcihpc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9 DQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQ0KDQog IHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9DQoN CiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiYgb3BlcmF0b3IrKygpIHsgDQogICAgX01f cmVhZCgpOyANCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAs IF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsNCiAgICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rp c3Q+IF9fdG1wID0gKnRoaXM7DQogICAgX01fcmVhZCgpOw0KICAgIHJldHVybiBfX3RtcDsNCiAg fQ0KfTsNCg0KIyA4NjQgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2l0ZXJhdG9yLmgi IDMNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgYm9v bCBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3gs DQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlz dGFuY2U+JiBfX3kpIHsNCiAgcmV0dXJuIChfX3guX01fc3RyZWFtID09IF9feS5fTV9zdHJlYW0g JiYNCiAgICAgICAgICBfX3guX01fZW5kX21hcmtlciA9PSBfX3kuX01fZW5kX21hcmtlcikgfHwN CiAgICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2Vy ID09IGZhbHNlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KY2xhc3Mgb3N0cmVhbV9pdGVy YXRvciB7DQpwcm90ZWN0ZWQ6DQogIG9zdHJlYW0qIF9NX3N0cmVhbTsNCiAgY29uc3QgY2hhciog X01fc3RyaW5nOw0KcHVibGljOg0KICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0 b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOw0K ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVm IHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAg ICAgIHJlZmVyZW5jZTsNCg0KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcykgOiBfTV9z dHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQ0KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0m IF9fcywgY29uc3QgY2hhciogX19jKSANCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5n KF9fYykgIHt9DQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYg X192YWx1ZSkgeyANCiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7DQogICAgaWYgKF9NX3N0cmlu ZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIG9z dHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgb3N0 cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0gDQogIG9z dHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9IA0K fTsNCg0KIyA5MDcgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2l0ZXJhdG9yLmgiIDMN Cg0KDQogDQoNCg0KDQogDQogDQogDQojIDU2ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0 bGFsZ29iYXNlLmgiIDIgMw0KDQoNCg0KIA0KDQogDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZCBfX2l0 ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopIHsNCiAg X1RwIF9fdG1wID0gKl9fYTsNCiAgKl9fYSA9ICpfX2I7DQogICpfX2IgPSBfX3RtcDsNCn0NCg0K dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+DQppbmxp bmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKSB7 DQogIF9faXRlcl9zd2FwKF9fYSwgX19iLCBfX3ZhbHVlX3R5cGUoIF9fYSApICk7DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfVHA+DQppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikg ew0KICBfVHAgX190bXAgPSBfX2E7DQogIF9fYSA9IF9fYjsNCiAgX19iID0gX190bXA7DQp9DQoN CiANCiANCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQppbmxpbmUgY29uc3QgX1Rw JiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7DQogIHJldHVybiBfX2IgPCBf X2EgPyBfX2IgOiBfX2E7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQppbmxpbmUgY29uc3Qg X1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7DQogIHJldHVybiAgX19h IDwgX19iID8gX19iIDogX19hOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmU+DQppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9U cCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsNCiAgcmV0dXJuIF9fY29tcChfX2IsIF9fYSkgPyBf X2IgOiBfX2E7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPg0KaW5s aW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBh cmUgX19jb21wKSB7DQogIHJldHVybiBfX2NvbXAoX19hLCBfX2IpID8gX19iIDogX19hOw0KfQ0K DQogDQogDQoNCiANCiANCiANCiANCiANCiANCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgX091dHB1dEl0 ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAg ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSopDQp7DQogIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkNCiAgICAqX19yZXN1bHQg PSAqX19maXJzdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxp bmUgX091dHB1dEl0ZXINCl9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQ0Kew0KICBmb3IgKF9EaXN0YW5jZSBfX24g PSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgew0KICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCiAgICArK19fcmVzdWx0Ow0KICB9DQogIHJldHVybiBf X3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBfVHAqDQpfX2NvcHlf dHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVz dWx0KSB7DQogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFz dCAtIF9fZmlyc3QpKTsNCiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOw0K fQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBj bGFzcyBfQm9vbFR5cGU+DQpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoIHsNCiAgc3RhdGljIF9PdXRw dXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsNCiAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkg X0NhdGVnb3J5Ow0KICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOw0KICAgIHJldHVybiBfX2NvcHkoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdGVnb3J5KCksIChfRGlzdGFuY2UqKSAwKTsNCiAgfQ0K fTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2g8X1RwKiwg X1RwKiwgX190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2Zp cnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgew0KICAgIHJldHVybiBfX2Nv cHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsNCiAgfQ0KfTsNCg0KdGVtcGxh dGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwg X190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBj b25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgew0KICAgIHJldHVybiBfX2NvcHlfdHJp dmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsNCiAgfQ0KfTsNCg0KdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KaW5saW5lIF9PdXRwdXRJdGVyIGNv cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9UcDsNCiAgdHlwZWRlZiB0eXBl bmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IN CiAgICAgICAgICBfVHJpdmlhbDsNCiAgcmV0dXJuIF9fY29weV9kaXNwYXRjaDxfSW5wdXRJdGVy LCBfT3V0cHV0SXRlciwgX1RyaXZpYWw+DQogICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQpOw0KfQ0KDQojIDIxMyAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxhbGdvYmFz ZS5oIiAzDQoNCg0KIA0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwg Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwgDQogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPg0K aW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFs SXRlcjEgX19maXJzdCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlKikNCnsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQ0KICAgICotLV9fcmVzdWx0ID0g Ki0tX19sYXN0Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+ DQppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopDQp7 DQogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19u KQ0KICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoN Cg0KDQogDQogDQogDQogDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAgICAgICAgIGNsYXNzIF9Cb29sVHlwZT4NCnN0 cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5IA0KICAg ICAgICAgIF9DYXQ7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVj dGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUNCiAgICAgICAgICBfRGlzdGFuY2U7DQoNCiAg c3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmly c3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl cjEgX19sYXN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIyIF9fcmVzdWx0KSB7DQogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsNCiAgfQ0KfTsNCg0K dGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1Rw KiwgX1RwKiwgX190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBf X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgew0KICAgIGNvbnN0IHB0 cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsNCiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0g X051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsNCiAgICByZXR1cm4gX19yZXN1bHQg LSBfTnVtOw0KICB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IF9fY29weV9i YWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4NCnsNCiAgc3Rh dGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAq IF9fcmVzdWx0KSB7DQogICAgcmV0dXJuICBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwg X1RwKiwgX190cnVlX3R5cGU+DQogICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCk7DQogIH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfQkkxLCBjbGFzcyBfQkkyPg0KaW5saW5l IF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVz dWx0KSB7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+DQogICAgICAgICAgICAgICAgICAgICAgICA6Omhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3INCiAgICAgICAgICBfVHJpdmlhbDsNCiAgcmV0 dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlhbD4NCiAgICAg ICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOw0KfQ0KDQojIDMwMyAi YzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxhbGdvYmFzZS5oIiAzDQoNCg0KIA0KIA0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVy Pg0KcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2Zp cnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsNCiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1f X2NvdW50KSB7DQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICAg ICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+ KF9fZmlyc3QsIF9fcmVzdWx0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNz IF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJ dGVyPg0KX19jb3B5X24oX1JBSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh Zykgew0KICBfUkFJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50Ow0KICByZXR1cm4gcGFp cjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBj bGFzcyBfT3V0cHV0SXRlcj4NCmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPg0K X19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBf X3Jlc3VsdCkgew0KICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQs DQogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsNCn0N Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0 SXRlcj4NCmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPg0KY29weV9uKF9JbnB1 dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsNCiAg cmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0KTsNCn0NCg0KIA0KIA0K DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCnZvaWQgZmlsbChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh bHVlKSB7DQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAqX19m aXJzdCA9IF9fdmFsdWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3Mg X1NpemUsIGNsYXNzIF9UcD4NCl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0 LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkgew0KICBmb3IgKCA7IF9fbiA+IDA7IC0t X19uLCArK19fZmlyc3QpDQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KICByZXR1cm4gX19maXJz dDsNCn0NCg0KIA0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1 dEl0ZXIyPg0KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIpIHsNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0Mikgew0KICAgICsrX19maXJzdDE7DQogICAgKytfX2Zp cnN0MjsNCiAgfQ0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmly c3QxLCBfX2ZpcnN0Mik7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg X0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpwYWlyPF9JbnB1dEl0ZXIxLCBf SW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f YmluYXJ5X3ByZWQpIHsNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlf cHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsNCiAgICArK19fZmlyc3QxOw0KICAgICsrX19m aXJzdDI7DQogIH0NCiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2Zp cnN0MSwgX19maXJzdDIpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz IF9JbnB1dEl0ZXIyPg0KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 Mikgew0KICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJz dDIpDQogICAgaWYgKCpfX2ZpcnN0MSAhPSAqX19maXJzdDIpDQogICAgICByZXR1cm4gZmFsc2U7 DQogIHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz IF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPg0KaW5saW5lIGJvb2wgZXF1YWwo X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk KSB7DQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0 MikNCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAg cmV0dXJuIGZhbHNlOw0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KIA0KIA0KIA0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPg0KYm9vbCBsZXhpY29ncmFwaGlj YWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIpIHsNCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy ICE9IF9fbGFzdDINCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7DQogICAgaWYg KCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIGlmICgqX19m aXJzdDIgPCAqX19maXJzdDEpDQogICAgICByZXR1cm4gZmFsc2U7DQogIH0NCiAgcmV0dXJuIF9f Zmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsNCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+DQpi b29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKSB7DQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBf X2ZpcnN0MiAhPSBfX2xhc3QyDQogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikgew0K ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgcmV0dXJuIHRydWU7 DQogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQogICAgICByZXR1cm4gZmFs c2U7DQogIH0NCiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s YXN0MjsNCn0NCg0KaW5saW5lIGJvb2wgDQpsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1 bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIqIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyKiBfX2ZpcnN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIqIF9fbGFzdDIpDQp7DQogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0g X19maXJzdDE7DQogIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7DQog IGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xl bjEsIF9fbGVuMikpOw0KICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9f bGVuMSA8IF9fbGVuMjsNCn0NCg0KaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUo Y29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciog X19sYXN0MikNCnsNCg0KICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNp Z25lZCBjaGFyKikgX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsNCg0KDQoNCg0KDQoN Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4NCmlu dCBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0Kew0KICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAgaWYgKCpfX2Zp cnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgIHJldHVybiAtMTsNCiAgICBpZiAoKl9fZmlyc3QyIDwg Kl9fZmlyc3QxKQ0KICAgICAgcmV0dXJuIDE7DQogICAgKytfX2ZpcnN0MTsNCiAgICArK19fZmly c3QyOw0KICB9DQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7DQogICAgcmV0dXJuICEoX19m aXJzdDEgPT0gX19sYXN0MSk7DQogIH0NCiAgZWxzZSB7DQogICAgcmV0dXJuIC0xOw0KICB9DQp9 DQoNCmlubGluZSBpbnQNCl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNp Z25lZCBjaGFyKiBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpDQp7DQogIGNvbnN0IHB0cmRpZmZf dCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7DQogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIg PSBfX2xhc3QyIC0gX19maXJzdDI7DQogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2Zp cnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOw0KICByZXR1cm4gX19yZXN1bHQg IT0gMCA/IF9fcmVzdWx0IA0KICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19s ZW4yID8gMCA6IChfX2xlbjEgPCBfX2xlbjIgPyAtMSA6IDEpKTsNCn0NCg0KaW5saW5lIGludCAN Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29u c3QgY2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikNCnsNCg0KICByZXR1cm4gX19sZXhp Y29ncmFwaGljYWxfY29tcGFyZV8zd2F5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOw0KDQoN Cg0KDQoNCg0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0 ZXIyPg0KaW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCnsNCiAgcmV0dXJu IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJz dDIsIF9fbGFzdDIpOw0KfQ0KDQogDQoNCg0KDQogDQogDQogDQojIDMwICJjOi9kb3MvcHViL2Rq Z3BwL2xhbmcvY3h4L3ZlY3RvciIgMiAzDQoNCiMgMSAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4 eC9zdGxfYWxsb2MuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCiANCiANCiANCiANCiANCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2luY2x1ZGUvYXNz ZXJ0LmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgew0K DQoNCnZvaWQJX19kal9hc3NlcnQoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKixpbnQpIF9fYXR0 cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOw0KDQoNCn0NCg0KDQoNCg0KDQojIDU2ICJjOi9kb3Mv cHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9hbGxvYy5oIiAyIDMNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQojIDc4ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9hbGxvYy5oIiAzDQoNCiMgODcg ImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2FsbG9jLmgiIDMNCg0KIyA5NyAiYzovZG9z L3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfYWxsb2MuaCIgMw0KDQojIDExNSAiYzovZG9zL3B1Yi9k amdwcC9sYW5nL2N4eC9zdGxfYWxsb2MuaCIgMw0KDQoNCiANCg0KDQoNCg0KDQoNCiANCg0KDQoN Cg0KDQogDQogDQoNCg0KDQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCmNsYXNz IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsNCg0KcHJpdmF0ZToNCg0KICBzdGF0aWMgdm9pZCog X1Nfb29tX21hbGxvYyhzaXplX3QpOw0KICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9p ZCosIHNpemVfdCk7DQoNCg0KICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFu ZGxlcikoKTsNCg0KDQpwdWJsaWM6DQoNCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBf X24pDQogIHsNCiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOw0KICAgIGlmICgwID09 IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsNCiAgICByZXR1cm4gX19y ZXN1bHQ7DQogIH0NCg0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90 ICApDQogIHsNCiAgICBmcmVlKF9fcCk7DQogIH0NCg0KICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0 ZSh2b2lkKiBfX3AsIHNpemVfdCAgLCBzaXplX3QgX19uZXdfc3opDQogIHsNCiAgICB2b2lkKiBf X3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7DQogICAgaWYgKDAgPT0gX19yZXN1bHQp IF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7DQogICAgcmV0dXJuIF9f cmVzdWx0Ow0KICB9DQoNCiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9p ZCAoKl9fZikoKSkpKCkNCiAgew0KICAgIHZvaWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxv Y19vb21faGFuZGxlcjsNCiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsNCiAg ICByZXR1cm4oX19vbGQpOw0KICB9DQoNCn07DQoNCiANCg0KDQp0ZW1wbGF0ZSA8aW50IF9faW5z dD4NCnZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxs b2Nfb29tX2hhbmRsZXIpKCkgPSAwOw0KDQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0Kdm9pZCoN Cl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9f bikNCnsNCiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAgdm9pZCogX19y ZXN1bHQ7DQoNCiAgICBmb3IgKDs7KSB7DQogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBf X21hbGxvY19hbGxvY19vb21faGFuZGxlcjsNCiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2Nf aGFuZGxlcikgeyBjZXJyIDw8ICJvdXQgb2YgbWVtb3J5IiA8PCBlbmRsOyBleGl0KDEpIDsgfQ0K ICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAgICAgIF9fcmVzdWx0ID0gbWFs bG9jKF9fbik7DQogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsNCiAgICB9 DQp9DQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQ0Kew0KICAg IHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsNCiAgICB2b2lkKiBfX3Jlc3VsdDsNCg0K ICAgIGZvciAoOzspIHsNCiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2Fs bG9jX29vbV9oYW5kbGVyOw0KICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7 IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9DQogICAgICAgICgq X19teV9tYWxsb2NfaGFuZGxlcikoKTsNCiAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwg X19uKTsNCiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOw0KICAgIH0NCn0N Cg0KdHlwZWRlZiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTwwPiBtYWxsb2NfYWxsb2M7DQoNCnRl bXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KY2xhc3Mgc2ltcGxlX2FsbG9jIHsNCg0K cHVibGljOg0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVfdCBfX24pDQogICAgICB7IHJl dHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2Yg KF9UcCkpOyB9DQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkNCiAgICAgIHsgcmV0dXJu IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0NCiAgICBzdGF0aWMgdm9p ZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQ0KICAgICAgeyBpZiAoMCAhPSBfX24p IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0NCiAgICBzdGF0 aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQ0KICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUo X19wLCBzaXplb2YgKF9UcCkpOyB9DQp9Ow0KDQogDQogDQogDQogDQogDQp0ZW1wbGF0ZSA8Y2xh c3MgX0FsbG9jPg0KY2xhc3MgZGVidWdfYWxsb2Mgew0KDQpwcml2YXRlOg0KDQogIGVudW0ge19T X2V4dHJhID0gOH07ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAg ICAgICAgICAgICAgDQoNCnB1YmxpYzoNCg0KICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90 IF9fbikNCiAgew0KICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUo X19uICsgX1NfZXh0cmEpOw0KICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsNCiAgICByZXR1 cm4gX19yZXN1bHQgKyBfU19leHRyYTsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo dm9pZCogX19wLCBzaXplX3QgX19uKQ0KICB7DQogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciop X19wIC0gX1NfZXh0cmE7DQogICAgKCh2b2lkKSgoICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24g KXx8KF9fZGpfYXNzZXJ0KCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwiYzovZG9zL3B1Yi9k amdwcC9sYW5nL2N4eC9zdGxfYWxsb2MuaCIsMjYzKSwwKSkpIDsNCiAgICBfQWxsb2M6OmRlYWxs b2NhdGUoX19yZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkKiBy ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opDQog IHsNCiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsNCiAgICAoKHZv aWQpKCggKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6ICl8fChfX2RqX2Fzc2VydCgiKihz aXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9z dGxfYWxsb2MuaCIsMjcwKSwwKSkpIDsNCiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKikNCiAg ICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyBfU19leHRyYSwgX19u ZXdfc3ogKyBfU19leHRyYSk7DQogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7DQog ICAgcmV0dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7DQogIH0NCg0KfTsNCg0KDQoNCg0KDQoNCg0K DQoNCg0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KIA0KDQogDQogDQog DQogDQogDQogDQogDQogDQogDQoNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxib29sIHRocmVhZHMs IGludCBpbnN0Pg0KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsNCg0KcHJpdmF0ZToN CiAgIA0KICAgDQoNCiAgICBlbnVtIHtfQUxJR04gPSA4fTsNCiAgICBlbnVtIHtfTUFYX0JZVEVT ID0gMTI4fTsNCiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMvX0FMSUdOfTsNCg0K ICBzdGF0aWMgc2l6ZV90DQogIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQ0KICAgIHsgcmV0 dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpICYgfihfQUxJR04gLSAxKSk7IH0NCg0KcHJpdmF0 ZSA6DQogIHVuaW9uIF9PYmogew0KICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGlu azsNCiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsgICAgIA0KICB9Ow0KcHJpdmF0ZToN Cg0KDQoNCg0KICAgIHN0YXRpYyBfT2JqKiAgIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107DQoN CiAgc3RhdGljICBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpIHsNCiAg ICAgICAgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOw0KICB9DQoN CiAgIA0KICBzdGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOw0KICAgDQogICANCiAg c3RhdGljIGNoYXIqIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7 DQoNCiAgIA0KICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsNCiAgc3RhdGljIGNoYXIqIF9T X2VuZF9mcmVlOw0KICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCiMgMzg5ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9hbGxv Yy5oIiAzDQoNCg0KICAgIGNsYXNzIF9Mb2NrIHsNCiAgICAgICAgcHVibGljOg0KICAgICAgICAg ICAgX0xvY2soKSB7ICA7IH0NCiAgICAgICAgICAgIH5fTG9jaygpIHsgIDsgfQ0KICAgIH07DQog ICAgZnJpZW5kIGNsYXNzIF9Mb2NrOw0KDQpwdWJsaWM6DQoNCiAgIA0KICBzdGF0aWMgdm9pZCog YWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgew0KICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0Ow0K ICAgIF9PYmoqICAgX19yZXN1bHQ7DQoNCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRF Uykgew0KICAgICAgICByZXR1cm4obWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX24pKTsNCiAgICB9 DQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChf X24pOw0KICAgICANCiAgICAgDQogICAgIA0KDQoNCg0KDQogICAgX19yZXN1bHQgPSAqX19teV9m cmVlX2xpc3Q7DQogICAgaWYgKF9fcmVzdWx0ID09IDApIHsNCiAgICAgICAgdm9pZCogX19yID0g X1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOw0KICAgICAgICByZXR1cm4gX19yOw0KICAgIH0N CiAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAg ICByZXR1cm4gKF9fcmVzdWx0KTsNCiAgfTsNCg0KICAgDQogIHN0YXRpYyB2b2lkIGRlYWxsb2Nh dGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0KICB7DQogICAgX09iaiogX19xID0gKF9PYmoqKV9f cDsNCiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlzdDsNCg0KICAgIGlmIChfX24gPiAoc2l6ZV90 KSBfTUFYX0JZVEVTKSB7DQogICAgICAgIG1hbGxvY19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9f bik7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOw0KICAgICANCg0KDQoNCg0KICAgIF9fcSAt PiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAqX19teV9mcmVlX2xp c3QgPSBfX3E7DQogICAgIA0KICB9DQoNCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCog X19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7DQoNCn0gOw0KDQp0eXBlZGVm IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTwgZmFsc2UgLCAwPiBhbGxvYzsNCnR5cGVkZWYgX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOw0KDQoN Cg0KIA0KIA0KIA0KIA0KdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KY2hh cioNCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5r X2FsbG9jKHNpemVfdCBfX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpDQp7DQogICAgY2hhciogX19y ZXN1bHQ7DQogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOw0KICAg IHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7DQoNCiAg ICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsNCiAgICAgICAgX19yZXN1bHQg PSBfU19zdGFydF9mcmVlOw0KICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7 DQogICAgICAgIHJldHVybihfX3Jlc3VsdCk7DQogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQg Pj0gX19zaXplKSB7DQogICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXpl KTsNCiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7DQogICAgICAgIF9f cmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsNCiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFs X2J5dGVzOw0KICAgICAgICByZXR1cm4oX19yZXN1bHQpOw0KICAgIH0gZWxzZSB7DQogICAgICAg IHNpemVfdCBfX2J5dGVzX3RvX2dldCA9DQoJICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5k X3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsNCiAgICAgICAgIA0KICAgICAgICBpZiAoX19ieXRlc19s ZWZ0ID4gMCkgew0KICAgICAgICAgICAgX09iaiogICogX19teV9mcmVlX2xpc3QgPQ0KICAgICAg ICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRl c19sZWZ0KTsNCg0KICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVl X2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAgICAgICAgICpfX215X2ZyZWVfbGlz dCA9IChfT2JqKilfU19zdGFydF9mcmVlOw0KICAgICAgICB9DQogICAgICAgIF9TX3N0YXJ0X2Zy ZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsNCiAgICAgICAgaWYgKDAgPT0gX1Nf c3RhcnRfZnJlZSkgew0KICAgICAgICAgICAgc2l6ZV90IF9faTsNCiAgICAgICAgICAgIF9PYmoq ICAqIF9fbXlfZnJlZV9saXN0Ow0KCSAgICBfT2JqKiBfX3A7DQogICAgICAgICAgICAgDQogICAg ICAgICAgICAgDQogICAgICAgICAgICAgDQogICAgICAgICAgICBmb3IgKF9faSA9IF9fc2l6ZTsg X19pIDw9IF9NQVhfQllURVM7IF9faSArPSBfQUxJR04pIHsNCiAgICAgICAgICAgICAgICBfX215 X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7DQogICAg ICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0Ow0KICAgICAgICAgICAgICAgIGlmICgw ICE9IF9fcCkgew0KICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4g X01fZnJlZV9saXN0X2xpbms7DQogICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAo Y2hhciopX19wOw0KICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2Zy ZWUgKyBfX2k7DQogICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3Np emUsIF9fbm9ianMpKTsNCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAg ICAgDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KCSAgICBfU19lbmRfZnJlZSA9 IDA7CSANCiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjph bGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7DQogICAgICAgICAgICAgDQogICAgICAgICAgICAgDQog ICAgICAgICAgICAgDQogICAgICAgIH0NCiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNf dG9fZ2V0Ow0KICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3Rv X2dldDsNCiAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOw0K ICAgIH0NCn0NCg0KDQogDQogDQogDQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu c3Q+DQp2b2lkKg0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6 X1NfcmVmaWxsKHNpemVfdCBfX24pDQp7DQogICAgaW50IF9fbm9ianMgPSAyMDsNCiAgICBjaGFy KiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsNCiAgICBfT2JqKiAgKiBf X215X2ZyZWVfbGlzdDsNCiAgICBfT2JqKiBfX3Jlc3VsdDsNCiAgICBfT2JqKiBfX2N1cnJlbnRf b2JqOw0KICAgIF9PYmoqIF9fbmV4dF9vYmo7DQogICAgaW50IF9faTsNCg0KICAgIGlmICgxID09 IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsNCiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVf bGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7DQoNCiAgICAgDQogICAgICBfX3Jlc3VsdCA9 IChfT2JqKilfX2NodW5rOw0KICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChf T2JqKikoX19jaHVuayArIF9fbik7DQogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsNCiAg ICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7DQogICAgICAgIF9fbmV4dF9vYmogPSAo X09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsNCiAgICAgICAgaWYgKF9fbm9ianMgLSAx ID09IF9faSkgew0KICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGlu ayA9IDA7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAg IF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOw0KICAgICAg ICB9DQogICAgICB9DQogICAgcmV0dXJuKF9fcmVzdWx0KTsNCn0NCg0KdGVtcGxhdGUgPGJvb2wg dGhyZWFkcywgaW50IGluc3Q+DQp2b2lkKg0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVh ZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6 KQ0Kew0KICAgIHZvaWQqIF9fcmVzdWx0Ow0KICAgIHNpemVfdCBfX2NvcHlfc3o7DQoNCiAgICBp ZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4gKHNpemVfdCkg X01BWF9CWVRFUykgew0KICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7DQog ICAgfQ0KICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdf c3opKSByZXR1cm4oX19wKTsNCiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6KTsNCiAg ICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6Ow0K ICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOw0KICAgIGRlYWxsb2NhdGUoX19w LCBfX29sZF9zeik7DQogICAgcmV0dXJuKF9fcmVzdWx0KTsNCn0NCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCiMgNjAyICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9hbGxvYy5o IiAzDQoNCg0KIyA2ODkgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2FsbG9jLmgiIDMN Cg0KDQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpjaGFyKiBfX2RlZmF1 bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsN Cg0KdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KY2hhciogX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOw0KDQp0 ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpzaXplX3QgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsNCg0KdGVt cGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogIA0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsNCiAgICBfTkZSRUVMSVNUUw0KXSA9 IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCB9Ow0KIA0K IA0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQogDQogDQogDQogDQogDQogDQoNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPg0KY2xhc3MgYWxsb2NhdG9yIHsNCiAgdHlwZWRlZiBhbGxvYyBfQWxs b2M7ICAgICAgICAgICANCnB1YmxpYzoNCiAgdHlwZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsN CiAgdHlwZWRlZiBwdHJkaWZmX3QgIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqICAg ICAgIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOw0KICB0eXBl ZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVm ZXJlbmNlOw0KICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8 Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7DQogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4g b3RoZXI7DQogIH07DQoNCiAgYWxsb2NhdG9yKCkgdGhyb3coKSAge30NCiAgYWxsb2NhdG9yKGNv bnN0IGFsbG9jYXRvciYpIHRocm93KCkgIHt9DQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxv Y2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSAge30NCiAgfmFsbG9jYXRvcigp IHRocm93KCkgIHt9DQoNCiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsg cmV0dXJuICZfX3g7IH0NCiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBf X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0NCg0KICAgDQogICANCiAgX1RwKiBhbGxvY2F0ZShz aXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsNCiAgICByZXR1cm4gX19uICE9IDAgPyBz dGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkNCiAg ICAgICAgICAgICAgICAgICAgOiAwOw0KICB9DQoNCiAgIA0KICB2b2lkIGRlYWxsb2NhdGUocG9p bnRlciBfX3AsIHNpemVfdHlwZSBfX24pDQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBf X24gKiBzaXplb2YoX1RwKSk7IH0NCg0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJv dygpIA0KICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0KDQogIHZvaWQg Y29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChf X3ZhbCk7IH0NCiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9DQp9 Ow0KDQp0ZW1wbGF0ZTw+DQpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gew0KICB0eXBlZGVmIHNpemVf dCAgICAgIHNpemVfdHlwZTsNCiAgdHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7 DQogIHR5cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCB2b2lkKiBj b25zdF9wb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVlX3R5cGU7DQoNCiAgdGVt cGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgew0KICAgIHR5cGVkZWYgYWxsb2NhdG9y PF9UcDE+IG90aGVyOw0KICB9Ow0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf VDI+DQppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3Qg YWxsb2NhdG9yPF9UMj4mKQ0Kew0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8 X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikNCnsNCiAgcmV0dXJuIGZhbHNlOw0KfQ0KDQog DQogDQogDQogDQogDQogDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnN0 cnVjdCBfX2FsbG9jYXRvciB7DQogIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7DQoNCiAgdHlw ZWRlZiBzaXplX3QgICAgc2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl X3R5cGU7DQogIHR5cGVkZWYgX1RwKiAgICAgICBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9U cCogY29uc3RfcG9pbnRlcjsNCiAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsNCiAgdHlw ZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBfVHAgICAgICAgIHZh bHVlX3R5cGU7DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgew0KICAg IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsNCiAgfTsNCg0KICBfX2Fs bG9jYXRvcigpIHRocm93KCkgIHt9DQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBf X2EpIHRocm93KCkgDQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19h bGxvYykge30NCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+DQogIF9fYWxsb2NhdG9yKGNvbnN0IF9f YWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKSANCiAgICA6IF9fdW5kZXJseWlu Z19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQ0KICB+X19hbGxvY2F0b3IoKSB0aHJv dygpICB7fQ0KDQogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy biAmX194OyB9DQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBj b25zdCB7IHJldHVybiAmX194OyB9DQoNCiAgIA0KICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBf X24sIGNvbnN0IHZvaWQqID0gMCkgew0KICAgIHJldHVybiBfX24gIT0gMA0KICAgICAgICA/IHN0 YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2Yo X1RwKSkpDQogICAgICAgIDogMDsNCiAgfQ0KDQogICANCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50 ZXIgX19wLCBzaXplX3R5cGUgX19uKQ0KICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2Nh dGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0NCg0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBj b25zdCB0aHJvdygpIA0KICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0K DQogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhf X3ApIF9UcChfX3ZhbCk7IH0NCiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9U cCgpOyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPg0KY2xhc3MgX19hbGxvY2F0b3I8 dm9pZCwgX0FsbG9jPiB7DQogIHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6ZV90eXBlOw0KICB0eXBl ZGVmIHB0cmRpZmZfdCAgIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2b2lkKiAgICAgICBw b2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7DQogIHR5cGVkZWYg dm9pZCAgICAgICAgdmFsdWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0 IHJlYmluZCB7DQogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOw0K ICB9Ow0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KaW5saW5lIGJv b2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsDQogICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikN CnsNCiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5n X2FsbG9jOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGlu ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLA0K ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9f YTIpDQp7DQogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJs eWluZ19hbGxvYzsNCn0NCg0KDQogDQogDQogDQoNCnRlbXBsYXRlIDxpbnQgaW5zdD4NCmlubGlu ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLA0K ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0 PiYpDQp7DQogIHJldHVybiB0cnVlOw0KfQ0KDQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0KaW5s aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8 X19pbnN0PiYpDQp7DQogIHJldHVybiBmYWxzZTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxib29sIF9f dGhyZWFkcywgaW50IF9faW5zdD4NCmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsDQogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4m KQ0Kew0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGlu dCBfX2luc3Q+DQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikNCnsNCiAgcmV0 dXJuIGZhbHNlOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29s IG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsDQogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7DQogIHJldHVybiB0cnVlOw0KfQ0K DQoNCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+DQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0 IGRlYnVnX2FsbG9jPF9BbGxvYz4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1 Z19hbGxvYzxfQWxsb2M+Jikgew0KICByZXR1cm4gZmFsc2U7DQp9DQoNCg0KIA0KIA0KIA0KIA0K IA0KIA0KDQogDQogDQogDQogDQogDQogDQoNCiANCiANCiANCiANCiANCiANCiANCiANCiANCiAN CiANCg0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPg0Kc3RydWN0 IF9BbGxvY190cmFpdHMNCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g ZmFsc2U7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6ICAgcmViaW5kPF9UcD46Om90 aGVyDQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2NhdG9yPg0KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9j YXRvcj46Ol9TX2luc3RhbmNlbGVzczsNCg0KIA0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfVHAxPg0Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPg0Kew0K ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIHNp bXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBhbGxvY2F0b3I8 X1RwPiBhbGxvY2F0b3JfdHlwZTsNCn07DQoNCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50 IF9faW5zdD4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8X19pbnN0PiA+DQp7DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy dWU7DQogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8 X19pbnN0PiA+IF9BbGxvY190eXBlOw0KICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxs b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxs b2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0 PiA+DQp7DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7DQogIHR5 cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0PiA+DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0 b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4NCiAg ICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FsbG9jPg0Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlw ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7 DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2Nh dG9yX3R5cGU7DQp9Ow0KDQogDQogDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs IGludCBfX2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsDQogICAgICAgICAgICAgICAg ICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g Pg0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBl ZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBf QWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxsb2Nf dHJhaXRzPF9UcCwNCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf X3RociwgX19pbnN0PiA+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz ID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHIsX19pbnN0PiA+DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYg X19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+ DQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19h bGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4NCnsNCiAgc3RhdGljIGNvbnN0 IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1Rw LCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0 b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCg0K DQoNCg0KDQoNCiANCg0KDQoNCg0KDQogDQogDQogDQojIDMxICJjOi9kb3MvcHViL2RqZ3BwL2xh bmcvY3h4L3ZlY3RvciIgMiAzDQoNCiMgMSAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxf Y29uc3RydWN0LmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQogDQogDQoNCnRlbXBsYXRlIDxj bGFzcyBfVHA+DQppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7DQogIF9fcG9p bnRlci0+fl9UcCgpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxp bmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgew0KICBuZXcg KF9fcCkgX1QxKF9fdmFsdWUpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPg0KaW5saW5lIHZv aWQgY29uc3RydWN0KF9UMSogX19wKSB7DQogIG5ldyAoX19wKSBfVDEoKTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9pZA0KX19kZXN0cm95X2F1eChf Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNl X3R5cGUpDQp7DQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICBk ZXN0cm95KCYqX19maXJzdCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y Pg0KaW5saW5lIHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0 ZXJhdG9yLCBfX3RydWVfdHlwZSkge30NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0 b3IsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lkDQpfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikNCnsNCiAgdHlwZWRlZiB0eXBl bmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3INCiAgICAgICAg ICBfVHJpdmlhbF9kZXN0cnVjdG9yOw0KICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwg X1RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cmF0b3I+DQppbmxpbmUgdm9pZCBkZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv cndhcmRJdGVyYXRvciBfX2xhc3QpIHsNCiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192 YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsNCn0NCg0KaW5saW5lIHZvaWQgZGVzdHJveShjaGFyKiwg Y2hhciopIHt9DQppbmxpbmUgdm9pZCBkZXN0cm95KHdjaGFyX3QqLCB3Y2hhcl90Kikge30NCg0K IA0KDQoNCg0KIA0KIA0KIA0KIyAzMiAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC92ZWN0b3Ii IDIgMw0KDQojIDEgImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX3VuaW5pdGlhbGl6ZWQu aCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCiANCg0KDQoNCg0KDQoNCiANCg0KIA0KDQogDQogDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPg0KaW5saW5lIF9Gb3J3YXJkSXRlciANCl9fdW5pbml0 aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkNCnsNCiAgcmV0dXJuIGNvcHkoX19maXJzdCwg X19sYXN0LCBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz cyBfRm9yd2FyZEl0ZXI+DQpfRm9yd2FyZEl0ZXIgDQpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgo X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAg X19mYWxzZV90eXBlKQ0Kew0KICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsNCiAgdHJ5 ICB7DQogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQ0K ICAgICAgY29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsNCiAgICByZXR1cm4gX19jdXI7DQog IH0NCiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX2N1cikgOyB0aHJvdzsgfSA7 DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX1RwPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHkoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX1RwKikNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5 cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7DQogIHJldHVybiBfX3VuaW5pdGlh bGl6ZWRfY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsNCn0N Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlubGlu ZSBfRm9yd2FyZEl0ZXINCiAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y ZXN1bHQpDQp7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBf X3Jlc3VsdCApICk7DQp9DQoNCmlubGluZSBjaGFyKiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qg Y2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyKiBfX3Jlc3VsdCkgew0KICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0 LCBfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmly c3QpOw0KfQ0KDQppbmxpbmUgd2NoYXJfdCogDQp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2No YXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LA0KICAgICAgICAgICAgICAgICAg IHdjaGFyX3QqIF9fcmVzdWx0KQ0Kew0KICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXpl b2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOw0KICByZXR1cm4gX19yZXN1bHQgKyAo X19sYXN0IC0gX19maXJzdCk7DQp9DQoNCiANCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQpwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3 YXJkSXRlcj4NCl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6 ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQs DQogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgX0Zvcndh cmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7DQogIHRyeSAgew0KICAgIGZvciAoIDsgX19jb3VudCA+ IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikgDQogICAgICBjb25zdHJ1Y3QoJipf X2N1ciwgKl9fZmlyc3QpOw0KICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRl cj4oX19maXJzdCwgX19jdXIpOw0KICB9DQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3Vs dCwgX19jdXIpIDsgdGhyb3c7IH0gOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxpbmUgcGFpcjxfUmFu ZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPg0KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9f Zmlyc3QgKyBfX2NvdW50Ow0KICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0Zvcndh cmRJdGVyPigNCiAgICAgICAgICAgICAgICAgX19sYXN0LA0KICAgICAgICAgICAgICAgICB1bmlu aXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlu bGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4NCl9fdW5pbml0aWFsaXplZF9jb3B5 X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29w eV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsNCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxp bmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+DQp1bmluaXRpYWxpemVkX2NvcHlfbihf SW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsDQogICAgICAgICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIgX19yZXN1bHQpIHsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24o X19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOw0KfQ0KDQogDQogDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZA0KX191bmluaXRp YWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LCANCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUp DQp7DQogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQp2b2lkDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIA0KICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpDQp7DQogIF9Gb3J3YXJk SXRlciBfX2N1ciA9IF9fZmlyc3Q7DQogIHRyeSAgew0KICAgIGZvciAoIDsgX19jdXIgIT0gX19s YXN0OyArK19fY3VyKQ0KICAgICAgY29uc3RydWN0KCYqX19jdXIsIF9feCk7DQogIH0NCiAgY2F0 Y2goLi4uKSB7ICBkZXN0cm95KF9fZmlyc3QsIF9fY3VyKSA7IHRocm93OyB9IDsNCn0NCg0KdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPg0KaW5saW5l IHZvaWQgX191bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw JiBfX3gsIF9UcDEqKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46 OmlzX1BPRF90eXBlIF9Jc19QT0Q7DQogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0 LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsNCiAgICAgICAgICAgICAgICAgICANCn0NCg0KdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KaW5saW5lIHZvaWQgdW5pbml0 aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9UcCYgX194KQ0Kew0KICBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfX2ZpcnN0 LCBfX2xhc3QsIF9feCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsNCn0NCg0KIA0KIA0KdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4NCmlubGlu ZSBfRm9yd2FyZEl0ZXINCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfU2l6ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm IF9feCwgX190cnVlX3R5cGUpDQp7DQogIHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBfX3gp Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3Mg X1RwPg0KX0ZvcndhcmRJdGVyDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX1NpemUgX19uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkNCnsNCiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJz dDsNCiAgdHJ5ICB7DQogICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikNCiAgICAg IGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOw0KICAgIHJldHVybiBfX2N1cjsNCiAgfQ0KICBjYXRj aCguLi4pIHsgIGRlc3Ryb3koX19maXJzdCwgX19jdXIpIDsgdGhyb3c7IH0gOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBjbGFzcyBf VHAxPg0KaW5saW5lIF9Gb3J3YXJkSXRlciANCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQ0Kew0KICB0 eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7 DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwg X0lzX1BPRCgpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Np emUsIGNsYXNzIF9UcD4NCmlubGluZSBfRm9yd2FyZEl0ZXIgDQp1bmluaXRpYWxpemVkX2ZpbGxf bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkNCnsNCiAg cmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX24oX19maXJzdCwgX19uLCBfX3gsIF9fdmFsdWVf dHlwZSggX19maXJzdCApICk7DQp9DQoNCiANCiANCg0KIA0KIA0KIA0KIA0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+ DQppbmxpbmUgX0ZvcndhcmRJdGVyDQpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQ0Kew0KICBfRm9yd2FyZEl0 ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0 KTsNCiAgdHJ5ICB7DQogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19s YXN0MiwgX19taWQpOw0KICB9DQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19t aWQpIDsgdGhyb3c7IH0gOw0KfQ0KDQogDQogDQogDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9JbnB1dEl0ZXI+DQppbmxpbmUgX0ZvcndhcmRJdGVyIA0K X191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJk SXRlciBfX21pZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsDQog ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QpDQp7DQogIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7DQog IHRyeSAgew0KICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBf X21pZCk7DQogIH0NCiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX21pZCkgOyB0 aHJvdzsgfSA7DQp9DQoNCiANCiANCiANCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lkDQpfX3VuaW5pdGlhbGl6ZWRf Y29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIg X19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpDQp7DQog IF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFz dDEsIF9fZmlyc3QyKTsNCiAgdHJ5ICB7DQogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwg X19sYXN0MiwgX194KTsNCiAgfQ0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19maXJzdDIsIF9f bWlkMikgOyB0aHJvdzsgfSA7DQp9DQoNCiANCg0KDQoNCiANCiANCiANCiMgMzMgImM6L2Rvcy9w dWIvZGpncHAvbGFuZy9jeHgvdmVjdG9yIiAyIDMNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xh bmcvY3h4L3N0bF92ZWN0b3IuaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCiAgDQoNCg0KDQoNCg0KDQogDQog DQogDQogDQogDQoNCg0KDQogDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y LCBib29sIF9Jc1N0YXRpYz4NCmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZSB7DQpwdWJsaWM6DQog IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0 b3JfdHlwZQ0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRf YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0NCg0KICBfVmVj dG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkNCiAgICA6IF9NX2RhdGFf YWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9y YWdlKDApIA0KICB7fQ0KICANCnByb3RlY3RlZDoNCiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9h bGxvY2F0b3I7DQogIF9UcCogX01fc3RhcnQ7DQogIF9UcCogX01fZmluaXNoOw0KICBfVHAqIF9N X2VuZF9vZl9zdG9yYWdlOw0KDQogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgICB7 IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9DQogIHZvaWQgX01fZGVh bGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikNCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxs b2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9DQp9Ow0KDQogDQogDQp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPg0KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwg X0FsbG9jYXRvciwgdHJ1ZT4gew0KcHVibGljOg0KICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190 cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUNCiAgICAgICAgICBhbGxvY2F0 b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu IGFsbG9jYXRvcl90eXBlKCk7IH0NCg0KICBfVmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2Nh dG9yX3R5cGUmKQ0KICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0 b3JhZ2UoMCkgDQogIHt9DQogIA0KcHJvdGVjdGVkOg0KICBfVHAqIF9NX3N0YXJ0Ow0KICBfVHAq IF9NX2ZpbmlzaDsNCiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KICB0eXBlZGVmIHR5cGVu YW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUgX0FsbG9jX3R5 cGU7DQogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgICB7IHJldHVybiBfQWxsb2Nf dHlwZTo6YWxsb2NhdGUoX19uKTsgfQ0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNp emVfdCBfX24pDQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQ0KfTsN Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0Kc3RydWN0IF9WZWN0b3JfYmFz ZQ0KICA6IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFu Y2VsZXNzPg0Kew0KICB0eXBlZGVmIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+Ojpf U19pbnN0YW5jZWxlc3M+DQogICAgICAgICAgX0Jhc2U7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0Jh c2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOw0KDQogIF9WZWN0b3JfYmFzZShjb25z dCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30NCiAgX1ZlY3Rvcl9iYXNlKHNp emVfdCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7DQogICAg X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOw0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0Ow0K ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247DQogIH0NCg0KICB+X1ZlY3Rv cl9iYXNlKCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N X3N0YXJ0KTsgfQ0KfTsgICAgDQoNCiMgMTUwICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0 bF92ZWN0b3IuaCIgMw0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFs bG9jYXRvcjwgX1RwID4gID4NCmNsYXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8 X1RwLCBfQWxsb2M+IA0Kew0KcHJpdmF0ZToNCiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBf QWxsb2M+IF9CYXNlOw0KcHVibGljOg0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBl ZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29u c3RfcG9pbnRlcjsNCiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBpdGVyYXRvcjsNCiAgdHlwZWRlZiBj b25zdCB2YWx1ZV90eXBlKiBjb25zdF9pdGVyYXRvcjsNCiAgdHlwZWRlZiB2YWx1ZV90eXBlJiBy ZWZlcmVuY2U7DQogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOw0K ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu Y2VfdHlwZTsNCg0KICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxv Y2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0 dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0NCg0KDQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVy YXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsNCiAgdHlwZWRlZiBy ZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOw0KDQoNCg0KDQoNCg0K DQpwcm90ZWN0ZWQ6DQoNCiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlOw0KICB1c2luZyBfQmFz ZTo6X01fZGVhbGxvY2F0ZTsNCiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0Ow0KICB1c2luZyBfQmFz ZTo6X01fZmluaXNoOw0KICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7DQoNCg0KcHJv dGVjdGVkOg0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3Qg X1RwJiBfX3gpOw0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7DQoN CnB1YmxpYzoNCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQ0KICBjb25z dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9DQogIGl0ZXJhdG9y IGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQ0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z dCB7IHJldHVybiBfTV9maW5pc2g7IH0NCg0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpDQog ICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0NCiAgY29uc3RfcmV2ZXJzZV9p dGVyYXRvciByYmVnaW4oKSBjb25zdA0KICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0 b3IoZW5kKCkpOyB9DQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpDQogICAgeyByZXR1cm4gcmV2 ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQ0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQo KSBjb25zdA0KICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0N Cg0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0DQogICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgp IC0gYmVnaW4oKSk7IH0NCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QNCiAgICB7IHJldHVy biBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0NCiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkg Y29uc3QNCiAgICB7IHJldHVybiBzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBiZWdpbigp KTsgfQ0KICBib29sIGVtcHR5KCkgY29uc3QNCiAgICB7IHJldHVybiBiZWdpbigpID09IGVuZCgp OyB9DQoNCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgeyByZXR1cm4gKihi ZWdpbigpICsgX19uKTsgfQ0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUg X19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9DQoNCiAgZXhwbGljaXQgdmVj dG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIDog X0Jhc2UoX19hKSB7fQ0KDQogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFs dWUsDQogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo KSkgDQogICAgOiBfQmFzZShfX24sIF9fYSkNCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6 ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOyB9DQoNCiAgZXhwbGljaXQgdmVjdG9y KHNpemVfdHlwZSBfX24pDQogICAgOiBfQmFzZShfX24sIGFsbG9jYXRvcl90eXBlKCkpDQogICAg eyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfVHAoKSk7 IH0NCg0KICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KSANCiAgICA6IF9C YXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpDQogICAgeyBfTV9maW5pc2ggPSB1 bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9DQoN Cg0KICAgDQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdmVjdG9yKF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgIGNvbnN0 IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKSA6IF9CYXNlKF9fYSkgew0K ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdy YWwgX0ludGVncmFsOw0KICAgIF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0lu dGVncmFsKCkpOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPg0KICB2b2lkIF9N X2luaXRpYWxpemVfYXV4KF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1ZSwgX190cnVlX3R5 cGUpIHsNCiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7DQogICAgX01fZW5kX29mX3N0 b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsgDQogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9m aWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg IF9fZmFsc2VfdHlwZSkgew0KICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0 LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsNCiAgfQ0KDQoNCg0KDQoNCg0KDQoN CiAgfnZlY3RvcigpIHsgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsgfQ0KDQogIHZlY3Rv cjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gp Ow0KICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgew0KICAgIGlmIChjYXBhY2l0eSgpIDwg X19uKSB7DQogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsNCiAgICAg IGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01f ZmluaXNoKTsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQogICAgICBfTV9k ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAg IF9NX3N0YXJ0ID0gX190bXA7DQogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7 DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOw0KICAgIH0NCiAgfQ0K DQogICANCiAgIA0KICAgDQogICANCg0KICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25z dCBfVHAmIF9fdmFsKTsNCg0KDQogIA0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+ DQogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCkgew0KICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+ OjpfSW50ZWdyYWwgX0ludGVncmFsOw0KICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBf X2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4N CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwg X190cnVlX3R5cGUpDQogICAgeyBhc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7 IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4NCiAgdm9pZCBfTV9hc3NpZ25fZGlz cGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBl KQ0KICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdv cnkoIF9fZmlyc3QgKSApOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K ICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0K ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4 KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAg ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7IA0KDQoNCg0KICByZWZlcmVu Y2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQ0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQo KSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQ0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJu ICooZW5kKCkgLSAxKTsgfQ0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJu ICooZW5kKCkgLSAxKTsgfQ0KDQogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7DQog ICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgew0KICAgICAgY29uc3RydWN0 KF9NX2ZpbmlzaCwgX194KTsNCiAgICAgICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQog ICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOw0KICB9DQogIHZvaWQgcHVzaF9iYWNrKCkg ew0KICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsNCiAgICAgIGNvbnN0 cnVjdChfTV9maW5pc2gpOw0KICAgICAgKytfTV9maW5pc2g7DQogICAgfQ0KICAgIGVsc2UNCiAg ICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOw0KICB9DQogIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBf QWxsb2M+JiBfX3gpIHsNCiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOw0KICAg ICA6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsNCiAgICAgOjpzd2FwKF9NX2VuZF9v Zl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOw0KICB9DQoNCiAgaXRlcmF0b3IgaW5z ZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7DQogICAgc2l6ZV90eXBl IF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOw0KICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5k X29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgew0KICAgICAgY29uc3RydWN0KF9N X2ZpbmlzaCwgX194KTsNCiAgICAgICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQogICAg ICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7DQogICAgcmV0dXJuIGJlZ2luKCkgKyBf X247DQogIH0NCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsNCiAgICBz aXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7DQogICAgaWYgKF9NX2ZpbmlzaCAh PSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7DQogICAgICBjb25z dHJ1Y3QoX01fZmluaXNoKTsNCiAgICAgICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQog ICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24pOw0KICAgIHJldHVybiBiZWdpbigpICsgX19u Ow0KICB9DQoNCiAgIA0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQg aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy YXRvciBfX2xhc3QpIHsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0 ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsNCiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19w b3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNs YXNzIF9JbnRlZ2VyPg0KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bvcywg X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg X190cnVlX3R5cGUpIHsNCiAgICBpbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkg X192YWwpOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lk IF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAgICBfTV9yYW5nZV9pbnNl cnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCAp ICk7DQogIH0NCg0KDQoNCg0KDQogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90 eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOw0KDQogIHZvaWQgcG9wX2JhY2soKSB7DQogICAgLS1f TV9maW5pc2g7DQogICAgZGVzdHJveShfTV9maW5pc2gpOw0KICB9DQogIGl0ZXJhdG9yIGVyYXNl KGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsNCiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkp DQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBfTV9maW5pc2gsIF9fcG9zaXRpb24pOw0KICAg IC0tX01fZmluaXNoOw0KICAgIGRlc3Ryb3koX01fZmluaXNoKTsNCiAgICByZXR1cm4gX19wb3Np dGlvbjsNCiAgfQ0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf X2xhc3QpIHsNCiAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9fbGFzdCwgX01fZmluaXNoLCBfX2Zp cnN0KTsNCiAgICBkZXN0cm95KF9faSwgX01fZmluaXNoKTsNCiAgICBfTV9maW5pc2ggPSBfTV9m aW5pc2ggLSAoX19sYXN0IC0gX19maXJzdCk7DQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIH0NCg0K ICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsNCiAg ICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkgDQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdf c2l6ZSwgZW5kKCkpOw0KICAgIGVsc2UNCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAt IHNpemUoKSwgX194KTsNCiAgfQ0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkg eyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9DQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJl Z2luKCksIGVuZCgpKTsgfQ0KDQpwcm90ZWN0ZWQ6DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyYXRvcj4NCiAgaXRlcmF0b3IgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBl IF9fbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCANCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpDQp7DQogICAg aXRlcmF0b3IgX19yZXN1bHQgPSBfTV9hbGxvY2F0ZShfX24pOw0KICAgIHRyeSAgew0KICAgICAg dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOw0KICAgICAgcmV0 dXJuIF9fcmVzdWx0Ow0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgIF9NX2RlYWxsb2NhdGUoX19y ZXN1bHQsIF9fbikgOyB0aHJvdzsgfSA7DQogIH0NCiMgNDQwICJjOi9kb3MvcHViL2RqZ3BwL2xh bmcvY3h4L3N0bF92ZWN0b3IuaCIgMw0KDQoNCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4NCiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwg aW5wdXRfaXRlcmF0b3JfdGFnKQ0KICB7DQogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQ0KICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsNCiAgfQ0KDQogICANCiAgdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6 ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpDQogIHsNCiAgICBz aXplX3R5cGUgX19uID0gMDsNCiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7DQog ICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g X01fc3RhcnQgKyBfX247DQogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly c3QsIF9fbGFzdCwgX01fc3RhcnQpOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPg0KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywNCiAgICAgICAg ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOw0KDQogIHRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0KICB2b2lkIF9NX3JhbmdlX2luc2VydChp dGVyYXRvciBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg Zm9yd2FyZF9pdGVyYXRvcl90YWcpOw0KDQoNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4NCmlubGluZSBib29sIA0Kb3BlcmF0b3I9PShjb25zdCB2ZWN0b3I8X1RwLCBf QWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkNCnsNCiAgcmV0dXJu IF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJg0KICAgICAgICAgZXF1YWwoX194LmJlZ2luKCks IF9feC5lbmQoKSwgX195LmJlZ2luKCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+DQppbmxpbmUgYm9vbCANCm9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxs b2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkNCnsNCiAgcmV0dXJuIGxl eGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksIA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7DQp9DQoNCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQppbmxpbmUgdm9pZCBzd2FwKHZl Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQ0Kew0KICBf X3guc3dhcChfX3kpOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j Pg0KdmVjdG9yPF9UcCxfQWxsb2M+JiANCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9KGNv bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkNCnsNCiAgaWYgKCZfX3ggIT0gdGhpcykgew0K ICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOw0KICAgIGlmIChfX3hsZW4g PiBjYXBhY2l0eSgpKSB7DQogICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9j b3B5KF9feGxlbiwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7DQogICAgICBkZXN0cm95KF9NX3N0 YXJ0LCBfTV9maW5pc2gpOw0KICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m X3N0b3JhZ2UgLSBfTV9zdGFydCk7DQogICAgICBfTV9zdGFydCA9IF9fdG1wOw0KICAgICAgX01f ZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsNCiAgICB9DQogICAgZWxzZSBpZiAo c2l6ZSgpID49IF9feGxlbikgew0KICAgICAgaXRlcmF0b3IgX19pID0gY29weShfX3guYmVnaW4o KSwgX194LmVuZCgpLCBiZWdpbigpKTsNCiAgICAgIGRlc3Ryb3koX19pLCBfTV9maW5pc2gpOw0K ICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5iZWdpbigpICsg c2l6ZSgpLCBfTV9zdGFydCk7DQogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkg KyBzaXplKCksIF9feC5lbmQoKSwgX01fZmluaXNoKTsNCiAgICB9DQogICAgX01fZmluaXNoID0g X01fc3RhcnQgKyBfX3hsZW47DQogIH0NCiAgcmV0dXJuICp0aGlzOw0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46OmFzc2ln bihzaXplX3QgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkgew0KICBpZiAoX19uID4gY2Fw YWNpdHkoKSkgew0KICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0 X2FsbG9jYXRvcigpKTsNCiAgICBfX3RtcC5zd2FwKCp0aGlzKTsNCiAgfQ0KICBlbHNlIGlmIChf X24gPiBzaXplKCkpIHsNCiAgICBmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7DQogICAgX01f ZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCksIF9f dmFsKTsNCiAgfQ0KICBlbHNlDQogICAgZXJhc2UoZmlsbF9uKGJlZ2luKCksIF9fbiwgX192YWwp LCBlbmQoKSk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPg0Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9h c3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7DQog IGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAm JiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQ0KICAgICpfX2N1ciA9ICpfX2Zp cnN0Ow0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgZXJhc2UoX19jdXIsIGVuZCgpKTsN CiAgZWxzZQ0KICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy Pg0Kdm9pZA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsNCiAgc2l6ZV90eXBlIF9fbGVuID0gMDsN CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7DQoNCiAgaWYgKF9fbGVuID4gY2Fw YWNpdHkoKSkgew0KICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19s ZW4sIF9fZmlyc3QsIF9fbGFzdCk7DQogICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsN CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0 KTsNCiAgICBfTV9zdGFydCA9IF9fdG1wOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmlu aXNoID0gX01fc3RhcnQgKyBfX2xlbjsNCiAgfQ0KICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4p IHsNCiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01f c3RhcnQpOw0KICAgIGRlc3Ryb3koX19uZXdfZmluaXNoLCBfTV9maW5pc2gpOw0KICAgIF9NX2Zp bmlzaCA9IF9fbmV3X2ZpbmlzaDsNCiAgfQ0KICBlbHNlIHsNCiAgICBfRm9yd2FyZEl0ZXIgX19t aWQgPSBfX2ZpcnN0Ow0KICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7DQogICAgY29weShfX2Zp cnN0LCBfX21pZCwgX01fc3RhcnQpOw0KICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w eShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOw0KICB9DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5z ZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkNCnsNCiAgaWYgKF9N X2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgew0KICAgIGNvbnN0cnVjdChfTV9maW5pc2gs ICooX01fZmluaXNoIC0gMSkpOw0KICAgICsrX01fZmluaXNoOw0KICAgIF9UcCBfX3hfY29weSA9 IF9feDsNCiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2Zp bmlzaCAtIDEpOw0KICAgICpfX3Bvc2l0aW9uID0gX194X2NvcHk7DQogIH0NCiAgZWxzZSB7DQog ICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7DQogICAgY29uc3Qgc2l6ZV90 eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOw0KICAgIGl0 ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOw0KICAgIGl0ZXJhdG9yIF9f bmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0Ow0KICAgIHRyeSAgew0KICAgICAgX19uZXdfZmluaXNo ID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7 DQogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLCBfX3gpOw0KICAgICAgKytfX25ld19maW5p c2g7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwg X01fZmluaXNoLCBfX25ld19maW5pc2gpOw0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgIChkZXN0 cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIA0KICAgICAgICAgICAgICAgICAgX01fZGVh bGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsgdGhyb3c7IH0gOw0KICAgIGRlc3Ryb3koYmVn aW4oKSwgZW5kKCkpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y YWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7DQogICAgX01fZmlu aXNoID0gX19uZXdfZmluaXNoOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQg KyBfX2xlbjsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2 b2lkIA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0 aW9uKQ0Kew0KICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQogICAgY29u c3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7DQogICAgKytfTV9maW5pc2g7DQog ICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2ggLSAyLCBfTV9maW5pc2ggLSAx KTsNCiAgICAqX19wb3NpdGlvbiA9IF9UcCgpOw0KICB9DQogIGVsc2Ugew0KICAgIGNvbnN0IHNp emVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOw0KICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9 IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsNCiAgICBpdGVyYXRvciBfX25l d19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsNCiAgICBpdGVyYXRvciBfX25ld19maW5pc2gg PSBfX25ld19zdGFydDsNCiAgICB0cnkgIHsNCiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlh bGl6ZWRfY29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOw0KICAgICAgY29u c3RydWN0KF9fbmV3X2ZpbmlzaCk7DQogICAgICArK19fbmV3X2ZpbmlzaDsNCiAgICAgIF9fbmV3 X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3 X2ZpbmlzaCk7DQogICAgfQ0KICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQs X19uZXdfZmluaXNoKSwgDQogICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0 YXJ0LF9fbGVuKSkgOyB0aHJvdzsgfSA7DQogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7DQog ICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7 DQogICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsNCiAgICBfTV9maW5pc2ggPSBfX25ld19maW5p c2g7DQogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOw0KICB9DQp9 DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZvaWQgdmVjdG9yPF9UcCwg X0FsbG9jPjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpDQp7DQogIGlmIChf X24gIT0gMCkgew0KICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5p c2gpID49IF9fbikgew0KICAgICAgX1RwIF9feF9jb3B5ID0gX194Ow0KICAgICAgY29uc3Qgc2l6 ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBfTV9maW5pc2ggLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRl cmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOw0KICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIg PiBfX24pIHsNCiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01f ZmluaXNoLCBfTV9maW5pc2gpOw0KICAgICAgICBfTV9maW5pc2ggKz0gX19uOw0KICAgICAgICBj b3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNo KTsNCiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgX19uLCBfX3hfY29weSk7 DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX01f ZmluaXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7DQogICAgICAgIF9NX2Zpbmlz aCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19w b3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOw0KICAgICAgICBfTV9maW5pc2ggKz0g X19lbGVtc19hZnRlcjsNCiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9f eF9jb3B5KTsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICBjb25zdCBzaXplX3R5 cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsgICAgICAgIA0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f bGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOw0KICAgICAgaXRlcmF0b3Ig X19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7DQogICAgICBpdGVyYXRvciBfX25ld19m aW5pc2ggPSBfX25ld19zdGFydDsNCiAgICAgIHRyeSAgew0KICAgICAgICBfX25ld19maW5pc2gg PSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsN CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX19uZXdfZmluaXNo LCBfX24sIF9feCk7DQogICAgICAgIF9fbmV3X2ZpbmlzaA0KICAgICAgICAgID0gdW5pbml0aWFs aXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsNCiAgICAgIH0N CiAgICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwg DQogICAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7 IHRocm93OyB9IDsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQogICAgICBf TV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAg ICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7DQogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5p c2g7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47DQogICAg fQ0KICB9DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCnZvaWQgDQp2ZWN0b3I8X1RwLCBfQWxsb2M+Ojpf TV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpDQp7DQogIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgew0KICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9z LCAqX19maXJzdCk7DQogICAgKytfX3BvczsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0Kdm9pZCAN CnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3Ig X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3 YXJkX2l0ZXJhdG9yX3RhZykNCnsNCiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgc2l6 ZV90eXBlIF9fbiA9IDA7DQogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOw0KICAg IGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgew0K ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBfTV9maW5pc2ggLSBfX3Bvc2l0 aW9uOw0KICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOw0KICAgICAgaWYg KF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsNCiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2Zp bmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOw0KICAgICAgICBfTV9maW5pc2ggKz0g X19uOw0KICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9f biwgX19vbGRfZmluaXNoKTsNCiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRp b24pOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19t aWQgPSBfX2ZpcnN0Ow0KICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsNCiAg ICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7DQogICAg ICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICB1bmluaXRpYWxp emVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOw0KICAgICAgICBf TV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsNCiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwg X19wb3NpdGlvbik7DQogICAgICB9DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgY29uc3Qgc2l6 ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7DQogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4g PSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7DQogICAgICBpdGVyYXRvciBfX25l d19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsNCiAgICAgIGl0ZXJhdG9yIF9fbmV3X2Zpbmlz aCA9IF9fbmV3X3N0YXJ0Ow0KICAgICAgdHJ5ICB7DQogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVu aW5pdGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOw0KICAg ICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBf X25ld19maW5pc2gpOw0KICAgICAgICBfX25ld19maW5pc2gNCiAgICAgICAgICA9IHVuaW5pdGlh bGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7DQogICAgICB9 DQogICAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCks IA0KICAgICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkg OyB0aHJvdzsgfSA7DQogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOw0KICAgICAg X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7DQog ICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0Ow0KICAgICAgX01fZmluaXNoID0gX19uZXdfZmlu aXNoOw0KICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOw0KICAg IH0NCiAgfQ0KfQ0KDQojIDgxMCAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4eC9zdGxfdmVjdG9y LmgiIDMNCg0KDQoNCg0KDQoNCg0KICANCg0KDQoNCiANCiANCiANCiMgMzQgImM6L2Rvcy9wdWIv ZGpncHAvbGFuZy9jeHgvdmVjdG9yIiAyIDMNCg0KIyAxICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcv Y3h4L3N0bF9idmVjdG9yLmgiIDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQogIA0KDQpzdGF0aWMgY29uc3QgaW50 IF9fV09SRF9CSVQgPSBpbnQoOCAqc2l6ZW9mKHVuc2lnbmVkIGludCkpOw0KDQoNCg0KDQoNCg0K c3RydWN0IF9CaXRfcmVmZXJlbmNlIHsNCiAgdW5zaWduZWQgaW50KiBfTV9wOw0KICB1bnNpZ25l ZCBpbnQgX01fbWFzazsNCiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2ln bmVkIGludCBfX3kpIA0KICAgIDogX01fcChfX3gpLCBfTV9tYXNrKF9feSkge30NCg0KcHVibGlj Og0KICBfQml0X3JlZmVyZW5jZSgpIDogX01fcCgwKSwgX01fbWFzaygwKSB7fQ0KICBvcGVyYXRv ciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9DQogIF9CaXRf cmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gpDQogIHsNCiAgICBpZiAoX194KSAgKl9NX3Ag fD0gX01fbWFzazsNCiAgICBlbHNlICAgICAgKl9NX3AgJj0gfl9NX21hc2s7DQogICAgcmV0dXJu ICp0aGlzOw0KICB9DQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZl cmVuY2UmIF9feCkgDQogICAgeyByZXR1cm4gKnRoaXMgPSBib29sKF9feCk7IH0NCiAgYm9vbCBv cGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0DQogICAgeyByZXR1cm4g Ym9vbCgqdGhpcykgPT0gYm9vbChfX3gpOyB9DQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRf cmVmZXJlbmNlJiBfX3gpIGNvbnN0IHsNCiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2wo X194KTsNCiAgfQ0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0NCn07DQoNCmlu bGluZSB2b2lkIHN3YXAoX0JpdF9yZWZlcmVuY2UgX194LCBfQml0X3JlZmVyZW5jZSBfX3kpDQp7 DQogIGJvb2wgX190bXAgPSBfX3g7DQogIF9feCA9IF9feTsNCiAgX195ID0gX190bXA7DQp9DQoN CnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9v bCwgcHRyZGlmZl90PiB7DQogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgIHJlZmVyZW5jZTsNCiAg dHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsNCiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9y ICAgaXRlcmF0b3I7DQoNCiAgdW5zaWduZWQgaW50KiBfTV9wOw0KICB1bnNpZ25lZCBpbnQgX01f b2Zmc2V0Ow0KICB2b2lkIGJ1bXBfdXAoKSB7DQogICAgaWYgKF9NX29mZnNldCsrID09IF9fV09S RF9CSVQgLSAxKSB7DQogICAgICBfTV9vZmZzZXQgPSAwOw0KICAgICAgKytfTV9wOw0KICAgIH0N CiAgfQ0KICB2b2lkIGJ1bXBfZG93bigpIHsNCiAgICBpZiAoX01fb2Zmc2V0LS0gPT0gMCkgew0K ICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7DQogICAgICAtLV9NX3A7DQogICAgfQ0K ICB9DQoNCiAgX0JpdF9pdGVyYXRvcigpIDogX01fcCgwKSwgX01fb2Zmc2V0KDApIHt9DQogIF9C aXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpIA0KICAgIDog X01fcChfX3gpLCBfTV9vZmZzZXQoX195KSB7fQ0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u c3QgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7IH0NCiAgaXRlcmF0 b3ImIG9wZXJhdG9yKysoKSB7DQogICAgYnVtcF91cCgpOw0KICAgIHJldHVybiAqdGhpczsNCiAg fQ0KICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkgew0KICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRo aXM7DQogICAgYnVtcF91cCgpOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBpdGVyYXRvciYg b3BlcmF0b3ItLSgpIHsNCiAgICBidW1wX2Rvd24oKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0N CiAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsNCiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlz Ow0KICAgIGJ1bXBfZG93bigpOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBpdGVyYXRvciYg b3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7DQogICAgZGlmZmVyZW5jZV90eXBlIF9f biA9IF9faSArIF9NX29mZnNldDsNCiAgICBfTV9wICs9IF9fbiAvIF9fV09SRF9CSVQ7DQogICAg X19uID0gX19uICUgX19XT1JEX0JJVDsNCiAgICBpZiAoX19uIDwgMCkgew0KICAgICAgX01fb2Zm c2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JEX0JJVDsNCiAgICAgIC0tX01fcDsNCiAg ICB9IGVsc2UNCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsNCiAgICByZXR1 cm4gKnRoaXM7DQogIH0NCiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9f aSkgew0KICAgICp0aGlzICs9IC1fX2k7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGl0ZXJh dG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7DQogICAgaXRlcmF0b3Ig X190bXAgPSAqdGhpczsNCiAgICByZXR1cm4gX190bXAgKz0gX19pOw0KICB9DQogIGl0ZXJhdG9y IG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7DQogICAgaXRlcmF0b3IgX190 bXAgPSAqdGhpczsNCiAgICByZXR1cm4gX190bXAgLT0gX19pOw0KICB9DQogIGRpZmZlcmVuY2Vf dHlwZSBvcGVyYXRvci0oaXRlcmF0b3IgX194KSBjb25zdCB7DQogICAgcmV0dXJuIF9fV09SRF9C SVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNldCAtIF9feC5fTV9vZmZzZXQ7DQogIH0N CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1cm4gKigq dGhpcyArIF9faSk7IH0NCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBfX3gpIGNv bnN0IHsNCiAgICByZXR1cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9N X29mZnNldDsNCiAgfQ0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIF9feCkgY29u c3Qgew0KICAgIHJldHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBfX3guX01f b2Zmc2V0Ow0KICB9DQogIGJvb2wgb3BlcmF0b3I8KGl0ZXJhdG9yIF9feCkgY29uc3Qgew0KICAg IHJldHVybiBfTV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0 IDwgX194Ll9NX29mZnNldCk7DQogIH0NCn07DQoNCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9y DQogIDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pg0Kew0K ICB0eXBlZGVmIGJvb2wgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsNCiAgdHlwZWRlZiBib29s ICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7DQogIHR5cGVkZWYgY29uc3QgYm9vbCog ICAgICAgICAgcG9pbnRlcjsNCiAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yICBjb25zdF9p dGVyYXRvcjsNCg0KICB1bnNpZ25lZCBpbnQqIF9NX3A7DQogIHVuc2lnbmVkIGludCBfTV9vZmZz ZXQ7DQogIHZvaWQgYnVtcF91cCgpIHsNCiAgICBpZiAoX01fb2Zmc2V0KysgPT0gX19XT1JEX0JJ VCAtIDEpIHsNCiAgICAgIF9NX29mZnNldCA9IDA7DQogICAgICArK19NX3A7DQogICAgfQ0KICB9 DQogIHZvaWQgYnVtcF9kb3duKCkgew0KICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7DQogICAg ICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsNCiAgICAgIC0tX01fcDsNCiAgICB9DQogIH0N Cg0KICBfQml0X2NvbnN0X2l0ZXJhdG9yKCkgOiBfTV9wKDApLCBfTV9vZmZzZXQoMCkge30NCiAg X0JpdF9jb25zdF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkg DQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9DQogIF9CaXRfY29uc3RfaXRlcmF0 b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KSANCiAgICA6IF9NX3AoX194Ll9NX3ApLCBfTV9v ZmZzZXQoX194Ll9NX29mZnNldCkge30NCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv bnN0IHsNCiAgICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsN CiAgfQ0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsNCiAgICBidW1wX3VwKCk7DQog ICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7 DQogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICBidW1wX3VwKCk7DQogICAg cmV0dXJuIF9fdG1wOw0KICB9DQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci0tKCkgew0KICAg IGJ1bXBfZG93bigpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBjb25zdF9pdGVyYXRvciBv cGVyYXRvci0tKGludCkgew0KICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7DQogICAg YnVtcF9kb3duKCk7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQogIGNvbnN0X2l0ZXJhdG9yJiBv cGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsNCiAgICBkaWZmZXJlbmNlX3R5cGUgX19u ID0gX19pICsgX01fb2Zmc2V0Ow0KICAgIF9NX3AgKz0gX19uIC8gX19XT1JEX0JJVDsNCiAgICBf X24gPSBfX24gJSBfX1dPUkRfQklUOw0KICAgIGlmIChfX24gPCAwKSB7DQogICAgICBfTV9vZmZz ZXQgPSAodW5zaWduZWQgaW50KSBfX24gKyBfX1dPUkRfQklUOw0KICAgICAgLS1fTV9wOw0KICAg IH0gZWxzZQ0KICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uOw0KICAgIHJldHVy biAqdGhpczsNCiAgfQ0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5 cGUgX19pKSB7DQogICAgKnRoaXMgKz0gLV9faTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAg Y29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsNCiAg ICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIHJldHVybiBfX3RtcCArPSBfX2k7 DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNv bnN0IHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIHJldHVybiBfX3Rt cCAtPSBfX2k7DQogIH0NCiAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShjb25zdF9pdGVyYXRv ciBfX3gpIGNvbnN0IHsNCiAgICByZXR1cm4gX19XT1JEX0JJVCAqIChfTV9wIC0gX194Ll9NX3Ap ICsgX01fb2Zmc2V0IC0gX194Ll9NX29mZnNldDsNCiAgfQ0KICBjb25zdF9yZWZlcmVuY2Ugb3Bl cmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IA0KICAgIHJldHVybiAqKCp0aGlzICsgX19p KTsgDQogIH0NCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3gpIGNv bnN0IHsNCiAgICByZXR1cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9N X29mZnNldDsNCiAgfQ0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIF9f eCkgY29uc3Qgew0KICAgIHJldHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBf X3guX01fb2Zmc2V0Ow0KICB9DQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0X2l0ZXJhdG9yIF9feCkg Y29uc3Qgew0KICAgIHJldHVybiBfTV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3Ag JiYgX01fb2Zmc2V0IDwgX194Ll9NX29mZnNldCk7DQogIH0NCn07DQoNCiANCiANCg0KDQoNCiAN CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNfc3RhdGljPg0KY2xhc3MgX0J2 ZWN0b3JfYWxsb2NfYmFzZSB7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3Ry YWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUNCiAgICAgICAgICBhbGxvY2F0 b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu IF9NX2RhdGFfYWxsb2NhdG9yOyB9DQoNCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxv Y2F0b3JfdHlwZSYgX19hKQ0KICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3RhcnQo KSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9DQoNCnByb3RlY3RlZDoNCiAg dW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikgDQogICAgeyByZXR1cm4gX01f ZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklU KTsgfQ0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7DQogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApDQog ICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsIA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0 Ll9NX3ApOw0KICB9ICANCg0KICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVuc2lnbmVkIGludCwg X0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlIA0KICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9y Ow0KICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0Ow0KICBfQml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsN CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsNCn07DQoNCiANCnRlbXBsYXRlIDxj bGFzcyBfQWxsb2NhdG9yPg0KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2NhdG9yLCB0 cnVlPiB7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBf QWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCiAg YWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90 eXBlKCk7IH0NCg0KICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikN CiAgICA6IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQ0K DQpwcm90ZWN0ZWQ6DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBp bnQsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQ0KICAgICAgICAgIF9BbGxvY190eXBlOw0KICAg ICAgICAgIA0KICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKSANCiAgICB7 IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dP UkRfQklUKTsgfQ0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7DQogICAgaWYgKF9NX3N0YXJ0Ll9N X3ApDQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9w KTsNCiAgfSAgDQoNCiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsNCiAgX0JpdF9pdGVyYXRvciBf TV9maW5pc2g7DQogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7DQp9OyAgDQoNCnRl bXBsYXRlIDxjbGFzcyBfQWxsb2M+DQpjbGFzcyBfQnZlY3Rvcl9iYXNlDQogIDogcHVibGljIF9C dmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPg0Kew0KICB0eXBl ZGVmIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQogICAg ICAgICAgX0Jhc2U7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRv cl90eXBlIGFsbG9jYXRvcl90eXBlOw0KDQogIF9CdmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9DQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBfQmFzZTo6 X01fZGVhbGxvY2F0ZSgpOyB9DQp9Ow0KDQojIDM0OCAiYzovZG9zL3B1Yi9kamdwcC9sYW5nL2N4 eC9zdGxfYnZlY3Rvci5oIiAzDQoNCg0KIA0KIA0KIA0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQog ICAgICAgIA0KDQogICAgICAgIA0KdGVtcGxhdGU8Y2xhc3MgX0FsbG9jPiBjbGFzcyB2ZWN0b3I8 Ym9vbCxfQWxsb2M+DQogIDogcHVibGljIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPg0KDQoNCg0KDQp7 DQoNCiAgdHlwZWRlZiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4gX0Jhc2U7DQoNCg0KDQpwdWJsaWM6 DQogIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7 DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsgDQogIHR5cGVkZWYgX0JpdF9y ZWZlcmVuY2UgcmVmZXJlbmNlOw0KICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOw0KICB0 eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNv bnN0X3BvaW50ZXI7DQoNCiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yICAgICAgICAgICAgICAgIGl0 ZXJhdG9yOw0KICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgICAgICAgICAgY29uc3RfaXRl cmF0b3I7DQoNCg0KICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv bnN0X3JldmVyc2VfaXRlcmF0b3I7DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRv cj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0KDQoNCg0KDQoNCg0KICB0eXBlZGVmIHR5cGVuYW1lIF9C YXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0 X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0NCg0K cHJvdGVjdGVkOg0KDQoNCg0KDQoNCg0KDQoNCnByb3RlY3RlZDoNCiAgdm9pZCBfTV9pbml0aWFs aXplKHNpemVfdHlwZSBfX24pIHsNCiAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxv YyhfX24pOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09SRF9CSVQg LSAxKS9fX1dPUkRfQklUOw0KICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICBf TV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOw0KICB9DQogIHZvaWQg X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgew0KICAgIGlmIChf TV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgew0KICAgICAgY29weV9iYWNrd2Fy ZChfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCArIDEpOw0KICAgICAgKl9fcG9zaXRp b24gPSBfX3g7DQogICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICBz aXplX3R5cGUgX19sZW4gPSBzaXplKCkgPyAyICogc2l6ZSgpIDogX19XT1JEX0JJVDsNCiAgICAg IHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsNCiAgICAgIGl0ZXJhdG9y IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7DQogICAg ICAqX19pKysgPSBfX3g7DQogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgp LCBfX2kpOw0KICAgICAgX01fZGVhbGxvY2F0ZSgpOw0KICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug PSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsNCiAgICAgIF9NX3N0 YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICB9DQogIH0NCg0KDQogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew0KICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoKTsN CiAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsN CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIA0KICAgICAgcHVzaF9i YWNrKCpfX2ZpcnN0KTsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y Pg0KICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndh cmRfaXRlcmF0b3JfdGFnKSB7DQogICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAgZGlzdGFuY2Uo X19maXJzdCwgX19sYXN0LCBfX24pOw0KICAgIF9NX2luaXRpYWxpemUoX19uKTsNCiAgICBjb3B5 KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPg0KICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3BvcywNCiAg ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsN CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsNCiAgICAgIF9fcG9z ID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7DQogICAgICArK19fcG9zOw0KICAgIH0NCiAgfQ0K DQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0KICB2b2lkIF9NX2luc2VydF9y YW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAg ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgew0KICAgIGlmIChfX2ZpcnN0ICE9IF9f bGFzdCkgew0KICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAgICBkaXN0YW5jZShfX2ZpcnN0 LCBfX2xhc3QsIF9fbik7DQogICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsN CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlm ZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3Np dGlvbik7DQogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsNCiAgICAg IH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgo c2l6ZSgpLCBfX24pOw0KICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhf X2xlbik7DQogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwg aXRlcmF0b3IoX19xLCAwKSk7DQogICAgICAgIF9faSA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBf X2kpOw0KICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOw0K ICAgICAgICBfTV9kZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19x ICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7DQogICAgICAgIF9NX3N0YXJ0 ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgIH0NCiAgICB9DQogIH0gICAgICANCg0KDQoNCnB1 YmxpYzoNCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQ0KICBjb25zdF9p dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9DQogIGl0ZXJhdG9yIGVu ZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQ0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7 IHJldHVybiBfTV9maW5pc2g7IH0NCg0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0 dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9DQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Ig cmJlZ2luKCkgY29uc3QgeyANCiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQo KSk7IA0KICB9DQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRl cmF0b3IoYmVnaW4oKSk7IH0NCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3Qg eyANCiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgDQogIH0NCg0K ICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2lu KCkpOyB9DQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgt MSk7IH0NCiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qgew0KICAgIHJldHVybiBzaXplX3R5 cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UsIDApIC0gYmVnaW4oKSk7DQogIH0N CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCiAgcmVm ZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgew0KICAgIHJldHVybiAqKGJlZ2luKCkg KyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7DQogIH0NCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9y W10oc2l6ZV90eXBlIF9fbikgY29uc3Qgew0KICAgIHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJl bmNlX3R5cGUoX19uKSk7DQogIH0NCg0KICBleHBsaWNpdCB2ZWN0b3IgKGNvbnN0IGFsbG9jYXRv cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIDogX0Jhc2UoX19hKSB7fQ0KDQog IHZlY3RvciAoc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLA0KICAgICAgICAgICAgY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpDQogICAgOiBfQmFzZShfX2Ep DQogIHsNCiAgICBfTV9pbml0aWFsaXplKF9fbik7DQogICAgZmlsbChfTV9zdGFydC5fTV9wLCBf TV9lbmRfb2Zfc3RvcmFnZSwgX192YWx1ZSA/IH4wIDogMCk7DQogIH0NCg0KICBleHBsaWNpdCB2 ZWN0b3IgKHNpemVfdHlwZSBfX24pDQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKQ0KICB7 DQogICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5k X29mX3N0b3JhZ2UsIDApOw0KICB9DQoNCiAgdmVjdG9yIChjb25zdCB2ZWN0b3IgJiBfX3gpIDog X0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSkgew0KICAgIF9NX2luaXRpYWxpemUoX194LnNpemUo KSk7DQogICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7DQogIH0NCg0K DQogICANCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2ZWN0b3IgKF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgIGNv bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIDogX0Jhc2Uo X19hKQ0KICB7DQogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRv cj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7DQogICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2Zp cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgfQ0KICAgIA0KICB0ZW1wbGF0ZSA8Y2xhc3Mg X0ludGVnZXI+DQogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9J bnRlZ2VyIF9feCwgX190cnVlX3R5cGUpIHsNCiAgICBfTV9pbml0aWFsaXplKF9fbik7DQogICAg ZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsNCiAg fQ0KICAgIA0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5p dGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAg ICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y eSggX19maXJzdCApICk7DQogIH0NCiMgNTg3ICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0 bF9idmVjdG9yLmgiIDMNCg0KDQogIH52ZWN0b3IgKCkgeyB9DQoNCiAgdmVjdG9yICYgb3BlcmF0 b3I9KGNvbnN0IHZlY3RvciAmIF9feCkgew0KICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAq dGhpczsNCiAgICBpZiAoX194LnNpemUoKSA+IGNhcGFjaXR5KCkpIHsNCiAgICAgIF9NX2RlYWxs b2NhdGUoKTsNCiAgICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7DQogICAgfQ0KICAgIGNv cHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7DQogICAgX01fZmluaXNoID0gYmVn aW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsNCiAgICByZXR1cm4gKnRoaXM7DQog IH0NCg0KICAgDQogICANCiAgIA0KICAgDQoNCiAgdm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9v bCBfX3gpIHsNCiAgICBpZiAoX19uID4gc2l6ZSgpKSB7DQogICAgICBmaWxsKF9NX3N0YXJ0Ll9N X3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOw0KICAgICAgaW5zZXJ0KGVuZCgp LCBfX24gLSBzaXplKCksIF9feCk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgZXJhc2UoYmVn aW4oKSArIF9fbiwgZW5kKCkpOw0KICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zf c3RvcmFnZSwgX194ID8gfjAgOiAwKTsNCiAgICB9DQogIH0NCg0KDQoNCiAgdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl Z2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsNCiAgICBfTV9hc3NpZ25f ZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7DQogIH0NCg0KICB0ZW1wbGF0 ZSA8Y2xhc3MgX0ludGVnZXI+DQogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9f biwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQ0KICAgIHsgYXNzaWduKChzaXplX3QpIF9f biwgKGJvb2wpIF9fdmFsKTsgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPg0KICB2 b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LCBfX2ZhbHNlX3R5cGUpDQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg X19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBpbnB1dF9p dGVyYXRvcl90YWcpIHsNCiAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7DQogICAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0 KQ0KICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7DQogICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0K ICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsNCiAgICBlbHNlDQogICAgICBpbnNlcnQoZW5kKCks IF9fZmlyc3QsIF9fbGFzdCk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy YXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv cndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh dG9yX3RhZykgew0KICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7DQogICAgZGlzdGFuY2UoX19maXJz dCwgX19sYXN0LCBfX2xlbik7DQogICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQ0KICAgICAgZXJhc2Uo Y29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7DQogICAgZWxzZSB7DQogICAg ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsNCiAgICAgIGFkdmFuY2UoX19taWQs IHNpemUoKSk7DQogICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsNCiAgICAgIGlu c2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7DQogICAgfQ0KICB9ICAgIA0KDQoNCg0KICB2b2lk IHJlc2VydmUoc2l6ZV90eXBlIF9fbikgew0KICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7DQog ICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOw0KICAgICAgX01fZmlu aXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7DQogICAgICBfTV9k ZWFsbG9jYXRlKCk7DQogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQogICAgICBf TV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJ VDsNCiAgICB9DQogIH0NCg0KICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsg fQ0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQ0K ICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQ0KICBjb25zdF9yZWZl cmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQ0KICB2b2lkIHB1c2hf YmFjayhib29sIF9feCkgew0KICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3Rv cmFnZSkNCiAgICAgICpfTV9maW5pc2grKyA9IF9feDsNCiAgICBlbHNlDQogICAgICBfTV9pbnNl cnRfYXV4KGVuZCgpLCBfX3gpOw0KICB9DQogIHZvaWQgc3dhcCh2ZWN0b3IgJiBfX3gpIHsNCiAg ICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOw0KICAgICA6OnN3YXAoX01fZmluaXNo LCBfX3guX01fZmluaXNoKTsNCiAgICAgOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01f ZW5kX29mX3N0b3JhZ2UpOw0KICB9DQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0 aW9uLCBib29sIF9feCA9IGJvb2woKSkgew0KICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bv c2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0 b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkNCiAgICAgICpfTV9maW5pc2grKyA9IF9feDsN CiAgICBlbHNlDQogICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7DQogICAgcmV0 dXJuIGJlZ2luKCkgKyBfX247DQogIH0NCg0KDQogICANCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPg0KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLA0KICAgICAgICAg ICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAg ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFs IF9JbnRlZ3JhbDsNCiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwg X19sYXN0LCBfSW50ZWdyYWwoKSk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+ DQogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24s IF9JbnRlZ2VyIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsN CiAgICBpbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKGJvb2wpIF9feCk7DQogIH0NCg0K ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5zZXJ0X2Rpc3Bh dGNoKGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZmFsc2VfdHlwZSkgew0KICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19maXJz dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsNCiAgfQ0KIyA3NjEg ImM6L2Rvcy9wdWIvZGpncHAvbGFuZy9jeHgvc3RsX2J2ZWN0b3IuaCIgMw0KDQogIA0KICB2b2lk IGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgew0K ICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOw0KICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49 IF9fbikgew0KICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNo ICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0 aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7DQogICAgICBfTV9maW5pc2ggKz0gZGlm ZmVyZW5jZV90eXBlKF9fbik7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgc2l6ZV90eXBlIF9f bGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsNCiAgICAgIHVuc2lnbmVkIGludCogX19x ID0gX01fYml0X2FsbG9jKF9fbGVuKTsNCiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4o KSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7DQogICAgICBmaWxsX24oX19pLCBfX24s IF9feCk7DQogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBk aWZmZXJlbmNlX3R5cGUoX19uKSk7DQogICAgICBfTV9kZWFsbG9jYXRlKCk7DQogICAgICBfTV9l bmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklU Ow0KICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOw0KICAgIH0NCiAgfQ0KDQogIHZv aWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9DQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9y IF9fcG9zaXRpb24pIHsNCiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpDQogICAgICBj b3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7DQogICAgICAtLV9NX2Zpbmlz aDsNCiAgICByZXR1cm4gX19wb3NpdGlvbjsNCiAgfQ0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRv ciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsNCiAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFz dCwgZW5kKCksIF9fZmlyc3QpOw0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICB9DQogIHZvaWQgcmVz aXplKHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgew0KICAgIGlmIChf X25ld19zaXplIDwgc2l6ZSgpKSANCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5 cGUoX19uZXdfc2l6ZSksIGVuZCgpKTsNCiAgICBlbHNlDQogICAgICBpbnNlcnQoZW5kKCksIF9f bmV3X3NpemUgLSBzaXplKCksIF9feCk7DQogIH0NCiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVn aW4oKSwgZW5kKCkpOyB9DQp9Ow0KDQoNCg0KdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgYWxsb2M+IGJp dF92ZWN0b3I7DQoNCiMgODIyICJjOi9kb3MvcHViL2RqZ3BwL2xhbmcvY3h4L3N0bF9idmVjdG9y LmgiIDMNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICANCg0KDQoNCiANCiANCiANCiMgMzUgImM6L2Rv cy9wdWIvZGpncHAvbGFuZy9jeHgvdmVjdG9yIiAyIDMNCg0KDQoNCg0KIA0KIA0KIA0KIyA2ICJx ZF9fZ2NjX19idWcuY3BwIiAyDQoNCg0KdXNpbmcgbmFtZXNwYWNlIHN0ZDsNCg0KY2xhc3MgY2xh c3NfMSB7DQp9Ow0KDQpjbGFzcyBjbGFzc18yIDogcHVibGljIGNsYXNzXzEgew0KfTsNCg0Kdm9p ZCBtYWluKCkgew0KICAgIHZlY3RvcjxjbGFzc18xICY+IGlucHV0Ow0KICAgIGlucHV0LnB1c2hf YmFjaygqbmV3IGNsYXNzXzIoKSk7DQp9DQoNCg==