From mboxrd@z Thu Jan 1 00:00:00 1970 From: gerald.roth@aon.at To: gcc-gnats@gcc.gnu.org Subject: c++/3135: internal compiler error on kdelibs/arts/soundserver/wavplayobject_impl.cc Date: Tue, 12 Jun 2001 04:06:00 -0000 Message-id: <20010612110042.13722.qmail@sourceware.cygnus.com> X-SW-Source: 2001-06/msg00474.html List-Id: >Number: 3135 >Category: c++ >Synopsis: internal compiler error on kdelibs/arts/soundserver/wavplayobject_impl.cc >Confidential: no >Severity: critical >Priority: high >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Tue Jun 12 04:06:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: gerald.roth@aon.at >Release: gcc version 3.0 20010612 (prerelease) >Organization: >Environment: Configured with: /usr/src/gcc-cvs/gcc/configure --enable-shared --enable-multilib --enable-threads Thread model: posix, i686-pc-linux-gnu, linux 2.4.5-ac12 >Description: internal compiler error when compiling kdelibs/arts/soundserver/wavplayobject_impl.cc: g++ -save-temps -DHAVE_CONFIG_H -I. -I. -I../.. -I../../arts/mcop -I../../arts/flow -I../../arts/flow -I../../dcop -I../../libltdl -I../../kdecore -I../../kdeui -I../../kssl -I/usr/src/kde2/cvs/qt-copy/include -I/usr/X11R6/include -I/opt/kde/include -D_REENTRANT -I/usr/local/include -O2 -DNDEBUG -fno-exceptions -fno-check-new -O3 -march=athlon -frtti -ftemplate-depth-99 -DQT_NO_TRANSLATION -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT -DQT_NO_ASCII_CAST -Wp,-MD,.deps/wavplayobject_impl.pp -c wavplayobject_impl.cc -fPIC -DPIC -o .libs/wavplayobject_impl.o wavplayobject_impl.cc:16: Internal error #20010126. wavplayobject_impl.cc:16: Internal compiler error in dfs_accumulate_vtbl_inits, at cp/class.c:7620 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. make: *** [wavplayobject_impl.lo] Error 1 >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="wavplayobject_impl.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="wavplayobject_impl.ii" IyAxICJ3YXZwbGF5b2JqZWN0X2ltcGwuY2MiCiMgMSAiLi4vLi4vY29uZmlnLmgiIDEKIyA2MDIg Ii4uLy4uL2NvbmZpZy5oIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjYg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAxIDMKIyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L3N5cy9jZGVmcy5oIiAxIDMKIyAyNTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAy NzggIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVi cy5oIiAxIDMKIyAyNzkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNyAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxOTkgIi91c3IvbG9jYWwvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgc2l6ZV90OwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBl ZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3No b3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg X191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBf X3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsK IyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9f aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBz aG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90 Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vp bnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50 NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50 NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBf X2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7 CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBl ZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYg X19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3Np emVfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxp bTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGlu dCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRl ZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgbG9u ZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7CiMgMTAwICIvdXNyL2luY2x1ZGUvYml0cy90eXBl cy5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQg LyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBfX2ZkX3NldDsKCgp0eXBlZGVm IGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoK CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2Nu dDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRf dCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRl ZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19pbm82NF90 OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3Nj YWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRl ZiBpbnQgX19pbnRwdHJfdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hl ZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5Owog IH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3Qg X3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2Nr Owp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rl c2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19z Y2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9f aW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQg X19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6 ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVh ZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhy ZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRf Y29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5 cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0 aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRf ZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7 CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50 IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewog IHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsK ICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRf d2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndf a2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYg c3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcnds b2NrYXR0cl90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTUx ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90 eXBlcy5oIiAyIDMKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQg dV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsK dHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlw ZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVk ZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5 cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVk ZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5 cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5 cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0 eXBlZGVmIF9faWRfdCBpZF90OwoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlw ZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlw ZWRlZiBfX2tleV90IGtleV90OwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMK IyA1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDEgMwojIDU4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tf dCBjbG9ja190OwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2 OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMg MTI0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTI3 ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg aW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5z aWduZWQgaW50IHVpbnQ7CiMgMTcwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRl ZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVm IGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm IGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVm IGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVk ZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9f KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0 ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDE5MiAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAy MiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi IDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1ZGUv ZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzYgIi91 c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMTkzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi91c3IvaW5j bHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg MjYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lz L3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAy MyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWlj X3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygx MDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7 CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVk ZS90aW1lLmgiIDEgMwojIDgzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3Bl YwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyAz OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpzdHJ1 Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKdHlwZWRlZiBfX2ZkX3Nl dCBmZF9zZXQ7CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBf X3NlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3Jp dGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3Jl YWRmZHMsIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsIHN0cnVj dCB0aW1ldmFsICpfX3RpbWVvdXQpIHRocm93ICgpOwojIDg3ICIvdXNyL2luY2x1ZGUvc3lzL3Nl bGVjdC5oIiAzCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVh ZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgY29uc3Qg c3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsIGNvbnN0IF9fc2lnc2V0X3QgKl9fc2lnbWFzaykg dGhyb3cgKCk7CgoKCgoKfQojIDE5NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoj IDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDE5OSAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAyIDMKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CnR5cGVk ZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250 X3Q7CgoKCgoKCgp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNi bGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0 X3Q7CgoKfQojIDYwMyAiLi4vLi4vY29uZmlnLmgiIDIKIyA3NTYgIi4uLy4uL2NvbmZpZy5oIgpl eHRlcm4gIkMiCgppbnQgbWtzdGVtcHMgKGNoYXIqIF90ZW1wbGF0ZSwgaW50IHN1ZmZpeF9sZW4p OwojIDIgIndhdnBsYXlvYmplY3RfaW1wbC5jYyIgMgoKCgojIDEgInNvdW5kc2VydmVyLmgiIDEK CgoKCgojIDEgIi4uLy4uL2FydHMvbWNvcC9jb21tb24uaCIgMQojIDI2ICIuLi8uLi9hcnRzL21j b3AvY29tbW9uLmgiCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2J1ZmZlci5oIiAxCiMgMjYgIi4uLy4u L2FydHMvbWNvcC9idWZmZXIuaCIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3N0cmlu ZyIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMSAzCiMgMzggIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDMKCiMgMSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMK IyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Mr K2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4 LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1w Yy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDIgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQwICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDM4ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0 MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0 czsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjaGFyX3RyYWl0czxjaGFyPjsKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAg ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj X3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCgp9CiMgNDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyAzOCAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKCiMgMSAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDM3ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6 OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAx IDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1 cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7 CgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpl eHRlcm4gdm9pZCAqIG1lbWNweSAodm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZv aWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZv aWQgKiBtZW1tb3ZlICh2b2lkICogX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3NyYywgc2l6ZV90 IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICogbWVtY2NweSAodm9pZCAqIF9fZGVz dCwgX19jb25zdCB2b2lkICogX19zcmMsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoK CgoKCmV4dGVybiB2b2lkICogbWVtc2V0ICh2b2lkICogX19zLCBpbnQgX19jLCBzaXplX3QgX19u KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICogX19zMSwgX19j b25zdCB2b2lkICogX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICog bWVtY2hyIChfX2NvbnN0IHZvaWQgKiBfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCgoKZXh0ZXJuIHZvaWQgKiByYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqIF9fcywgaW50IF9f YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9f ZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCgpleHRlcm4g Y2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzdHJj YXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z cmMpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9f ZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy ICpfX3MyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg c3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpIHRocm93ICgp OwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUu aCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewogIHN0cnVjdCBsb2NhbGVfZGF0 YSAqX19sb2NhbGVzWzZdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7 CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBw ZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTAwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCmV4 dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf X3MyLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1f bCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLCBfX2xvY2Fs ZV90IF9fbCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChfX2NvbnN0IGNo YXIgKl9fcykgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19z KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19z dHJpbmcsIHNpemVfdCBfX24pIHRocm93ICgpOwojIDE0NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5o IiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv dyAoKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg dGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywg aW50IF9fYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hh ciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90 IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpIHRocm93 ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNo YXIgKl9fYWNjZXB0KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hh ciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgoKCmV4dGVy biBjaGFyICpfX3N0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBj aGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25z dCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tf ciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGlt LCBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIg KnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZGVsaW0sIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwojIDE5NCAi L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiB2b2lkICogbWVtbWVtIChfX2NvbnN0IHZv aWQgKiBfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwgX19jb25zdCB2b2lkICogX19u ZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqIF9f bWVtcGNweSAodm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3Ry aWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogbWVtcGNweSAo dm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3Jj LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25z dCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0 IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo YXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19z dHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRo cm93ICgpOwpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1 Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZv aWQgKiBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19j b25zdCB2b2lkICogX19zcmMsIHZvaWQgKiBfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoK CmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICogX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9pZCAqIF9fczIs IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFy ICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAoaW50IF9f aSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZzIChpbnQg X19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgZmZz bCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCl9fZXh0 ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKSB0aHJvdyAoKQog ICAgIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXAg KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKZXh0ZXJu IGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBf X2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwg X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wg KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uLCBfX2xv Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAq Kl9fcmVzdHJpY3QgX19zdHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEs IF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAo aW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVz dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoK ZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5 IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jl c3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93 ICgpOwoKCmV4dGVybiB2b2lkICogbWVtZnJvYiAodm9pZCAqIF9fcywgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVu YW1lKSB0aHJvdyAoKTsKIyAzNTAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMKIyA2NiAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKbmFtZXNwYWNlIHN0 ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVzaW5nIDo6c3RyY3B5 OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2luZyA6OnN0cm5jYXQ7 CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcgOjpzdHJjb2xsOwog IHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcgOjpzdHJjc3BuOwog IHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6bWVtc2V0OwogIHVz aW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6bWVtY2hyOwoKICBp bmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXplX3QgX19uKQogIHsg cmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbik7IH0K CiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihjaGFyKiBfX3MxLCBp bnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFy Kj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxpbmUgY2hhcioKICBz dHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGlu X3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5n IDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19u KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9f czEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hhcioKICBzdHJzdHIo Y2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ryc3Ry KGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMgNDAgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2 ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2NzdGRpbyIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0 ZGlvLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRp by5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9jc3RkaW8uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9jc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2NzdGRpby5oIiAyIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs dWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjggIi91 c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbG9jYWwv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj IDM0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFy Zy5oIiAzCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgMTEwICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFy Zy5oIiAzCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAzOSAiL3Vzci9pbmNsdWRl L3N0ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA0MSAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUg RklMRTsKIyA1NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAiL3Vzci9pbmNsdWRlL19HX2NvbmZp Zy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWdu ZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAzNSAi L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRy aWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9H X3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVu c2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp KTsKIyAzMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDQ4ICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMg MTU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9J T19GSUxFOwojIDE2NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19s b2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4 dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE4NyAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDMKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoK CiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9f cmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7 CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lP X2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNl OwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoK ICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXpl OwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47 CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAg X0lPX2xvY2tfdCAqX2xvY2s7CiMgMjMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2Zm NjRfdCBfb2Zmc2V0OwoKICBpbnQgX3VudXNlZDJbMTZdOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJ TEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRl cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9J T19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDI2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICogX19jb29raWUsIGNoYXIg Kl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwojIDI3MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK dHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqIF9fY29va2llLCBfX2NvbnN0 IGNoYXIgKl9fYnVmLCBzaXplX3QgX19uKTsKIyAyODAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz CnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqIF9fY29va2llLCBfX29mZl90IF9fcG9z LCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICogX19jb29raWUp OwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRl ZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vl a19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2ll X2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVh ZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19j bG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9f Y29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCgpzdHJ1Y3QgX0lP X2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJTEUgX19maWxlOwogIGNvbnN0IHZvaWQgKl9f dnRhYmxlOwogIHZvaWQgKl9fY29va2llOwogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19p b19mdW5jdGlvbnM7Cn07CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93 IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgp OwojIDMzNyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lP X0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9f RklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2Zw KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cg KCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK ZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJu IGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyAzNjMgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19y ZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIF9fZ251Y192YV9saXN0LCBpbnQgKl9f cmVzdHJpY3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpf X3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCkgdGhyb3cg KCk7CgpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVf dCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICos IHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklM RSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9f c2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZv aWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCn0KIyA1OCAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgp0eXBlZGVmIF9fb2ZmX3QgZnBvc190OwoKCgoK dHlwZWRlZiBfX29mZjY0X3QgZnBvczY0X3Q7CiMgMTEwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMTEgIi91c3IvaW5j bHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rk b3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgoKZXh0ZXJuIGludCByZW1vdmUgKF9fY29u c3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25z dCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgpleHRlcm4g RklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTQwICIvdXNyL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hh ciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9y IChjaGFyICpfX3MpIHRocm93ICgpOwojIDE2MCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0 ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19w ZngpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZv cGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIwMyAiL3Vz ci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rlcykg dGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChp bnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklM RSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9f ZnVuY3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIg KipfX3Jlc3RyaWN0IF9fYnVmbG9jLCBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt LCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVm IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQg X19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVy IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXpl X3QgX19zaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBf X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n bnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251 Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0 X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IF9fdnNucHJpbnRmIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoKCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CmV4dGVybiBpbnQgdnNucHJp bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoKCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoKCgoK ZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mLCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBp bnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9f cmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJv dyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykp KTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50 ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAo KQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoK CgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNj YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB2 ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCgogICAgIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcp IHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwg MCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcp IHRocm93ICgpCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAy LCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl eHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdl dGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9p ZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2Vk IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7 CiMgNDEzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVs aW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwg aW50IF9fZGVsaW1pdGVyLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpl eHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsIHNp emVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipf X3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMg KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVh ZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwgRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBmd3JpdGUg KF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9f biwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBmcmVh ZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90 IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90 IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3Qg X19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBp bnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKIyA0OTMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChG SUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4 dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4g aW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmlj dCBfX3BvcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwg X19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MjYgIi91c3IvaW5jbHVkZS9zdGRp by5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19v ZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19w b3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRl cm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBj bGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZl b2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3Jf dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHBlcnJv ciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsK ZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQg X3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoK CgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIg Kl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1 Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAq X19yZXN0cmljdCBfX29ic3RhY2ssIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg Li4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFj ayAqX19yZXN0cmljdCBfX29ic3RhY2ssIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSB0aHJvdyAoKTsKIyA2MTIgIi91c3IvaW5jbHVkZS9z dGRpby5oIiAzCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK CmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNjMz ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgi IDEgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCmlubGluZSBpbnQKdnByaW50 ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykg dGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoK aW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19nZXRjIChz dGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkgdGhyb3cg KCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5fSU9fcmVhZF9l bmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCktPl9JT19yZWFk X3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCkK ewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9JT19yZWFkX2Vu ZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVh ZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCkKewog IHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoKCgppbmxpbmUgaW50CmZwdXRjX3Vu bG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChf X3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBf X292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBj aGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxp bmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7 CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9f d3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykp IDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykp KTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCkKewog IHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5fSU9fd3JpdGVf ZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNp Z25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoK aW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5lcHRyLCBzaXplX3QgKl9fbiwg RklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gX19nZXRkZWxpbSAoX19saW5lcHRy LCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlubGluZSBpbnQKZmVvZl91bmxvY2tlZCAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3Mg JiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9 IDApOwp9CiMgNjM0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKfQojIDQyICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMKIyA4NiAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1 c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNp bmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6 ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6Zmdl dHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsK ICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVz aW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5n IDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0 Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7 CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNp bmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcg OjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpz cHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRt cG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnBy aW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6 c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5nIDo6dnNjYW5mOwogIHVzaW5nIDo6 dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg X19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZmc2NhbmY7CiAgdXNpbmcg X19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c25wcmludGY7CiAgdXNpbmcg X19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3N0 ZGlvIiAyIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL2MrK2lvLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3N0ZGRl ZiIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9jKytpby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt bGludXgtZ251L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzcg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRl ZmF1bHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwojIDE4ICIvdXNyL2lu Y2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDE5 ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgi IDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMK CgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQu aCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA0NyAiL3Vzci9p bmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgc2No ZWRfcHJpb3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQg KCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLCBpbnQgX19mbGFncywg dm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgp9CiMgMzMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAy IDMKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX19zY2hlZF9zZXRwYXJhbSAoX19waWRfdCBf X3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKZXh0 ZXJuIGludCBzY2hlZF9zZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0cGFy YW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9w YXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3NldHNjaGVkdWxl ciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJh bSAqX19wYXJhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlciAoX19w aWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19w YXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlk X3QgX19waWQpIHRocm93ICgpOwpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRf dCBfX3BpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3lpZWxkICh2b2lkKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBfX3NjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGht KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdv cml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9f cGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBz Y2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190 KSB0aHJvdyAoKTsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIg MwoKZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUv dGltZS5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIv dXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKIyA5NSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1 Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQg dG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGlu dCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2Nv bnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQp IHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAo KTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0aW1lICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGlt ZTApIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0 aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXpl X3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3Ry aWN0IF9fdHApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3Qg Y2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgp OwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVy KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVf dCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRtICpfX2dtdGltZV9yIChf X2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3Qg X190cCkgdGhyb3cgKCk7CgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1l X3QgKl9fcmVzdHJpY3QgX190aW1lciwgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93 ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpf X3Jlc3RyaWN0IF9fdGltZXIsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93 ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19y ZXN0cmljdCBfX3RwLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIGNoYXIg Kl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsy XTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoK CmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoK CgoKCmV4dGVybiBpbnQgc3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3doZW4pIHRocm93ICgpOwoj IDIyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0 IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3RydWN0IHRt ICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf X3JlcXVlc3RlZF90aW1lLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsK IyAyNTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoK CgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJv dyAoKTsKIyAyNzIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX3Ig KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0cmluZywgc3RydWN0IHRtICpfX3Jlc3RyaWN0 IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCgp9CiMgMjIgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgi IDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRl L3NpZ25hbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDMwICIvdXNy L2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3NpZ3NldC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA0OSAi L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKIyAz NjIgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp9CiMgMjUgIi91c3IvaW5jbHVkZS9wdGhyZWFk LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyNiAi L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMgNDkgIi91c3IvaW5j bHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBU SFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVE LAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9T WVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVU RVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVY X0VSUk9SQ0hFQ0tfTlAKCiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRF WF9GQVNUX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNV UlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJP UkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFM Cgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VT U19TSEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwK ICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZF Ul9XUklURVJfTk9OUkVDVVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQ VEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QCn07CgoKCgoKCnN0cnVjdCBfcHRocmVhZF9j bGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAgdm9pZCAqX19h cmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIg Kl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFE X0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAg UFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE0MSAiL3Vzci9pbmNsdWRlL3B0aHJl YWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9fdGhyZWFkLCBf X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAo dm9pZCAqKSwgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBwdGhyZWFkX3QgcHRo cmVhZF9zZWxmICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0 aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpIHRocm93ICgpOwoKCmV4dGVy biB2b2lkIHB0aHJlYWRfZXhpdCAodm9pZCAqX19yZXR2YWwpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFk X3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVhZF9hdHRyX3QgKl9fYXR0 cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0 aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRy X3QgKl9fYXR0ciwgaW50ICpfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw dGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgX19jb25z dCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRo cmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19w b2xpY3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGlj eSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgKl9fcG9saWN5KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0 dHJfdCAqX19hdHRyLCBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs IGludCAqX19pbmhlcml0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0 c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq X19hdHRyLCBpbnQgKl9fc2NvcGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0 dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzaXplX3QgX19ndWFyZHNp emUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90ICpfX2d1YXJkc2l6ZSkgdGhyb3cg KCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIgKHB0aHJlYWRf YXR0cl90ICpfX2F0dHIsIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsIHZvaWQgKipfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFk X2F0dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzaXplX3QgX19zdGFj a3NpemUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUg KF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90ICpfX3N0YWNrc2l6ZSkgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX3Qg X190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt ICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0g KHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCAqX19wb2xpY3ksIHN0cnVjdCBzY2hlZF9w YXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNvbmN1 cnJlbmN5ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y29uY3VycmVu Y3kgKGludCBfX2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0 ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX211dGV4LCBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhh dHRyX3QgKl9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhf aW5pdCAocHRocmVhZF9tdXRleF90ICpfX211dGV4LCBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRy X3QgKl9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4 X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg cHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq X19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhy ZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211 dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg cHRocmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X3VubG9jayAocHRocmVhZF9tdXRleF90ICpfX211 dGV4KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3VubG9jayAocHRocmVhZF9t dXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0 ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CmV4dGVy biBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRy KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRo cmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdGhyZWFkX211 dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK CgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4 YXR0cl90ICpfX2F0dHIsIGludCBfX2tpbmQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFk X211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCBfX2tp bmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9f Y29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgKl9fa2luZCkgdGhyb3cgKCk7 CiMgMzIzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9jb25k X2luaXQgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQsIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90 ICpfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ry b3kgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9f Y29uZCwgcHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kLCBwdGhyZWFk X211dGV4X3QgKl9fbXV0ZXgsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX2Fic3RpbWUpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAocHRocmVhZF9j b25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0 cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2Nr LCBfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2Nr KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9y d2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tf dHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX3J3bG9ja193cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9y d2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tf dW5sb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0 cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRo cmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X3J3bG9ja2F0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19h dHRyLCBpbnQgKl9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds b2NrYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLCBpbnQgX19w c2hhcmVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2lu ZF9ucCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLCBpbnQgKl9fcHJlZikg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRraW5kX25wIChw dGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLCBpbnQgX19wcmVmKSB0aHJvdyAoKTsKIyA0MjAg Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBfX3B0aHJlYWRfa2V5X2NyZWF0 ZSAocHRocmVhZF9rZXlfdCAqX19rZXksIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAq KSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlf dCAqX19rZXksIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBf X2tleSwgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhy ZWFkX3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fcG9p bnRlcikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICpfX3B0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0 aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVj aWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNDQ1ICIvdXNyL2luY2x1ZGUv cHRocmVhZC5oIiAzCmV4dGVybiBpbnQgX19wdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpf X29uY2VfY29udHJvbCwgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoK ZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwg dm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUs IGludCAqX19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChw dGhyZWFkX3QgX190aHJlYWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0 Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA0ODEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK ZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51 cF9idWZmZXIgKl9fYnVmZmVyLCB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKSwgdm9pZCAqX19h cmcpIHRocm93ICgpOwojIDQ5MSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9p ZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpf X2J1ZmZlciwgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CiMgNTAyICIvdXNyL2luY2x1ZGUvcHRo cmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0 IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgdm9pZCAoKl9fcm91dGluZSkgKHZv aWQgKiksIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA1MTMgIi91c3IvaW5jbHVkZS9wdGhyZWFk LmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAoc3RydWN0IF9w dGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7 CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIyAzMSAiL3Vzci9p bmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgKGlu dCBfX2hvdywgX19jb25zdCBfX3NpZ3NldF90ICpfX25ld21hc2ssIF9fc2lnc2V0X3QgKl9fb2xk bWFzaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFkX3QgX190 aHJlYWQsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsKIyA1MTkgIi91c3IvaW5jbHVkZS9wdGhyZWFk LmgiIDIgMwojIDUzNCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IF9fcHRo cmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwgdm9pZCAoKl9fcGFyZW50KSAo dm9pZCksIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwgdm9pZCAoKl9fcGFyZW50KSAo dm9pZCksIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9p ZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVy biB2b2lkIF9fcHRocmVhZF9pbml0aWFsaXplICh2b2lkKSB0aHJvdyAoKTsKCn0KIyAzOCAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVs dC5oIiAyIDMKCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7CnR5cGVkZWYg cHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhyZWFkX211dGV4X3Qg X19ndGhyZWFkX211dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFkX29uY2UKI3ByYWdt YSB3ZWFrIHB0aHJlYWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfZGVsZXRl CiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX3Nl dHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdtYSB3ZWFrIHB0aHJl YWRfbXV0ZXhfbG9jawojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF90cnlsb2NrCiNwcmFnbWEg d2VhayBwdGhyZWFkX211dGV4X3VubG9jawojIDc4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIHZvaWQgKl9f Z3RocmVhZF9hY3RpdmVfcHRyID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRlOwoKc3RhdGljIGlu bGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgcmV0dXJuIF9fZ3RocmVhZF9h Y3RpdmVfcHRyICE9IDA7Cn0KIyA0MjcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1w Yy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5saW5lIGludApfX2d0 aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkK ewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChv bmNlLCBmdW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9f Z3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2 b2lkICopKQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3Rh dGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5X3Qga2V5LCB2 b2lkICpwdHIpCnsKCiAgaWYgKHB0cikKICAgIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChr ZXksIDApOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJl YWRfa2V5X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2tl eV9kZWxldGUgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqCl9fZ3RocmVhZF9nZXRzcGVj aWZpYyAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmlj IChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3Ro cmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikKewogIHJldHVybiBwdGhyZWFkX3NldHNw ZWNpZmljIChrZXksIHB0cik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9s b2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9w ICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJl dHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19n dGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAg IHJldHVybiBwdGhyZWFkX211dGV4X3RyeWxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4g MDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFk X211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVy biBwdGhyZWFkX211dGV4X3VubG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CiMg OTkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhy LmgiIDIgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251 L2JpdHMvYysraW8uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBsb25nIHN0cmVh bW9mZjsKICB0eXBlZGVmIHB0cmRpZmZfdCBzdHJlYW1zaXplOwoKCgogIHR5cGVkZWYgZnBvc190 IF9fY19zdHJlYW1wb3M7CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoK CiAgdHlwZWRlZiBGSUxFIF9fY19maWxlX3R5cGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7 CiAgICB0eXBlZGVmIHNob3J0IF9faW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf ZGVjID0gMHgwMDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAw MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25z dCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19vY3QgPSAweDAwNDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9 IDB4MDA4MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAx MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19za2lwd3MgPSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU191bml0YnVmID0gMHgyMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBw ZXJjYXNlID0gMHg0MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0Zmll bGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19iYXNlZmllbGQgPSAweDAwMDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1NfZW9mYml0ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2ZhaWxiaXQgPSAweDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAw eDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf dHlwZSBfU19pbiA9IDB4MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAw eDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0K IyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMSAzCiMgMzcgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwoj IDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzkg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDQyICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIg MwoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3dj aGFyLmgiIDIgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBp bnQgY291bnQ7CiAgd2ludF90IHZhbHVlOwp9IG1ic3RhdGVfdDsKIyA3NyAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDMKc3RydWN0IHRtOwoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3 Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBz aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAq X19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhy b3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19k ZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IHdjc2NtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0 IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKZXh0ZXJuIGludCB3Y3NuY21wIChfX2NvbnN0IHdj aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z dCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc25jYXNlY21wIChfX2Nv bnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDExMyAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDIgMwoKZXh0ZXJuIGludCBfX3djc2Nhc2VjbXBfbCAoX19jb25zdCB3 Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIF9fbG9jYWxlX3QgX19sb2MpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgX193Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fczEs IF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZy bSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgMTM2ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MwpleHRlcm4gaW50IF9fd2NzY29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qg d2NoYXJfdCAqX19zMiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6 ZV90IF9fd2NzeGZybV9sICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNp emVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAq d2NzZHVwIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90 ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykgdGhyb3cgKCk7 CgpleHRlcm4gd2NoYXJfdCAqd2NzcmNociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJf dCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdjaGFy X3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAq X19hY2NlcHQpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2No YXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpIHRocm93ICgpOwoKCmV4dGVy biB3Y2hhcl90ICp3Y3NzdHIgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3 Y2hhcl90ICpfX25lZWRsZSkgdGhyb3cgKCk7CiMgMTc0ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MwpleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRy KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgX193Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAq X19zKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19z KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChfX2NvbnN0IHdjaGFyX3QgKl9f cywgc2l6ZV90IF9fbWF4bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY2hy IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEs IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwgX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3Qg Kl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbXNldCAo d2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRl cm4gd2ludF90IGJ0b3djIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3RvYiAo d2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAoX19jb25zdCBtYnN0 YXRlX3QgKl9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1icnRvd2MgKHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19wd2MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf X24sIG1ic3RhdGVfdCAqX19wKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgd2NydG9tYiAo Y2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IF9fbWJybGVuIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykg dGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoK CgoKCmV4dGVybiBfX2lubGluZSBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0 ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpCnsgcmV0dXJuIChfX3BzICE9IF9fbnVsbAog ICAgICAgICAgPyBtYnJ0b3djIChfX251bGwsIF9fcywgX19uLCBfX3BzKSA6IF9fbWJybGVuIChf X3MsIF9fbiwgX19udWxsKSk7IH0KCgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fZHN0LCBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl X3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCB3Y2hh cl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJp Y3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNp emVfdCBfX25tYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9f ZHN0LCBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ud2MsIHNp emVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwojIDI3NyAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIGludCB3Y3dpZHRoICh3aW50X3QgX19jKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNp emVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgd2NzdG9kIChfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikg dGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7Cgpl eHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f bnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCgpleHRl cm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3 Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRo cm93ICgpOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4g dW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhy b3cgKCk7CgoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwg KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVz dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg dGhyb3cgKCk7CiMgMzU1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS94bG9jYWxlLmgiIDEgMwojIDM1NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgpleHRl cm4gbG9uZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0 ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3Qg X19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2wg KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfbCAoX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu dCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4 dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf X2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgX193 Y3N0b2RfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4g ZmxvYXQgX193Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK CgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9f bG9jKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfaW50ZXJuYWwgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2lu dGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRv dWJsZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19u cHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93ICgp OwoKCgoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp bnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0 ciwgd2NoYXJfdCAqKiBfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91 cCkgdGhyb3cgKCk7CgoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9f d2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIsIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy b3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg X193Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIs IHdjaGFyX3QgKiogX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXAp IHRocm93ICgpOwojIDQ0MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIF9faW5saW5l IGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikg dGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDAp OyB9CmV4dGVybiBfX2lubGluZSBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbF9pbnRlcm5hbCAoX19ucHRyLCBf X2VuZHB0ciwgX19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQg d2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz ZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRy LCBfX2Jhc2UsIDApOyB9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9m X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBk b3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf X2VuZHB0cikgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2xkX2ludGVybmFsIChfX25wdHIsIF9f ZW5kcHRyLCAwKTsgfQoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBp bnQgd2NzdG9xIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93 ICgpCnsgcmV0dXJuIF9fd2NzdG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNl LCAwKTsgfQpfX2V4dGVuc2lvbl9fCmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcg aW50IHdjc3RvdXEgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBf X2VuZHB0ciwgX19iYXNlLCAwKTsgfQoKCgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjcGNweSAod2No YXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHdjaGFyX3QgKndjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Ny Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgNTAyICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp9 CiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwoj IDU3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCm5hbWVz cGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdGF0 ZV90eXBlIF9NX3N0OwogICAgICBzdHJlYW1vZmYgX01fb2ZmOwoKICAgIHB1YmxpYzoKICAgICAg X19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAg IHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoK CiAgICAgIGZwb3MoKTogX01fc3QoX19zdGF0ZV90eXBlKCkpLCBfTV9vZmYoc3RyZWFtb2ZmKCkp IHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19z dGF0ZV90eXBlKCkpCiAgICAgIDogX01fc3QoX19zdCksIF9NX29mZihfX29mZikgeyB9CgogICAg ICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZw b3MmCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsg cmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBf X29mZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAg ICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgdCgqdGhp cyk7CiAgICAgICAgcmV0dXJuIHQgKz0gX19vZmY7CiAgICAgIH0KCiAgICAgIGZwb3MmCiAgICAg IG9wZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIHQoKnRoaXMp OwogICAgICAgIHJldHVybiB0IC09IF9fb2ZmOwogICAgICB9CgogICAgICBib29sCiAgICAgIG9w ZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9 PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9z JiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoK ICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2Zm OyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9v ZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBv czsKCgoKfQojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMu aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBz dHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoK ICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVh bXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5 cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3Np Z24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9 IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19j MSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0K CiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3Qg Y2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3Rh dGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90 eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgZm9yIChzaXplX3QgX19pID0g MDsgX19pIDwgX19uOyArK19faSkKICAgICAgICAgIGlmICghZXEoX19zMVtfX2ldLCBfX3MyW19f aV0pKQogICAgICAgICAgICByZXR1cm4gbHQoX19zMVtfX2ldLCBfX3MyW19faV0pID8gLTEgOiAx OwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxl bmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgewogICAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX19wID0gX19zOwogICAgICAgIHdoaWxlICgqX19wKSArK19fcDsKICAgICAgICByZXR1cm4g KF9fcCAtIF9fcyk7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAg IGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYg X19hKQogICAgICB7CiAgICAgICAgZm9yIChjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fczsgc2l6 ZV90KF9fcCAtIF9fcykgPCBfX247ICsrX19wKQogICAgICAgICAgaWYgKCpfX3AgPT0gX19hKSBy ZXR1cm4gX19wOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgY2hhcl90 eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBz aXplX3QgX19uKQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZShfX3MxLCBfX3My LCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAg ICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBf X24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkoX19zMSwgX19zMiwgX19uICog c2l6ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3Np Z24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsKICAg ICAgICBmb3IgKGNoYXJfdHlwZSogX19wID0gX19zOyBfX3AgPCBfX3MgKyBfX247ICsrX19wKQog ICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7CiAgICAgICAgcmV0dXJuIF9fczsKICAgICAgfQoK ICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUm IF9fYykKICAgICAgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRf dHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50 X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3Qg aW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2Mx ID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBz dGF0aWNfY2FzdDxpbnRfdHlwZT4oLTEpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg bm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShf X2MsIGVvZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9OwoKCgogIHRlbXBsYXRlPD4K ICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNoYXIgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1w b3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBl ZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWdu KGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBf X2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEs IGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9Cgog ICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNo YXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRp YyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw ZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9f bik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSog X19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNo YXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29u c3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXJf dHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq CiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVf dCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19z MSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hh cl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24pKTsg fQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBz aXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFy X3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl CiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90eXBlCiAg ICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0KCiAg ICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBj b25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAg ICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5 cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBp bnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBfX2M7IH0K ICB9OwojIDI2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1 Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAgICBfQ2hh cl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoKICAgICAg Ym9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJhaXRz OjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfaXRlcmF0b3IuaCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfaXRlcmF0b3IuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4 Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9mcG9zLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRp b25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9l eGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2 b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVp ZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19v dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0 MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzCgpuYW1l c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+ CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf aXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBl bmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdi dWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf dHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9D aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAg ICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp Y19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9 IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJh c2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg aXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0 ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4g aW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVm IGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hh cj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5 cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lz dHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdz dHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxj aGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7 CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2lj X29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBm c3RyZWFtOwojIDEyOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2Qu aCIgMwp9CiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3Iu aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9i YXNlX3R5cGVzLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgpzdHJ1Y3QgaW5wdXRf aXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZv cndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0 IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFn IHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rp b25hbF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9E aXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9y X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVk ZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0 eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3RydWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlw ZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9p ZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2 b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVk ZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg dmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl ZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y IHsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5 OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5j ZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21f YWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0 ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlz dGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYg X1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NhdGVnb3J5LCBjbGFzcyBfVHAs IGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAgIGNsYXNzIF9Qb2ludGVyID0g X1RwKiwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCY+CnN0cnVjdCBpdGVyYXRvciB7CiAgdHlwZWRl ZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK ICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfUG9pbnRlciBw b2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1l IF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5 cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5h bWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNz X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9p bnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K c3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90 eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0 IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwp9OwojIDE0MCAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgi IDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRl ciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9y X2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZl cmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0 aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUq PigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVyJikKewog IHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1 ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVnb3J5 KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQoK CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYgX19pKSB7 IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgpp bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFsdWVf dHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQoKfQoj IDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwoj IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5j cy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29u Y2VwdF9jaGVjay5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Nv bmNlcHRfY2hlY2suaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt bGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAyIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKbmFtZXNwYWNlIHN0 ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+ CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCBpbnB1 dF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz dCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19u LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwg X0Rpc3RhbmNlJiBfX24pCnsKCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbiwgaXRl cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy YXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9 IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwog IH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46 OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0 LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf aXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBfX2xh c3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUK ZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQp7 CgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRl cmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0 LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rp c3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX24t LSkgKytfX2k7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFz cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9y JiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAoX19uID4g MCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9fbisrKSAtLV9f aTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh bmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9E aXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBfX2kgKz0gX19uOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQg YWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQp7CgogIF9fYWR2YW5j ZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCn0KIyAzNiAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDM0ICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpw cm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29u dGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVy YXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCBy ZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9f eCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192 YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7 IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy YXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFp bmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJh Y2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFz cyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFp bmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVk ZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQg dmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9p ZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250X2lu c2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgZnJv bnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFt ZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250YWluZXItPnB1c2hf ZnJvbnQoX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9pdGVy YXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9p bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg fQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsg cmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGZy b250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVy JiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpw cm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6 Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5 cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5 cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAg dHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgaW5zZXJ0 X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3Ig X19pKQogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRv cjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs dWVfdHlwZSYgX192YWx1ZSkgewogICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9f dmFsdWUpOwogICAgKytpdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRlcmF0 b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0 ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNl cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5l Cmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9J dGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9f aXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9f aSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX1Rw LCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0 cmRpZmZfdD4KY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVm IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBf VHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwg X0Rpc3RhbmNlPiBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3Vy cmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0 b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5j ZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVm ZXJlbmNlIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30K ICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJ dGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0 b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9y KigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50Owog ICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl dHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJy ZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAg X1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9 CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7 CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwog ICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf QmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJv b2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxf QmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlk aXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkK ewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf QmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJv b2wgb3BlcmF0b3IhPSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxf QmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlk aXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkK ewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CiMgMTkzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KY2xh c3MgcmV2ZXJzZV9pdGVyYXRvcgp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3IgY3VycmVudDsKcHVi bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJh dG9yX2NhdGVnb3J5CiAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICB2YWx1 ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZQogICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIKICAgICAgICAgIHBvaW50ZXI7 CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNl CiAgICAgICAgICByZWZlcmVuY2U7CgogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7 CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4gX1NlbGY7CgpwdWJsaWM6CiAg cmV2ZXJzZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRv cl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30KCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBf U2VsZiYgX194KSA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9J dGVyPgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9f eCkKICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBj b25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsK ICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQog IHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9Cgog IF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwog IH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAg IC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7 CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0o aW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJu IF9fdG1wOwogIH0KCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0 IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9y Kz0oZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4g KnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7 CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCArIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09 KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0 aGlzOwogIH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25z dCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRv cj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv cj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZl cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkg PCBfX3guYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBv cGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7 CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+Cmlu bGluZSBib29sIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRv cj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv cj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgpv cGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUgX19uLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf X3gpIHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBf X24pOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNo YXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgY2xhc3Mg X0Rpc3QgPSBwdHJkaWZmX3Q+CmNsYXNzIGlzdHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlw ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0 eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogIHR5 cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1Rw IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBj b25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKCiAgaXN0 cmVhbV9pdGVyYXRvcigpIDogX01fc3RyZWFtKDApLCBfTV9vayhmYWxzZSkge30KICBpc3RyZWFt X2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQo KTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0K ICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoK ICBpc3RyZWFtX2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fcmVhZCgpOwogICAgcmV0 dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBp c3RyZWFtX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4g X190bXA7CiAgfQoKICBib29sIF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkg Y29uc3QKICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01f c3RyZWFtID09IF9feC5fTV9zdHJlYW0pOyB9Cgpwcml2YXRlOgogIGlzdHJlYW1fdHlwZSogX01f c3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9NX29rOwoKICB2b2lkIF9NX3JlYWQoKSB7 CiAgICBfTV9vayA9IChfTV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAg ICBpZiAoX01fb2spIHsKICAgICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgICAgX01fb2sg PSAqX01fc3RyZWFtID8gdHJ1ZSA6IGZhbHNlOwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBi b29sCm9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0 cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9D aGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xh c3MgX0Rpc3Q+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxf VHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVh bV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4g IV9feC5fTV9lcXVhbChfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNs YXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K Y2xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7CnB1YmxpYzoKICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5 cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlw ZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9f cykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQogIG9zdHJlYW1faXRlcmF0b3Io b3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9DaGFyVCogX19jKQogICAgOiBfTV9zdHJlYW0oJl9f cyksIF9NX3N0cmluZyhfX2MpIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0o Y29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAo X01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9 CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQog IG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAg b3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0K cHJpdmF0ZToKICBvc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsKICBjb25zdCBfQ2hhclQqIF9NX3N0 cmluZzsKfTsKIyA0MTcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0 b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+ CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJh aXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAg IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAg ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAg ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KewoKcHJvdGVj dGVkOgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgogIHR5cGVkZWYgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxfaXRlcmF0b3JfdHlwZTsKICB0 eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRl Z29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVf dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBk aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpwb2ludGVy IHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpyZWZlcmVuY2UgcmVm ZXJlbmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkg eyB9CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6 IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogIGlubGlu ZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRh aW5lcj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogIHJlZmVyZW5j ZQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogIHBvaW50ZXIK ICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICBub3JtYWxfaXRl cmF0b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsg fQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25v cm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYK ICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxf aXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv cihfTV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVyYXRvcltdKGNvbnN0IGRpZmZl cmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICBu b3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYg X19uKQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRl cmF0b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QK ICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICBub3Jt YWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u KQogIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0 b3JfdHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7 IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICBkaWZmZXJl bmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29u c3QKICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgY29uc3QgX0l0 ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9Cn07CgoKCnRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D b250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gX19saHMu YmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwg dHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3Bl cmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg X19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv bnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQoKCgp0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29u dGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl cmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNl KCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9y Pihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs CiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy PiYgX19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGlu ZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0Nv bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShfX3JocyA8IF9fbGhzKTsgfQoK dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5h bWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAh KF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1l IF9Db250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu ZXI+Cm9wZXJhdG9yKyhfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+Ojpk aWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cgp9CiMgMzcgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgNDMgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzYgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcGFpci5oIiAxIDMKIyAzNCAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBm aXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1Qy IHNlY29uZDsKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCiAgcGFpcihjb25z dCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30K CiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEs IF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsK CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj b25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAg cmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25k Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9y PChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7 CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3Qg PCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1Qx LCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3gg PT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv cGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m IF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBj b25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0 IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1 cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5s aW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0 dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDM4ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDIxICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMiAzCiMgNTcgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlIDxib29s IF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9Owp0eXBlZGVmIF9Cb29sPHRydWU+IF9fdHJ1ZV90eXBl Owp0eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2ZhbHNlX3R5cGU7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1t eV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyA4MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxf Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVz dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1w bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1 bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1 bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0 X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7 Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu ZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1 Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRz PF9UcCo+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+ IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVl X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p bnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRl bXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw ZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBz aG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7 Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl Z2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBs b25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25v cm1hbF9pdGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFt ZXNwYWNlIHN0ZCB7CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0Nv bnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBf SXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9y PCBzdGQ6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9jbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lz bGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEzMCAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xpbWl0 cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEy NiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvbG9jYWxfbGltLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIg MwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVk ZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9s aW0uaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5o IiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91 c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3Rk aW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMg MzkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTMxICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N5c2xpbWl0 cy5oIiAyIDMKIyAxMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY2xpbWl0cy5oIiAyIDMKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2NzdGRsaWIuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBj LWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAz CiMgMjUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vz ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoK Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90 OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCBy ZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAg IGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsK IyA4MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRf bWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25z dCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIg Kl9fbnB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpf X25wdHIpIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0 b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc3Ry dG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBs b25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgpleHRlcm4gdW5zaWdu ZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0 ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhy b3cgKCk7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0 b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDMKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSkgdGhyb3cgKCk7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBs b25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDE1NyAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMTU4 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xf bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4g dW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90 IF9fbG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBf X3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxf bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVy biBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCmV4 dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhy b3cgKCk7CiMgMTk2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJsZSBfX3N0 cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQg X19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u ZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9f bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGlu dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0 b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoK CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9u X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19j b25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKiogX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwojIDI0MiAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkK ewogIHJldHVybiBfX3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0 ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhy b3cgKCkKewogIHJldHVybiBfX3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i YXNlLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs CiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVy bmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZs b2F0CnN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2ZfaW50ZXJuYWwgKF9f bnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZQpzdHJ0b2xk IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19l bmRwdHIsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBp bnQKc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9f c3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50 ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9f YmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19l bmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWdu ZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkgdGhy b3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBf X2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIg Kl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9f bnVsbCk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg dGhyb3cgKCkKewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVs bCwgMTApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9f bnB0cikgdGhyb3cgKCkKewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVs bCwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAph dG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sbCAo X19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KIyAzMzMgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRl cm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAzNDAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MiAzCgoKCgoKCmV4dGVybiBpbnQzMl90IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IHZvaWQgKiBpbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIHZvaWQgKiBfX3N0YXRlYnVm LCBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqIHNldHN0YXRl ICh2b2lkICogX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEK ICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0 YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3Nl cDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVj dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jl c3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3Nl ZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0 c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqIF9fcmVzdHJpY3QgX19zdGF0ZWJ1 Ziwgc2l6ZV90IF9fc3RhdGVsZW4sIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1 ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldHN0YXRlX3IgKHZvaWQgKiBfX3Jlc3RyaWN0 IF9fc3RhdGVidWYsIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBz cmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmFuZF9y ICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRy YW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAo dm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBp bnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQp IHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f eHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2Vl ZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWdu ZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDgg KHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgpzdHJ1Y3QgZHJhbmQ0 OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IHhbM107CiAgICB1bnNpZ25lZCBzaG9y dCBpbnQgYVszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBjOwogICAgdW5zaWduZWQgc2hvcnQg aW50IG9sZF94WzNdOwogICAgaW50IGluaXQ7CiAgfTsKCgoKZXh0ZXJuIGludCBkcmFuZDQ4X3Ig KHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGRvdWJsZSAqX19yZXN0 cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQg c2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i dWZmZXIsIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwg bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBucmFu ZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRh ICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y ZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp OwoKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLCBz dHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19yZXN0 cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBp bnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLCBzdHJ1 Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBsY29uZzQ4 X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X2J1ZmZlcikgdGhyb3cgKCk7CiMgNDc0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu IHZvaWQgKiBtYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgKiBj YWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gdm9pZCAqIHJlYWxsb2MgKHZvaWQgKiBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7 CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9p ZCBjZnJlZSAodm9pZCAqIF9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxs b2NhLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAx ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCmV4dGVybiAiQyIg ewoKCgoKCmV4dGVybiB2b2lkICogYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoK Cgp9CiMgNDkzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKiB2 YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZv aWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGlu dCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IF9fb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqIF9fYXJnKSwg dm9pZCAqIF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVu YykgKGludCBfX3N0YXR1cywgdm9pZCAqIF9fYXJnKSwgdm9pZCAqIF9fYXJnKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVz KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hh ciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBp bnQgX19yZXBsYWNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgdW5zZXRlbnYgKF9fY29uc3Qg Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkg dGhyb3cgKCk7CiMgNTY2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1r dGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWtzdGVt cCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19j b25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25p Y2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDU5NSAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJv dyAoKTsKCgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAq LCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5f dDsKCgoKCgpleHRlcm4gdm9pZCAqIGJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqIF9fa2V5LCBfX2Nv bnN0IHZvaWQgKiBfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBh cl9mbl90IF9fY29tcGFyKTsKCgoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqIF9fYmFzZSwg c2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoK CgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25n IGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50 IF9fZGVub20pIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxk aXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKSB0aHJvdyAoKQog ICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxs ZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwgbG9uZyBsb25nIGludCBfX2Rlbm9t KSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNjUxICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBp bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19z aWduKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGlu dCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3Np Z24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50 IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChs b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0 LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpxZmN2dCAo bG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNw dCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqcWdjdnQg KGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgp OwoKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19y ZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZjdnRf ciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs IGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf X2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0 IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9f cmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CiMgNjk1ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVf dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fcHdjLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3 Y3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoK CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKIyA3MTggIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAq X19yZXNwb25zZSkgdGhyb3cgKCk7CiMgNzI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0 ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwgX19jb25zdCBj aGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLCBjaGFyICoqX19yZXN0cmljdCBfX3Zh bHVlcCkgdGhyb3cgKCk7CiMgNzM4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZv aWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp bnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChp bnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVm LCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRo cm93ICgpOwoKCgoKCn0KIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j c3RkbGliLmgiIDIgMwojIDczICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nz dGRsaWIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRp dl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5nIDo6YXRleGl0Owog IHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9sOwogIHVzaW5nIDo6 YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1c2luZyA6OmV4aXQ7 CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6bGFiczsKICB1c2lu ZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsKICB1c2luZyA6Om1i c3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAgdXNpbmcgOjpyYW5k OwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5nIDo6c3RydG9kOwog IHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN5c3RlbTsKICB1 c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUgbG9uZwogIGFicyhs b25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9u ZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9CiMgMTI1ICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwpuYW1lc3BhY2UgX19n bnVfY3h4CnsKICB1c2luZyA6OmxsZGl2X3Q7CiAgdXNpbmcgOjpfRXhpdDsKCiAgaW5saW5lIGxv bmcgbG9uZwogIGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1f X3g7IH0KCiAgaW5saW5lIGxvbmcgbG9uZwogIGxsYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJu IF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGRpdihsb25nIGxv bmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8g X19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIGlubGluZSBsbGRpdl90 CiAgbGxkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBf X3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoK ICB1c2luZyA6OmF0b2xsOwogIHVzaW5nIDo6c3RydG9mOwogIHVzaW5nIDo6c3RydG9sbDsKICB1 c2luZyA6OnN0cnRvdWxsOwogIHVzaW5nIDo6c3RydG9sZDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAg dXNpbmcgX19nbnVfY3h4OjpsbGRpdl90OwogIHVzaW5nIF9fZ251X2N4eDo6X0V4aXQ7CiAgdXNp bmcgX19nbnVfY3h4OjphYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGFiczsKICB1c2luZyBfX2du dV9jeHg6OmRpdjsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6 YXRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2Y7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0 b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG91bGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0 b2xkOwp9CiMgNDUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgi IDEgMwojIDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3IiAxIDMKIyAzNCAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2NzdGRkZWYiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMiAzCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDM0ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNl IHN0ZAp7CiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRo cm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygpOwogICAgdmlydHVhbCBj b25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKICBjbGFzcyBiYWRfZXhjZXB0 aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkg dGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07Cgog IHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKICB0eXBlZGVmIHZvaWQgKCp1 bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRl KHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOwogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1 dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0 ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0aHJvdygpOwogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0 cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0 aHJvdygpOwp9Cgp9CiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3IiAyIDMKCmV4 dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMg ZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CiAgICB2 aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3QgeyB9 OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQgKCpuZXdf aGFuZGxlcikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIpOwp9 CgoKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2Mp Owp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9j KTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRl bGV0ZVtdKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBj b25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6 c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs ZXRlKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9y IGRlbGV0ZVtdKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGlu ZSB2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsg cmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwg dm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfQojIDQ3ICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA0OSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNTAgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEg MwojIDUxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAz CiMgNTIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAz CiMgNTMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNz IF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0Zvcndh cmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKQp7CiAgX1RwIF9fdG1wID0gKl9f YTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0Zv cndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQp7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2l0ZXJfc3dhcChf X2EsIF9fYiwgX192YWx1ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxp bmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX190bXAgPSBfX2E7 CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBj b25zdCBfVHAmIF9fYikgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJl dHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg Y29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBf X2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1Rw JiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsK CiAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KIyAxMzcg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4K aW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog ICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikK ewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNl PgppbmxpbmUgX091dHB1dEl0ZXIKX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5k b21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9f biA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAq X19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jl c3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwo Y29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKewog IG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmly c3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRl ciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2Vf dHlwZSkKewogIHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAg ICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBf X2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0 KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKF9UcCog X19maXJzdCwgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFz dCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlf YXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0 LAogICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlf dHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091dHB1dEl0 ZXIgX19jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewog IHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1eDIoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19j b3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7 CiAgcmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9f Zmlyc3QpKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRw dXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0 SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVl X3R5cGUpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0 ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgp LCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIg X19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlw ZSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46 Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz cyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFs X2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4gX19jb3B5 X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKCgoKdGVtcGxh dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIs CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f Y29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp CiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj bGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJk KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh dG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7 IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9 CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGly ZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9i YWNrd2FyZF9kaXNwYXRjaAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Jp ZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0OwogIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZm ZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFs SXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpIHsKICAg IHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdCgp LCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9f Y29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRp YyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBf X3Jlc3VsdCkgewogICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0Owog ICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7 CiAgICByZXR1cm4gX19yZXN1bHQgLSBfTnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+ CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVl X3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1Rw KiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlz cGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xh c3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4K aW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0 LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAg ICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlh bDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFs PgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVt cGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9i YWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIg X19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1 eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5h bWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1 dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19m YWxzZV90eXBlKXsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+Cmlu bGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2Zp cnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5h bWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4g X19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9f bGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5 cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRl cmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsK ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19O b3JtYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwg dHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9C STEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CgogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBf X05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9P dXRwdXRJdGVyPiBfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90 YWcpIHsKICBmb3IgKCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIHBh aXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l IHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJzdCwgX1Np emUgX19jb3VudCwKICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19j b3VudDsKICByZXR1cm4gcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwg X091dHB1dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwg X091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3Vu dCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9P dXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29weV9uKF9J bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1 bHQpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lk IGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9U cCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZp bGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQog ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lk IGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LAogICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIHVuc2lnbmVkIGNoYXIg X190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsK fQoKaW5saW5lIHZvaWQgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9f bGFzdCwKICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAgc2lnbmVk IGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVk IGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hh ciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCnsKICBjaGFyIF9fdG1w ID0gX19jOwogIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3Rt cCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSB1 bnNpZ25lZCBjaGFyKiBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewog IGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9f bjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihj aGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7 CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5l IGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykK ewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCAr IF9fbjsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRl cjI+CnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBf X2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyMiBfX2ZpcnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAg KytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIx LCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFp cjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19s YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFy eVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJz dDIpKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8 X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9vbCBlcXVh bChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQog ICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICBy ZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ dGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3Qx LCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy KSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxf Y29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg X19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2Zp cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJz dDEsICsrX19maXJzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJl dHVybiB0cnVlOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZh bHNlOwogIH0KICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh c3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj bGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAg ICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qx LCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy LCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9 PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxleGljb2dy YXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBf X2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFz dDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9f Zmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9f cmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhp Y2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBj b25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgo Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19s ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpf X2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkK ICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYg KF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEp OwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29n cmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmly c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog X19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7 CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBp bnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xl bjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAgICAgICAg ICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8gLTEgOiAx KSk7Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNo YXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAg cmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFz dDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0 ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3 YXkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDIxICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDI4ICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBf X3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Mo dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhy b3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5n ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq IF9fcyk7Cn0KIyAyOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5o IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg MSAzCiMgMzAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAz CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwoj IDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzMiAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2Fzc2VydC5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDIg MwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMiAz CiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgoK CgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAz CiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIu aCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o IiAyIDMKIyA1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi IDMKbmFtZXNwYWNlIHN0ZAp7CiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfUmVmY291bnRfQmFzZQp7CgoKCgogIHR5cGVkZWYgc2l6 ZV90IF9SQ190OwoKCgogICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291bnQ7CgoKCgogIF9fZ3Ro cmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwogIF9SZWZjb3VudF9CYXNlKF9SQ190IF9f bikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhyZWFkX211dGV4X3QgX190 bXAgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9GQVNUX05QLCB7MCwgMH19OwogICAgICBfTV9y ZWZfY291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9CiMgMTEyICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsKICAgIF9f Z3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICArK19NX3JlZl9jb3Vu dDsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICB9CiAg X1JDX3QgX01fZGVjcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRf bG9jayk7CiAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OwogICAgX19n dGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgcmV0dXJuIF9fdG1w OwogIH0KIyAxNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o IiAzCn07CiMgMjg0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMu aCIgMwp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kc3RydWN0IF9TVExfbXV0ZXhfc3BpbiB7CiAgZW51 bSB7IF9fbG93X21heCA9IDMwLCBfX2hpZ2hfbWF4ID0gMTAwMCB9OwoKCiAgc3RhdGljIHVuc2ln bmVkIF9fbWF4OwogIHN0YXRpYyB1bnNpZ25lZCBfX2xhc3Q7Cn07Cgp0ZW1wbGF0ZSA8aW50IF9f aW5zdD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbWF4ID0gX1NUTF9tdXRl eF9zcGluPF9faW5zdD46Ol9fbG93X21heDsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp1bnNpZ25l ZCBfU1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19sYXN0ID0gMDsKCnN0cnVjdCBfU1RMX211dGV4 X2xvY2sKewoKCiAgX19ndGhyZWFkX211dGV4X3QgX01fbG9jazsKICB2b2lkIF9NX2luaXRpYWxp emUoKQogIHsKCgoKCgogIH0KICB2b2lkIF9NX2FjcXVpcmVfbG9jaygpIHsgX19ndGhyZWFkX211 dGV4X2xvY2soJl9NX2xvY2spOyB9CiAgdm9pZCBfTV9yZWxlYXNlX2xvY2soKSB7IF9fZ3RocmVh ZF9tdXRleF91bmxvY2soJl9NX2xvY2spOyB9CiMgNDEyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwp9OwojIDQ0NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKc3RydWN0IF9TVExfYXV0b19sb2NrCnsKICBfU1RM X211dGV4X2xvY2smIF9NX2xvY2s7CgogIF9TVExfYXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYg X19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygp OyB9CiAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9Cgpw cml2YXRlOgogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgX1NUTF9h dXRvX2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKfTsKCn0KIyAzOSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyA2OCAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0 ZSA8aW50IF9faW5zdD4KY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToK CiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKICBzdGF0aWMgdm9pZCogX1Nf b29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxs b2Nfb29tX2hhbmRsZXIpKCk7CgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXpl X3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBpZiAoMCA9 PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICByZXR1cm4gX19y ZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkK ICB7CiAgICBmcmVlKF9fcCk7CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBf X3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IHJl YWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBf U19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cgog IHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAg ewogICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAg X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICByZXR1cm4oX19vbGQpOwogIH0K Cn07CgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBs YXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0gMDsKCnRlbXBsYXRl IDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19v b21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlciko KTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzspIHsKICAgICAgICBfX215X21hbGxv Y19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0g X19teV9tYWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7IH0KICAgICAg ICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSBtYWxsb2MoX19u KTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnRlbXBs YXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+Ojpf U19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9t YWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzspIHsKICAg ICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAg ICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9fdGhyb3dfYmFkX2Fs bG9jKCk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19yZXN1 bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jl c3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9j X2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIHNpbXBsZV9h bGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAg ICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShfX24gKiBz aXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSh2b2lkKQogICAgICB7IHJl dHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMg dm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgICB7IGlmICgwICE9IF9f bikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3Rh dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUo X19wLCBzaXplb2YgKF9UcCkpOyB9Cn07CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNs YXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0ge19TX2V4dHJhID0gOH07CgoKCnB1 YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgY2hhciog X19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyAoaW50KSBfU19leHRyYSk7 CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50 KSBfU19leHRyYTsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl X3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4 dHJhOwogICAgKCh2b2lkKSAwKTsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19u ICsgKGludCkgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCog X19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBfX3Jl YWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgodm9pZCkgMCk7CiAgICBj aGFyKiBfX3Jlc3VsdCA9IChjaGFyKikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9w LCBfX29sZF9zeiArIChpbnQpIF9TX2V4dHJhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0 ID0gX19uZXdfc3o7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICB9Cgp9 OwojIDI0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRl bXBsYXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0PgpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGUgewoKcHJpdmF0ZToKCgogIGVudW0ge19BTElHTiA9IDh9OwogIGVudW0ge19NQVhfQllU RVMgPSAxMjh9OwogIGVudW0ge19ORlJFRUxJU1RTID0gMTZ9OwogIHN0YXRpYyBzaXplX3QKICBf U19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNp emVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgdW5pb24gX09i aiB7CiAgICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBf TV9jbGllbnRfZGF0YVsxXTsKICB9OwoKICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9s aXN0W107CgogIHN0YXRpYyBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMp IHsKICAgICAgICByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9BTElHTi0xKS8oc2l6ZV90 KV9BTElHTiAtIDEpOwogIH0KCgogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7 CgoKICBzdGF0aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25v YmpzKTsKCgogIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19l bmRfZnJlZTsKICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgogICAgc3RhdGljIF9TVExf bXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCiAgICBjbGFzcyBfTG9jazsK ICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKICAgIGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6 CiAgICAgICAgICAgIF9Mb2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9s b2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9OyB9CiAgICAgICAgICAgIH5fTG9jaygpIHsgeyBpZiAo dGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfTsgfQog ICAgfTsKCnB1YmxpYzoKCgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsK ICAgIHZvaWQqIF9fcmV0ID0gMDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykg ewogICAgICBfX3JldCA9IG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKTsKICAgIH0KICAgIGVs c2UgewogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgID0gX1Nf ZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKCgogICAgICBfTG9jayBfX2xv Y2tfaW5zdGFuY2U7CgogICAgICBfT2JqKiBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAg ICAgaWYgKF9fcmVzdWx0ID09IDApCiAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRf dXAoX19uKSk7CiAgICAgIGVsc2UgewogICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0 IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgIH0K ICAgIH0KCiAgICByZXR1cm4gX19yZXQ7CiAgfTsKCgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo dm9pZCogX19wLCBzaXplX3QgX19uKQogIHsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZ VEVTKQogICAgICBtYWxsb2NfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgZWxzZSB7 CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdAogICAgICAgICAgPSBfU19mcmVl X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICBfT2JqKiBfX3EgPSAoX09iaiop X19wOwoKCgoKICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAgICAgX19xIC0+IF9NX2Zy ZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAqX19teV9mcmVlX2xpc3QgPSBf X3E7CgogICAgfQogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl X3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7Cgp9IDsKCnR5cGVkZWYgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPHRydWUsIDA+IGFsbG9jOwp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1w bGF0ZTxmYWxzZSwgMD4gc2luZ2xlX2NsaWVudF9hbGxvYzsKCnRlbXBsYXRlIDxib29sIF9fdGhy ZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewog IHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+Cmlu bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoK CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhcioKX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90 IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBfX3Jlc3VsdDsKICAgIHNpemVf dCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgIHNpemVfdCBfX2J5dGVzX2xl ZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgaWYgKF9fYnl0ZXNfbGVmdCA+ PSBfX3RvdGFsX2J5dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAg ICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1 bHQpOwogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19u b2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMg PSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAg ICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVz dWx0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAg ICAgIDIgKiBfX3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoK ICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkgewogICAgICAgICAgICBfT2JqKiB2b2xhdGls ZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3Qg KyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgKChfT2JqKilf U19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAg ICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAg fQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsK ICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7 CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAg X09iaiogX19wOwoKCgogICAgICAgICAgICBmb3IgKF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAg ICAgICBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRFUzsKICAgICAgICAgICAgICAgICBfX2kgKz0g KHNpemVfdCkgX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2Zy ZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAq X19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAg ICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAg ICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAg ICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAg ICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKCgogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAg ICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9f Ynl0ZXNfdG9fZ2V0KTsKCgoKICAgICAgICB9CiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0 ZXNfdG9fZ2V0OwogICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNf dG9fZ2V0OwogICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsK ICAgIH0KfQoKCgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kdm9pZCoK X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNp emVfdCBfX24pCnsKICAgIGludCBfX25vYmpzID0gMjA7CiAgICBjaGFyKiBfX2NodW5rID0gX1Nf Y2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVf bGlzdDsKICAgIF9PYmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9P YmoqIF9fbmV4dF9vYmo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVy bihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxp c3RfaW5kZXgoX19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAq X19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAg ICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4 dF9vYmo7CiAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBf X24pOwogICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgICAgX19jdXJy ZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwogICAg ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xp bmsgPSBfX25leHRfb2JqOwogICAgICAgIH0KICAgICAgfQogICAgcmV0dXJuKF9fcmVzdWx0KTsK fQoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRf c3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fY29weV9z ejsKCiAgICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4g KHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdf c3opKTsKICAgIH0KICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAo X19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3op OwogICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25ld19z ejsKICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgZGVhbGxvY2F0ZShf X3AsIF9fb2xkX3N6KTsKICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCgogICAgdGVtcGxhdGUgPGJv b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX2RlZmF1 bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9s b2NrCiAgICAgICAgPSB7IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAsIHswLCAwfX0g fTsKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1 bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsK CnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciogX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOwoKdGVtcGxh dGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19kZWZhdWx0X2FsbG9jX3Rl bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCnRlbXBsYXRlIDxi b29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KdHlwZW5hbWUgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKX19kZWZhdWx0X2FsbG9jX3Rl bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsKICAgIF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9ORlJFRUxJU1RTCl0gPSB7MCwgMCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfTsKIyA1MjYgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpjbGFzcyBhbGxvY2F0b3IgewogIHR5cGVkZWYgYWxsb2MgX0FsbG9jOwpwdWJsaWM6CiAg dHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf dHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3Rf cG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBj b25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNs YXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3Ro ZXI7CiAgfTsKCiAgYWxsb2NhdG9yKCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikg e30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAx PiYpIHt9CiAgfmFsbG9jYXRvcigpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194 KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3Jl ZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNp emVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3Rh dGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAg ICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwg c2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9m KF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXpl X3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNv bnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShw b2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0 b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlw ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0 IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2MDIgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7CiAgX0FsbG9jIF9fdW5kZXJs eWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlm Zl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNv bnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogIHR5cGVk ZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2Fs bG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07CgogIF9fYWxsb2NhdG9yKCkge30KICBf X2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKQogICAgOiBfX3VuZGVybHlpbmdfYWxs b2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBf X2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpCiAgICA6IF9f dW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9jYXRv cigpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAm X194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0 IHsgcmV0dXJuICZfX3g7IH0KCgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qg dm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9U cCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAg ICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9f bikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2Yo X1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVf dCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29u c3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBv aW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpj bGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5 cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCog cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2 b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsK ICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5f X3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRl cmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKdGVtcGxhdGUg PGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2lu c3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8 X19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVt cGxhdGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxs b2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1 cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDczMiAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29u c3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxv Y2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3Ry YWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9U cDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxv Y2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50 IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0 ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7 CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu c3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2Fs bG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8 X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0 YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVf YWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4K ICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1 bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRv cl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9B bGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4KewogIHN0YXRpYyBjb25zdCBi b29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBk ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxf VHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRz PF9UcCwKICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNl bGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190 ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAs IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0Pgpz dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRv cjxfVHAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9j X3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z dGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5 cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19p bnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19h bGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBi b29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBk ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxf VHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCn0KIyAyMiAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzQgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfY29uc3RydWN0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNDcgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wLCBjb25z dCBfVDImIF9fdmFsdWUpIHsKbmV3ICgodm9pZCopIF9fcCkgX1QxKF9fdmFsdWUpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3 ICgodm9pZCopIF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lk IF9EZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+X1RwKCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCl9fZGVzdHJveV9hdXgoX0ZvcndhcmRJ dGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQp7 CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgZGVzdHJveSgmKl9f Zmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQg X19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVf dHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+Cmlu bGluZSB2b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl cmF0b3IgX19sYXN0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9U cD46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7 CiAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9Ucml2aWFsX2Rlc3RydWN0b3IoKSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBfRGVzdHJv eShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAg X19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKaW5s aW5lIHZvaWQgX0Rlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShp bnQqLCBpbnQqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShsb25nKiwgbG9uZyopIHt9CmlubGlu ZSB2b2lkIF9EZXN0cm95KGZsb2F0KiwgZmxvYXQqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShk b3VibGUqLCBkb3VibGUqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveSh3Y2hhcl90Kiwgd2NoYXJf dCopIHt9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSB2b2lkIGNv bnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7CiAgX0NvbnN0cnVjdChfX3As IF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3Qo X1QxKiBfX3ApIHsKICBfQ29uc3RydWN0KF9fcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmlu bGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsKICBfRGVzdHJveShfX3BvaW50ZXIp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJv eShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAg X0Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsKfQoKfQojIDIzICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgMjQgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpwYWlyPF9UcCosIHB0cmRpZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZl cihwdHJkaWZmX3QgX19sZW4sIF9UcCopCnsKICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4 MzY0NyAvIHNpemVvZihfVHApKSkKICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfVHAqIF9fdG1wID0gKF9UcCopIG1hbGxvYygo c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYgKF9fdG1wICE9IDApCiAgICAgIHJl dHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsKICAgIF9fbGVuIC89IDI7 CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAsIDApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3Jh cnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikgewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVm ZmVyKF9fbGVuLCAoX1RwKikgMCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5l IHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19s ZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCop IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgp2b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVy KF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy YXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlciB7CnByaXZhdGU6CiAgcHRy ZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVm ZmVyOwoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9 IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3Qp KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBz aXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAo X1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikK ICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2lu aXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5p dGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0 aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0 cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVl c3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdp bigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVy ICsgX01fbGVuOyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw ZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAg ICBfVHJpdmlhbDsKCiAgICAgICAgICAgICAgewogICAgICBfTV9sZW4gPSAwOwogICAgICBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigp OwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19m aXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigp IHsKICAgIGRlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOwogICAgZnJlZShf TV9idWZmZXIpOwogIH0KCnByaXZhdGU6CgogIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1w b3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZl ciYpIHt9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLAogICAgICAgICAg Y2xhc3MgX1RwCiAgICAgICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgPgpzdHJ1Y3QgdGVtcG9yYXJ5 X2J1ZmZlciA6IHB1YmxpYyBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+ CnsKICB0ZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJ dGVyYXRvciBfX2xhc3QpCiAgICA6IF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3Is IF9UcD4oX19maXJzdCwgX19sYXN0KSB7fQogIH50ZW1wb3JhcnlfYnVmZmVyKCkge30KfTsKCn0K IyAyNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEg MwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQu aCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAx IDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVk LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRf Y29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg ICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+ Cl9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIF9G b3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAgICAgICAgICB7CiAgICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgIF9Db25zdHJ1Y3QoJipf X2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmlu aXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0 dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf SXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJ dGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk SXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5 cGUoX19yZXN1bHQpKTsKfQoKaW5saW5lIGNoYXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBj aGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBf X2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7 Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19m aXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCog X19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkg KiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2Zp cnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz IF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFs aXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsK ICAgICAgICAgICAgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7IC0tX19jb3VudCwgKytfX2Zp cnN0LCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJl dHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIpOwogIH0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4K aW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxp emVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nlc3NJ dGVyLCBfRm9yd2FyZEl0ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAgICAg ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRl cj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRf Y29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9j b3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFp cjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0 ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwg X19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVy YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl ciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9fbGFz dCwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lk Cl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2Zh bHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICAgICAgICB7 CiAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgm Kl9fY3VyLCBfX3gpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAx PgppbmxpbmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u c3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9U cDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2Zp cnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7 CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlw ZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Np emUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9u X2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmlsbF9uKF9f Zmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg X1NpemUsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4 KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIg PSBfX2ZpcnN0OwogICAgICAgICAgICB7CiAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19f Y3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAg fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpp bmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBl bmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBf X3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4K aW5saW5lIF9Gb3J3YXJkSXRlcgp1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6 ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CiMg MjMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIg Mwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf Rm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29w eShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9y d2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f cmVzdWx0KTsKICAgICAgICAgICAgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp cnN0MiwgX19sYXN0MiwgX19taWQpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9U cCwgY2xhc3MgX0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRf ZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRp YWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogICAgICAgICAgICB7CiAgICByZXR1 cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCgoKCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQK X191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVy IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3Qy LCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf VHAmIF9feCkKewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19m aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICAgICAgICAgICAgewogICAgdW5pbml0aWFsaXpl ZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICB9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKfQoKfQojIDI2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xhc3MgcmF3X3N0b3Jh Z2VfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVyOwpwdWJs aWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5 cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAg dHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGlj aXQgcmF3X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihf X3gpIHt9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlz OyB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVu dCkgewogICAgY29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAgIHJldHVybiAqdGhp czsKICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYgb3Bl cmF0b3IrKygpIHsKICAgICsrX01faXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmF3X3N0 b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRvcisrKGludCkgewog ICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0 aGlzOwogICAgKytfTV9pdGVyOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCgp9CiMgMjcgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwoKbmFtZXNwYWNl IHN0ZAp7CgogdGVtcGxhdGU8Y2xhc3MgX1RwMT4gc3RydWN0IGF1dG9fcHRyX3JlZiB7CiAgIF9U cDEqIF9NX3B0cjsKICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkgOiBfTV9wdHIoX19wKSB7fQp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gY2xhc3MgYXV0b19wdHIgewpwcml2YXRlOgogIF9UcCog X01fcHRyOwoKcHVibGljOgogIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsKCiAgZXhwbGljaXQg YXV0b19wdHIoX1RwKiBfX3AgPSAwKSA6IF9NX3B0cihfX3ApIHt9CiAgYXV0b19wdHIoYXV0b19w dHImIF9fYSkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9U cDE+IGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX2EpCiAgICA6IF9NX3B0cihfX2EucmVsZWFz ZSgpKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHsKICAgIHJlc2V0 KF9fYS5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNz IF9UcDE+CiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB7CiAgICBy ZXNldChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCgoKICB+YXV0b19w dHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KCiAgX1RwJiBvcGVyYXRvciooKSBjb25zdCB7CiAgICBy ZXR1cm4gKl9NX3B0cjsKICB9CiAgX1RwKiBvcGVyYXRvci0+KCkgY29uc3QgewogICAgcmV0dXJu IF9NX3B0cjsKICB9CiAgX1RwKiBnZXQoKSBjb25zdCB7CiAgICByZXR1cm4gX01fcHRyOwogIH0K ICBfVHAqIHJlbGVhc2UoKSB7CiAgICBfVHAqIF9fdG1wID0gX01fcHRyOwogICAgX01fcHRyID0g MDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgdm9pZCByZXNldChfVHAqIF9fcCA9IDApIHsKICAg IGlmIChfX3AgIT0gX01fcHRyKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9 IF9fcDsKICAgIH0KICB9CgoKCgoKcHVibGljOgogIGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxfVHA+ IF9fcmVmKQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0 b3I9KGF1dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB7CiAgICBpZiAoX19yZWYuX01fcHRyICE9IHRo aXMtPmdldCgpKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9N X3B0cjsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx PiBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKQogICAgeyByZXR1cm4gYXV0b19wdHJfcmVm PF9UcD4odGhpcy0+cmVsZWFzZSgpKTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRv ciBhdXRvX3B0cjxfVHAxPigpCiAgICB7IHJldHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxl YXNlKCkpOyB9Cn07Cgp9CiMgNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf c3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3Ry YWl0cy5oIiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJp bmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2Qu aCIgMSAzCiMgNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgi IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIg MSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIg MwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMv YXRvbWljaXR5LmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt bGludXgtZ251L2JpdHMvYXRvbWljaXR5LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoK c3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpf X2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3Zh bCkKewogIHJlZ2lzdGVyIF9BdG9taWNfd29yZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9fdm9sYXRp bGVfXyAoImxvY2s7IHhhZGRsICUwLCUyIgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIg KF9fcmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAoX192YWwpLCAibSIgKCpf X21lbSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJuIF9fcmVz dWx0Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpf X2F0b21pY19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKewog IF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAlMCwlMSIKICAgICAgICAgICAgICAg ICAgICAgICAgOiA6ICJpciIgKF9fdmFsKSwgIm0iICgqX19tZW0pIDogIm1lbW9yeSIpOwp9Cgpz dGF0aWMgaW5saW5lIGNoYXIKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2NvbXBhcmVf YW5kX3N3YXAgKHZvbGF0aWxlIGxvbmcqIF9fcCwgbG9uZyBfX29sZHZhbCwgbG9uZyBfX25ld3Zh bCkKewogIGNoYXIgX19yZXQ7CiAgbG9uZyBfX3JlYWR2YWw7CgogIF9fYXNtX18gX192b2xhdGls ZV9fICgibG9jazsgY21weGNoZ2wgJTMsICUxOyBzZXRlICUwIgogICAgICAgICAgICAgICAgICAg ICAgICA6ICI9cSIgKF9fcmV0KSwgIj1tIiAoKl9fcCksICI9YSIgKF9fcmVhZHZhbCkKICAgICAg ICAgICAgICAgICAgICAgICAgOiAiciIgKF9fbmV3dmFsKSwgIm0iICgqX19wKSwgImEiIChfX29s ZHZhbCkpOwogIHJldHVybiBfX3JldDsKfQojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgODMgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3Mg YmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJh aXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVl X3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBf X25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0 eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4gY29u c3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRv cj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y PGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiMgMTE4ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9S ZXAKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmViaW5kPGNoYXI+ OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDEzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBf U19tYXhfc2l6ZTsKICAgICAgICBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFsOwoKICAg ICAgICBzaXplX3R5cGUgX01fbGVuZ3RoOwogICAgICAgIHNpemVfdHlwZSBfTV9jYXBhY2l0eTsK ICAgICAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgICAgICAgYm9vbAogICAgICAg IF9NX2lzX2xlYWtlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA8IDA7 IH0KCiAgICAgICAgYm9vbAogICAgICAgIF9NX2lzX3NoYXJlZCgpIGNvbnN0CiAgICAgICAgeyBy ZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9s ZWFrZWQoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9CgogICAgICAgIHZvaWQKICAg ICAgICBfTV9zZXRfc2hhcmFibGUoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IDA7IH0KCiAg ICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmRhdGEoKSB0aHJvdygpCiAgICAgICAgeyByZXR1 cm4gcmVpbnRlcnByZXRfY2FzdDxfQ2hhclQqPiAodGhpcyArIDEpOyB9CgogICAgICAgIF9DaGFy VCYKICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJldHVy biBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dyYWIo Y29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAgICB7 IHJldHVybiAoIV9NX2lzX2xlYWtlZCgpICYmIF9fYWxsb2MxID09IF9fYWxsb2MyKSA/CiAgICAg ICAgICAgIF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxsb2MxKTsgfQoKCiAgICAgICAgc3Rh dGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9jJik7CgogICAg ICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsK ICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAw KQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAg ICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQq CiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkKICAgICAgICB7CiAgICAgICAgICBfX2F0b21p Y19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsK ICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2Mm LCBzaXplX3R5cGUgX19yZXMgPSAwKTsKIyAyMDggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIGlubGluZSBzdGF0aWMgYm9vbAogICAgICAg IF9TX2V4Y2Vzc19zbG9wKHNpemVfdCwgc2l6ZV90KTsKCiAgICAgIH07CgoKICAgICAgc3RydWN0 IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFy VCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3Ao X19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07CgogICAgcHVibGljOgoK CgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5 cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2NfaGlkZXIgX01fZGF0 YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNp emVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXpl b2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoKSBjb25zdAogICAg ICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2Rh dGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsg fQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyByZXR1cm4gJigocmVp bnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoKICAgICAgaXRlcmF0 b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsg fQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y KF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbGVhaygp CiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICAg IF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9jaGVjayhz aXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5z aXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9j aGVjayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgoKICAg ICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29m ZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19vZmYgPCB0aGlzLT5z aXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBf X29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAoX01faWJlZ2luKCkg KyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRl cmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCog X19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAgewogICAgICAgICAg Zm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAgICAgdHJhaXRzX3R5 cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAg ICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19r MikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsg fQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29u c3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2No YXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQK ICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9f azIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0K CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0 IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpj b3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX211dGF0 ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOwoK ICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBfUmVwJgogICAg ICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4o Jl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAgIGlubGluZQog ICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZyhj b25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg c2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3Mp OwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl IF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBf X2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u LAogICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAg IGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxs b2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25z dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBfSW5w dXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2Eg PSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAgeyBfTV9yZXAoKS0+X01f ZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg ICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5h c3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25z dCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFzc2ln bigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQogICAgICB7CiAgICAg ICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOwogICAgICB9 CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJu IGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgp CiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01f ZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAg ICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpICsg dGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQog ICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgY29u c3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVy YXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5i ZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29u c3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsg fQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QgeyByZXR1 cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGxlbmd0aCgp IGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQog ICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9CgogICAg ICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHZv aWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJU KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBf TV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzZXJ2ZShzaXplX3R5 cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUo MCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsg cmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAg IG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0 YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBl IF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRh KClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90 eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQog ICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAg ICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBh dChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSBzaXplKCkpCiAgICAg ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAgIF9N X2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg eyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19z KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsg cmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBw ZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5h cHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBs YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBh cHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAg ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3Qs IF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCiAgICAg IHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwgX19jKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICByZXR1cm4g dGhpcy0+YXNzaWduKF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwgX19zdHIuX01fZm9sZChfX3Bvcywg X19uKSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19z LCBfX3MgKyBfX24pOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBf Q2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgX19zICsgdHJhaXRz X3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24o c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf TV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0 dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0 KTsgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19u LCBfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsg fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNl cnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19l bmQpCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19wID0gX01fY2hl Y2soX19wb3MxKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX3N0ci5fTV9pYmVn aW4oKSwgX19zdHIuX01faWVuZCgpKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5 cGUgX19uKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19wID0gX01fY2hlY2soX19wb3MxKTsK ICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX3N0ci5fTV9jaGVjayhfX3BvczIpLAog ICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvczIsIF9fbikpOwogICAgICAg IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQo c2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAg ewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zKTsKICAgICAgICB0aGlzLT5y ZXBsYWNlKF9fcCwgX19wLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgcmV0dXJuICp0aGlzOwog ICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3Ms IGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MsIF9f cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAg ICB7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgX19uLCBfX2MpOwogICAg ICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0 ZXJhdG9yIF9fcCwgX0NoYXJUIF9fYyA9IF9DaGFyVCgpKQogICAgICB7CiAgICAgICAgc2l6ZV90 eXBlIF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2No ZWNrKF9fcG9zKSwgc2l6ZV90eXBlKDEpLCBfX2MpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRf bGVha2VkKCk7CiAgICAgICAgcmV0dXJuIHRoaXMtPl9NX2liZWdpbigpICsgX19wb3M7CiAgICAg IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgZXJhc2Uoc2l6ZV90eXBlIF9fcG9zID0gMCwg c2l6ZV90eXBlIF9fbiA9IG5wb3MpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFj ZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbiksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBpdGVyYXRv cgogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7CiAgICAgICAgc2l6ZV90 eXBlIF9faSA9IF9fcG9zaXRpb24gLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBsYWNl KF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyAxLCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAg ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkg KyBfX2k7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmly c3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX2Zp cnN0IC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX2ZpcnN0LCBfX2xhc3Qs IF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgp OwogICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBiYXNpY19z dHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z dCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxh Y2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3N0ci5iZWdpbigpLCBfX3N0ci5lbmQoKSk7CiAgICAgIH0KCiAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUg X19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUg X19wb3MyLCBzaXplX3R5cGUgX19uMik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxh Y2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAg ICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uMik7CiAgICAgIH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBj b25zdCBfQ2hhclQqIF9fcykKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9N X2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOwogICAgICB9Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICByZXR1 cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLCBf X24yLCBfX2MpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRl cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAg ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5iZWdpbigpLCBfX3N0 ci5lbmQoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBf X2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh clQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kx LCBfX2kyLCBfX3MsIF9fcyArIF9fbik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVw bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykKICAg ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs IHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRlcmF0b3Ig X19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazEs IF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBf X2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0KCiAgICBwcml2YXRlOgogICAg ICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAg ICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVy YXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRf aXRlcmF0b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gd2RJdGVyYXRvcj4KICAgICAg ICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv ciBfX2kyLCBfRndkSXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9Gd2RJdGVyYXRv ciBfX2syLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J bkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9J bkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAg ICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFn OwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSwgX1RhZygp KTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRp YyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVy IF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1 ZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3Qoc3RhdGljX2Nh c3Q8c2l6ZV90eXBlPihfX2JlZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp Y19jYXN0PHZhbHVlX3R5cGU+KF9fZW5kKSwgX19hKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0 ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3Ry dWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAg ICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0luSXRlcj46Ol9J bnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2Jl ZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOwogICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTxj bGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgIF9TX2NvbnN0cnVj dChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAg ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgoKCiAgICAgIHRlbXBsYXRlPGNs YXNzIF9Gd2RJdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0 KF9Gd2RJdGVyIF9fZW5kLCBfRndkSXRlciBfX2JlZywgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAg ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHN0YXRpYyBfQ2hh clQqCiAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0 IF9BbGxvYyYgX19hKTsKCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgY29weShf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7Cgog ICAgICB2b2lkCiAgICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19zKTsKCgogICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGNfc3RyKCkgY29uc3QKICAgICAg ewoKICAgICAgICBzaXplX3R5cGUgX19uID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHRyYWl0c190 eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9SZXA6Ol9TX3Rlcm1pbmFsKTsKICAgICAgICBy ZXR1cm4gX01fZGF0YSgpOwogICAgICB9CgogICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGRhdGEo KSBjb25zdCB7IHJldHVybiBfTV9kYXRhKCk7IH0KCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAg IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhcGx1czsgfQoKICAgICAgc2l6 ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6 ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5maW5kKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAg IHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Mg PSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fcywgX19wb3MsIHRyYWl0c190 eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKF9DaGFyVCBf X2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJm aW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3Ry LnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9f cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlw ZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6 Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKF9DaGFyVCBfX2Ms IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp bmRfZmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0g MCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3N0ci5kYXRhKCks IF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJz dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj b25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k X2ZpcnN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAg IHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3Bv cyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAg ICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0 ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+Zmlu ZF9sYXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNp emVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9s YXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6 Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihfQ2hh clQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5yZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rf bm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwg X19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0 X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBm aW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zLCBfX3Bvcywg dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf Zmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAg ICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZmluZF9sYXN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9Cgog ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywg c2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNv bnN0OwogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZmluZF9sYXN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9 CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXpl X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIGJhc2ljX3N0cmluZwogICAgICBzdWJz dHIoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpIGNvbnN0CiAgICAg IHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291 dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpzdWJzdHIiKTsKICAgICAgICByZXR1cm4gYmFzaWNf c3RyaW5nKCp0aGlzLCBfX3BvcywgX19uKTsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBh cmUoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3QKICAgICAgewogICAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBf X3N0ci5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc2l6ZSwgX19vc2l6 ZSk7CgogICAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9f c3RyLmRhdGEoKSwgX19sZW4pOwogICAgICAgIGlmICghX19yKQogICAgICAgICAgX19yID0gX19z aXplIC0gX19vc2l6ZTsKICAgICAgICByZXR1cm4gX19yOwogICAgICB9CgogICAgICBpbnQKICAg ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9f cG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAg ICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwoKICAgICAgaW50 CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKCgogICAgICBpbnQKICAg ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQq IF9fcykgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUg X19uMikgY29uc3Q7CgogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVz KF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg ICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19s aHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJh dG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg aW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9y Kyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQo X19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQog ICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4g X19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXpl X3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAg ICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3Ry OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7 IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJl dHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVy biBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9f bGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0No YXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz LmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh cmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29u c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19s aHMpID4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAg IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAg eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1 cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19y aHMuY29tcGFyZShfX2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU KiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAg ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3JocykKICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh cmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUo X19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25z dCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhz KSA8PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+ KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNf aXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19zdHIpOwp9CiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9hbGdvcml0aG0uaCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfYWxnb3JpdGhtLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvYmFzZS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF90ZW1wYnVmLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2FsZ28uaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxnby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9o ZWFwLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAu aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy YXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZvaWQKX19wdXNoX2hlYXAoX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRl eCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fcGFy ZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9w SW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgKihfX2ZpcnN0 ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXgg PSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAq KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZv aWQKX19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNlKiwgX1RwKikK ewogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAx KSwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkCnB1c2hfaGVh cChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CgogIF9fcHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9f ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBf VHAsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZApfX3B1c2hfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICBf RGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKewogIF9E aXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB3aGlsZSAoX19ob2xl SW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFs dWUpKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVu dCk7CiAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgX19wYXJlbnQgPSAoX19ob2xlSW5k ZXggLSAxKSAvIDI7CiAgfQogICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlLAog ICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcHVzaF9o ZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICAg ICAgIF9EaXN0YW5jZSosIF9UcCopCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2Uo KF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICBfVHAo KihfX2xhc3QgLSAxKSksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApwdXNoX2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgoKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAg ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNl LCBjbGFzcyBfVHA+CnZvaWQKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m aXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl biwgX1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4Owog IF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAo X19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls ZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgX19zZWNvbmRDaGls ZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRD aGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxk ID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9f bGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNv bmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQog IF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFz cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkCl9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0Rpc3RhbmNlKikKewogICpf X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDAp LCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcG9wX2hl YXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgICAgICBfVHAqKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBf X2xhc3QgLSAxLCBfX2xhc3QgLSAxLAogICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBf X2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yPgppbmxpbmUgdm9pZCBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9f cG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLAog ICAgICAgICAgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZApfX2FkanVzdF9oZWFwKF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7 CiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNv bmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBf X2xlbikgewogICAgaWYgKF9fY29tcCgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSwgKihfX2Zp cnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQogICAgICBfX3NlY29uZENoaWxkLS07CiAgICAq KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAg IF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9f c2Vjb25kQ2hpbGQgKyAxKTsKICB9CiAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAg ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0g MSkpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICB9CiAgX19wdXNoX2hl YXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUsIF9fY29tcCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkCl9fcG9wX2hl YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192 YWx1ZSwgX0NvbXBhcmUgX19jb21wLAogICAgICAgICAgIF9EaXN0YW5jZSopCnsKICAqX19yZXN1 bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rp c3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21w KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBj bGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh c3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkKewogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0 IC0gMSwgX19sYXN0IC0gMSwgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXAsCiAgICAgICAgICAg ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKcG9wX2hlYXAoX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgogIF9fcG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmly c3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBj bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz dCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJu OwogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFy ZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRqdXN0X2hlYXAo X19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAg ICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkCm1ha2VfaGVhcChf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz dCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog IF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUo X19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX1Rw LCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQKX19tYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwg MikgcmV0dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3Rh bmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRq dXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJl bnQpKSwKICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSBy ZXR1cm47CiAgICBfX3BhcmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCm1ha2VfaGVhcChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAogICAgICAgICAgICAg IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4Kdm9pZCBzb3J0X2hlYXAoX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGls ZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJl Pgp2b2lkCnNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4g MSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwp9Cgp9CiMgMzUgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNl IHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFu KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogIGlmIChfX2EgPCBfX2IpCiAgICBpZiAoX19iIDwgX19jKQogICAgICByZXR1cm4gX19iOwog ICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICBy ZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgIHJldHVybiBfX2E7CiAgZWxzZSBp ZiAoX19iIDwgX19jKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYKX19t ZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywgX0Nv bXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChfX2NvbXAoX19h LCBfX2IpKQogICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgIHJldHVybiBfX2I7CiAgICBl bHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAg ICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICByZXR1cm4gX19h OwogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAg IHJldHVybiBfX2I7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Z1bmN0 aW9uPgpfRnVuY3Rpb24gZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwgX0Z1bmN0aW9uIF9fZikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QpCiAgICBfX2YoKl9fZmlyc3QpOwogIHJldHVybiBfX2Y7Cn0KCgoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9JbnB1dEl0ZXIgZmlu ZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0g X192YWwpKQogICAgKytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZF9p ZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlu cHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVk KCpfX2ZpcnN0KSkKICAgICsrX19maXJzdDsKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIGZp bmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAg ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAg ICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg OyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19m aXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBf X2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu IF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1 cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0 KSB7CiAgY2FzZSAzOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsK ICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVy biBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToKICAgIGlmICgqX19maXJzdCA9PSBf X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6 CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfUmFuZG9tQWNjZXNzSXRlciBmaW5kX2lmKF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0g KF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0t X190cmlwX2NvdW50KSB7CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7 CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0 OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJz dDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly c3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNh c2UgMzoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19m aXJzdDsKICBjYXNlIDI6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7 CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy biBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJu IF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+Cmlu bGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJh dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5wdXRJdGVyIGZpbmRfaWYoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGlj YXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBf X2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIGFkamFjZW50X2ZpbmQoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJ dGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBp ZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0 ID0gX19uZXh0OwogIH0KICByZXR1cm4gX19sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmlu ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsK ICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xh c3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgcmV0 dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KICByZXR1cm4gX19sYXN0Owp9 CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6 ZT4Kdm9pZCBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25z dCBfVHAmIF9fdmFsdWUsCiAgICAgICAgICAgX1NpemUmIF9fbikKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9f Zmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudF9pZihfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAg ICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CnR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNvdW50KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRp ZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICArK19fbjsKICByZXR1cm4g X19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnRf aWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3By ZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy Pjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsrX19uOwogIHJldHVy biBfX247Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2Fy ZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9y d2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9f bGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmly c3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGZpbmQo X19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBf X3A7CgogIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVu dCA9IF9fZmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgX19maXJz dDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgaWYgKF9fZmlyc3Qx ID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgIF9fcCA9IF9fcDE7CiAgICBf X2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAg ICByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAg IGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYg KCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9Cgog ICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9G b3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zv cndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3By ZWRpY2F0ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGlmIChf X2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19m aXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlm IChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAh X19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAg cmV0dXJuIF9fZmlyc3QxOwogIH0KCgoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19w MSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJz dDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICB3aGlsZSAoX19maXJzdDEg IT0gX19sYXN0MSkgewogICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIp KQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAg ICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4g X19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwogICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICBp ZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFzdDE7CgogICAgd2hpbGUgKF9f cHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3Qy KQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFz dDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAg cmV0dXJuIF9fZmlyc3QxOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz IF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9JbnRl Z2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCiAgaWYgKF9fY291bnQgPD0gMCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UgewogICAg X19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICB3aGlsZSAoX19maXJz dCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgIF9G b3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgd2hpbGUgKF9faSAh PSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgewogICAgICAgICsrX19pOwog ICAgICAgIC0tX19uOwogICAgICB9CiAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICByZXR1cm4g X19maXJzdDsKICAgICAgZWxzZQogICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBf X3ZhbCk7CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0JpbmFyeVByZWQ+ Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9U cCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVk KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0 dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICBicmVhazsKICAg ICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAg IF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19m aXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAw ICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAg LS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0 OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgewogICAgICAgICAg aWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQogICAgICAgICAgICBicmVhazsKICAgICAg ICAgICsrX19pOwogICAgICAgIH0KICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICB9CiAgICB9 CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy MSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMiBzd2FwX3JhbmdlcyhfRm9yd2Fy ZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikKewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0 MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaXRlcl9zd2FwKF9fZmly c3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fZmlyc3QyOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1VuYXJ5T3BlcmF0aW9uPgpfT3V0 cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRp b24gX191bmFyeV9vcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpf X2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3Mg X0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl cjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg X0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoK CgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Miwg KytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmly c3QyKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl ciwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBf VHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJz dCA9PSBfX29sZF92YWx1ZSkKICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgp2b2lk IHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICpfX2Zp cnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf T3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHkoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf X29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkK ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAq X19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgpfT3V0cHV0 SXRlciByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19u ZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz dDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0 KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9HZW5lcmF0b3I+CnZvaWQgZ2VuZXJhdGUo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19n ZW4pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr K19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0 cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9HZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIGdlbmVy YXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQp7 CgoKCgoKCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3Qg PSBfX2dlbigpOwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29w eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1ZSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNh dGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsK ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0 dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+ Cl9Gb3J3YXJkSXRlciByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3Qs IF9fbGFzdCwgX192YWx1ZSk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJu IF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICA6 IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgcmVt b3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAg X0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8g X19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19p LCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2Nv cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewoKICBfVHAgX192YWx1ZSA9 ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBf X2xhc3QpCiAgICBpZiAoIShfX3ZhbHVlID09ICpfX2ZpcnN0KSkgewogICAgICBfX3ZhbHVlID0g Kl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4gKytf X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy PgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0 ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CgogICpf X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYg KCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsK ICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmly c3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j YXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg X091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGUsCiAgICAgICAgICBjbGFzcyBfVHA+ Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQs IF9UcCopCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIF9UcCBfX3ZhbHVlID0gKl9f Zmlyc3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz dCkKICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgX192 YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0 dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0 cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5p cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKewoKICBy ZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9w cmVkLAogICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5h cnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0 ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh dG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCgoKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICB3aGlsZSAoKytfX2Zp cnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0 KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJl ZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw dXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVBy ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwg X19sYXN0LCBfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBf X2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXI+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fZmlyc3QgPSBh ZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmly c3QsIF9fbGFzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVBy ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAg X19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsK ICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9w cmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgp2b2lkIF9fcmV2 ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAo dHJ1ZSkKICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQog ICAgICByZXR1cm47CiAgICBlbHNlCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX3JldmVyc2UoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX2ZpcnN0IDwg X19sYXN0KQogICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgLS1fX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCByZXZlcnNlKF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJh dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJl Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChf X2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1fX2xhc3Q7CiAgICAqX19yZXN1bHQgPSAqX19sYXN0 OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxj bGFzcyBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+Cl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChf RXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0V1 Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKewogIHdoaWxlIChfX24gIT0gMCkgewogICAgX0V1Y2xp ZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKICAgIF9fbSA9IF9fbjsKICAgIF9fbiA9 IF9fdDsKICB9CiAgcmV0dXJuIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7 CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xh c3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9fZmly c3QyID0gX19taWRkbGU7CiAgZG8gewogICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7 CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsK ICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOwoKICBfRm9yd2FyZEl0ZXIgX19uZXdfbWlk ZGxlID0gX19maXJzdDsKCiAgX19maXJzdDIgPSBfX21pZGRsZTsKCiAgd2hpbGUgKF9fZmlyc3Qy ICE9IF9fbGFzdCkgewogICAgc3dhcCAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYg KF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICBlbHNl IGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgfQoK ICByZXR1cm4gX19uZXdfbWlkZGxlOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25hbEl0ZXIgX19yb3RhdGUoX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19t aWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICBy ZXR1cm4gX19maXJzdDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZygpKTsKICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJl Y3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYm IF9fbWlkZGxlICE9IF9fbGFzdCkKICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7Cgog IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFz dCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19sYXN0OwogIH0K ICBlbHNlIHsKICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9p dGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21B Y2Nlc3NJdGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9EaXN0YW5jZSAqLCBfVHAgKikKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCiAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9f ayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwogIF9S YW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0ID0gX19maXJzdCArIChfX2xhc3QgLSBfX21pZGRsZSk7 CgogIGlmIChfX2sgPT0gMCkKICAgIHJldHVybiBfX2xhc3Q7CgogIGVsc2UgaWYgKF9fayA9PSBf X2wpIHsKICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICBy ZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoK ICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9faSsrKSB7CiAgICBfVHAgX190 bXAgPSAqX19maXJzdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAg aWYgKF9fayA8IF9fbCkgewogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wv X19kOyBfX2orKykgewogICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAg ICAqX19wID0gKihfX3AgLSBfX2wpOwogICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICB9Cgog ICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgX19wICs9IF9fazsKICAgICAgfQog ICAgfQoKICAgIGVsc2UgewogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2sv X19kIC0gMTsgX19qICsrKSB7CiAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewogICAg ICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAg fQoKICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICBfX3AgLT0gX19sOwogICAg ICB9CiAgICB9CgogICAgKl9fcCA9IF9fdG1wOwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJu IF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0Zvcndh cmRJdGVyIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxl LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLAogICAgICAg ICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJvdGF0ZV9j b3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0 KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUs IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNz IF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5jZSBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9f bikgewoKICByZXR1cm4gbHJhbmQ0OCgpICUgX19uOwoKCgp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJz dCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly c3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3Qg KyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CnZvaWQg cmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9f cmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsg MTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19y YW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfT3V0cHV0SXRlciByYW5k b21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3Rh bmNlIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9 IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNl IF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlm IChfX3JhbmRvbV9udW1iZXIoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpf X2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWlu aW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAg ICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgpfT3V0cHV0SXRlciByYW5kb21fc2Ft cGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9f biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9f cmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7 CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9f bSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChf X3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAg ICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytf X2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNz SXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f b3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9f bikKewogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBfX3QgPSBfX247CiAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19tLCArK19fZmlyc3QpCiAgICBf X291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg KytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0gX19yYW5kb21fbnVtYmVyKF9fdCk7CiAgICBpZiAo X19NIDwgX19uKQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAg fQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5l cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxl KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9E aXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19tLCArK19fZmlyc3QpCiAgICBfX291dFtfX21d ID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAg ICBfRGlzdGFuY2UgX19NID0gX19yYW5kKF9fdCk7CiAgICBpZiAoX19NIDwgX19uKQogICAgICBf X291dFtfX01dID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQg KyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNz SXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCkKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShf X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19v dXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5l cmF0b3I+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QsCiAgICAgICAgICAg ICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2ZpcnN0LCBfX3JhbmQsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfX291dF9sYXN0IC0gX19vdXRfZmlyc3QpOwp9CgoKCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBf X3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7 CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgd2hpbGUgKF9fcHJl ZCgqX19maXJzdCkpCiAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7 CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICB3aGlsZSAoKytfX25leHQgIT0g X19sYXN0KQogICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICBzd2FwKCpfX2ZpcnN0LCAq X19uZXh0KTsKICAgICAgKytfX2ZpcnN0OwogICAgfQoKICByZXR1cm4gX19maXJzdDsKfQoKdGVt cGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0JpZGly ZWN0aW9uYWxJdGVyIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKICB3aGls ZSAodHJ1ZSkgewogICAgd2hpbGUgKHRydWUpCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK ICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkK ICAgICAgICArK19fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgICBicmVhazsKICAgIC0tX19sYXN0 OwogICAgd2hpbGUgKHRydWUpCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICBy ZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBpZiAoIV9fcHJlZCgqX19sYXN0KSkKICAgICAgICAt LV9fbGFzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFrOwogICAgaXRlcl9zd2FwKF9fZmlyc3Qs IF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHBhcnRpdGlvbihfRm9y d2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By ZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3BhcnRpdGlvbihf X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0K Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBf RGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2Fy ZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKQp7CiAgaWYgKF9fbGVuID09IDEp CiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgX0Zvcndh cmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIp OwogIHJldHVybiByb3RhdGUoX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19t aWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbGVuIC8gMiksCiAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9f aW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBf UHJlZGljYXRlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19zdGFi bGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0 YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9p bnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf RGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewogIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7 CiAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKICAgIF9Qb2ludGVyIF9fcmVz dWx0MiA9IF9fYnVmZmVyOwogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJz dCkKICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAqX19yZXN1bHQxID0gKl9f Zmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAg Kl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHQyOwogICAgICB9CiAgICBj b3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICByZXR1cm4gX19yZXN1bHQx OwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBh ZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgcmV0dXJuIHJvdGF0ZShfX3N0YWJsZV9w YXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCwgX19t aWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIsIF9fYnVm ZmVyLCBfX2J1ZmZlcl9zaXplKSwKICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAg ICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX19taWRkbGUsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSkpOwogIH0K fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3Mg X1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfRm9yd2FyZEl0ZXIKX19zdGFibGVfcGFydGl0 aW9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX1RwKiwgX0Rpc3RhbmNlKikKewog IF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xh c3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlv bl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5z aXplKCkpOwogIGVsc2UKICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2Zp cnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHN0YWJs ZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVs c2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19w cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmly c3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9f Zmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+ Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1RwIF9fcGl2b3QpCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0IDwg X19waXZvdCkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19waXZv dCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkp CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAg ICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3Bh cnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkK ewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkK ICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19jb21wKF9fcGl2b3Qs ICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsKICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQog ICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAg KytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50IF9fc3RsX3RocmVzaG9sZCA9IDE2OwoKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3VuZ3VhcmRl ZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQp7CiAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogIC0tX19uZXh0OwogIHdoaWxlIChf X3ZhbCA8ICpfX25leHQpIHsKICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19u ZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192 YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBf UmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9f Y29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgX19sYXN0 ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9fbGlu ZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgX1RwIF9fdmFsID0g Kl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgY29weV9iYWNrd2FyZChfX2Zp cnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxz ZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2xhc3QsIF9fdmFsKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpp bmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwg X0NvbXBhcmUgX19jb21wKQp7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX19jb21wKF9f dmFsLCAqX19maXJzdCkpIHsKICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xh c3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192YWw7CiAgfQogIGVsc2UKICAgIF9fdW5ndWFyZGVk X2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsg MTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19p LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47 CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFz dDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUo X19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg Y2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9f aSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFy X2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QpIHsKICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJz dCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJk ZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7 CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyAr K19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVHAoKl9faSksIF9fY29t cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+ CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQp7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmly c3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+ CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAg aWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9u X3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCk7CiAgICBfX3VuZ3VhcmRl ZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QpOwogIH0K ICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19maW5hbF9p bnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsK ICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRp b25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2NvbXApOwogICAg X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19s YXN0LCBfX2NvbXApOwogIH0KICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f bGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgX1NpemUgX19s ZyhfU2l6ZSBfX24pCnsKICBfU2l6ZSBfX2s7CiAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19u ID4+PSAxKSArK19fazsKICByZXR1cm4gX19rOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0 aF9saW1pdCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7 CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0 LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC0tX19kZXB0aF9saW1p dDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0 aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21l ZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq KF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgIF9faW50cm9zb3J0X2xvb3Ao X19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGltaXQpOwogICAgX19sYXN0ID0gX19j dXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwg Y2xhc3MgX1NpemUsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGlt aXQsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxf dGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgIHBhcnRpYWxf c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuOwogICAg fQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAg ICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLCBfX2Nv bXApKSwKICAgICAgIF9fY29tcCk7CiAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3Qs IChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogICAgX19sYXN0ID0gX19jdXQ7CiAg fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHNvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ICE9 IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAg X19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChf X2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy LCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUg X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBp ZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAg ICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLAogICAgICAgICAgICAgICAg ICAgICBfX2NvbXApOwogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs IF9fY29tcCk7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9p ZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9f bGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmly c3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2Zp cnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3Qp OwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19sYXN0IC0gX19m aXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21w KTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0 ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJz dCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBf X2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRs ZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIx LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CnZv aWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6 ZSkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9f Zmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJz dCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAg ICAgX19yZXN1bHQpOwogICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogIH0KCiAgX19zdGVwX3Np emUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgbWVy Z2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUs IF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0 YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vz c0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIx IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1 bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAg d2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBt ZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAg IF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAg ICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19m aXJzdCArPSBfX3R3b19zdGVwOwogIH0KICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19s YXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKCiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCAr IF9fc3RlcF9zaXplLAogICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAg ICAgIF9fcmVzdWx0LAogICAgICAgIF9fY29tcCk7Cn0KCmNvbnN0IGludCBfX3N0bF9jaHVua19z aXplID0gNzsKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3Rh bmNlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwg X0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9f Y2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19j aHVua19zaXplKTsKICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2NodW5rX2luc2Vy dGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgIF9fZmlyc3QgKz0g X19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j b21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRl ciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVy IF9fYnVmZmVyLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19m aXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rp c3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoKICB3aGlsZSAoX19zdGVwX3Np emUgPCBfX2xlbikgewogICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1 ZmZlciwgX19zdGVwX3NpemUpOwogICAgX19zdGVwX3NpemUgKj0gMjsKICAgIF9fbWVyZ2Vfc29y dF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAg ICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX0Nv bXBhcmU+CnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAt IF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47Cgog IF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNl cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwoKICB3aGls ZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwg X19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAq PSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmly c3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9E aXN0YW5jZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlIF9fYnVmZmVyX3NpemUpCnsKICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJz dCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xl bjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0 aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX3N0 YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9z aXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwg X19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICAgIF9fbWVyZ2Vfc29ydF93aXRo X2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgfQog IF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9f bWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0g X19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAg ICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3Rh bmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6 ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm ZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg ICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1 ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNl IHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm ZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp OwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy LCAoX0Rpc3RhbmNlKikwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsK ICB9CiAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFu Y2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xh c3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAg ICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf VHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZm ZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1 Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0 KTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVm LmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgp KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFz cyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1 eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9UZW1wb3JhcnlfYnVmZmVy PF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYu YmVnaW4oKSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwg X19jb21wKTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFz dCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYu c2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5 cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz IF9Db21wYXJlPgppbmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9D b21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNl X3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3BhcnRpYWxfc29y dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwK ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBt YWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19p ID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0 KQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwKICAg ICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwogIHNvcnRfaGVhcChfX2Zp cnN0LCBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5s aW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21p ZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19wYXJ0 aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19t aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAq LCBfQ29tcGFyZSBfX2NvbXApCnsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29t cCk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0 OyArK19faSkKICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICBfX3BvcF9oZWFw KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwgX19jb21wLAogICAgICAgICAgICAg ICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz IF9Db21wYXJlPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxl LAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29t cGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlw ZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHA+ Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikKewogIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBf X3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNzSXRlciBf X3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGlsZShfX2ZpcnN0ICE9IF9f bGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgKl9fcmVz dWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAr K19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9s YXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA8ICpf X3Jlc3VsdF9maXJzdCkKICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3Rh bmNlKDApLAogICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3Qg LSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSk7CiAg ICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh bF9sYXN0KTsKICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNz SXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwK ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0 X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19yZXN1bHRfZmlyc3Qp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh c3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRv bUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSosIF9UcCopCnsKICBp ZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7 CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7 CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVz dWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19y ZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2ZpcnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRf Zmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAg IF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAg ICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAog ICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19j b21wKTsKICAgICsrX19maXJzdDsKICB9CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jl c3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz cyBfQ29tcGFyZT4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJl dHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3Qs IF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX3Jlc3VsdF9maXJzdCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX250 aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bnRoLAogICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7 CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBf X2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmly c3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0 IC0gMSkpKSk7CiAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsK ICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19m aXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxp bmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9f bnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3Qp KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNz IF9Db21wYXJlPgp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBf X2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3Vh cmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9 IF9fY3V0OwogICAgZWxzZQogICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25f c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19udGhfZWxl bWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29t cCk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg X0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFu Y2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2Fy ZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVu ID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hh bGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRs ZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAg IH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2Fy ZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0 LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh c3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3Rh bmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0 LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7Cgog IHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRs ZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29t cCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsr X19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNl CiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9G b3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFs LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21w LAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpf Rm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwg X0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwg X19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRk bGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBf X21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYg KF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAg ICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xl biAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJf Ym91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKICByZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9f dmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs IGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0 YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rp c3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+ IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlk ZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9IF9f bWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAx OwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBl cl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2Nv bXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9f dXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAg ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRl ciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgIF9EaXN0YW5j ZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg X19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xl ZnQsIF9fcmlnaHQ7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+ IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYp OwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsK ICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0K ICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAg IGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192 YWwpOwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVy X2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIHBhaXI8X0Zv cndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICB9CiAgfQogIHJl dHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgcGFpcjxf Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBf X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1 YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0 IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7 CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVu KTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBf X3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg IGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxl OwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAg fQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICBfX2xlbiA9IF9f aGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21p ZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAg ICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29t cCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQs IF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJk SXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zv cndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy IF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX2VxdWFs X3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAgICAgICAgICAgICAg ICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192 YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxv d2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogIHJldHVybiBfX2kgIT0gX19sYXN0 ICYmICEoX192YWwgPCAqX19pKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh c3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw JiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJf Ym91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICByZXR1cm4gX19pICE9IF9f bGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIg bWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz dDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAq X19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsK ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAg KytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19m aXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3Mg X0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsK ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0 OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19s YXN0MSwgX19yZXN1bHQpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy LCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rp b25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19s ZW4xLCBfRGlzdGFuY2UgX19sZW4yKQp7CiAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAw KQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgaWYgKCpfX21p ZGRsZSA8ICpfX2ZpcnN0KQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAg cmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Owog IF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2Ug X19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xl bjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwg X19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0 LCAqX19maXJzdF9jdXQpOwogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s ZW4yMik7CiAgfQogIGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNl KF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9f Zmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9f Zmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRs ZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9f bWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwogIF9fbWVyZ2Vfd2l0 aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g X19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz IF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rp c3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t cCkKewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBpZiAo X19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJz dCkpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAgfQog IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0gMDsK ICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgX19s ZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAg IF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1 dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIp OwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3Nl Y29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0 LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fZmlyc3Qs IF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21p ZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwog IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRs ZSwgX19sZW4xMSwgX19sZW4yMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0 LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19s ZW4yMiwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNs YXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRp cmVjdGlvbmFsSXRlcjEgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXpl KQp7CiAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgaWYgKF9fbGVuMSA+IF9f bGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0gY29w eShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QpOwogICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2Vu ZCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAg ICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBj b3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZQogICAgcmV0dXJuIHJv dGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp cmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFz cyBfQmlkaXJlY3Rpb25hbEl0ZXIzPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dh cmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIzIF9fcmVzdWx0KQp7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4gY29w eV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0MiA9 PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9f cmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAgICBp ZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwog ICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2Fy ZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0K ICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJz dDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytf X2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRl IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAog ICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMywgY2xhc3MgX0NvbXBhcmU+Cl9CaWRp cmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmly c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDEg PT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBf X3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gY29weV9iYWNr d2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIC0tX19sYXN0MTsKICAtLV9fbGFz dDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkg ewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0gX19s YXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBf X3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jl c3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICBy ZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAg IC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0 ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXI+CnZvaWQgX19tZXJnZV9hZGFwdGl2 ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBf RGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIs IF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19s ZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHko X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZl cl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjIg PD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21p ZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlIHsKICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9 IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7 CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBf X2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFz dCwgKl9fZmlyc3RfY3V0KTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwg X19sZW4yMik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAg ICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1 cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRpc3Rh bmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1 dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAg ICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJn ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAog ICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAg ICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9f bGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9f YnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp b25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBjbGFz cyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp cnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAog ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAg ICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUs CiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19sZW4xIDw9 IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZm ZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19i dWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsK ICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9f YnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgX19tZXJn ZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAg ICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAg IF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjEx KTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9f Zmlyc3RfY3V0LCBfX2NvbXApOwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0 LCBfX2xlbjIyKTsKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsK ICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9 IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwog ICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUo X19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsK ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwg X19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVy X3NpemUsIF9fY29tcCk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNv bmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9f bGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogIH0KfQoK dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlz dGFuY2U+CmlubGluZSB2b2lkIF9faW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4xID0g MDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sZW4xKTsKICBfRGlzdGFuY2UgX19s ZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBfX2xlbjIpOwoKICBfVGVtcG9y YXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0 KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7CiAgZWxzZQogICAgX19t ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwK ICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUo KSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsCiAg ICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2lu cGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBf RGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t cCkKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBf X2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwg X1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAg ICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVu MSwgX19sZW4yLCBfX2NvbXApOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg X19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9f YnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAg ICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUg dm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUg fHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgo X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVf dHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIGlucGxh Y2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBf X21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICByZXR1cm47CiAgX19pbnBsYWNlX21l cmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg X192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAg ICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy MSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBp ZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAgICAg ICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf Q29tcGFyZT4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg X19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNl OwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmly c3QxOwogICAgZWxzZQogICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19m aXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf SW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5w dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy ICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAo Kl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAg ICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz dDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVz dWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFy ZT4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAoX19j b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7 CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytf X3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfaW50 ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0 MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8 ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1bHQg PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsr X19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAg IGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXAp CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJz dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19m aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmIChfX2NvbXAo Kl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0 MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVy PgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQog ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz dDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlm ICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAg ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2Zp cnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEs IGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9D b21wYXJlPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0 MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAg ICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmly c3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAg ICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl c3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIs IGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlcgpzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2Uo X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikgewog ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19y ZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0 OwogICAgfQogICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAg ICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFz dDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lu cHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9P dXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAo X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29t cCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog ICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19j b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7 CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAg ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2Zp cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2Fy ZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQog ICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg cmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf Q29tcGFyZT4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j b21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0 dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAo KytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkp IF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0 ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICgqX19maXJz dCA8ICpfX3Jlc3VsdCkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3Vs dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0NvbXBhcmU+Cl9Gb3J3 YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0Owog IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBf X2xhc3QpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAgICBfX3Jlc3Vs dCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyPgpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4g ZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYg KF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19p OwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1f X2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2og PSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgIHt9CiAgICAg IGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAg cmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJz ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBuZXh0 X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFz dCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsK ICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBf X2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkg PSBfX2k7CiAgICAtLV9faTsKICAgIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCpfX2ks ICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2 ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kg PT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVy biBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+ CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkK ICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7Oykgewog ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19p aSA8ICpfX2kpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAg d2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwg X19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAg IH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFz dCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlk aXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIHByZXZfcGVybXV0YXRpb24oX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZh bHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChf X2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsK CiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19p OwogICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAg ICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFz dCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAg ICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQog IH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpf SW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBf X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBf Rm9yd2FyZEl0ZXIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBm b3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJk SXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAg ICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJl dHVybiBfX2xhc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zvcndh cmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2Yo X0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFz dDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0Mjsg X19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg Kl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9CiMg MzM5MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRl cjEgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9y d2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh dG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0 MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3Vs dCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jl c3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0 Mik7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19y ZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAg ICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0K ICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2Fy ZEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyMSBf X2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJk SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf dGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h cnlQcmVkaWNhdGUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1 cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3Qx OwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAg ICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7 CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAg IF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAg IH0KICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyMj4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5kKF9CaWRpcmVj dGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9u YWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFs SXRlcjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9u YWxJdGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9S ZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJj aChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7CgogIGlmIChfX3JyZXN1bHQgPT0g X19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFs SXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgYWR2YW5jZShfX3Jlc3VsdCwg LWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9u YWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9CaWRpcmVjdGlvbmFs SXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0 MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxf aXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICBfQmlu YXJ5UHJlZGljYXRlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rp b25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVj dGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsK ICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBz ZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbXApOwoKICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAg cmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0 ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2Zp cnN0MiwgX19sYXN0MikpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KfQoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5saW5lIF9Gb3J3YXJk SXRlcjEKZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xh c3QxLAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFz dDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX2Zp bmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAg ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAg ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVBy ZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlcjEKZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2Zp cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmly c3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19j b21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19m aW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAg ICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAg ICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgX19j b21wKTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rp c3RhbmNlPgpib29sIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfRGlzdGFu Y2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsKICBmb3IgKF9EaXN0YW5jZSBfX2No aWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytfX2NoaWxkKSB7CiAgICBpZiAoX19maXJzdFtfX3Bh cmVudF0gPCBfX2ZpcnN0W19fY2hpbGRdKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9f Y2hpbGQgJiAxKSA9PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz IF9TdHJpY3RXZWFrT3JkZXJpbmc+CmJvb2wgX19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wLAogICAgICAgICAgICAgICBfRGlzdGFu Y2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsKICBmb3IgKF9EaXN0YW5jZSBfX2No aWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytfX2NoaWxkKSB7CiAgICBpZiAoX19jb21wKF9fZmly c3RbX19wYXJlbnRdLCBfX2ZpcnN0W19fY2hpbGRdKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAg aWYgKChfX2NoaWxkICYgMSkgPT0gMCkKICAgICAgKytfX3BhcmVudDsKICB9CiAgcmV0dXJuIHRy dWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIGJvb2wgaXNf aGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19pc19oZWFw KF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgppbmxpbmUgYm9vbCBpc19oZWFw KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19pc19oZWFwKF9fZmlyc3QsIF9f Y29tcCwgX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAg IHJldHVybiB0cnVlOwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3IgKCsr X19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkgewog ICAgaWYgKCpfX25leHQgPCAqX19maXJzdCkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0 dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TdHJpY3RX ZWFrT3JkZXJpbmc+CmJvb2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1 cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4 dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlm IChfX2NvbXAoKl9fbmV4dCwgKl9fZmlyc3QpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBy ZXR1cm4gdHJ1ZTsKfQoKfQojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2FsZ29yaXRobS5oIiAyIDMKIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2lj X3N0cmluZy50Y2MiIDEgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz aWNfc3RyaW5nLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVAog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU190 ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU19tYXhfc2l6ZSA9ICgoKG5wb3Mg LSBzaXplb2YoX1JlcCkpL3NpemVvZihfQ2hhclQpKSAtIDEpIC8gNDsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25z dCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5 cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7CgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9TX2Vt cHR5X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6 ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9f YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAg IGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAm JiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVm Y29weSgpOwoKICAgICAgICBfQ2hhclQgX19idWZbMTAwXTsKICAgICAgICBzaXplX3R5cGUgX19p ID0gMDsKICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwgc2l6ZW9mKF9fYnVm KSAvIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgewogICAgICAgICAgICBfX2J1ZltfX2krK10g PSAqX19iZWc7CiAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICB9CiAgICAgICAgX1JlcCog X19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19hKTsKICAgICAgICB0cmFpdHNfdHlwZTo6Y29w eShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9faSk7CiAgICAgICAgX19yLT5fTV9sZW5ndGgg PSBfX2k7CiAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGZvciAo OzspCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX0NoYXJUKiBfX3AgPSBfX3ItPl9N X3JlZmRhdGEoKSArIF9fci0+X01fbGVuZ3RoOwogICAgICAgICAgICAgICAgX0NoYXJUKiBfX2xh c3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fY2FwYWNpdHk7CiAgICAgICAgICAgICAg ICBmb3IgKDs7KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKF9f YmVnID09IF9fZW5kKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAg ICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICBpZiAoX19wID09IF9fbGFzdCkKICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICpfX3ArKyA9ICpfX2JlZzsKICAgICAgICAg ICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg c2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAg ICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBfX2EpOwogICAg ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVyLT5fTV9yZWZkYXRhKCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKSwgX19sZW4p OwogICAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgICAgICBf X3IgPSBfX2Fub3RoZXI7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbGVuOwog ICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICB7 CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0 ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAg ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19k bmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCiAg ICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJl dHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgICBfUmVwKiBfX3IgPSBf UmVwOjpfU19jcmVhdGUoX19kbmV3LCBfX2EpOwogICAgICAgIGlmICh0cnVlKQogICAgICAgICAg eyBfU19jb3B5X2NoYXJzKF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CiAgICAg ICAgaWYgKGZhbHNlKQogICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19h KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICB9CiAgICAg ICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7CgogICAgICAgIF9fci0+X01fcmVmZGF0YSgpW19f ZG5ld10gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRh KCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9U cmFpdHMsIF9BbGxvYz46OgogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBf X2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09 IF9BbGxvYygpKQogICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoK ICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgaWYgKHRy dWUpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fbikKICAgICAgICAgICAgdHJhaXRzX3R5cGU6 OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwgX19uLCBfX2MpOwogICAgICAgIH0KICAgICAgaWYg KGZhbHNlKQogICAgICAgIHsKICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0 aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFs OwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3Qg YmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBsdXMoX19zdHIuX01fcmVwKCktPl9N X2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3IoKSksCiAgICAgICAgICAgICAgICAg X19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBf X2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5cGUoKSwgX0NoYXJUKCks IF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIDogX01fZGF0YXBsdXMoX1NfY29u c3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0FsbG9jKCkpCiAgICB7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Ms CiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6 IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfX2EpLCBf X2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwg Y29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9f cyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3Ms IGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBf X3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3Ry aW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBf TV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVn LCBfSW5wdXRJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMo X1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry KQogICAgewogICAgICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpCiAgICAgICAgewoK ICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKICAg ICAgICAgIF9DaGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9fc3Ry LmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwog ICAgICAgICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6X1JlcDo6CiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQog ICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5 ICsgMSkgKiBzaXplb2YoX0NoYXJUKTsKICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxs b2NhdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X01f bGVha19oYXJkKCkKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAg ICAgICBfTV9tdXRhdGUoMCwgMCwgMCk7CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4x LCBzaXplX3R5cGUgX19sZW4yKQogICAgewogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRo aXMtPnNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXpl ICsgX19sZW4yIC0gX19sZW4xOwogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0gX01fZGF0YSgp ICsgX19wb3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19v bGRfc2l6ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFy ZWQoKSB8fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkKICAgICAgICB7CgogICAgICAgICAgYWxs b2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX1JlcCogX19yID0g X1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7CiAgICAgICAgICBpZiAodHJ1ZSkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX3BvcykKICAgICAgICAgICAgICAgIHRyYWl0 c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAg ICAgICAgICBpZiAoX19ob3dfbXVjaCkKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5 KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgICAgIH0KICAgICAgICAg IGlmIChmYWxzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9zZShn ZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICB9CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAg ICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19o b3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4yKQogICAgICAgIHsKCiAgICAgICAgICB0cmFpdHNf dHlwZTo6bW92ZShfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gp OwogICAgICAgIH0KICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9y ZXAoKS0+X01fbGVuZ3RoID0gX19uZXdfc2l6ZTsKICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVd ID0gX1JlcDo6X1NfdGVybWluYWw7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQog ICAgewogICAgICBpZiAoX19yZXMgPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9p c19zaGFyZWQoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19yZXMgPiB0aGlzLT5tYXhfc2l6 ZSgpKQogICAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNl cnZlIik7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAg ICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMgLSB0 aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAg ICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5nJiBfX3Mp CiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX01fcmVw KCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFr ZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAo dGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAgICAgewog ICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2RhdGEoX19z Ll9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQoKICAg ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2lu KCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNpY19zdHJp bmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0aGlzID0g X190bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KIyAzNTYgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6 ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRl ZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoK ICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xl bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBf X3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7 CgoKICAgICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2Nh dGUoX19zaXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBf X3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUo KTsKICAgICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 Ol9SZXA6OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19y ZXMpCiAgICB7CiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9sZW5ndGggKyBf X3JlcywgX19hbGxvYyk7CiAgICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAg aWYgKHRydWUpCiAgICAgICAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRh KCksIF9NX3JlZmRhdGEoKSwgX01fbGVuZ3RoKTsgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVm ZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUgYm9vbAoKCgoKICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90 IF9fcywgc2l6ZV90IF9fcikKCiAgICB7CiAgICAgIHJldHVybiAyICogKF9fcyA8PSAxNiA/IDE2 IDogX19zKSA8IF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykK ICAgIHsKICAgICAgaWYgKF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhf ZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0 aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5k KF9fbiAtIF9fc2l6ZSwgX19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQogICAgICAg IHRoaXMtPmVyYXNlKF9fbik7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAg ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBs YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXIgX19rMSwKICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewog ICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAgcmV0dXJuIHRoaXMt PnJlcGxhY2UoX19pMSwgX19pMiwgX19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpKTsKICAg ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwg aXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90 eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlz LT5tYXhfc2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXpl X3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKCiAgICAgICAgaWYgKF9fZG1heCA8PSBfX2Ru ZXcpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfTV9yZXBs YWNlIik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigpOwogICAg ICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOwoKICAgICAgICBpZiAoX19kbmV3 KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7 CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEs IGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIs IHNpemVfdHlwZSBfX24yKQogICAgewogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVj ayhfX3BvczEpLCBfTV9mb2xkKF9fcG9zMSwgX19uMSksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f c3RyLl9NX2ZvbGQoX19wb3MyLCBfX24yKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs X0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKCgoK ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9f bGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBh Y2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gdGhpcy0+ cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJlZ2luKCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgewoKCgogICAgICBzaXplX3R5cGUg X19sZW4gPSBtaW4oX19zdHIuc2l6ZSgpIC0gX19wb3MsIF9fbikgKyB0aGlzLT5zaXplKCk7CiAg ICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShf X2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf X3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9N X2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs X1RyYWl0cyxfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46 OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgewogICAg ICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+ IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJl dHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90 eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsg dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAg IHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVu ZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMs CiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYg X19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B bGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBl OjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX1RyYWl0 czo6bGVuZ3RoKF9fbGhzKTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zdHIu cmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX2xocywg X19saHMgKyBfX2xlbik7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBf X3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j PgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxf VHJhaXRzLF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf Q2hhclQsX1RyYWl0cyxfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190 eXBlIF9fc3RyOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhzLnNpemUoKTsKICAgICAg X19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUo MSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3Ry OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uo aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2Mp CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7CiAgICAgIHNpemVfdHlw ZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgIGlmIChtYXhfc2l6ZSgpIC0gKHRo aXMtPnNpemUoKSAtIF9fbjEpIDw9IF9fbjIpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3Io ImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBfTV9tdXRhdGUgKF9fb2ZmMSwgX19uMSwg X19uMik7CgogICAgICBpZiAoX19uMikKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2Rh dGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb3B5KF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAg IGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgi YmFzaWNfc3RyaW5nOjpjb3B5Iik7CgogICAgICBpZiAoX19uID4gdGhpcy0+c2l6ZSgpIC0gX19w b3MpCiAgICAgICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7CgogICAgICB0cmFpdHNfdHlw ZTo6Y29weShfX3MsIF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOwoKICAgICAgcmV0dXJuIF9fbjsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg ZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBz aXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0 YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsgKytfX3hwb3MpCiAgICAg ICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9feHBvcywgX19zLCBfX24pID09 IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUK ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZChfQ2hh clQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX3JldCA9IG5wb3M7CiAgICAgIGlm IChfX3BvcyA8IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0 YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBfX3NpemUgLSBfX3BvczsK ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19kYXRhICsg X19wb3MsIF9fbiwgX19jKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIF9fcmV0ID0g X19wIC0gX19kYXRhOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoY29uc3Qg X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsK ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbiA8PSBf X3NpemUpCiAgICAgICAgewogICAgICAgICAgX19wb3MgPSBzdGQ6Om1pbihfX3NpemUgLSBfX24g LF9fcG9zKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAg ICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29t cGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICAgICAgICByZXR1 cm4gX19wb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3Bvcy0tID4gMCk7CiAg ICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9f cG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog ICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3Np emUgLSAxOwogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQogICAgICAgICAgICBfX3hwb3Mg PSBfX3BvczsKCiAgICAgICAgICBmb3IgKCsrX194cG9zOyBfX3hwb3MtLSA+IDA7ICkKICAgICAg ICAgICAgaWYgKHRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAg ICAgICAgICByZXR1cm4gX194cG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90 eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRf Zmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f bikgY29uc3QKICAgIHsKICAgICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUoKTsg KytfX3BvcykKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190 eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3NdKTsKICAgICAgICAgIGlmIChfX3Ap CiAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBm aW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK ICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXpl ID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAg ICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01f ZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAg ICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOwogICAgICAgIH0KICAgICAgcmV0 dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBf X3BvczsKICAgICAgZm9yICg7IF9fbiAmJiBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9z KQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hw b3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlw ZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2Zp cnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAg IHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUo KTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBv c10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXpl X3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmlu ZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp OwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3Np emUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwg X01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAg ICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVy biBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29u c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYg KF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAg ICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAg ICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAo X19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg aW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBh cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog ICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4g X19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBh cmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbik7 CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50 IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRh KCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3Np emU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9z MSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAg IHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXpl X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9f c3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXpl KQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsK CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAg ICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29zaXplIC0gX19wb3MyLCBfX24yKTsKICAg ICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fcm9zaXplKTsKICAgICAgaW50IF9f ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwog ICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJl dHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAog ICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpbnQgX19y ID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3MsIF9fc2l6ZSk7CiAgICAgIGlm ICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsK ICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcg PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90 eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAg ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAg IHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXpl X3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlw ZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190 eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFf X3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxv Yz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBf Q2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAg IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6 ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7 CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyks IF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19u MSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAg aW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9f bGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAg ICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9U cmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAgICAg ICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZzaXop CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBl OwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5 cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6 OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNd ID0gX0NoYXJUKCk7CiAgICB9Cn0KIyA1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9zdHJpbmcuaCIgMiAzCiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3RyaW5n IiAyIDMKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL2J1ZmZlci5oIiAyCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My92ZWN0b3IiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L3ZlY3RvciIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9y LmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5o IiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAx IDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwoj IDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpu YW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgog IHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9j YXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAog IF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df ZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRf YXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBj aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhy b3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDMzICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF92ZWN0b3IuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf aXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0 aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9m dW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRf ZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAg dm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBl aWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df b3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVf ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMg MzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDIgMwojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM3 ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rv ci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3Rh dGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt ZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAg ICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg eyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0 IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0 YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3Rl ZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9NX3N0YXJ0Owog IF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9UcCogX01fYWxs b2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRl KF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7 IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9Cn07CgoK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxs b2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h bWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAg ICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0 IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0 IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5k X29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBf TV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBf QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwog IF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjph bGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19u KQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMg X1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlw ZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAg ICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFs bG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkg OiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0IGFsbG9jYXRv cl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9f bik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01f c3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0 YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJv dGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4KewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHJpdmF0ZToKICB0eXBlZGVmIF9W ZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxs b2M+IHZlY3Rvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBl ZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25z dF9wb2ludGVyOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5 cGU+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwg dmVjdG9yX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJl bmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVk ZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7 CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6 Z2V0X2FsbG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8 aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9N X2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpf TV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNlOjpfTV9lbmRf b2Zfc3RvcmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19w b3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBf X3Bvc2l0aW9uKTsKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9y IChfTV9zdGFydCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAgICB7IHJldHVy biBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4g aXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl dHVybiBjb25zdF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJi ZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3Jl dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IoZW5kKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJu IHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJl bmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsg fQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkg LSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBz aXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25z dAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdl KSAtIGJlZ2luKCkpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVybiBiZWdpbigp ID09IGVuZCgpOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsgcmV0 dXJuICooYmVnaW4oKSArIF9fbik7IH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXpl X3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CgogIHZvaWQgX01f cmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgaWYgKF9fbiA+PSB0aGlzLT5z aXplKCkpCiAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsKICB9CgogIHJlZmVy ZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4g KCp0aGlzKVtfX25dOyB9CiAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0 CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAgZXhw bGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp KQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAm IF9fdmFsdWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf dHlwZSgpKQogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs aXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9y KHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsg X01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9 CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9f eC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlh bGl6ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg X19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAgIHR5cGVkZWYgdHlwZW5h bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAg X01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdl ciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9zdGFydCA9IF9N X2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwog ICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1 ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0 aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX3JhbmdlX2lu aXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK ICB9CgogIH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0KCiAgdmVj dG9yPF9UcCwgX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f eCk7CiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBhY2l0eSgpIDwg X19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBw b2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01fZmlu aXNoKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxv Y2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0 YXJ0ID0gX190bXA7CiAgICAgIF9NX2ZpbmlzaCA9IF9fdG1wICsgX19vbGRfc2l6ZTsKICAgICAg X01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIH0KICB9CgoKCgoKCiAgdm9p ZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9maWxsX2Fzc2ln bihfX24sIF9fdmFsKTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29u c3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lk IGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsK ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdy YWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0lu dGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNz aWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQog ICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IF9N X2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25f YXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19m aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndh cmRfaXRlcmF0b3JfdGFnKTsKCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7 IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQog IHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgY29uc3RfcmVmZXJl bmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCiAgdm9pZCBwdXNoX2Jh Y2soY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3Jh Z2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7 CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZv aWQgcHVzaF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkg ewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAg ICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOwogIH0KICB2b2lkIHN3YXAodmVjdG9y PF9UcCwgX0FsbG9jPiYgX194KSB7CiAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFy dCk7CiAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgIHN0ZDo6c3dh cChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CgogIGl0ZXJh dG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgewogICAgc2l6 ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBf TV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVj dChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAg ICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pLCBfX3gpOwogICAgcmV0dXJuIGJl Z2luKCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7 CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmlu aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAg Y29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQog ICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pKTsKICAgIHJldHVybiBiZWdp bigpICsgX19uOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy YXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRl cmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9z LCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf SW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVn ZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVf dHlwZSkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkg X192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2lu c2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3Ms IF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB2 b2lkIGluc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194 KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CgogIHZvaWQgX01fZmls bF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7 CgogIHZvaWQgcG9wX2JhY2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmlu aXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYg KF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQo KSwgX19wb3NpdGlvbik7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsK ICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2Zp cnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9fbGFzdCwgZW5k KCksIF9fZmlyc3QpKTsKICAgIGRlc3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBf TV9maW5pc2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cgog IHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAg aWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX25ld19zaXpl LCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUo KSwgX194KTsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXpl KF9fbmV3X3NpemUsIF9UcCgpKTsgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVu ZCgpKTsgfQoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K ICBwb2ludGVyIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9Gb3J3YXJkSXRl cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBwb2ludGVyIF9fcmVzdWx0ID0g X01fYWxsb2NhdGUoX19uKTsKICAgICAgICAgICAgICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIH0KCiAg dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6 ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAg fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9p bml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsK ICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24p OwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2Ug PSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp cnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy YXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3Ig X19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0 ZXJhdG9yX3RhZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGlu ZSBib29sCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2 ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6 ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigp KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVy YXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBf QWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2lu KCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2lu KCksIF9feS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3RvcjxfVHAsIF9BbGxv Yz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+ JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9 PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s Cm9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3Rvcjxf VHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCB2ZWN0b3I8 X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJl dHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K aW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNv bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+Jgp2 ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf X3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25zdCBzaXplX3R5cGUgX194bGVuID0g X194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7CiAgICAgIHBvaW50ZXIg X190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5k KCkpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9j YXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3Rh cnQgPSBfX3RtcDsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsK ICAgIH0KICAgIGVsc2UgaWYgKHNpemUoKSA+PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19p KGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSkpOwogICAgICBkZXN0cm95KF9f aSwgZW5kKCkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5i ZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3gu YmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgfQogICAgX01fZmlu aXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Zp bGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQp7CiAgaWYgKF9f biA+IGNhcGFjaXR5KCkpIHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3Zh bCwgZ2V0X2FsbG9jYXRvcigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMpOwogIH0KICBlbHNlIGlm IChfX24gPiBzaXplKCkpIHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9N X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBf X3ZhbCk7CiAgfQogIGVsc2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwg ZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgo X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yIF9f Y3VyKGJlZ2luKCkpOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5k KCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0 KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0Fs bG9jPjo6X01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y X3RhZykgewogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0 LCBfX2xlbik7CgogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsKICAgIHBvaW50ZXIgX190bXAo X01fYWxsb2NhdGVfYW5kX2NvcHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCkpOwogICAgZGVzdHJv eShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2Vu ZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3RtcDsKICAgIF9NX2Vu ZF9vZl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsKICB9CiAgZWxzZSBp ZiAoc2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goY29weShfX2Zp cnN0LCBfX2xhc3QsIF9NX3N0YXJ0KSk7CiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkp OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICB9CiAgZWxzZSB7CiAgICBf Rm9yd2FyZEl0ZXIgX19taWQgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsK ICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5p dGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2lu c2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX01f ZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAq KF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5ID0gX194 OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwg aXRlcmF0b3IoX01fZmluaXNoLSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9feF9jb3B5OwogIH0K ICBlbHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29u c3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAx OwogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgIGl0ZXJh dG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgICAgICAgICAgewogICAgICBfX25l d19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0 aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQp OwogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAgICAgKytfX25l d19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0 aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19uZXdfZmluaXNoKTsKICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgZGVzdHJveShiZWdpbigpLCBl bmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N X3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgX01fZmluaXNo ID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3Rh cnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs b2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bv c2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgY29u c3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAg IGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksCiAgICAg ICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0g X1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXpl KCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19v bGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4p OwogICAgcG9pbnRlciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgICAgICAgICAgICB7 CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFy dCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICArK19fbmV3 X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRp b24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwog ICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7 CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNo OwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46 Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBp ZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9m aW5pc2gpID49IF9fbikgewogICAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICAgIGNvbnN0IHNp emVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRv ciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24p IHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gs IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3 YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAg ICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgfQog ICAgICBlbHNlIHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAt IF9fZWxlbXNfYWZ0ZXIsIF9feF9jb3B5KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19l bGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRf ZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwog ICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfX3hfY29weSk7CiAgICAgIH0K ICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUo KTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9z aXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xlbikp OwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICAgICAgICAg ICAgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShiZWdpbigpLCBf X3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs aXplZF9maWxsX24oX19uZXdfZmluaXNoLCBfX24sIF9feCk7CiAgICAgICAgX19uZXdfZmluaXNo CiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19uZXdf ZmluaXNoKTsKICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNo KTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z dGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5p c2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3 X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQKdmVjdG9y PF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewog IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgX19wb3MgPSBpbnNl cnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lk CnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJk X2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgc2l6ZV90eXBl IF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICBpZiAoc2l6 ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgY29u c3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0 ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+ IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2Zp bmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlf YmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwog ICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgICBl bHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBh ZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHko X19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19l bGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRf ZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwog ICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9CiAg ICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAg IGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19u KTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAg aXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgICAgICAgICAgIHsKICAg ICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0aW9uLCBf X25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAg ICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCks IF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9N X2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdl IC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAg X01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug PSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0KIyAzOCAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9idmVjdG9yLmgiIDEgMwojIDM0ICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnN0 YXRpYyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4KnNpemVvZih1bnNpZ25lZCBpbnQpKTsK CnN0cnVjdCBfQml0X3JlZmVyZW5jZSB7CiAgdW5zaWduZWQgaW50KiBfTV9wOwogIHVuc2lnbmVk IGludCBfTV9tYXNrOwogIF9CaXRfcmVmZXJlbmNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25l ZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9C aXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgp IGNvbnN0IHsgcmV0dXJuICEoISgqX01fcCAmIF9NX21hc2spKTsgfQogIF9CaXRfcmVmZXJlbmNl JiBvcGVyYXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsK ICAgIGVsc2UgKl9NX3AgJj0gfl9NX21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRf cmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0 dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVm ZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7 IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdCB7CiAg ICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsKICB9CiAgdm9pZCBmbGlwKCkgeyAq X01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9f eCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3RtcCA9IF9feDsKICBfX3ggPSBfX3k7 CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgcmFu ZG9tX2FjY2Vzc19pdGVyYXRvcjxib29sLCBwdHJkaWZmX3Q+CnsKICB1bnNpZ25lZCBpbnQqIF9N X3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKCiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2ln bmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNl dChfX3kpIHt9CgogIHZvaWQgX01fYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBf X1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9 CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsK ICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9 CgogIHZvaWQgX01faW5jcihwdHJkaWZmX3QgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19u ID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19u ID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9 ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxz ZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgfQoKICBib29sIG9wZXJh dG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBf TV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA9PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29s IG9wZXJhdG9yPChjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0 dXJuIF9NX3AgPCBfX2kuX01fcCB8fCAoX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBf X2kuX01fb2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3Jf YmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29s IG9wZXJhdG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0 dXJuIF9faSA8ICp0aGlzOwogIH0KICBib29sIG9wZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRv cl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9v bCBvcGVyYXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICBy ZXR1cm4gISgqdGhpcyA8IF9faSk7CiAgfQp9OwoKaW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0o Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYg X195KSB7CiAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3gu X01fb2Zmc2V0IC0gX195Ll9NX29mZnNldDsKfQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVi bGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVu Y2U7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRl cmF0b3IgaXRlcmF0b3I7CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgw LCAwKSB7fQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBf X3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9w ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQp OyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1 cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBf X3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBp dGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0 aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAg PSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVy YXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7 CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2Vf dHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0 ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRv ciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Ig b3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1w ID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJh dG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsK CmlubGluZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0 X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0 X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJl ZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3Qg Ym9vbCogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0 b3I7CgogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7 fQogIF9CaXRfY29uc3RfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBf X3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0 ZXJhdG9yKGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNl KF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3Iq KCkgY29uc3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNl dCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgp OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkg ewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAg IHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBf TV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3Bl cmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9i dW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJh dG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJu ICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUg X19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9p dGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3Rf aXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNv bnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBj b25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9 CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAg cmV0dXJuICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9y Cm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gp IHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwg Ym9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0 eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRv cl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxs b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3Jf YWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9j YXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkg e30KCnByb3RlY3RlZDoKICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQog ICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQg LSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9z dGFydC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9N X3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug LSBfTV9zdGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQg aW50LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2Nh dG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7 CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0FsbG9jYXRvcj4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7 CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRv cj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3Jf dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoK ICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3Rh cnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAg dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46 Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAgdW5zaWduZWQgaW50KiBfTV9i aXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgo X19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl KCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9BbGxvY190eXBlOjpkZWFsbG9jYXRl KF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9z dG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0Owog IF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3Jh Z2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBw dWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4Kewog IHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgog ICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0 b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3Jf dHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9N X2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3N0bF92ZWN0b3IuaCIgMSAzCiMgMzE4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2J2ZWN0b3IuaCIgMiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPHR5cGVuYW1l IF9BbGxvYz4KICBjbGFzcyB2ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1YmxpYyBfQnZlY3Rvcl9i YXNlPF9BbGxvYz4KICB7CiAgcHVibGljOgogICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAg ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl bmNlX3R5cGU7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVk ZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2lu dGVyOwogICAgdHlwZWRlZiBjb25zdCBib29sKiBjb25zdF9wb2ludGVyOwoKICAgIHR5cGVkZWYg X0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBj b25zdF9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0 b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8 aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQnZlY3Rv cl9iYXNlPF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAgYWxsb2Nh dG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9CdmVjdG9yX2Jh c2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigpOwogICAgfQoKICBwcm90ZWN0ZWQ6CiAgICB1c2lu ZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2JpdF9hbGxvYzsKICAgIHVzaW5nIF9CdmVjdG9y X2Jhc2U8X0FsbG9jPjo6X01fZGVhbGxvY2F0ZTsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0Fs bG9jPjo6X01fc3RhcnQ7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2Zpbmlz aDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZW5kX29mX3N0b3JhZ2U7Cgog IHByb3RlY3RlZDoKICAgIHZvaWQgX01faW5pdGlhbGl6ZShzaXplX3R5cGUgX19uKSB7CiAgICAg IHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgIF9NX2VuZF9vZl9z dG9yYWdlID0gX19xICsgKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICBf TV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsg ZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICB9CiAgICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0 b3IgX19wb3NpdGlvbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9N X2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9m aW5pc2gsIF9NX2ZpbmlzaCArIDEpOwogICAgICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICAg ICsrX01fZmluaXNoOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xl biA9IHNpemUoKSA/IDIgKiBzaXplKCkgOiBfX1dPUkRfQklUOwogICAgICAgIHVuc2lnbmVkIGlu dCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5 KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgICpfX2krKyA9 IF9feDsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwog ICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSAr IChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0g aXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBf X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoKTsKICAg ICAgX01fZmluaXNoID0gaXRlcmF0b3IoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSAwOwog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgcHVzaF9i YWNrKCpfX2ZpcnN0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv cj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv cndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgICBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAg ICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBf X3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh dG9yX3RhZykgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsK ICAgICAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICAgICsrX19wb3M7 CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAg IHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAg ICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAg ICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAg ICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgICAgIGlmIChjYXBhY2l0 eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9u LCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgICAgY29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICAgICAgX01fZmluaXNoICs9IGRp ZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNp emVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgICB1bnNp Z25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgICBpdGVyYXRvciBf X2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAg ICAgX19pID0gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9faSk7CiAgICAgICAgICBfTV9maW5pc2gg PSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZSgp OwogICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklU IC0gMSkvX19XT1JEX0JJVDsKICAgICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsK ICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgcHVibGljOgogICAgaXRlcmF0b3IgYmVnaW4oKSB7 IHJldHVybiBfTV9zdGFydDsgfQogICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl dHVybiBfTV9zdGFydDsgfQogICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9 CiAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAg ICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5k KCkpOyB9CiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsKICAgICAg cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogICAgfQogICAgcmV2ZXJzZV9p dGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogICAg Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewogICAgICByZXR1cm4gY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICAgIH0KCiAgICBzaXplX3R5cGUgc2l6ZSgpIGNv bnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgICBzaXplX3R5cGUg bWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgICBzaXplX3R5cGUg Y2FwYWNpdHkoKSBjb25zdCB7CiAgICAgIHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3Io X01fZW5kX29mX3N0b3JhZ2UsIDApIC0gYmVnaW4oKSk7CiAgICB9CiAgICBib29sIGVtcHR5KCkg Y29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICAgIHJlZmVyZW5jZSBvcGVyYXRv cltdKHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2Vf dHlwZShfX24pKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f bikgY29uc3QKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikp OyB9CgogICAgdm9pZCBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICAg IGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfcmFuZ2VfZXJyb3IoInZl Y3Rvcjxib29sPiIpOwogICAgfQoKICAgIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAg ICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KICAgIGNvbnN0 X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgICB7IF9NX3JhbmdlX2NoZWNr KF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3Jf YmFzZTxfQWxsb2M+KF9fYSkge30KCiAgICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3Zh bHVlLAogICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf dHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIF9N X2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3Rv cmFnZSwgX192YWx1ZSA/IH4wIDogMCk7CiAgICB9CgogICAgZXhwbGljaXQgdmVjdG9yKHNpemVf dHlwZSBfX24pCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90eXBlKCkp CiAgICB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9w LCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7CiAgICB9CgogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYg X194KSA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7CiAgICAg IF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5l bmQoKSwgX01fc3RhcnQpOwogICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgog ICAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194 LCBfX3RydWVfdHlwZSkgewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01f c3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICB9CgogICAg dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2Rp c3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5p dGlhbGl6ZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz dCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZlY3Rv cihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAg OiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAg X01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg IH0KCiAgICB+dmVjdG9yKCkgeyB9CgogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9y JiBfX3gpIHsKICAgICAgaWYgKCZfX3ggPT0gdGhpcykgcmV0dXJuICp0aGlzOwogICAgICBpZiAo X194LnNpemUoKSA+IGNhcGFjaXR5KCkpIHsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAg ICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgfQogICAgICBjb3B5KF9feC5iZWdp bigpLCBfX3guZW5kKCksIGJlZ2luKCkpOwogICAgICBfTV9maW5pc2ggPSBiZWdpbigpICsgZGlm ZmVyZW5jZV90eXBlKF9feC5zaXplKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoK CiAgICB2b2lkIF9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7CiAgICAgIGlm IChfX24gPiBzaXplKCkpIHsKICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9z dG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgICAgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgp LCBfX3gpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24s IGVuZCgpKTsKICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBf X3ggPyB+MCA6IDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwg Ym9vbCBfX3gpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3gpOyB9CgogICAgdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9hc3Np Z25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdGVt cGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVn ZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAgIHsgX01fZmlsbF9hc3Np Z24oKHNpemVfdCkgX19uLCAoYm9vbCkgX192YWwpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICAgIHsgX01fYXNzaWduX2F1eChf X2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogICAgdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgaXRlcmF0b3IgX19jdXIgPSBiZWdp bigpOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyAr K19fY3VyLCArK19fZmlyc3QpCiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogICAgICBlbHNl CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICAgIHRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3 YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbGVu ID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgICAgIGlmIChf X2xlbiA8IHNpemUoKSkKICAgICAgICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4o KSksIGVuZCgpKTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9 IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgICAgICBjb3B5KF9f Zmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xh c3QpOwogICAgICB9CiAgICB9CgogICAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAg ICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9N X2JpdF9hbGxvYyhfX24pOwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoYmVnaW4oKSwgZW5kKCks IGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9z dGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3Eg KyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIH0KICAgIH0KCiAgICBy ZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgY29uc3RfcmVmZXJlbmNl IGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIHJlZmVyZW5jZSBiYWNrKCkg eyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0 IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogICAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsK ICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKQogICAgICAgICpf TV9maW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoZW5kKCks IF9feCk7CiAgICB9CiAgICB2b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9BbGxvYz4mIF9feCkgewog ICAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAgIHN0ZDo6c3dhcChf TV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3Jh Z2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgICB9CiAgICBpdGVyYXRvciBpbnNlcnQoaXRl cmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgZGlmZmVyZW5jZV90 eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgICBpZiAoX01fZmluaXNoLl9NX3Ag IT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgICAqX01f ZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRp b24sIF9feCk7CiAgICAgIHJldHVybiBiZWdpbigpICsgX19uOwogICAgfQoKCgogICAgdGVtcGxh dGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3Ig X19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgX190cnVlX3R5cGUpIHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194 KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9N X2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbnNlcnRfcmFu Z2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7 CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNl cnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J c19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01f aW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkp OwogICAgfQoKICAgIHZvaWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6 ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA9PSAwKSByZXR1cm47CiAgICAg IGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgIGNvcHlfYmFja3dhcmQo X19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAg ICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwg X194KTsKICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0K ICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUo KSwgX19uKTsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7 CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRv cihfX3EsIDApKTsKICAgICAgICBmaWxsX24oX19pLCBfX24sIF9feCk7CiAgICAgICAgX01fZmlu aXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikp OwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9f cSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0 ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgaW5zZXJ0KGl0ZXJh dG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIF9NX2ZpbGxf aW5zZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194KTsKICAgIH0KCiAgICB2b2lkIHBvcF9iYWNrKCkg eyAtLV9NX2ZpbmlzaDsgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikg ewogICAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgICAgY29weShfX3Bvc2l0 aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgICAgIC0tX01fZmluaXNoOwogICAgICBy ZXR1cm4gX19wb3NpdGlvbjsKICAgIH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmly c3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFzdCwgZW5k KCksIF9fZmlyc3QpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KICAgIHZvaWQgcmVzaXpl KHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBpZiAoX19u ZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBl KF9fbmV3X3NpemUpLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9f bmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgICB9CiAgICB2b2lkIGZsaXAoKSB7CiAgICAgIGZv ciAodW5zaWduZWQgaW50KiBfX3AgPSBfTV9zdGFydC5fTV9wOyBfX3AgIT0gX01fZW5kX29mX3N0 b3JhZ2U7ICsrX19wKQogICAgICAgICpfX3AgPSB+Kl9fcDsKICAgIH0KCiAgICB2b2lkIGNsZWFy KCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KICB9OwoKCnR5cGVkZWYgdmVjdG9yPGJvb2ws IGFsbG9jPiBiaXRfdmVjdG9yOwoKfQojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My92ZWN0 b3IiIDIgMwojIDI4ICIuLi8uLi9hcnRzL21jb3AvYnVmZmVyLmgiIDIKIyAzOSAiLi4vLi4vYXJ0 cy9tY29wL2J1ZmZlci5oIgpuYW1lc3BhY2UgQXJ0cyB7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hh ciBtY29wYnl0ZTsKCgpjbGFzcyBCdWZmZXJQcml2YXRlOwoKY2xhc3MgQnVmZmVyIHsKcHJpdmF0 ZToKICAgICAgICBsb25nIHJwb3M7CiAgICAgICAgYm9vbCBfcmVhZEVycm9yOwogICAgICAgIHN0 ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IGNvbnRlbnRzOwoKICAgICAgICBCdWZmZXJQcml2YXRl ICpkOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZnJvbUhleE5pYmJsZShjaGFyIGMpOwoKcHVibGlj OgogICAgICAgIEJ1ZmZlcigpOwogICAgICAgIH5CdWZmZXIoKTsKCiAgICAgICAgYm9vbCByZWFk RXJyb3IoKTsKICAgICAgICB2b2lkIHdyaXRlQm9vbChib29sIGIpOwogICAgICAgIHZvaWQgd3Jp dGVCb29sU2VxKGNvbnN0IHN0ZDo6dmVjdG9yPGJvb2w+JiBzZXEpOwogICAgICAgIHZvaWQgd3Jp dGVCeXRlKG1jb3BieXRlIGIpOwogICAgICAgIHZvaWQgd3JpdGVCeXRlU2VxKGNvbnN0IHN0ZDo6 dmVjdG9yPG1jb3BieXRlPiYgc2VxKTsKICAgICAgICB2b2lkIHdyaXRlTG9uZyhsb25nIGwpOwog ICAgICAgIHZvaWQgd3JpdGVMb25nU2VxKGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBzZXEpOwog ICAgICAgIHZvaWQgd3JpdGVGbG9hdChmbG9hdCBmKTsKICAgICAgICB2b2lkIHdyaXRlRmxvYXRT ZXEoY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQ+JiBzZXEpOwogICAgICAgIHZvaWQgd3JpdGVTdHJp bmcoY29uc3Qgc3RkOjpzdHJpbmcmIHMpOwogICAgICAgIHZvaWQgd3JpdGVTdHJpbmdTZXEoY29u c3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzZXEpOwoKICAgICAgICBsb25nIHNpemUoKTsK ICAgICAgICBsb25nIHJlbWFpbmluZygpOwogICAgICAgIHZvaWQgKnJlYWQobG9uZyBsKTsKICAg ICAgICB2b2lkIHJlYWQoc3RkOjp2ZWN0b3I8bWNvcGJ5dGU+JiByYXcsIGxvbmcgbCk7CiAgICAg ICAgdm9pZCAqcGVlayhsb25nIGwpOwogICAgICAgIHZvaWQgc2tpcChsb25nIGwpOwogICAgICAg IHZvaWQgcmV3aW5kKCk7CgogICAgICAgIHZvaWQgd3JpdGUodm9pZCAqZGF0YSwgbG9uZyBsKTsK ICAgICAgICB2b2lkIHdyaXRlKGNvbnN0IHN0ZDo6dmVjdG9yPG1jb3BieXRlPiYgcmF3KTsKCiAg ICAgICAgYm9vbCByZWFkQm9vbCgpOwogICAgICAgIHZvaWQgcmVhZEJvb2xTZXEoc3RkOjp2ZWN0 b3I8Ym9vbD4mIHJlc3VsdCk7CiAgICAgICAgbWNvcGJ5dGUgcmVhZEJ5dGUoKTsKICAgICAgICB2 b2lkIHJlYWRCeXRlU2VxKHN0ZDo6dmVjdG9yPG1jb3BieXRlPiYgcmVzdWx0KTsKICAgICAgICBs b25nIHJlYWRMb25nKCk7CiAgICAgICAgdm9pZCByZWFkTG9uZ1NlcShzdGQ6OnZlY3Rvcjxsb25n PiYgcmVzdWx0KTsKICAgICAgICBmbG9hdCByZWFkRmxvYXQoKTsKICAgICAgICB2b2lkIHJlYWRG bG9hdFNlcShzdGQ6OnZlY3RvcjxmbG9hdD4mIHJlc3VsdCk7CiAgICAgICAgdm9pZCByZWFkU3Ry aW5nKHN0ZDo6c3RyaW5nJiByZXN1bHQpOwogICAgICAgIHZvaWQgcmVhZFN0cmluZ1NlcShzdGQ6 OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHJlc3VsdCk7CgogICAgICAgIHZvaWQgcGF0Y2hMZW5ndGgo KTsKICAgICAgICB2b2lkIHBhdGNoTG9uZyhsb25nIHBvc2l0aW9uLCBsb25nIHZhbHVlKTsKCiAg ICAgICAgc3RkOjpzdHJpbmcgdG9TdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAg ICAgIGJvb2wgZnJvbVN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgZGF0YSwgY29uc3Qgc3RkOjpz dHJpbmcmIG5hbWUpOwp9OwoKfTsKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL2NvbW1vbi5oIiAyCiMg MSAiLi4vLi4vYXJ0cy9tY29wL3R5cGUuaCIgMQojIDI2ICIuLi8uLi9hcnRzL21jb3AvdHlwZS5o IgojIDEgIi4uLy4uL2FydHMvbWNvcC9idWZmZXIuaCIgMQojIDI3ICIuLi8uLi9hcnRzL21jb3Av dHlwZS5oIiAyCgoKCgoKCgpuYW1lc3BhY2UgQXJ0cyB7CgoKCgpjbGFzcyBUeXBlIHsKcHJpdmF0 ZToKICAgICAgICBzdGF0aWMgbG9uZyBfc3RhdGljVHlwZUNvdW50OwoKcHVibGljOgogICAgICAg IGlubGluZSBzdGF0aWMgbG9uZyBfdHlwZUNvdW50KCkgeyByZXR1cm4gX3N0YXRpY1R5cGVDb3Vu dDsgfQoKCgogICAgICAgIGlubGluZSBUeXBlKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBf c3RhdGljVHlwZUNvdW50Kys7CiAgICAgICAgfQoKCgoKICAgICAgICBpbmxpbmUgVHlwZShjb25z dCBUeXBlJikKICAgICAgICB7CiAgICAgICAgICAgICAgICBfc3RhdGljVHlwZUNvdW50Kys7CiAg ICAgICAgfQoKCgoKICAgICAgICB2aXJ0dWFsIH5UeXBlKCk7CiMgNzUgIi4uLy4uL2FydHMvbWNv cC90eXBlLmgiCiAgICAgICAgdmlydHVhbCB2b2lkIHJlYWRUeXBlKEJ1ZmZlciYgc3RyZWFtKSA9 IDA7CgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVR5cGUoQnVmZmVyJiBzdHJlYW0pIGNv bnN0ID0gMDsKfTsKCn07CiMgMjggIi4uLy4uL2FydHMvbWNvcC9jb21tb24uaCIgMgojIDEgIi4u Ly4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9tY29wL2Rpc3Bh dGNoZXIuaCIKIyAxICIuLi8uLi9hcnRzL21jb3AvY29tbW9uLmgiIDEKIyAyNyAiLi4vLi4vYXJ0 cy9tY29wL2Rpc3BhdGNoZXIuaCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9wb29sLmgiIDEKIyA0 NSAiLi4vLi4vYXJ0cy9tY29wL3Bvb2wuaCIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L3N0YWNrIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zdGFjayIgMwojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMSAzCiMgMzEgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMwoKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDMzICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0YWNrLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX3N0YWNrLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfZGVxdWUuaCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfZGVxdWUuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2RlcXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9kZXF1ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMiAzCiMgNzIgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKaW5saW5lIHNp emVfdCBfX2RlcXVlX2J1Zl9zaXplKHNpemVfdCBfX3NpemUpIHsKICByZXR1cm4gX19zaXplIDwg NTEyID8gc2l6ZV90KDUxMiAvIF9fc2l6ZSkgOiBzaXplX3QoMSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfRGVxdWVfaXRlcmF0b3Igewog IHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gaXRlcmF0b3I7CiAgdHlw ZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiBjb25zdF9p dGVyYXRvcjsKICBzdGF0aWMgc2l6ZV90IF9TX2J1ZmZlcl9zaXplKCkgeyByZXR1cm4gX19kZXF1 ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7IH0KCiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJh dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5 cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBz aXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0 eXBlZGVmIF9UcCoqIF9NYXBfcG9pbnRlcjsKCiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3IgX1Nl bGY7CgogIF9UcCogX01fY3VyOwogIF9UcCogX01fZmlyc3Q7CiAgX1RwKiBfTV9sYXN0OwogIF9N YXBfcG9pbnRlciBfTV9ub2RlOwoKICBfRGVxdWVfaXRlcmF0b3IoX1RwKiBfX3gsIF9NYXBfcG9p bnRlciBfX3kpCiAgICA6IF9NX2N1cihfX3gpLCBfTV9maXJzdCgqX195KSwKICAgICAgX01fbGFz dCgqX195ICsgX1NfYnVmZmVyX3NpemUoKSksIF9NX25vZGUoX195KSB7fQogIF9EZXF1ZV9pdGVy YXRvcigpIDogX01fY3VyKDApLCBfTV9maXJzdCgwKSwgX01fbGFzdCgwKSwgX01fbm9kZSgwKSB7 fQogIF9EZXF1ZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX194KQogICAgOiBfTV9jdXIoX194 Ll9NX2N1ciksIF9NX2ZpcnN0KF9feC5fTV9maXJzdCksCiAgICAgIF9NX2xhc3QoX194Ll9NX2xh c3QpLCBfTV9ub2RlKF9feC5fTV9ub2RlKSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u c3QgeyByZXR1cm4gKl9NX2N1cjsgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0 dXJuIF9NX2N1cjsgfQoKICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0IF9TZWxmJiBf X3gpIGNvbnN0IHsKICAgIHJldHVybiBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSkg KiAoX01fbm9kZSAtIF9feC5fTV9ub2RlIC0gMSkgKwogICAgICAoX01fY3VyIC0gX01fZmlyc3Qp ICsgKF9feC5fTV9sYXN0IC0gX194Ll9NX2N1cik7CiAgfQoKICBfU2VsZiYgb3BlcmF0b3IrKygp IHsKICAgICsrX01fY3VyOwogICAgaWYgKF9NX2N1ciA9PSBfTV9sYXN0KSB7CiAgICAgIF9NX3Nl dF9ub2RlKF9NX25vZGUgKyAxKTsKICAgICAgX01fY3VyID0gX01fZmlyc3Q7CiAgICB9CiAgICBy ZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3Rt cCA9ICp0aGlzOwogICAgKysqdGhpczsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIF9TZWxmJiBv cGVyYXRvci0tKCkgewogICAgaWYgKF9NX2N1ciA9PSBfTV9maXJzdCkgewogICAgICBfTV9zZXRf bm9kZShfTV9ub2RlIC0gMSk7CiAgICAgIF9NX2N1ciA9IF9NX2xhc3Q7CiAgICB9CiAgICAtLV9N X2N1cjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAg IF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLSp0aGlzOwogICAgcmV0dXJuIF9fdG1wOwogIH0K CiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICB7CiAgICBkaWZmZXJl bmNlX3R5cGUgX19vZmZzZXQgPSBfX24gKyAoX01fY3VyIC0gX01fZmlyc3QpOwogICAgaWYgKF9f b2Zmc2V0ID49IDAgJiYgX19vZmZzZXQgPCBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUo KSkpCiAgICAgIF9NX2N1ciArPSBfX247CiAgICBlbHNlIHsKICAgICAgZGlmZmVyZW5jZV90eXBl IF9fbm9kZV9vZmZzZXQgPQogICAgICAgIF9fb2Zmc2V0ID4gMCA/IF9fb2Zmc2V0IC8gZGlmZmVy ZW5jZV90eXBlKF9TX2J1ZmZlcl9zaXplKCkpCiAgICAgICAgICAgICAgICAgICA6IC1kaWZmZXJl bmNlX3R5cGUoKC1fX29mZnNldCAtIDEpIC8gX1NfYnVmZmVyX3NpemUoKSkgLSAxOwogICAgICBf TV9zZXRfbm9kZShfTV9ub2RlICsgX19ub2RlX29mZnNldCk7CiAgICAgIF9NX2N1ciA9IF9NX2Zp cnN0ICsKICAgICAgICAoX19vZmZzZXQgLSBfX25vZGVfb2Zmc2V0ICogZGlmZmVyZW5jZV90eXBl KF9TX2J1ZmZlcl9zaXplKCkpKTsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIF9TZWxm IG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogIHsKICAgIF9TZWxmIF9fdG1w ID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19uOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9y LT0oZGlmZmVyZW5jZV90eXBlIF9fbikgeyByZXR1cm4gKnRoaXMgKz0gLV9fbjsgfQoKICBfU2Vs ZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgX1NlbGYgX190bXAg PSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX247CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0 b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsg fQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QgeyByZXR1cm4gX01f Y3VyID09IF9feC5fTV9jdXI7IH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX1NlbGYmIF9feCkg Y29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3Qg X1NlbGYmIF9feCkgY29uc3QgewogICAgcmV0dXJuIChfTV9ub2RlID09IF9feC5fTV9ub2RlKSA/ CiAgICAgIChfTV9jdXIgPCBfX3guX01fY3VyKSA6IChfTV9ub2RlIDwgX194Ll9NX25vZGUpOwog IH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfU2VsZiYgX194KSBjb25zdCB7IHJldHVybiBfX3gg PCAqdGhpczsgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfU2VsZiYgX194KSBjb25zdCB7IHJl dHVybiAhKF9feCA8ICp0aGlzKTsgfQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfU2VsZiYgX194 KSBjb25zdCB7IHJldHVybiAhKCp0aGlzIDwgX194KTsgfQoKICB2b2lkIF9NX3NldF9ub2RlKF9N YXBfcG9pbnRlciBfX25ld19ub2RlKSB7CiAgICBfTV9ub2RlID0gX19uZXdfbm9kZTsKICAgIF9N X2ZpcnN0ID0gKl9fbmV3X25vZGU7CiAgICBfTV9sYXN0ID0gX01fZmlyc3QgKyBkaWZmZXJlbmNl X3R5cGUoX1NfYnVmZmVyX3NpemUoKSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9Q dHI+Cm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBf UmVmLCBfUHRyPiYgX194KQp7CiAgcmV0dXJuIF9feCArIF9fbjsKfQojIDIwOSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvYywgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0RlcXVlX2FsbG9jX2Jhc2Ug ewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCxfQWxsb2M+Ojph bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh dG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgX0RlcXVlX2FsbG9j X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fbm9kZV9hbGxvY2F0b3Io X19hKSwgX01fbWFwX2FsbG9jYXRvcihfX2EpLAogICAgICBfTV9tYXAoMCksIF9NX21hcF9zaXpl KDApCiAge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1Rw KiwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NYXBfYWxsb2NhdG9yX3R5cGU7 CgogIGFsbG9jYXRvcl90eXBlIF9NX25vZGVfYWxsb2NhdG9yOwogIF9NYXBfYWxsb2NhdG9yX3R5 cGUgX01fbWFwX2FsbG9jYXRvcjsKCiAgX1RwKiBfTV9hbGxvY2F0ZV9ub2RlKCkgewogICAgcmV0 dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9U cCkpKTsKICB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlX25vZGUoX1RwKiBfX3ApIHsKICAgIF9NX25v ZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHAp KSk7CiAgfQogIF9UcCoqIF9NX2FsbG9jYXRlX21hcChzaXplX3QgX19uKQogICAgeyByZXR1cm4g X01fbWFwX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlX21h cChfVHAqKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IF9NX21hcF9hbGxvY2F0b3IuZGVhbGxvY2F0 ZShfX3AsIF9fbik7IH0KCiAgX1RwKiogX01fbWFwOwogIHNpemVfdCBfTV9tYXBfc2l6ZTsKfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9EZXF1ZV9hbGxvY19i YXNlPF9UcCwgX0FsbG9jLCB0cnVlPgp7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxv Y190cmFpdHM8X1RwLF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFs bG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlw ZSgpOyB9CgogIF9EZXF1ZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBfTV9t YXAoMCksIF9NX21hcF9zaXplKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBf QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X0FsbG9jX3R5cGUgX05vZGVfYWxsb2NfdHlwZTsK ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwKiwgX0FsbG9jPjo6X0FsbG9jX3R5 cGUgX01hcF9hbGxvY190eXBlOwoKICBfVHAqIF9NX2FsbG9jYXRlX25vZGUoKSB7CiAgICByZXR1 cm4gX05vZGVfYWxsb2NfdHlwZTo6YWxsb2NhdGUoX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1Rw KSkpOwogIH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbm9kZShfVHAqIF9fcCkgewogICAgX05vZGVf YWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkp KTsKICB9CiAgX1RwKiogX01fYWxsb2NhdGVfbWFwKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBf TWFwX2FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbWFw KF9UcCoqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX01hcF9hbGxvY190eXBlOjpkZWFsbG9jYXRl KF9fcCwgX19uKTsgfQoKICBfVHAqKiBfTV9tYXA7CiAgc2l6ZV90IF9NX21hcF9zaXplOwp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfRGVxdWVfYmFzZQogIDog cHVibGljIF9EZXF1ZV9hbGxvY19iYXNlPF9UcCxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsK cHVibGljOgogIHR5cGVkZWYgX0RlcXVlX2FsbG9jX2Jhc2U8X1RwLF9BbGxvYywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFu Y2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2Nh dG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLF9U cCYsX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLGNvbnN0IF9U cCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CgogIF9EZXF1ZV9iYXNlKGNvbnN0IGFsbG9j YXRvcl90eXBlJiBfX2EsIHNpemVfdCBfX251bV9lbGVtZW50cykKICAgIDogX0Jhc2UoX19hKSwg X01fc3RhcnQoKSwgX01fZmluaXNoKCkKICAgIHsgX01faW5pdGlhbGl6ZV9tYXAoX19udW1fZWxl bWVudHMpOyB9CiAgX0RlcXVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDog X0Jhc2UoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCkge30KICB+X0RlcXVlX2Jhc2UoKTsK CnByb3RlY3RlZDoKICB2b2lkIF9NX2luaXRpYWxpemVfbWFwKHNpemVfdCk7CiAgdm9pZCBfTV9j cmVhdGVfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCk7CiAgdm9pZCBfTV9k ZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gpOwogIGVudW0geyBf U19pbml0aWFsX21hcF9zaXplID0gOCB9OwoKcHJvdGVjdGVkOgogIGl0ZXJhdG9yIF9NX3N0YXJ0 OwogIGl0ZXJhdG9yIF9NX2ZpbmlzaDsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jPgpfRGVxdWVfYmFzZTxfVHAsX0FsbG9jPjo6fl9EZXF1ZV9iYXNlKCkgewogIGlmIChf TV9tYXApIHsKICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNo Ll9NX25vZGUgKyAxKTsKICAgIF9NX2RlYWxsb2NhdGVfbWFwKF9NX21hcCwgX01fbWFwX3NpemUp OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCl9EZXF1ZV9i YXNlPF9UcCxfQWxsb2M+OjpfTV9pbml0aWFsaXplX21hcChzaXplX3QgX19udW1fZWxlbWVudHMp CnsKICBzaXplX3QgX19udW1fbm9kZXMgPQogICAgX19udW1fZWxlbWVudHMgLyBfX2RlcXVlX2J1 Zl9zaXplKHNpemVvZihfVHApKSArIDE7CgogIF9NX21hcF9zaXplID0gbWF4KChzaXplX3QpIF9T X2luaXRpYWxfbWFwX3NpemUsIF9fbnVtX25vZGVzICsgMik7CiAgX01fbWFwID0gX01fYWxsb2Nh dGVfbWFwKF9NX21hcF9zaXplKTsKCiAgX1RwKiogX19uc3RhcnQgPSBfTV9tYXAgKyAoX01fbWFw X3NpemUgLSBfX251bV9ub2RlcykgLyAyOwogIF9UcCoqIF9fbmZpbmlzaCA9IF9fbnN0YXJ0ICsg X19udW1fbm9kZXM7CgogICAgICAgICAgICB7CiAgICBfTV9jcmVhdGVfbm9kZXMoX19uc3RhcnQs IF9fbmZpbmlzaCk7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogIF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9fbnN0YXJ0KTsKICBfTV9maW5pc2guX01f c2V0X25vZGUoX19uZmluaXNoIC0gMSk7CiAgX01fc3RhcnQuX01fY3VyID0gX01fc3RhcnQuX01f Zmlyc3Q7CiAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdCArCiAgICAgICAg ICAgICAgIF9fbnVtX2VsZW1lbnRzICUgX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfRGVxdWVfYmFzZTxfVHAs X0FsbG9jPjo6X01fY3JlYXRlX25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gp CnsKICBfVHAqKiBfX2N1cjsKICAgICAgICAgICAgewogICAgZm9yIChfX2N1ciA9IF9fbnN0YXJ0 OyBfX2N1ciA8IF9fbmZpbmlzaDsgKytfX2N1cikKICAgICAgKl9fY3VyID0gX01fYWxsb2NhdGVf bm9kZSgpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCl9EZXF1ZV9i YXNlPF9UcCxfQWxsb2M+OjpfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBf X25maW5pc2gpCnsKICBmb3IgKF9UcCoqIF9fbiA9IF9fbnN0YXJ0OyBfX24gPCBfX25maW5pc2g7 ICsrX19uKQogICAgX01fZGVhbGxvY2F0ZV9ub2RlKCpfX24pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNzIGRlcXVlIDogcHJvdGVj dGVkIF9EZXF1ZV9iYXNlPF9UcCwgX0FsbG9jPiB7CgoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0eXBlZGVmIF9EZXF1ZV9iYXNlPF9U cCwgX0FsbG9jPiBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlw ZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29u c3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNv bnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5 cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVu YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlw ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsg fQoKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIGl0ZXJhdG9yOwog IHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoK ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2Vf aXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0 ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHR5cGVkZWYgcG9pbnRlciogX01hcF9wb2ludGVyOwogIHN0 YXRpYyBzaXplX3QgX1NfYnVmZmVyX3NpemUoKSB7IHJldHVybiBfX2RlcXVlX2J1Zl9zaXplKHNp emVvZihfVHApKTsgfQoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9pbml0aWFsaXplX21h cDsKICB1c2luZyBfQmFzZTo6X01fY3JlYXRlX25vZGVzOwogIHVzaW5nIF9CYXNlOjpfTV9kZXN0 cm95X25vZGVzOwogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZV9ub2RlOwogIHVzaW5nIF9CYXNl OjpfTV9kZWFsbG9jYXRlX25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlX21hcDsKICB1 c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZV9tYXA7CgogIHVzaW5nIF9CYXNlOjpfTV9tYXA7CiAg dXNpbmcgX0Jhc2U6Ol9NX21hcF9zaXplOwogIHVzaW5nIF9CYXNlOjpfTV9zdGFydDsKICB1c2lu ZyBfQmFzZTo6X01fZmluaXNoOwoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g X01fc3RhcnQ7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0KICBjb25z dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgY29uc3RfaXRl cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVyc2VfaXRlcmF0 b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihfTV9maW5pc2gpOyB9CiAgcmV2 ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihfTV9zdGFydCk7 IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJh dG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihfTV9z dGFydCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikKICAgIHsgcmV0 dXJuIF9NX3N0YXJ0W2RpZmZlcmVuY2VfdHlwZShfX24pXTsgfQogIGNvbnN0X3JlZmVyZW5jZSBv cGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7IHJldHVybiBfTV9zdGFydFtkaWZm ZXJlbmNlX3R5cGUoX19uKV07IH0KCiAgdm9pZCBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19u KSBjb25zdCB7CiAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgX190aHJvd19yYW5n ZV9lcnJvcigiZGVxdWUiKTsKICB9CgogIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAg eyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgY29uc3RfcmVm ZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7 IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKl9N X3N0YXJ0OyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2Zp bmlzaDsKICAgIC0tX190bXA7CiAgICByZXR1cm4gKl9fdG1wOwogIH0KICBjb25zdF9yZWZlcmVu Y2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqX01fc3RhcnQ7IH0KICBjb25zdF9yZWZlcmVuY2Ug YmFjaygpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gX01fZmluaXNoOwogICAg LS1fX3RtcDsKICAgIHJldHVybiAqX190bXA7CiAgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0 IHsgcmV0dXJuIF9NX2ZpbmlzaCAtIF9NX3N0YXJ0OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkg Y29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJl dHVybiBfTV9maW5pc2ggPT0gX01fc3RhcnQ7IH0KCnB1YmxpYzoKICBleHBsaWNpdCBkZXF1ZShj b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2Uo X19hLCAwKSB7fQogIGRlcXVlKGNvbnN0IGRlcXVlJiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxv Y2F0b3IoKSwgX194LnNpemUoKSkKICAgIHsgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigp LCBfX3guZW5kKCksIF9NX3N0YXJ0KTsgfQogIGRlcXVlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZh bHVlX3R5cGUmIF9fdmFsdWUsCiAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs bG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hLCBfX24pCiAgICB7IF9NX2ZpbGxfaW5pdGlhbGl6 ZShfX3ZhbHVlKTsgfQogIGV4cGxpY2l0IGRlcXVlKHNpemVfdHlwZSBfX24pIDogX0Jhc2UoYWxs b2NhdG9yX3R5cGUoKSwgX19uKQogICAgeyBfTV9maWxsX2luaXRpYWxpemUodmFsdWVfdHlwZSgp KTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGRlcXVlKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICBjb25zdCBhbGxv Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu dGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRl Z3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luaXRp YWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7 CiAgICBfTV9pbml0aWFsaXplX21hcChfX24pOwogICAgX01fZmlsbF9pbml0aWFsaXplKF9feCk7 CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2luaXRpYWxpemVf ZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFs aXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoK ICB+ZGVxdWUoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0KCiAgZGVxdWUmIG9w ZXJhdG9yPSAoY29uc3QgZGVxdWUmIF9feCkgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0g c2l6ZSgpOwogICAgaWYgKCZfX3ggIT0gdGhpcykgewogICAgICBpZiAoX19sZW4gPj0gX194LnNp emUoKSkKICAgICAgICBlcmFzZShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0 KSwgX01fZmluaXNoKTsKICAgICAgZWxzZSB7CiAgICAgICAgY29uc3RfaXRlcmF0b3IgX19taWQg PSBfX3guYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX2xlbik7CiAgICAgICAgY29weShfX3gu YmVnaW4oKSwgX19taWQsIF9NX3N0YXJ0KTsKICAgICAgICBpbnNlcnQoX01fZmluaXNoLCBfX21p ZCwgX194LmVuZCgpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdm9p ZCBzd2FwKGRlcXVlJiBfX3gpIHsKICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0 KTsKICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgc3RkOjpzd2Fw KF9NX21hcCwgX194Ll9NX21hcCk7CiAgICBzdGQ6OnN3YXAoX01fbWFwX3NpemUsIF9feC5fTV9t YXBfc2l6ZSk7CiAgfQoKcHVibGljOgoKCgoKCiAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3R5 cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgICBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICAg IGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBz aXplKCksIF9fdmFsKTsKICAgIH0KICAgIGVsc2UgewogICAgICBlcmFzZShiZWdpbigpICsgX19u LCBlbmQoKSk7CiAgICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIH0KICB9Cgog IHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsKICAgIF9NX2Zp bGxfYXNzaWduKF9fbiwgX192YWwpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRv cj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwg X19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKcHJpdmF0ZToKCiAgdGVtcGxhdGUgPGNsYXNzIF9J bnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIg X192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24s IChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p ZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAg X01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz dCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNz aWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9y IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgIGRpc3Rh bmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogICAgaWYgKF9fbGVuID4gc2l6ZSgpKSB7CiAg ICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlk LCBzaXplKCkpOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAgaW5z ZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgIH0KICAgIGVsc2UKICAgICAgZXJhc2UoY29w eShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgfQoKcHVibGljOgoKICB2b2lk IHB1c2hfYmFjayhjb25zdCB2YWx1ZV90eXBlJiBfX3QpIHsKICAgIGlmIChfTV9maW5pc2guX01f Y3VyICE9IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNo Ll9NX2N1ciwgX190KTsKICAgICAgKytfTV9maW5pc2guX01fY3VyOwogICAgfQogICAgZWxzZQog ICAgICBfTV9wdXNoX2JhY2tfYXV4KF9fdCk7CiAgfQoKICB2b2lkIHB1c2hfYmFjaygpIHsKICAg IGlmIChfTV9maW5pc2guX01fY3VyICE9IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMSkgewogICAgICBj b25zdHJ1Y3QoX01fZmluaXNoLl9NX2N1cik7CiAgICAgICsrX01fZmluaXNoLl9NX2N1cjsKICAg IH0KICAgIGVsc2UKICAgICAgX01fcHVzaF9iYWNrX2F1eCgpOwogIH0KCiAgdm9pZCBwdXNoX2Zy b250KGNvbnN0IHZhbHVlX3R5cGUmIF9fdCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX2N1ciAhPSBf TV9zdGFydC5fTV9maXJzdCkgewogICAgICBjb25zdHJ1Y3QoX01fc3RhcnQuX01fY3VyIC0gMSwg X190KTsKICAgICAgLS1fTV9zdGFydC5fTV9jdXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3B1 c2hfZnJvbnRfYXV4KF9fdCk7CiAgfQoKICB2b2lkIHB1c2hfZnJvbnQoKSB7CiAgICBpZiAoX01f c3RhcnQuX01fY3VyICE9IF9NX3N0YXJ0Ll9NX2ZpcnN0KSB7CiAgICAgIGNvbnN0cnVjdChfTV9z dGFydC5fTV9jdXIgLSAxKTsKICAgICAgLS1fTV9zdGFydC5fTV9jdXI7CiAgICB9CiAgICBlbHNl CiAgICAgIF9NX3B1c2hfZnJvbnRfYXV4KCk7CiAgfQoKCiAgdm9pZCBwb3BfYmFjaygpIHsKICAg IGlmIChfTV9maW5pc2guX01fY3VyICE9IF9NX2ZpbmlzaC5fTV9maXJzdCkgewogICAgICAtLV9N X2ZpbmlzaC5fTV9jdXI7CiAgICAgIGRlc3Ryb3koX01fZmluaXNoLl9NX2N1cik7CiAgICB9CiAg ICBlbHNlCiAgICAgIF9NX3BvcF9iYWNrX2F1eCgpOwogIH0KCiAgdm9pZCBwb3BfZnJvbnQoKSB7 CiAgICBpZiAoX01fc3RhcnQuX01fY3VyICE9IF9NX3N0YXJ0Ll9NX2xhc3QgLSAxKSB7CiAgICAg IGRlc3Ryb3koX01fc3RhcnQuX01fY3VyKTsKICAgICAgKytfTV9zdGFydC5fTV9jdXI7CiAgICB9 CiAgICBlbHNlCiAgICAgIF9NX3BvcF9mcm9udF9hdXgoKTsKICB9CgpwdWJsaWM6CgogIGl0ZXJh dG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAg ICBpZiAocG9zaXRpb24uX01fY3VyID09IF9NX3N0YXJ0Ll9NX2N1cikgewogICAgICBwdXNoX2Zy b250KF9feCk7CiAgICAgIHJldHVybiBfTV9zdGFydDsKICAgIH0KICAgIGVsc2UgaWYgKHBvc2l0 aW9uLl9NX2N1ciA9PSBfTV9maW5pc2guX01fY3VyKSB7CiAgICAgIHB1c2hfYmFjayhfX3gpOwog ICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2ZpbmlzaDsKICAgICAgLS1fX3RtcDsKICAgICAgcmV0 dXJuIF9fdG1wOwogICAgfQogICAgZWxzZSB7CiAgICAgIHJldHVybiBfTV9pbnNlcnRfYXV4KHBv c2l0aW9uLCBfX3gpOwogICAgfQogIH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z aXRpb24pCiAgICB7IHJldHVybiBpbnNlcnQoX19wb3NpdGlvbiwgdmFsdWVfdHlwZSgpKTsgfQoK ICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVf dHlwZSYgX194KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CgogIHZv aWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZh bHVlX3R5cGUmIF9feCk7CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p ZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJ dGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19w b3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNz IF9JbnRlZ2VyPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50 ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVf dHlwZSkgewogICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKHZhbHVl X3R5cGUpIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p ZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgaW5zZXJ0KF9fcG9zLCBf X2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCiAgdm9p ZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewog ICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpOwogICAgaWYgKF9fbmV3X3NpemUgPCBf X2xlbikKICAgICAgZXJhc2UoX01fc3RhcnQgKyBfX25ld19zaXplLCBfTV9maW5pc2gpOwogICAg ZWxzZQogICAgICBpbnNlcnQoX01fZmluaXNoLCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7CiAg fQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgbmV3X3NpemUpIHsgcmVzaXplKG5ld19zaXplLCB2 YWx1ZV90eXBlKCkpOyB9CgpwdWJsaWM6CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3Mp IHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fcG9zOwogICAgKytfX25leHQ7CiAgICBzaXplX3R5 cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgICBpZiAoX19pbmRleCA8IChzaXplKCkg Pj4gMSkpIHsKICAgICAgY29weV9iYWNrd2FyZChfTV9zdGFydCwgX19wb3MsIF9fbmV4dCk7CiAg ICAgIHBvcF9mcm9udCgpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX19uZXh0LCBfTV9m aW5pc2gsIF9fcG9zKTsKICAgICAgcG9wX2JhY2soKTsKICAgIH0KICAgIHJldHVybiBfTV9zdGFy dCArIF9faW5kZXg7CiAgfQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVy YXRvciBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKTsKCnByb3RlY3RlZDoKCiAgdm9pZCBfTV9maWxs X2luaXRpYWxpemUoY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSk7CgogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv cj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p dGVyYXRvcl90YWcpOwoKcHJvdGVjdGVkOgoKICB2b2lkIF9NX3B1c2hfYmFja19hdXgoY29uc3Qg dmFsdWVfdHlwZSYpOwogIHZvaWQgX01fcHVzaF9iYWNrX2F1eCgpOwogIHZvaWQgX01fcHVzaF9m cm9udF9hdXgoY29uc3QgdmFsdWVfdHlwZSYpOwogIHZvaWQgX01fcHVzaF9mcm9udF9hdXgoKTsK ICB2b2lkIF9NX3BvcF9iYWNrX2F1eCgpOwogIHZvaWQgX01fcG9wX2Zyb250X2F1eCgpOwoKcHJv dGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQo aXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywKICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0 LAogICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgaXRlcmF0b3IgX01faW5z ZXJ0X2F1eChpdGVyYXRvciBfX3BvcywgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKICBpdGVyYXRv ciBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zKTsKICB2b2lkIF9NX2luc2VydF9hdXgoaXRl cmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIHRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVy YXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl IF9fbik7CgogIGl0ZXJhdG9yIF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoc2l6ZV90eXBl IF9fbikgewogICAgc2l6ZV90eXBlIF9fdmFjYW5jaWVzID0gX01fc3RhcnQuX01fY3VyIC0gX01f c3RhcnQuX01fZmlyc3Q7CiAgICBpZiAoX19uID4gX192YWNhbmNpZXMpCiAgICAgIF9NX25ld19l bGVtZW50c19hdF9mcm9udChfX24gLSBfX3ZhY2FuY2llcyk7CiAgICByZXR1cm4gX01fc3RhcnQg LSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9CgogIGl0ZXJhdG9yIF9NX3Jlc2VydmVfZWxlbWVu dHNfYXRfYmFjayhzaXplX3R5cGUgX19uKSB7CiAgICBzaXplX3R5cGUgX192YWNhbmNpZXMgPSAo X01fZmluaXNoLl9NX2xhc3QgLSBfTV9maW5pc2guX01fY3VyKSAtIDE7CiAgICBpZiAoX19uID4g X192YWNhbmNpZXMpCiAgICAgIF9NX25ld19lbGVtZW50c19hdF9iYWNrKF9fbiAtIF9fdmFjYW5j aWVzKTsKICAgIHJldHVybiBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9Cgog IHZvaWQgX01fbmV3X2VsZW1lbnRzX2F0X2Zyb250KHNpemVfdHlwZSBfX25ld19lbGVtZW50cyk7 CiAgdm9pZCBfTV9uZXdfZWxlbWVudHNfYXRfYmFjayhzaXplX3R5cGUgX19uZXdfZWxlbWVudHMp OwoKcHJvdGVjdGVkOgoKCgoKCiAgdm9pZCBfTV9yZXNlcnZlX21hcF9hdF9iYWNrIChzaXplX3R5 cGUgX19ub2Rlc190b19hZGQgPSAxKSB7CiAgICBpZiAoX19ub2Rlc190b19hZGQgKyAxID4gX01f bWFwX3NpemUgLSAoX01fZmluaXNoLl9NX25vZGUgLSBfTV9tYXApKQogICAgICBfTV9yZWFsbG9j YXRlX21hcChfX25vZGVzX3RvX2FkZCwgZmFsc2UpOwogIH0KCiAgdm9pZCBfTV9yZXNlcnZlX21h cF9hdF9mcm9udCAoc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkID0gMSkgewogICAgaWYgKF9fbm9k ZXNfdG9fYWRkID4gc2l6ZV90eXBlKF9NX3N0YXJ0Ll9NX25vZGUgLSBfTV9tYXApKQogICAgICBf TV9yZWFsbG9jYXRlX21hcChfX25vZGVzX3RvX2FkZCwgdHJ1ZSk7CiAgfQoKICB2b2lkIF9NX3Jl YWxsb2NhdGVfbWFwKHNpemVfdHlwZSBfX25vZGVzX3RvX2FkZCwgYm9vbCBfX2FkZF9hdF9mcm9u dCk7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXI+CnZvaWQgZGVxdWU8X1RwLCBfQWxsb2M+CiAgOjpfTV9hc3NpZ25fYXV4 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3Rh ZykKewogIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIgPSAq X19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5kKCkp OwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCwgX0FsbG9jPjo6X01fZmls bF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCnsKICBpZiAoX19w b3MuX01fY3VyID09IF9NX3N0YXJ0Ll9NX2N1cikgewogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQg PSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2Zyb250KF9fbik7CiAgICAgICAgICAgICAgewogICAg ICB1bmluaXRpYWxpemVkX2ZpbGwoX19uZXdfc3RhcnQsIF9NX3N0YXJ0LCBfX3gpOwogICAgICBf TV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIH0KICBlbHNl IGlmIChfX3Bvcy5fTV9jdXIgPT0gX01fZmluaXNoLl9NX2N1cikgewogICAgaXRlcmF0b3IgX19u ZXdfZmluaXNoID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAgICAgICAgICAg ICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX01fZmluaXNoLCBfX25ld19maW5pc2gsIF9f eCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIH0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB9CiAgZWxz ZQogICAgX01faW5zZXJ0X2F1eChfX3BvcywgX19uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIGRlcXVlPF9UcCxfQWxsb2M+OjppdGVyYXRvcgpk ZXF1ZTxfVHAsX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0 KQp7CiAgaWYgKF9fZmlyc3QgPT0gX01fc3RhcnQgJiYgX19sYXN0ID09IF9NX2ZpbmlzaCkgewog ICAgY2xlYXIoKTsKICAgIHJldHVybiBfTV9maW5pc2g7CiAgfQogIGVsc2UgewogICAgZGlmZmVy ZW5jZV90eXBlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19l bGVtc19iZWZvcmUgPSBfX2ZpcnN0IC0gX01fc3RhcnQ7CiAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6 ZV90eXBlPihfX2VsZW1zX2JlZm9yZSkgPCAoc2l6ZSgpIC0gX19uKSAvIDIpIHsKICAgICAgY29w eV9iYWNrd2FyZChfTV9zdGFydCwgX19maXJzdCwgX19sYXN0KTsKICAgICAgaXRlcmF0b3IgX19u ZXdfc3RhcnQgPSBfTV9zdGFydCArIF9fbjsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX19uZXdf c3RhcnQpOwogICAgICBfTV9kZXN0cm95X25vZGVzKF9fbmV3X3N0YXJ0Ll9NX25vZGUsIF9NX3N0 YXJ0Ll9NX25vZGUpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgfQogICAgZWxz ZSB7CiAgICAgIGNvcHkoX19sYXN0LCBfTV9maW5pc2gsIF9fZmlyc3QpOwogICAgICBpdGVyYXRv ciBfX25ld19maW5pc2ggPSBfTV9maW5pc2ggLSBfX247CiAgICAgIGRlc3Ryb3koX19uZXdfZmlu aXNoLCBfTV9maW5pc2gpOwogICAgICBfTV9kZXN0cm95X25vZGVzKF9fbmV3X2ZpbmlzaC5fTV9u b2RlICsgMSwgX01fZmluaXNoLl9NX25vZGUgKyAxKTsKICAgICAgX01fZmluaXNoID0gX19uZXdf ZmluaXNoOwogICAgfQogICAgcmV0dXJuIF9NX3N0YXJ0ICsgX19lbGVtc19iZWZvcmU7CiAgfQp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxv Yz46OmNsZWFyKCkKewogIGZvciAoX01hcF9wb2ludGVyIF9fbm9kZSA9IF9NX3N0YXJ0Ll9NX25v ZGUgKyAxOwogICAgICAgX19ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAgICArK19fbm9k ZSkgewogICAgZGVzdHJveSgqX19ub2RlLCAqX19ub2RlICsgX1NfYnVmZmVyX3NpemUoKSk7CiAg ICBfTV9kZWFsbG9jYXRlX25vZGUoKl9fbm9kZSk7CiAgfQoKICBpZiAoX01fc3RhcnQuX01fbm9k ZSAhPSBfTV9maW5pc2guX01fbm9kZSkgewogICAgZGVzdHJveShfTV9zdGFydC5fTV9jdXIsIF9N X3N0YXJ0Ll9NX2xhc3QpOwogICAgZGVzdHJveShfTV9maW5pc2guX01fZmlyc3QsIF9NX2Zpbmlz aC5fTV9jdXIpOwogICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9maXJzdCk7CiAg fQogIGVsc2UKICAgIGRlc3Ryb3koX01fc3RhcnQuX01fY3VyLCBfTV9maW5pc2guX01fY3VyKTsK CiAgX01fZmluaXNoID0gX01fc3RhcnQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9maWxsX2luaXRpYWxpemUoY29uc3Qg dmFsdWVfdHlwZSYgX192YWx1ZSkgewogIF9NYXBfcG9pbnRlciBfX2N1cjsKICAgICAgICAgICAg ewogICAgZm9yIChfX2N1ciA9IF9NX3N0YXJ0Ll9NX25vZGU7IF9fY3VyIDwgX01fZmluaXNoLl9N X25vZGU7ICsrX19jdXIpCiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbCgqX19jdXIsICpfX2N1ciAr IF9TX2J1ZmZlcl9zaXplKCksIF9fdmFsdWUpOwogICAgdW5pbml0aWFsaXplZF9maWxsKF9NX2Zp bmlzaC5fTV9maXJzdCwgX01fZmluaXNoLl9NX2N1ciwgX192YWx1ZSk7CiAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy YXRvcj4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJ dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfTV9pbml0aWFsaXplX21hcCgw KTsKICAgICAgICAgICAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICA7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlcmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3JhbmdlX2luaXRpYWxp emUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgc2l6 ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogIF9NX2lu aXRpYWxpemVfbWFwKF9fbik7CgogIF9NYXBfcG9pbnRlciBfX2N1cl9ub2RlOwogICAgICAgICAg ICB7CiAgICBmb3IgKF9fY3VyX25vZGUgPSBfTV9zdGFydC5fTV9ub2RlOwogICAgICAgICBfX2N1 cl9ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAgICAgICsrX19jdXJfbm9kZSkgewogICAg ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwg X1NfYnVmZmVyX3NpemUoKSk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX21p ZCwgKl9fY3VyX25vZGUpOwogICAgICBfX2ZpcnN0ID0gX19taWQ7CiAgICB9CiAgICB1bmluaXRp YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9maW5pc2guX01fZmlyc3QpOwogIH0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVx dWU8X1RwLF9BbGxvYz46Ol9NX3B1c2hfYmFja19hdXgoY29uc3QgdmFsdWVfdHlwZSYgX190KQp7 CiAgdmFsdWVfdHlwZSBfX3RfY29weSA9IF9fdDsKICBfTV9yZXNlcnZlX21hcF9hdF9iYWNrKCk7 CiAgKihfTV9maW5pc2guX01fbm9kZSArIDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogICAgICAg ICAgICB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLl9NX2N1ciwgX190X2NvcHkpOwogICAgX01f ZmluaXNoLl9NX3NldF9ub2RlKF9NX2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICBfTV9maW5pc2gu X01fY3VyID0gX01fZmluaXNoLl9NX2ZpcnN0OwogIH0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9wdXNoX2JhY2tf YXV4KCkKewogIF9NX3Jlc2VydmVfbWFwX2F0X2JhY2soKTsKICAqKF9NX2ZpbmlzaC5fTV9ub2Rl ICsgMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgICAgICAgICAgIHsKICAgIGNvbnN0cnVjdChf TV9maW5pc2guX01fY3VyKTsKICAgIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9maW5pc2guX01f bm9kZSArIDEpOwogICAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdDsKICB9 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxf VHAsX0FsbG9jPjo6X01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVfdHlwZSYgX190KQp7CiAg dmFsdWVfdHlwZSBfX3RfY29weSA9IF9fdDsKICBfTV9yZXNlcnZlX21hcF9hdF9mcm9udCgpOwog ICooX01fc3RhcnQuX01fbm9kZSAtIDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogICAgICAgICAg ICB7CiAgICBfTV9zdGFydC5fTV9zZXRfbm9kZShfTV9zdGFydC5fTV9ub2RlIC0gMSk7CiAgICBf TV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5fTV9sYXN0IC0gMTsKICAgIGNvbnN0cnVjdChfTV9z dGFydC5fTV9jdXIsIF9fdF9jb3B5KTsKICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1 c2hfZnJvbnRfYXV4KCkKewogIF9NX3Jlc2VydmVfbWFwX2F0X2Zyb250KCk7CiAgKihfTV9zdGFy dC5fTV9ub2RlIC0gMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgICAgICAgICAgIHsKICAgIF9N X3N0YXJ0Ll9NX3NldF9ub2RlKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKTsKICAgIF9NX3N0YXJ0Ll9N X2N1ciA9IF9NX3N0YXJ0Ll9NX2xhc3QgLSAxOwogICAgY29uc3RydWN0KF9NX3N0YXJ0Ll9NX2N1 cik7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9wb3BfYmFja19hdXgoKQp7CiAgX01f ZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9maXJzdCk7CiAgX01fZmluaXNoLl9NX3NldF9u b2RlKF9NX2ZpbmlzaC5fTV9ub2RlIC0gMSk7CiAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2Zpbmlz aC5fTV9sYXN0IC0gMTsKICBkZXN0cm95KF9NX2ZpbmlzaC5fTV9jdXIpOwp9CgoKCgoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9w b3BfZnJvbnRfYXV4KCkKewogIGRlc3Ryb3koX01fc3RhcnQuX01fY3VyKTsKICBfTV9kZWFsbG9j YXRlX25vZGUoX01fc3RhcnQuX01fZmlyc3QpOwogIF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9NX3N0 YXJ0Ll9NX25vZGUgKyAxKTsKICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5fTV9maXJzdDsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Omluc2VydChpdGVyYXRvciBfX3Bv cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu cHV0X2l0ZXJhdG9yX3RhZykKewogIGNvcHkoX19maXJzdCwgX19sYXN0LCBpbnNlcnRlcigqdGhp cywgX19wb3MpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApkZXF1ZTxfVHAsX0FsbG9jPjo6aW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0 b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19uID0gMDsKICBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgaWYgKF9fcG9zLl9NX2N1ciA9PSBfTV9zdGFy dC5fTV9jdXIpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50 c19hdF9mcm9udChfX24pOwogICAgICAgICAgICAgIHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5 KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0 YXJ0OwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIH0KICBlbHNlIGlmIChfX3Bvcy5fTV9jdXIg PT0gX01fZmluaXNoLl9NX2N1cikgewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX01fcmVz ZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAgICAgICAgICAgICAgewogICAgICB1bmluaXRp YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICBfTV9maW5pc2gg PSBfX25ld19maW5pc2g7CiAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgfQogIGVsc2UKICAgIF9NX2luc2VydF9hdXgo X19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FsbG9jPgp0eXBlbmFtZSBkZXF1ZTxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9U cCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBjb25zdCB2YWx1ZV90eXBl JiBfX3gpCnsKICBkaWZmZXJlbmNlX3R5cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7CiAg dmFsdWVfdHlwZSBfX3hfY29weSA9IF9feDsKICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihf X2luZGV4KSA8IHNpemUoKSAvIDIpIHsKICAgIHB1c2hfZnJvbnQoZnJvbnQoKSk7CiAgICBpdGVy YXRvciBfX2Zyb250MSA9IF9NX3N0YXJ0OwogICAgKytfX2Zyb250MTsKICAgIGl0ZXJhdG9yIF9f ZnJvbnQyID0gX19mcm9udDE7CiAgICArK19fZnJvbnQyOwogICAgX19wb3MgPSBfTV9zdGFydCAr IF9faW5kZXg7CiAgICBpdGVyYXRvciBfX3BvczEgPSBfX3BvczsKICAgICsrX19wb3MxOwogICAg Y29weShfX2Zyb250MiwgX19wb3MxLCBfX2Zyb250MSk7CiAgfQogIGVsc2UgewogICAgcHVzaF9i YWNrKGJhY2soKSk7CiAgICBpdGVyYXRvciBfX2JhY2sxID0gX01fZmluaXNoOwogICAgLS1fX2Jh Y2sxOwogICAgaXRlcmF0b3IgX19iYWNrMiA9IF9fYmFjazE7CiAgICAtLV9fYmFjazI7CiAgICBf X3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fYmFj azIsIF9fYmFjazEpOwogIH0KICAqX19wb3MgPSBfX3hfY29weTsKICByZXR1cm4gX19wb3M7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgZGVxdWU8X1RwLF9B bGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9y IF9fcG9zKQp7CiAgZGlmZmVyZW5jZV90eXBlIF9faW5kZXggPSBfX3BvcyAtIF9NX3N0YXJ0Owog IGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9faW5kZXgpIDwgc2l6ZSgpIC8gMikgewogICAg cHVzaF9mcm9udChmcm9udCgpKTsKICAgIGl0ZXJhdG9yIF9fZnJvbnQxID0gX01fc3RhcnQ7CiAg ICArK19fZnJvbnQxOwogICAgaXRlcmF0b3IgX19mcm9udDIgPSBfX2Zyb250MTsKICAgICsrX19m cm9udDI7CiAgICBfX3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAgIGl0ZXJhdG9yIF9fcG9z MSA9IF9fcG9zOwogICAgKytfX3BvczE7CiAgICBjb3B5KF9fZnJvbnQyLCBfX3BvczEsIF9fZnJv bnQxKTsKICB9CiAgZWxzZSB7CiAgICBwdXNoX2JhY2soYmFjaygpKTsKICAgIGl0ZXJhdG9yIF9f YmFjazEgPSBfTV9maW5pc2g7CiAgICAtLV9fYmFjazE7CiAgICBpdGVyYXRvciBfX2JhY2syID0g X19iYWNrMTsKICAgIC0tX19iYWNrMjsKICAgIF9fcG9zID0gX01fc3RhcnQgKyBfX2luZGV4Owog ICAgY29weV9iYWNrd2FyZChfX3BvcywgX19iYWNrMiwgX19iYWNrMSk7CiAgfQogICpfX3BvcyA9 IHZhbHVlX3R5cGUoKTsKICByZXR1cm4gX19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRv ciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlX3R5 cGUmIF9feCkKewogIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zX2JlZm9yZSA9IF9fcG9z IC0gX01fc3RhcnQ7CiAgc2l6ZV90eXBlIF9fbGVuZ3RoID0gdGhpcy0+c2l6ZSgpOwogIHZhbHVl X3R5cGUgX194X2NvcHkgPSBfX3g7CiAgaWYgKF9fZWxlbXNfYmVmb3JlIDwgZGlmZmVyZW5jZV90 eXBlKF9fbGVuZ3RoIC8gMikpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2 ZV9lbGVtZW50c19hdF9mcm9udChfX24pOwogICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSBfTV9z dGFydDsKICAgIF9fcG9zID0gX01fc3RhcnQgKyBfX2VsZW1zX2JlZm9yZTsKICAgICAgICAgICAg ICB7CiAgICAgIGlmIChfX2VsZW1zX2JlZm9yZSA+PSBkaWZmZXJlbmNlX3R5cGUoX19uKSkgewog ICAgICAgIGl0ZXJhdG9yIF9fc3RhcnRfbiA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9f bik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3N0YXJ0X24sIF9fbmV3 X3N0YXJ0KTsKICAgICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICAgIGNvcHkoX19z dGFydF9uLCBfX3BvcywgX19vbGRfc3RhcnQpOwogICAgICAgIGZpbGwoX19wb3MgLSBkaWZmZXJl bmNlX3R5cGUoX19uKSwgX19wb3MsIF9feF9jb3B5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAg ICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9NX3N0YXJ0LCBfX3BvcywgX19uZXdfc3Rh cnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9zdGFydCwgX194X2NvcHkp OwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgICAgZmlsbChfX29sZF9zdGFy dCwgX19wb3MsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIH0K ICBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxlbWVudHNf YXRfYmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOwogICAg Y29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPQogICAgICBkaWZmZXJlbmNlX3R5 cGUoX19sZW5ndGgpIC0gX19lbGVtc19iZWZvcmU7CiAgICBfX3BvcyA9IF9NX2ZpbmlzaCAtIF9f ZWxlbXNfYWZ0ZXI7CiAgICAgICAgICAgICAgewogICAgICBpZiAoX19lbGVtc19hZnRlciA+IGRp ZmZlcmVuY2VfdHlwZShfX24pKSB7CiAgICAgICAgaXRlcmF0b3IgX19maW5pc2hfbiA9IF9NX2Zp bmlzaCAtIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShf X2ZpbmlzaF9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoID0gX19u ZXdfZmluaXNoOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fZmluaXNoX24sIF9fb2xk X2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3BvcywgX19wb3MgKyBkaWZmZXJlbmNlX3R5cGUoX19u KSwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fdW5pbml0aWFsaXpl ZF9maWxsX2NvcHkoX01fZmluaXNoLCBfX3BvcyArIGRpZmZlcmVuY2VfdHlwZShfX24pLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX194X2NvcHksIF9fcG9zLCBfTV9maW5pc2gp OwogICAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBmaWxsKF9fcG9zLCBf X29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIH0KfQoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy YXRvcj4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bv cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90eXBlIF9fbikKewogIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zYmVmb3JlID0gX19w b3MgLSBfTV9zdGFydDsKICBzaXplX3R5cGUgX19sZW5ndGggPSBzaXplKCk7CiAgaWYgKHN0YXRp Y19jYXN0PHNpemVfdHlwZT4oX19lbGVtc2JlZm9yZSkgPCBfX2xlbmd0aCAvIDIpIHsKICAgIGl0 ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24pOwog ICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSBfTV9zdGFydDsKICAgIF9fcG9zID0gX01fc3RhcnQg KyBfX2VsZW1zYmVmb3JlOwogICAgICAgICAgICAgIHsKICAgICAgaWYgKF9fZWxlbXNiZWZvcmUg Pj0gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX3N0YXJ0X24gPSBf TV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w eShfTV9zdGFydCwgX19zdGFydF9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX01fc3RhcnQgPSBf X25ld19zdGFydDsKICAgICAgICBjb3B5KF9fc3RhcnRfbiwgX19wb3MsIF9fb2xkX3N0YXJ0KTsK ICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3MgLSBkaWZmZXJlbmNlX3R5cGUoX19u KSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9 IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgZGlmZmVyZW5jZV90eXBlKF9fbikgLSBf X2VsZW1zYmVmb3JlKTsKICAgICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9NX3N0YXJ0 LCBfX3BvcywgX19maXJzdCwgX19taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX25ld19zdGFydCk7CiAgICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgICAgICBj b3B5KF9fbWlkLCBfX2xhc3QsIF9fb2xkX3N0YXJ0KTsKICAgICAgfQogICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogIH0KICBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2Vy dmVfZWxlbWVudHNfYXRfYmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01f ZmluaXNoOwogICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNhZnRlciA9CiAgICAgIGRp ZmZlcmVuY2VfdHlwZShfX2xlbmd0aCkgLSBfX2VsZW1zYmVmb3JlOwogICAgX19wb3MgPSBfTV9m aW5pc2ggLSBfX2VsZW1zYWZ0ZXI7CiAgICAgICAgICAgICAgewogICAgICBpZiAoX19lbGVtc2Fm dGVyID4gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX2ZpbmlzaF9u ID0gX01fZmluaXNoIC0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFsaXpl ZF9jb3B5KF9fZmluaXNoX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5p c2ggPSBfX25ld19maW5pc2g7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3BvcywgX19maW5pc2hf biwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3MpOwog ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2Zp cnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNhZnRlcik7CiAgICAgICAgX191bmlu aXRpYWxpemVkX2NvcHlfY29weShfX21pZCwgX19sYXN0LCBfX3BvcywgX01fZmluaXNoLCBfTV9m aW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBjb3B5KF9f Zmlyc3QsIF9fbWlkLCBfX3Bvcyk7CiAgICAgIH0KICAgIH0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB9Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fbmV3 X2VsZW1lbnRzX2F0X2Zyb250KHNpemVfdHlwZSBfX25ld19lbGVtcykKewogIHNpemVfdHlwZSBf X25ld19ub2RlcwogICAgICA9IChfX25ld19lbGVtcyArIF9TX2J1ZmZlcl9zaXplKCkgLSAxKSAv IF9TX2J1ZmZlcl9zaXplKCk7CiAgX01fcmVzZXJ2ZV9tYXBfYXRfZnJvbnQoX19uZXdfbm9kZXMp OwogIHNpemVfdHlwZSBfX2k7CiAgICAgICAgICAgIHsKICAgIGZvciAoX19pID0gMTsgX19pIDw9 IF9fbmV3X25vZGVzOyArK19faSkKICAgICAgKihfTV9zdGFydC5fTV9ub2RlIC0gX19pKSA9IF9N X2FsbG9jYXRlX25vZGUoKTsKICB9CgoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX25ld19lbGVtZW50c19hdF9iYWNr KHNpemVfdHlwZSBfX25ld19lbGVtcykKewogIHNpemVfdHlwZSBfX25ld19ub2RlcwogICAgICA9 IChfX25ld19lbGVtcyArIF9TX2J1ZmZlcl9zaXplKCkgLSAxKSAvIF9TX2J1ZmZlcl9zaXplKCk7 CiAgX01fcmVzZXJ2ZV9tYXBfYXRfYmFjayhfX25ld19ub2Rlcyk7CiAgc2l6ZV90eXBlIF9faTsK ICAgICAgICAgICAgewogICAgZm9yIChfX2kgPSAxOyBfX2kgPD0gX19uZXdfbm9kZXM7ICsrX19p KQogICAgICAqKF9NX2ZpbmlzaC5fTV9ub2RlICsgX19pKSA9IF9NX2FsbG9jYXRlX25vZGUoKTsK ICB9CgoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVx dWU8X1RwLF9BbGxvYz46Ol9NX3JlYWxsb2NhdGVfbWFwKHNpemVfdHlwZSBfX25vZGVzX3RvX2Fk ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBfX2FkZF9h dF9mcm9udCkKewogIHNpemVfdHlwZSBfX29sZF9udW1fbm9kZXMgPSBfTV9maW5pc2guX01fbm9k ZSAtIF9NX3N0YXJ0Ll9NX25vZGUgKyAxOwogIHNpemVfdHlwZSBfX25ld19udW1fbm9kZXMgPSBf X29sZF9udW1fbm9kZXMgKyBfX25vZGVzX3RvX2FkZDsKCiAgX01hcF9wb2ludGVyIF9fbmV3X25z dGFydDsKICBpZiAoX01fbWFwX3NpemUgPiAyICogX19uZXdfbnVtX25vZGVzKSB7CiAgICBfX25l d19uc3RhcnQgPSBfTV9tYXAgKyAoX01fbWFwX3NpemUgLSBfX25ld19udW1fbm9kZXMpIC8gMgog ICAgICAgICAgICAgICAgICAgICArIChfX2FkZF9hdF9mcm9udCA/IF9fbm9kZXNfdG9fYWRkIDog MCk7CiAgICBpZiAoX19uZXdfbnN0YXJ0IDwgX01fc3RhcnQuX01fbm9kZSkKICAgICAgY29weShf TV9zdGFydC5fTV9ub2RlLCBfTV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3X25zdGFydCk7CiAg ICBlbHNlCiAgICAgIGNvcHlfYmFja3dhcmQoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNoLl9N X25vZGUgKyAxLAogICAgICAgICAgICAgICAgICAgIF9fbmV3X25zdGFydCArIF9fb2xkX251bV9u b2Rlcyk7CiAgfQogIGVsc2UgewogICAgc2l6ZV90eXBlIF9fbmV3X21hcF9zaXplID0KICAgICAg X01fbWFwX3NpemUgKyBtYXgoX01fbWFwX3NpemUsIF9fbm9kZXNfdG9fYWRkKSArIDI7CgogICAg X01hcF9wb2ludGVyIF9fbmV3X21hcCA9IF9NX2FsbG9jYXRlX21hcChfX25ld19tYXBfc2l6ZSk7 CiAgICBfX25ld19uc3RhcnQgPSBfX25ld19tYXAgKyAoX19uZXdfbWFwX3NpemUgLSBfX25ld19u dW1fbm9kZXMpIC8gMgogICAgICAgICAgICAgICAgICAgICAgICAgKyAoX19hZGRfYXRfZnJvbnQg PyBfX25vZGVzX3RvX2FkZCA6IDApOwogICAgY29weShfTV9zdGFydC5fTV9ub2RlLCBfTV9maW5p c2guX01fbm9kZSArIDEsIF9fbmV3X25zdGFydCk7CiAgICBfTV9kZWFsbG9jYXRlX21hcChfTV9t YXAsIF9NX21hcF9zaXplKTsKCiAgICBfTV9tYXAgPSBfX25ld19tYXA7CiAgICBfTV9tYXBfc2l6 ZSA9IF9fbmV3X21hcF9zaXplOwogIH0KCiAgX01fc3RhcnQuX01fc2V0X25vZGUoX19uZXdfbnN0 YXJ0KTsKICBfTV9maW5pc2guX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0ICsgX19vbGRfbnVtX25v ZGVzIC0gMSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5l IGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBf X3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9f eC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs b2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwK ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KSB7CiAg cmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y IT0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv cj4oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBj b25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShj b25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNv bnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKGRlcXVlPF9U cCxfQWxsb2M+JiBfX3gsIGRlcXVlPF9UcCxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kp Owp9Cgp9CiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIg MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9zdGFjay5oIiAxIDMK IyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9zdGFjay5oIiAzCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzUg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfc3RhY2suaCIgMiAzCgpuYW1lc3Bh Y2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9TZXF1ZW5j ZSA9IGRlcXVlPF9UcD4gPgpjbGFzcyBzdGFjazsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9TZXE+CmJvb2wgb3BlcmF0b3I9PShjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qg c3RhY2s8X1RwLF9TZXE+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4K Ym9vbCBvcGVyYXRvcjwoY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9U cCxfU2VxPiYgX195KTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxdWVuY2U+CmNs YXNzIHN0YWNrCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnZh bHVlX3R5cGUgX1NlcXVlbmNlX3ZhbHVlX3R5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgdGVtcGxh dGUgPGNsYXNzIF9UcDEsIGNsYXNzIF9TZXExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNv bnN0IHN0YWNrPF9UcDEsIF9TZXExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RhY2s8X1RwMSwgX1NlcTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDEsIGNsYXNzIF9TZXEx PgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3Qgc3RhY2s8X1RwMSwgX1NlcTE+JiwKICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrPF9UcDEsIF9TZXExPiYpOwpwdWJsaWM6 CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0 eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVm IF9TZXF1ZW5jZSBjb250YWluZXJfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6 OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0 X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CnByb3RlY3RlZDoKICBfU2VxdWVuY2UgYzsKcHVi bGljOgogIHN0YWNrKCkgOiBjKCkge30KICBleHBsaWNpdCBzdGFjayhjb25zdCBfU2VxdWVuY2Um IF9fcykgOiBjKF9fcykge30KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGMuZW1wdHko KTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gYy5zaXplKCk7IH0KICByZWZl cmVuY2UgdG9wKCkgeyByZXR1cm4gYy5iYWNrKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgdG9wKCkg Y29uc3QgeyByZXR1cm4gYy5iYWNrKCk7IH0KICB2b2lkIHB1c2goY29uc3QgdmFsdWVfdHlwZSYg X194KSB7IGMucHVzaF9iYWNrKF9feCk7IH0KICB2b2lkIHBvcCgpIHsgYy5wb3BfYmFjaygpOyB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPT0oY29u c3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7CiAg cmV0dXJuIF9feC5jID09IF9feS5jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2Vx Pgpib29sIG9wZXJhdG9yPChjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8 X1RwLF9TZXE+JiBfX3kpCnsKICByZXR1cm4gX194LmMgPCBfX3kuYzsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvciE9KGNvbnN0IHN0YWNrPF9UcCxfU2Vx PiYgX194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAhKF9feCA9PSBf X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPihj b25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kpCnsK ICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpi b29sIG9wZXJhdG9yPD0oY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9U cCxfU2VxPiYgX195KQp7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcj49KGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYg X194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAhKF9feCA8IF9feSk7 Cn0KCn0KIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdGFjay5oIiAy IDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zdGFjayIgMiAzCiMgNDYgIi4uLy4u L2FydHMvbWNvcC9wb29sLmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3ZlY3Rv ciIgMSAzCiMgNDcgIi4uLy4uL2FydHMvbWNvcC9wb29sLmgiIDIKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2xpc3QiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2xp c3QiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMSAz CiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAzCgojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgMzMg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDM0ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfbGlzdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfbGlzdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKc3RydWN0IF9MaXN0X25vZGVf YmFzZSB7CiAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9uZXh0OwogIF9MaXN0X25vZGVfYmFzZSogX01f cHJldjsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfTGlzdF9ub2RlIDogcHVibGlj IF9MaXN0X25vZGVfYmFzZSB7CiAgX1RwIF9NX2RhdGE7Cn07CgpzdHJ1Y3QgX0xpc3RfaXRlcmF0 b3JfYmFzZSB7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90 IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0 ZXJhdG9yX2NhdGVnb3J5OwoKICBfTGlzdF9ub2RlX2Jhc2UqIF9NX25vZGU7CgogIF9MaXN0X2l0 ZXJhdG9yX2Jhc2UoX0xpc3Rfbm9kZV9iYXNlKiBfX3gpIDogX01fbm9kZShfX3gpIHt9CiAgX0xp c3RfaXRlcmF0b3JfYmFzZSgpIHt9CgogIHZvaWQgX01faW5jcigpIHsgX01fbm9kZSA9IF9NX25v ZGUtPl9NX25leHQ7IH0KICB2b2lkIF9NX2RlY3IoKSB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9w cmV2OyB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gp IGNvbnN0IHsKICAgIHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOwogIH0KICBib29sIG9w ZXJhdG9yIT0oY29uc3QgX0xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1 cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNs YXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfTGlzdF9pdGVyYXRvciA6IHB1YmxpYyBfTGlz dF9pdGVyYXRvcl9iYXNlIHsKICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+ IGl0ZXJhdG9yOwogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3Qg X1RwKj4gY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1JlZixf UHRyPiBfU2VsZjsKCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9QdHIgcG9p bnRlcjsKICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+ IF9Ob2RlOwoKICBfTGlzdF9pdGVyYXRvcihfTm9kZSogX194KSA6IF9MaXN0X2l0ZXJhdG9yX2Jh c2UoX194KSB7fQogIF9MaXN0X2l0ZXJhdG9yKCkge30KICBfTGlzdF9pdGVyYXRvcihjb25zdCBp dGVyYXRvciYgX194KSA6IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX25vZGUpIHt9CgogIHJl ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAoKF9Ob2RlKikgX01fbm9kZSktPl9N X2RhdGE7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9y KigpKTsgfQoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIHRoaXMtPl9NX2luY3IoKTsKICAg IHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9f dG1wID0gKnRoaXM7CiAgICB0aGlzLT5fTV9pbmNyKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQog IF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgdGhpcy0+X01fZGVjcigpOwogICAgcmV0dXJuICp0 aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhp czsKICAgIHRoaXMtPl9NX2RlY3IoKTsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07CiMgMTE4ICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIgMwp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX0xpc3RfYWxs b2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBf QWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFs bG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTm9kZV9hbGxvY2F0 b3I7IH0KCiAgX0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9O b2RlX2FsbG9jYXRvcihfX2EpIHt9Cgpwcm90ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9n ZXRfbm9kZSgpCiAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZv aWQgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9Ob2RlX2FsbG9jYXRv ci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KCnByb3RlY3RlZDoKICB0eXBlbmFtZSBfQWxsb2NfdHJh aXRzPF9MaXN0X25vZGU8X1RwPiwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAg ICAgX05vZGVfYWxsb2NhdG9yOwogIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKfTsKCgoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0xpc3RfYWxsb2NfYmFz ZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs bG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxs b2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0 dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0 b3JfdHlwZSYpIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz PF9MaXN0X25vZGU8X1RwPiwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxs b2NfdHlwZTsKICBfTGlzdF9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX0FsbG9j X3R5cGU6OmFsbG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4q IF9fcCkgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAg X0xpc3Rfbm9kZTxfVHA+KiBfTV9ub2RlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jPgpjbGFzcyBfTGlzdF9iYXNlCiAgOiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxfVHAs IF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsKcHVibGljOgogIHR5cGVkZWYgX0xpc3RfYWxsb2Nf YmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0 czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVk ZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfTGlz dF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9u b2RlID0gX01fZ2V0X25vZGUoKTsKICAgIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAg X01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7CiAgfQogIH5fTGlzdF9iYXNlKCkgewogICAgY2xl YXIoKTsKICAgIF9NX3B1dF9ub2RlKF9NX25vZGUpOwogIH0KCiAgdm9pZCBjbGVhcigpOwp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApfTGlzdF9iYXNlPF9UcCxf QWxsb2M+OjpjbGVhcigpCnsKICBfTGlzdF9ub2RlPF9UcD4qIF9fY3VyID0gKF9MaXN0X25vZGU8 X1RwPiopIF9NX25vZGUtPl9NX25leHQ7CiAgd2hpbGUgKF9fY3VyICE9IF9NX25vZGUpIHsKICAg IF9MaXN0X25vZGU8X1RwPiogX190bXAgPSBfX2N1cjsKICAgIF9fY3VyID0gKF9MaXN0X25vZGU8 X1RwPiopIF9fY3VyLT5fTV9uZXh0OwogICAgX0Rlc3Ryb3koJl9fdG1wLT5fTV9kYXRhKTsKICAg IF9NX3B1dF9ub2RlKF9fdG1wKTsKICB9CiAgX01fbm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAg X01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgbGlzdCA6IHByb3RlY3RlZCBfTGlzdF9i YXNlPF9UcCwgX0FsbG9jPgp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgogIHR5cGVkZWYgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gX0Jh c2U7CnByb3RlY3RlZDoKICB0eXBlZGVmIHZvaWQqIF9Wb2lkX3BvaW50ZXI7CgpwdWJsaWM6CiAg dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAg dHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVf dHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJl bmNlOwogIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwogIHR5cGVkZWYgc2l6ZV90IHNp emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYg dHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRv cigpOyB9CgpwdWJsaWM6CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBp dGVyYXRvcjsKICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9U cCo+IGNvbnN0X2l0ZXJhdG9yOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRl cmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y PGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpf TV9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01fZ2V0 X25vZGU7Cgpwcm90ZWN0ZWQ6CiAgX05vZGUqIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9UcCYgX194 KQogIHsKICAgIF9Ob2RlKiBfX3AgPSBfTV9nZXRfbm9kZSgpOwogICAgICAgICAgICAgIHsKICAg ICAgX0NvbnN0cnVjdCgmX19wLT5fTV9kYXRhLCBfX3gpOwogICAgfQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgcmV0dXJuIF9fcDsKICB9CgogIF9Ob2RlKiBfTV9jcmVh dGVfbm9kZSgpCiAgewogICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgICAg ICAgewogICAgICBfQ29uc3RydWN0KCZfX3AtPl9NX2RhdGEpOwogICAgfQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogICAgcmV0dXJuIF9fcDsKICB9CgpwdWJsaWM6CiAgZXhw bGljaXQgbGlzdChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkg OiBfQmFzZShfX2EpIHt9CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gKF9Ob2RlKikoX01f bm9kZS0+X01fbmV4dCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu IChfTm9kZSopKF9NX25vZGUtPl9NX25leHQpOyB9CgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJu IF9NX25vZGU7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9ub2Rl OyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRl cmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAog ICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgcmV2ZXJzZV9p dGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0K ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1 cm4gX01fbm9kZS0+X01fbmV4dCA9PSBfTV9ub2RlOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25z dCB7CiAgICBzaXplX3R5cGUgX19yZXN1bHQgPSAwOwogICAgZGlzdGFuY2UoYmVnaW4oKSwgZW5k KCksIF9fcmVzdWx0KTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CiAgc2l6ZV90eXBlIG1heF9z aXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICByZWZlcmVuY2UgZnJvbnQo KSB7IHJldHVybiAqYmVnaW4oKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsg cmV0dXJuICpiZWdpbigpOyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKC0tZW5kKCkp OyB9CiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKC0tZW5kKCkpOyB9 CgogIHZvaWQgc3dhcChsaXN0PF9UcCwgX0FsbG9jPiYgX194KSB7IHN0ZDo6c3dhcChfTV9ub2Rl LCBfX3guX01fbm9kZSk7IH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24s IGNvbnN0IF9UcCYgX194KSB7CiAgICBfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gp OwogICAgX190bXAtPl9NX25leHQgPSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICBfX3RtcC0+X01f cHJldiA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldjsKICAgIF9fcG9zaXRpb24uX01fbm9k ZS0+X01fcHJldi0+X01fbmV4dCA9IF9fdG1wOwogICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9w cmV2ID0gX190bXA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVy YXRvciBfX3Bvc2l0aW9uKSB7IHJldHVybiBpbnNlcnQoX19wb3NpdGlvbiwgX1RwKCkpOyB9CgoK ICB0ZW1wbGF0ZTxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVy YXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6ZV90 eXBlKSBfX24sIChfVHApIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSk7CgogIHRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVm IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh bDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdy YWwoKSk7CiAgfQoKICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwg Y29uc3QgX1RwJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0K ICB2b2lkIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z dCBfVHAmIF9feCk7CgogIHZvaWQgcHVzaF9mcm9udChjb25zdCBfVHAmIF9feCkgeyBpbnNlcnQo YmVnaW4oKSwgX194KTsgfQogIHZvaWQgcHVzaF9mcm9udCgpIHtpbnNlcnQoYmVnaW4oKSk7fQog IHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7IGluc2VydChlbmQoKSwgX194KTsgfQog IHZvaWQgcHVzaF9iYWNrKCkge2luc2VydChlbmQoKSk7fQoKICBpdGVyYXRvciBlcmFzZShpdGVy YXRvciBfX3Bvc2l0aW9uKSB7CiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fbmV4dF9ub2RlID0gX19w b3NpdGlvbi5fTV9ub2RlLT5fTV9uZXh0OwogICAgX0xpc3Rfbm9kZV9iYXNlKiBfX3ByZXZfbm9k ZSA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldjsKICAgIF9Ob2RlKiBfX24gPSAoX05vZGUq KSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV4dF9u b2RlOwogICAgX19uZXh0X25vZGUtPl9NX3ByZXYgPSBfX3ByZXZfbm9kZTsKICAgIF9EZXN0cm95 KCZfX24tPl9NX2RhdGEpOwogICAgX01fcHV0X25vZGUoX19uKTsKICAgIHJldHVybiBpdGVyYXRv cigoX05vZGUqKSBfX25leHRfbm9kZSk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9f Zmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CiAgdm9pZCBjbGVhcigpIHsgX0Jhc2U6OmNsZWFyKCk7 IH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KTsK ICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyB0aGlzLT5yZXNpemUoX19uZXdf c2l6ZSwgX1RwKCkpOyB9CgogIHZvaWQgcG9wX2Zyb250KCkgeyBlcmFzZShiZWdpbigpKTsgfQog IHZvaWQgcG9wX2JhY2soKSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IGVuZCgpOwogICAgZXJhc2Uo LS1fX3RtcCk7CiAgfQogIGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAog ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6 IF9CYXNlKF9fYSkKICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fbiwgX192YWx1ZSk7IH0KICBleHBs aWNpdCBsaXN0KHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAg ICB7IGluc2VydChiZWdpbigpLCBfX24sIF9UcCgpKTsgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KICBsaXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCwKICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf dHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAgICB7IGluc2VydChiZWdpbigpLCBfX2ZpcnN0LCBf X2xhc3QpOyB9CgogIGxpc3QoY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkgOiBfQmFzZShf X3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX194LmJlZ2luKCksIF9f eC5lbmQoKSk7IH0KCiAgfmxpc3QoKSB7IH0KCiAgbGlzdDxfVHAsIF9BbGxvYz4mIG9wZXJhdG9y PShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KTsKCnB1YmxpYzoKCgoKCgogIHZvaWQgYXNz aWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19u LCBfX3ZhbCk7IH0KCiAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBf VHAmIF9fdmFsKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNz aWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAg dHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBf SW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdy YWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25f ZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7 IF9NX2ZpbGxfYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5w dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX19mYWxzZV90eXBlKTsKCnByb3RlY3RlZDoKICB2b2lkIHRyYW5zZmVyKGl0 ZXJhdG9yIF9fcG9zaXRpb24sIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewog ICAgaWYgKF9fcG9zaXRpb24gIT0gX19sYXN0KSB7CgogICAgICBfX2xhc3QuX01fbm9kZS0+X01f cHJldi0+X01fbmV4dCA9IF9fcG9zaXRpb24uX01fbm9kZTsKICAgICAgX19maXJzdC5fTV9ub2Rl LT5fTV9wcmV2LT5fTV9uZXh0ID0gX19sYXN0Ll9NX25vZGU7CiAgICAgIF9fcG9zaXRpb24uX01f bm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fZmlyc3QuX01fbm9kZTsKCgogICAgICBfTGlzdF9u b2RlX2Jhc2UqIF9fdG1wID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfX3Bv c2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBfX2xhc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAg X19sYXN0Ll9NX25vZGUtPl9NX3ByZXYgPSBfX2ZpcnN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAg IF9fZmlyc3QuX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgfQogIH0KCnB1YmxpYzoKICB2 b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gpIHsKICAgIGlmICghX194 LmVtcHR5KCkpCiAgICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigpLCBf X3guZW5kKCkpOwogIH0KICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0Jiwg aXRlcmF0b3IgX19pKSB7CiAgICBpdGVyYXRvciBfX2ogPSBfX2k7CiAgICArK19fajsKICAgIGlm IChfX3Bvc2l0aW9uID09IF9faSB8fCBfX3Bvc2l0aW9uID09IF9faikgcmV0dXJuOwogICAgdGhp cy0+dHJhbnNmZXIoX19wb3NpdGlvbiwgX19pLCBfX2opOwogIH0KICB2b2lkIHNwbGljZShpdGVy YXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0 KSB7CiAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9z aXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CiAgfQogIHZvaWQgcmVtb3ZlKGNvbnN0IF9UcCYgX192 YWx1ZSk7CiAgdm9pZCB1bmlxdWUoKTsKICB2b2lkIG1lcmdlKGxpc3QmIF9feCk7CiAgdm9pZCBy ZXZlcnNlKCk7CiAgdm9pZCBzb3J0KCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiB2 b2lkIHJlbW92ZV9pZihfUHJlZGljYXRlKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRp Y2F0ZT4gdm9pZCB1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNsYXNzIF9T dHJpY3RXZWFrT3JkZXJpbmc+IHZvaWQgbWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcp OwogIHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPiB2b2lkIHNvcnQoX1N0cmlj dFdlYWtPcmRlcmluZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBs aXN0PF9UcCxfQWxsb2M+JiBfX3kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxv Yz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIGNvbnN0X2l0ZXJhdG9yIF9fZW5k MSA9IF9feC5lbmQoKTsKICBjb25zdF9pdGVyYXRvciBfX2VuZDIgPSBfX3kuZW5kKCk7CgogIGNv bnN0X2l0ZXJhdG9yIF9faTEgPSBfX3guYmVnaW4oKTsKICBjb25zdF9pdGVyYXRvciBfX2kyID0g X195LmJlZ2luKCk7CiAgd2hpbGUgKF9faTEgIT0gX19lbmQxICYmIF9faTIgIT0gX19lbmQyICYm ICpfX2kxID09ICpfX2kyKSB7CiAgICArK19faTE7CiAgICArK19faTI7CiAgfQogIHJldHVybiBf X2kxID09IF9fZW5kMSAmJiBfX2kyID09IF9fZW5kMjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbGlzdDxfVHAsX0FsbG9j PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195 KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5k KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5k KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w ZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh dG9yPihjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBj b25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29u c3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxp c3Q8X1RwLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBs aXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxf VHAsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZApzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+ JiBfX3gsIGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy Pgp2b2lkCmxpc3Q8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19w b3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCkKICAgIGluc2VydChfX3Bvc2l0aW9uLCAqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApsaXN0PF9UcCwgX0FsbG9jPjo6X01fZmlsbF9p bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQp7CiAgZm9yICggOyBfX24gPiAwOyAt LV9fbikKICAgIGluc2VydChfX3Bvc2l0aW9uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxvYz46Oml0ZXJhdG9yIGxpc3Q8 X1RwLCBfQWxsb2M+OjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IgX19sYXN0 KQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgZXJhc2UoX19maXJzdCsrKTsKICBy ZXR1cm4gX19sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQg bGlzdDxfVHAsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1Rw JiBfX3gpCnsKICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwogIHNpemVfdHlwZSBfX2xlbiA9IDA7 CiAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYgX19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytf X2xlbikKICAgIDsKICBpZiAoX19sZW4gPT0gX19uZXdfc2l6ZSkKICAgIGVyYXNlKF9faSwgZW5k KCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmxpc3Q8X1RwLCBfQWxsb2M+JiBs aXN0PF9UcCwgX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gp CnsKICBpZiAodGhpcyAhPSAmX194KSB7CiAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7 CiAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0 MiA9IF9feC5iZWdpbigpOwogICAgY29uc3RfaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsK ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg ICAgICpfX2ZpcnN0MSsrID0gKl9fZmlyc3QyKys7CiAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0 MikKICAgICAgZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogICAgZWxzZQogICAgICBpbnNlcnQo X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6X01f ZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgewogIGl0ZXJhdG9y IF9faSA9IGJlZ2luKCk7CiAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYgX19uID4gMDsgKytfX2ks IC0tX19uKQogICAgKl9faSA9IF9fdmFsOwogIGlmIChfX24gPiAwKQogICAgaW5zZXJ0KGVuZCgp LCBfX24sIF9fdmFsKTsKICBlbHNlCiAgICBlcmFzZShfX2ksIGVuZCgpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9p ZApsaXN0PF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJz dDIsIF9JbnB1dEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2ZhbHNlX3R5cGUpCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRl cmF0b3IgX19sYXN0MSA9IGVuZCgpOwogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBf X2ZpcnN0MiAhPSBfX2xhc3QyOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgKl9fZmlyc3Qx ID0gKl9fZmlyc3QyOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgZXJhc2UoX19maXJz dDEsIF9fbGFzdDEpOwogIGVsc2UKICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0 Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwg X0FsbG9jPjo6cmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSkKewogIGl0ZXJhdG9yIF9fZmlyc3Qg PSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIHdoaWxlIChfX2ZpcnN0ICE9 IF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICsrX19uZXh0Owog ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpIGVyYXNlKF9fZmlyc3QpOwogICAgX19maXJzdCA9 IF9fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBs aXN0PF9UcCwgX0FsbG9jPjo6dW5pcXVlKCkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigp OwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0 dXJuOwogIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19uZXh0ICE9IF9f bGFzdCkgewogICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgIGVyYXNlKF9fbmV4dCk7 CiAgICBlbHNlCiAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0Owog IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBf QWxsb2M+OjptZXJnZShsaXN0PF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaXRlcmF0b3IgX19maXJz dDEgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKICBpdGVyYXRvciBfX2Zp cnN0MiA9IF9feC5iZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgq X19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7 CiAgICAgIHRyYW5zZmVyKF9fZmlyc3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2Zp cnN0MiA9IF9fbmV4dDsKICAgIH0KICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19m aXJzdDIgIT0gX19sYXN0MikgdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9 CgppbmxpbmUgdm9pZCBfX0xpc3RfYmFzZV9yZXZlcnNlKF9MaXN0X25vZGVfYmFzZSogX19wKQp7 CiAgX0xpc3Rfbm9kZV9iYXNlKiBfX3RtcCA9IF9fcDsKICBkbyB7CiAgICBzdGQ6OnN3YXAoX190 bXAtPl9NX25leHQsIF9fdG1wLT5fTV9wcmV2KTsKICAgIF9fdG1wID0gX190bXAtPl9NX3ByZXY7 CiAgfSB3aGlsZSAoX190bXAgIT0gX19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jPgppbmxpbmUgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmV2ZXJzZSgpCnsKICBfX0xp c3RfYmFzZV9yZXZlcnNlKHRoaXMtPl9NX25vZGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnNvcnQoKQp7CgogIGlmIChfTV9u b2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYgX01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAhPSBf TV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAsIF9B bGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0 eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2lu KCkpOwogICAgICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2Nv dW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jYXJy eSk7CiAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2krK10pOwogICAgICB9CiAgICAg IF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAgIGlmIChfX2kgPT0gX19maWxsKSAr K19fZmlsbDsKICAgIH0KCiAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19p KQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19pLTFdKTsKICAgIHN3YXAo X19jb3VudGVyW19fZmlsbC0xXSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+ OjpyZW1vdmVfaWYoX1ByZWRpY2F0ZSBfX3ByZWQpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVn aW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xh c3QpIHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICArK19fbmV4dDsKICAgIGlm IChfX3ByZWQoKl9fZmlyc3QpKSBlcmFzZShfX2ZpcnN0KTsKICAgIF9fZmlyc3QgPSBfX25leHQ7 CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFz cyBfQmluYXJ5UHJlZGljYXRlPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojp1bmlxdWUoX0JpbmFy eVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7 CiAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1 cm47CiAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX25leHQgIT0gX19s YXN0KSB7CiAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgIGVy YXNlKF9fbmV4dCk7CiAgICBlbHNlCiAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICBfX25leHQg PSBfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1w bGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6 bWVyZ2UobGlzdDxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJl Z2luKCk7CiAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogIGl0ZXJhdG9yIF9fZmlyc3QyID0g X194LmJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgq X19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7 CiAgICAgIHRyYW5zZmVyKF9fZmlyc3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2Zp cnN0MiA9IF9fbmV4dDsKICAgIH0KICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19m aXJzdDIgIT0gX19sYXN0MikgdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfU3Ry aWN0V2Vha09yZGVyaW5nPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojpzb3J0KF9TdHJpY3RXZWFr T3JkZXJpbmcgX19jb21wKQp7CgogIGlmIChfTV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYg X01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAhPSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0Fs bG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGlu dCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNl KF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAg ICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAg ICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jYXJyeSwgX19jb21wKTsKICAgICAgICBfX2NhcnJ5 LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgIH0KICAgICAgX19jYXJyeS5zd2FwKF9fY291 bnRlcltfX2ldKTsKICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgfQoKICAg IGZvciAoaW50IF9faSA9IDE7IF9faSA8IF9fZmlsbDsgKytfX2kpCiAgICAgIF9fY291bnRlcltf X2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0sIF9fY29tcCk7CiAgICBzd2FwKF9fY291bnRlcltf X2ZpbGwtMV0pOwogIH0KfQoKfQojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2xpc3QuaCIgMiAzCiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbGlzdCIgMiAz CiMgNDggIi4uLy4uL2FydHMvbWNvcC9wb29sLmgiIDIKCm5hbWVzcGFjZSBBcnRzIHsKCnRlbXBs YXRlIDxjbGFzcyBUPgpjbGFzcyBQb29sIHsKICAgICAgICBzdGQ6OnN0YWNrPHVuc2lnbmVkIGxv bmc+IGZyZWVJRHM7CiAgICAgICAgc3RkOjp2ZWN0b3I8VCAqPiBzdG9yYWdlOwpwdWJsaWM6CiAg ICAgICAgaW5saW5lIFQqJiBvcGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgbikgeyByZXR1cm4gc3Rv cmFnZVtuXTsgfQogICAgICAgIGlubGluZSB2b2lkIHJlbGVhc2VTbG90KHVuc2lnbmVkIGxvbmcg bikgewogICAgICAgICAgICAgICAgZnJlZUlEcy5wdXNoKG4pOwogICAgICAgICAgICAgICAgc3Rv cmFnZVtuXSA9IDA7CiAgICAgICAgfQogICAgICAgIHVuc2lnbmVkIGxvbmcgYWxsb2NTbG90KCkg ewogICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzbG90OwogICAgICAgICAgICAgICAgaWYo ZnJlZUlEcy5lbXB0eSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIG47CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihuPTA7bjwzMjtu KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlSURzLnB1c2goc3RvcmFn ZS5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UucHVzaF9i YWNrKDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICBzbG90ID0gZnJlZUlEcy50b3AoKTsKICAgICAgICAgICAgICAgIGZyZWVJRHMu cG9wKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gc2xvdDsKICAgICAgICB9CiAgICAgICAgc3Rk OjpsaXN0PFQgKj4gZW51bWVyYXRlKCkgewogICAgICAgICAgICAgICAgc3RkOjpsaXN0PFQgKj4g aXRlbXM7CgogICAgICAgICAgICAgICAgaW50IG4sbWF4ID0gc3RvcmFnZS5zaXplKCk7CgogICAg ICAgICAgICAgICAgZm9yKG49MDsgbiA8IG1heDsgbisrKQogICAgICAgICAgICAgICAgICAgICAg ICBpZihzdG9yYWdlW25dKSBpdGVtcy5wdXNoX2JhY2soc3RvcmFnZVtuXSk7CgogICAgICAgICAg ICAgICAgcmV0dXJuIGl0ZW1zOwogICAgICAgIH0KICAgICAgICB1bnNpZ25lZCBsb25nIG1heCgp IHsgcmV0dXJuIHN0b3JhZ2Uuc2l6ZSgpOyB9Cn07Cgp9OwojIDI4ICIuLi8uLi9hcnRzL21jb3Av ZGlzcGF0Y2hlci5oIiAyCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2lvbWFuYWdlci5oIiAxCiMgMzYg Ii4uLy4uL2FydHMvbWNvcC9pb21hbmFnZXIuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUu aCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk ZS9zeXMvdGltZS5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMg NDkgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5 cGVzLmgiIDEgMwojIDUwICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDIgMwoKCgpzdHJ1Y3Qg dGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fdGltZV90IHR2X3VzZWM7CiAg fTsKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDQ2 ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXpvbmUKICB7CiAgICBpbnQg dHpfbWludXRlc3dlc3Q7CiAgICBpbnQgdHpfZHN0dGltZTsKICB9OwoKCgoKCgpleHRlcm4gaW50 IGdldHRpbWVvZmRheSAoc3RydWN0IHRpbWV2YWwgKl9fdHYsIHN0cnVjdCB0aW1lem9uZSAqX190 eikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldHRpbWVvZmRheSAoX19jb25zdCBzdHJ1Y3Qg dGltZXZhbCAqX190diwgX19jb25zdCBzdHJ1Y3QgdGltZXpvbmUgKl9fdHopIHRocm93ICgpOwoK CgoKCgpleHRlcm4gaW50IGFkanRpbWUgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fZGVsdGEs IHN0cnVjdCB0aW1ldmFsICpfX29sZGRlbHRhKSB0aHJvdyAoKTsKCgoKCmVudW0gX19pdGltZXJf d2hpY2gKICB7CgogICAgSVRJTUVSX1JFQUwgPSAwLAoKCiAgICBJVElNRVJfVklSVFVBTCA9IDEs CgoKCiAgICBJVElNRVJfUFJPRiA9IDIKCiAgfTsKCgoKc3RydWN0IGl0aW1lcnZhbAogIHsKCiAg ICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKCiAgICBzdHJ1Y3QgdGltZXZhbCBpdF92YWx1 ZTsKICB9OwoKCgpleHRlcm4gaW50IGdldGl0aW1lciAoZW51bSBfX2l0aW1lcl93aGljaCBfX3do aWNoLCBzdHJ1Y3QgaXRpbWVydmFsICpfX3ZhbHVlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50 IHNldGl0aW1lciAoZW51bSBfX2l0aW1lcl93aGljaCBfX3doaWNoLCBfX2NvbnN0IHN0cnVjdCBp dGltZXJ2YWwgKl9fbmV3LCBzdHJ1Y3QgaXRpbWVydmFsICpfX29sZCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCB1dGltZXMgKF9fY29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3QgdGltZXZhbCBf X3R2cFsyXSkgdGhyb3cgKCk7CiMgMTQzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwp9CiMg MzcgIi4uLy4uL2FydHMvbWNvcC9pb21hbmFnZXIuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMSAzCiMgMzggIi4uLy4uL2FydHMvbWNvcC9pb21hbmFnZXIuaCIgMgojIDEgIi91 c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3VuaXN0 ZC5oIiAyIDMKCmV4dGVybiAiQyIgewojIDE3NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXhfb3B0LmgiIDEgMwojIDE3NiAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIg MSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmly b25tZW50cy5oIiAyIDMKIyAxODAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMTkwICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAx IDMKIyAxOTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMTk5ICIvdXNyL2luY2x1ZGUv dW5pc3RkLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg MiAzCiMgMjM1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKdHlwZWRlZiBfX2ludHB0cl90IGlu dHB0cl90OwojIDI0OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgYWNjZXNz IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IGV1aWRhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAo KTsKIyAyNzcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBfX2xzZWVr IChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4 dGVybiBfX29mZl90IGxzZWVrIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hl bmNlKSB0aHJvdyAoKTsKIyAyOTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19v ZmY2NF90IGxzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5j ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19jbG9zZSAoaW50IF9fZmQpIHRocm93ICgpOwpl eHRlcm4gaW50IGNsb3NlIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IF9f cmVhZCAoaW50IF9fZmQsIHZvaWQgKiBfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKSB0aHJvdyAoKTsK ZXh0ZXJuIHNzaXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQgKiBfX2J1Ziwgc2l6ZV90IF9fbmJ5 dGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gc3NpemVfdCBfX3dyaXRlIChpbnQgX19mZCwgX19jb25z dCB2b2lkICogX19idWYsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gc3NpemVfdCB3cml0 ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqIF9fYnVmLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gc3NpemVfdCBfX3ByZWFkNjQgKGludCBfX2ZkLCB2b2lkICogX19idWYsIHNp emVfdCBfX25ieXRlcywgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNz aXplX3QgX19wd3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqIF9fYnVmLCBzaXplX3Qg X19uLCBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgpOwoKCgpleHRlcm4gc3NpemVfdCBwcmVh ZCAoaW50IF9fZmQsIHZvaWQgKiBfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLCBfX29mZl90IF9fb2Zm c2V0KSB0aHJvdyAoKTsKCmV4dGVybiBzc2l6ZV90IHB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qg dm9pZCAqIF9fYnVmLCBzaXplX3QgX19uLCBfX29mZl90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKIyAz MzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gc3NpemVfdCBwcmVhZDY0IChpbnQg X19mZCwgdm9pZCAqIF9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9fb2ZmNjRfdCBfX29mZnNldCkg dGhyb3cgKCk7CgpleHRlcm4gc3NpemVfdCBwd3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9p ZCAqIF9fYnVmLCBzaXplX3QgX19uLCBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgpOwojIDM0 OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgcGlwZSAoaW50IF9fcGlwZWRl c1syXSkgdGhyb3cgKCk7CiMgMzU4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVu c2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CiMgMzY3 ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5z aWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQg dWFsYXJtICh1bnNpZ25lZCBpbnQgX192YWx1ZSwgdW5zaWduZWQgaW50IF9faW50ZXJ2YWwpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgdXNsZWVwICh1bnNpZ25lZCBpbnQgX191c2Vjb25kcykg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lk X3QgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9f dWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg bGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9f Z3JvdXApIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3QgY2hhciAqX19w YXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2ZkKSB0aHJvdyAoKTsK IyA0MTkgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gY2hhciAqZ2V0Y3dkIChjaGFy ICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldF9j dXJyZW50X2Rpcl9uYW1lICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmdldHdk IChjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGR1cCAoaW50IF9fZmQpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBfX2ZkMikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247CgpleHRlcm4gY2hhciAqKmVudmlyb247CgoKCgoK ZXh0ZXJuIGludCBleGVjdmUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9f YXJndltdLCBjaGFyICpfX2NvbnN0IF9fZW52cFtdKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50 IGZleGVjdmUgKGludCBfX2ZkLCBjaGFyICpfX2NvbnN0IF9fYXJndltdLCBjaGFyICpfX2NvbnN0 IF9fZW52cFtdKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFy ICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IGV4ZWNsZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY2wgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2Nv bnN0IGNoYXIgKl9fYXJnLCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAoX19j b25zdCBjaGFyICpfX2ZpbGUsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBleGVjbHAgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9f YXJnLCAuLi4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBuaWNlIChpbnQgX19pbmMpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX2V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIg MSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1lLmgiIDMKZW51bQogIHsKICAgIF9Q Q19MSU5LX01BWCwKCiAgICBfUENfTUFYX0NBTk9OLAoKICAgIF9QQ19NQVhfSU5QVVQsCgogICAg X1BDX05BTUVfTUFYLAoKICAgIF9QQ19QQVRIX01BWCwKCiAgICBfUENfUElQRV9CVUYsCgogICAg X1BDX0NIT1dOX1JFU1RSSUNURUQsCgogICAgX1BDX05PX1RSVU5DLAoKICAgIF9QQ19WRElTQUJM RSwKCiAgICBfUENfU1lOQ19JTywKCiAgICBfUENfQVNZTkNfSU8sCgogICAgX1BDX1BSSU9fSU8s CgogICAgX1BDX1NPQ0tfTUFYQlVGLAoKICAgIF9QQ19GSUxFU0laRUJJVFMKCiAgfTsKCgplbnVt CiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RD SywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJF QU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBf U0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklU WV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywK CiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBf U0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBf U0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01F U1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9S WV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAg ICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBf U0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoK ICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1T X01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAg IF9TQ19USU1FUl9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1f TUFYLAoKICAgIF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAg X1NDX0NPTExfV0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0Nf RVhQUl9ORVNUX01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgog ICAgX1NDX0NIQVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0Nf Ml9DX0JJTkQsCgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1ND XzJfRk9SVF9SVU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgog ICAgX1NDX1BJSSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tFVCwKCiAgICBf U0NfUElJX0lOVEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xMLAoKICAgIF9T Q19TRUxFQ1QsCgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX1BJSV9JTlRFUk5FVF9TVFJF QU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBfU0NfUElJX09TSV9DT1RTLAoK ICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lfTSwKCiAgICBfU0NfVF9JT1Zf TUFYLAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUywK CiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VUUFdfUl9TSVpFX01BWCwKCiAg ICBfU0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1FX01BWCwKCiAgICBfU0NfVEhS RUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhSRUFEX0tFWVNfTUFYLAoKICAg IF9TQ19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURfVEhSRUFEU19NQVgsCgogICAg X1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpF LAoKICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVEhSRUFEX1BS SU9fSU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCwKCiAgICBfU0NfVEhSRUFE X1BST0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNfQ09ORiwKCiAgICBfU0NfTlBS T0NFU1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAgICBfU0NfQVZQSFlTX1BBR0VT LAoKICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01BWCwKCgogICAgX1NDX1hPUEVO X1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9VTklY LAoKICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5fRU5IX0kxOE4sCgogICAgX1ND X1hPUEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAgIF9TQ18yX0NfVkVSU0lPTiwK CiAgICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoKICAgIF9TQ19YT1BFTl9YUEcz LAoKICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9CSVQsCgogICAgX1NDX0NIQVJf TUFYLAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01BWCwKCiAgICBfU0NfSU5UX01J TiwKCiAgICBfU0NfTE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklULAoKICAgIF9TQ19NQl9MRU5f TUFYLAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFYLAoKICAgIF9TQ19TQ0hBUl9N QVgsCgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9NQVgsCgogICAgX1NDX1NIUlRf TUlOLAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRfTUFYLAoKICAgIF9TQ19VTE9O R19NQVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05MX0FSR01BWCwKCiAgICBfU0Nf TkxfTEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9TQ19OTF9OTUFYLAoKICAgIF9T Q19OTF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAgIF9TQ19YQlM1X0lMUDMyX09G RjMyLAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBfU0NfWEJTNV9MUDY0X09GRjY0 LAoKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1NDX1hPUEVOX0xFR0FDWSwKCiAg ICBfU0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMKCiAg fTsKCgoKCgplbnVtCiAgewogICAgX0NTX1BBVEgKCgoKCiAgICAsCiAgICBfQ1NfTEZTX0NGTEFH UyA9IDEwMDAsCgogICAgX0NTX0xGU19MREZMQUdTLAoKICAgIF9DU19MRlNfTElCUywKCiAgICBf Q1NfTEZTX0xJTlRGTEFHUywKCiAgICBfQ1NfTEZTNjRfQ0ZMQUdTLAoKICAgIF9DU19MRlM2NF9M REZMQUdTLAoKICAgIF9DU19MRlM2NF9MSUJTLAoKICAgIF9DU19MRlM2NF9MSU5URkxBR1MKCgoK CiAgICAsCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9DRkxBR1MgPSAxMTAwLAoKICAgIF9DU19Y QlM1X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUywK CiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJf T0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBf Q1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElO VEZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQ NjRfT0ZGNjRfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NT X1hCUzVfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NG TEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9M UEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElOVEZMQUdTCgoK ICB9OwojIDQ5OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgpleHRlcm4gbG9uZyBpbnQg cGF0aGNvbmYgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpl eHRlcm4gbG9uZyBpbnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGxvbmcgaW50IHN5c2NvbmYgKGludCBfX25hbWUpIHRocm93ICgpOwoKCgpleHRl cm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4p IHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgX19nZXRwaWQgKHZvaWQpIHRocm93ICgpOwpl eHRlcm4gX19waWRfdCBnZXRwaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3BpZF90IGdl dHBwaWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9pZCkg dGhyb3cgKCk7CiMgNTM0ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlkX3Qg X19nZXRwZ2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCmV4dGVybiBfX3BpZF90IGdldHBn aWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF9fc2V0cGdpZCAo X19waWRfdCBfX3BpZCwgX19waWRfdCBfX3BnaWQpIHRocm93ICgpOwpleHRlcm4gaW50IHNldHBn aWQgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSB0aHJvdyAoKTsKIyA1NjEgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwoj IDU3OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNldHNpZCAodm9p ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBfX3BpZCkgdGhy b3cgKCk7CgoKCmV4dGVybiBfX3VpZF90IGdldHVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IF9fdWlkX3QgZ2V0ZXVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lk ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRlZ2lkICh2b2lkKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtd KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9fZ2lkX3QgX19naWQpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBzZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoK CgoKCmV4dGVybiBfX3BpZF90IF9fZm9yayAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBfX3BpZF90 IGZvcmsgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAodm9pZCkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCB0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f YnVmbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc2F0dHkgKGludCBfX2ZkKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgdHR5c2xvdCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IGxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHN5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNo YXIgKl9fdG8pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoX19jb25zdCBjaGFy ICpfX3BhdGgsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4g aW50IHVubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cm1kaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fcGlkX3Qg dGNnZXRwZ3JwIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGlu dCBfX2ZkLCBfX3BpZF90IF9fcGdycF9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRs b2dpbiAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGdldGxvZ2luX3IgKGNoYXIgKl9f bmFtZSwgc2l6ZV90IF9fbmFtZV9sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRsb2dp biAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDcyNCAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs dWRlL2dldG9wdC5oIiAzCmV4dGVybiAiQyIgewojIDM2ICIvdXNyL2luY2x1ZGUvZ2V0b3B0Lmgi IDMKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKIyA1MCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4 dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0ZXJuIGludCBvcHRlcnI7CgoKCmV4dGVybiBpbnQgb3B0 b3B0OwojIDEzNCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgZ2V0b3B0IChp bnQgX19hcmdjLCBjaGFyICpjb25zdCAqX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cyk7 CiMgMTYzICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKfQojIDcyNSAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAyIDMKIyA3MzMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGdl dGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgc2V0aG9zdG5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IHNldGhvc3RpZCAobG9uZyBpbnQgX19pZCkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGludCBnZXRkb21haW5uYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xl bikgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2V0ZG9tYWlubmFtZSAoX19jb25zdCBjaGFyICpfX25h bWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnN5bmMgKGludCBfX2Zk KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZoYW5ndXAgKHZvaWQpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcmV2b2tlIChfX2NvbnN0IGNoYXIgKl9fZmlsZSkgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNp emVfdCBfX3NpemUsIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBjaHJvb3QgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGNoYXIgKmdldHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiB2b2lk IGVuZHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIHNldHVzZXJzaGVsbCAo dm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2V0cGFzcyAoX19jb25zdCBjaGFyICpf X3Byb21wdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwg aW50IF9fbm9jbG9zZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9uZyBpbnQgZ2V0aG9zdGlk ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN5bmMgKHZvaWQpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBfX2dldHBhZ2VzaXplICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CmV4dGVybiBpbnQgZ2V0cGFnZXNpemUgKHZvaWQpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgdHJ1bmNhdGUgKF9fY29uc3Qg Y2hhciAqX19maWxlLCBfX29mZl90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKIyA4MjkgIi91c3IvaW5j bHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHRydW5jYXRlNjQgKF9fY29uc3QgY2hhciAqX19m aWxlLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnRydW5j YXRlIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZ0 cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgpIHRocm93ICgpOwojIDg0NSAiL3Vz ci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBf X29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6 ZSAodm9pZCkgdGhyb3cgKCk7CiMgODYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJu IGludCBicmsgKHZvaWQgKiBfX2FkZHIpIHRocm93ICgpOwoKCiMgMSAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgODY0 ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCmV4dGVybiB2b2lkICogX19zYnJrIChw dHJkaWZmX3QgX19kZWx0YSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkICogc2JyayAocHRyZGlmZl90 IF9fZGVsdGEpIHRocm93ICgpOwojIDg4NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVy biBsb25nIGludCBzeXNjYWxsIChsb25nIGludCBfX3N5c25vLCAuLi4pIHRocm93ICgpOwojIDkw NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2ZkLCBp bnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIHRocm93ICgpOwojIDkxNSAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2Y2NCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2 NF90IF9fbGVuKSB0aHJvdyAoKTsKIyA5MzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRl cm4gaW50IF9fbGliY19lbmFibGVfc2VjdXJlOwoKCgoKCgpleHRlcm4gaW50IGZkYXRhc3luYyAo aW50IF9fZmlsZGVzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjcnlwdCAoX19jb25z dCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFyICpfX3NhbHQpIHRocm93ICgpOwoKCmV4dGVybiB2 b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lk IGVuY3J5cHQgKGNoYXIgKl9fYmxvY2ssIGludCBfX2VkZmxhZykgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiB2b2lkIHN3YWIgKF9fY29uc3Qgdm9pZCAqIF9fZnJvbSwgdm9pZCAqIF9fdG8sIHNzaXpl X3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3Mp IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpf X25ldykgdGhyb3cgKCk7CiMgOTk5ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGlu dCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLCB2b2lkICgqX19wYXJl bnQpICh2b2lkKSwgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgp9CiMgMzkg Ii4uLy4uL2FydHMvbWNvcC9pb21hbmFnZXIuaCIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvbGlzdCIgMSAzCiMgNDAgIi4uLy4uL2FydHMvbWNvcC9pb21hbmFnZXIuaCIgMgojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3RhY2siIDEgMwojIDQxICIuLi8uLi9hcnRzL21j b3AvaW9tYW5hZ2VyLmgiIDIKCm5hbWVzcGFjZSBBcnRzIHsKIyA4MCAiLi4vLi4vYXJ0cy9tY29w L2lvbWFuYWdlci5oIgpzdHJ1Y3QgSU9UeXBlIHsKICAgICAgICBlbnVtIHsgcmVhZCA9IDEsIHdy aXRlID0gMiwgZXhjZXB0ID0gNCwgcmVlbnRyYW50ID0gOCwgYWxsID0gMTUgfTsKfTsKIyA5MSAi Li4vLi4vYXJ0cy9tY29wL2lvbWFuYWdlci5oIgpjbGFzcyBJT05vdGlmeSB7CnB1YmxpYzoKCgoK CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUlPKGludCBmZCwgaW50IHR5cGUpID0gMDsK fTsKCmNsYXNzIElPV2F0Y2hGRCB7CiAgICAgICAgaW50IF9mZCwgX3R5cGVzOwogICAgICAgIElP Tm90aWZ5ICpfbm90aWZ5OwoKcHVibGljOgogICAgICAgIElPV2F0Y2hGRChpbnQgZmQsIGludCB0 eXBlcywgSU9Ob3RpZnkgKm5vdGlmeSk7CgogICAgICAgIGlubGluZSBpbnQgZmQoKSB7IHJldHVy biBfZmQ7IH07CiAgICAgICAgaW5saW5lIGludCB0eXBlcygpIHsgcmV0dXJuIF90eXBlczsgfTsK ICAgICAgICBpbmxpbmUgSU9Ob3RpZnkgKm5vdGlmeSgpIHsgcmV0dXJuIF9ub3RpZnk7IH07CiAg ICAgICAgaW5saW5lIHZvaWQgcmVtb3ZlKGludCB0eXBlcykgeyBfdHlwZXMgJj0gfnR5cGVzOyB9 Cn07CiMgMTIzICIuLi8uLi9hcnRzL21jb3AvaW9tYW5hZ2VyLmgiCmNsYXNzIFRpbWVOb3RpZnkg ewpwdWJsaWM6CgoKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVRpbWUoKSA9IDA7Cn07 CgpjbGFzcyBUaW1lV2F0Y2hlciB7CiAgICAgICAgaW50IG1pbGxpc2Vjb25kczsKICAgICAgICBU aW1lTm90aWZ5ICpfbm90aWZ5OwogICAgICAgIHRpbWV2YWwgbmV4dE5vdGlmeTsKICAgICAgICBi b29sIGFjdGl2ZSwgZGVzdHJveWVkOwoKICAgICAgICBib29sIGVhcmxpZXIoY29uc3QgdGltZXZh bCYgcmVmZXJlbmNlKTsKcHVibGljOgogICAgICAgIFRpbWVXYXRjaGVyKGludCBfbWlsbGlzZWNv bmRzLCBUaW1lTm90aWZ5ICpub3RpZnkpOwoKICAgICAgICBpbmxpbmUgVGltZU5vdGlmeSAqbm90 aWZ5KCkgeyByZXR1cm4gX25vdGlmeTsgfTsKICAgICAgICB0aW1ldmFsIGFkdmFuY2UoY29uc3Qg dGltZXZhbCYgY3VycmVudFRpbWUpOwogICAgICAgIHZvaWQgZGVzdHJveSgpOwp9OwoKCgoKCmNs YXNzIElPTWFuYWdlciB7CnB1YmxpYzoKICAgICAgICB2aXJ0dWFsIH5JT01hbmFnZXIoKSB7fTsK CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NPbmVFdmVudChib29sIGJsb2NraW5nKSA9 IDA7CgoKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkIHJ1bigpID0gMDsKCgoKCiAgICAgICAgdmly dHVhbCB2b2lkIHRlcm1pbmF0ZSgpID0gMDsKIyAxODMgIi4uLy4uL2FydHMvbWNvcC9pb21hbmFn ZXIuaCIKICAgICAgICB2aXJ0dWFsIHZvaWQgd2F0Y2hGRChpbnQgZmQsIGludCB0eXBlcywgSU9O b3RpZnkgKm5vdGlmeSkgPSAwOwoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKElPTm90 aWZ5ICpub3RpZnksIGludCB0eXBlcykgPSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBh ZGRUaW1lcihpbnQgbWlsbGlzZWNvbmRzLCBUaW1lTm90aWZ5ICpub3RpZnkpID0gMDsKCgoKCiAg ICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbWVyKFRpbWVOb3RpZnkgKm5vdGlmeSkgPSAwOwp9 OwoKY2xhc3MgU3RkSU9NYW5hZ2VyIDogcHVibGljIElPTWFuYWdlciB7CnByb3RlY3RlZDoKICAg ICAgICBzdGQ6Omxpc3Q8SU9XYXRjaEZEICo+IGZkTGlzdDsKICAgICAgICBzdGQ6Omxpc3Q8VGlt ZVdhdGNoZXIgKj4gdGltZUxpc3Q7CiAgICAgICAgc3RkOjpzdGFjazwgc3RkOjpwYWlyPElPV2F0 Y2hGRCAqLGludD4gPiBub3RpZnlTdGFjazsKCiAgICAgICAgYm9vbCB0ZXJtaW5hdGVkOwoKICAg ICAgICBib29sIGZkTGlzdENoYW5nZWQ7CiAgICAgICAgYm9vbCB0aW1lTGlzdENoYW5nZWQ7CiAg ICAgICAgZmRfc2V0IHJlYWRmZHMsIHdyaXRlZmRzLCBleGNlcHRmZHM7CiAgICAgICAgZmRfc2V0 IHJlZW50cmFudF9yZWFkZmRzLCByZWVudHJhbnRfd3JpdGVmZHMsIHJlZW50cmFudF9leGNlcHRm ZHM7CiAgICAgICAgaW50IG1heGZkOwoKICAgICAgICBpbnQgbGV2ZWw7CgpwdWJsaWM6CiAgICAg ICAgU3RkSU9NYW5hZ2VyKCk7CgogICAgICAgIHZvaWQgcHJvY2Vzc09uZUV2ZW50KGJvb2wgYmxv Y2tpbmcpOwogICAgICAgIHZvaWQgcnVuKCk7CiAgICAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKICAg ICAgICB2b2lkIHdhdGNoRkQoaW50IGZkLCBpbnQgdHlwZXMsIElPTm90aWZ5ICpub3RpZnkpOwog ICAgICAgIHZvaWQgcmVtb3ZlKElPTm90aWZ5ICpub3RpZnksIGludCB0eXBlcyk7CiAgICAgICAg dm9pZCBhZGRUaW1lcihpbnQgbWlsbGlzZWNvbmRzLCBUaW1lTm90aWZ5ICpub3RpZnkpOwogICAg ICAgIHZvaWQgcmVtb3ZlVGltZXIoVGltZU5vdGlmeSAqbm90aWZ5KTsKfTsKCn07CiMgMjkgIi4u Ly4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgiIDIKIyAxICIuLi8uLi9hcnRzL21jb3AvdGNwc2Vy dmVyLmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9tY29wL3RjcHNlcnZlci5oIgojIDEgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAxIDMKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL3RjcHNl cnZlci5oIiAyCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2lvbWFuYWdlci5oIiAxCiMgMjggIi4uLy4u L2FydHMvbWNvcC90Y3BzZXJ2ZXIuaCIgMgojIDM2ICIuLi8uLi9hcnRzL21jb3AvdGNwc2VydmVy LmgiCm5hbWVzcGFjZSBBcnRzIHsKCmNsYXNzIERpc3BhdGNoZXI7CgpjbGFzcyBUQ1BTZXJ2ZXIg OnB1YmxpYyBJT05vdGlmeSB7CnByb3RlY3RlZDoKICAgICAgICBEaXNwYXRjaGVyICpkaXNwYXRj aGVyOwoKICAgICAgICBpbnQgdGhlU29ja2V0OwogICAgICAgIGludCB0aGVQb3J0OwogICAgICAg IGJvb2wgc29ja2V0T2s7CiAgICAgICAgYm9vbCBpbml0U29ja2V0KCk7CgpwdWJsaWM6CiAgICAg ICAgVENQU2VydmVyKERpc3BhdGNoZXIgKmRpc3BhdGNoZXIpOwogICAgICAgIHZpcnR1YWwgflRD UFNlcnZlcigpOwogICAgICAgIGJvb2wgcnVubmluZygpOwogICAgICAgIHN0ZDo6c3RyaW5nIHVy bCgpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldFBvcnQoaW50IHBvcnQpOwoKICAgICAgICB2b2lk IG5vdGlmeUlPKGludCBmZCwgaW50IHR5cGVzKTsKfTsKCn07CiMgMzAgIi4uLy4uL2FydHMvbWNv cC9kaXNwYXRjaGVyLmgiIDIKIyAxICIuLi8uLi9hcnRzL21jb3AvdW5peHNlcnZlci5oIiAxCiMg MzMgIi4uLy4uL2FydHMvbWNvcC91bml4c2VydmVyLmgiCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9zdHJpbmciIDEgMwojIDM0ICIuLi8uLi9hcnRzL21jb3AvdW5peHNlcnZlci5oIiAy CiMgMSAiLi4vLi4vYXJ0cy9tY29wL2lvbWFuYWdlci5oIiAxCiMgMzUgIi4uLy4uL2FydHMvbWNv cC91bml4c2VydmVyLmgiIDIKCm5hbWVzcGFjZSBBcnRzIHsKCmNsYXNzIERpc3BhdGNoZXI7Cgpj bGFzcyBVbml4U2VydmVyIDpwdWJsaWMgSU9Ob3RpZnkgewpwcm90ZWN0ZWQ6CiAgICAgICAgRGlz cGF0Y2hlciAqZGlzcGF0Y2hlcjsKCiAgICAgICAgc3RkOjpzdHJpbmcgeHNlcnZlcnBhdGg7CiAg ICAgICAgaW50IHRoZVNvY2tldDsKICAgICAgICBib29sIHNvY2tldE9rOwogICAgICAgIGJvb2wg aW5pdFNvY2tldChzdGQ6OnN0cmluZyBzZXJ2ZXJJRCk7CgpwdWJsaWM6CiAgICAgICAgVW5peFNl cnZlcihEaXNwYXRjaGVyICpkaXNwYXRjaGVyLCBzdGQ6OnN0cmluZyBzZXJ2ZXJJRCk7CiAgICAg ICAgdmlydHVhbCB+VW5peFNlcnZlcigpOwogICAgICAgIGJvb2wgcnVubmluZygpOwogICAgICAg IHN0ZDo6c3RyaW5nIHVybCgpOwoKICAgICAgICB2b2lkIG5vdGlmeUlPKGludCBmZCwgaW50IHR5 cGVzKTsKfTsKCn07CiMgMzEgIi4uLy4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgiIDIKIyAxICIu Li8uLi9hcnRzL21jb3AvY29ubmVjdGlvbi5oIiAxCiMgMjYgIi4uLy4uL2FydHMvbWNvcC9jb25u ZWN0aW9uLmgiCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2J1ZmZlci5oIiAxCiMgMjcgIi4uLy4uL2Fy dHMvbWNvcC9jb25uZWN0aW9uLmgiIDIKIyAzOCAiLi4vLi4vYXJ0cy9tY29wL2Nvbm5lY3Rpb24u aCIKbmFtZXNwYWNlIEFydHMgewoKY2xhc3MgQ29ubmVjdGlvblByaXZhdGU7CgpjbGFzcyBDb25u ZWN0aW9uIHsKcHJpdmF0ZToKICAgICAgICBDb25uZWN0aW9uUHJpdmF0ZSAqZDsKcHVibGljOgog ICAgICAgIGVudW0gQ29ubmVjdGlvblN0YXRlIHsKICAgICAgICAgICAgICAgIHVua25vd24gPSAw LAogICAgICAgICAgICAgICAgZXhwZWN0U2VydmVySGVsbG8gPSAxLAogICAgICAgICAgICAgICAg ZXhwZWN0Q2xpZW50SGVsbG8gPSAyLAogICAgICAgICAgICAgICAgZXhwZWN0QXV0aEFjY2VwdCA9 IDMsCiAgICAgICAgICAgICAgICBlc3RhYmxpc2hlZCA9IDQKICAgICAgICB9Owpwcm90ZWN0ZWQ6 CiAgICAgICAgQnVmZmVyICpyY2J1ZjsKICAgICAgICBib29sIHJlY2VpdmVIZWFkZXI7CiAgICAg ICAgbG9uZyByZW1haW5pbmc7CiAgICAgICAgbG9uZyBtZXNzYWdlVHlwZTsKICAgICAgICBDb25u ZWN0aW9uU3RhdGUgX2Nvbm5TdGF0ZTsKICAgICAgICBzdGQ6OnN0cmluZyBzZXJ2ZXJJRDsKICAg ICAgICBzdGQ6OnN0cmluZyBfY29va2llOwoKICAgICAgICBsb25nIF9yZWZDbnQ7CiMgNzIgIi4u Ly4uL2FydHMvbWNvcC9jb25uZWN0aW9uLmgiCiAgICAgICAgdm9pZCBpbml0UmVjZWl2ZSgpOwog ICAgICAgIHZvaWQgcmVjZWl2ZSh1bnNpZ25lZCBjaGFyICpkYXRhLCBsb25nIGxlbik7CgogICAg ICAgIHZpcnR1YWwgfkNvbm5lY3Rpb24oKTsKcHVibGljOgogICAgICAgIENvbm5lY3Rpb24oKTsK CiAgICAgICAgaW5saW5lIHZvaWQgc2V0U2VydmVySUQoc3RkOjpzdHJpbmcgX3NlcnZlcklEKSB7 IHNlcnZlcklEID0gX3NlcnZlcklEOyB9CiAgICAgICAgaW5saW5lIGJvb2wgaXNDb25uZWN0ZWQo c3RkOjpzdHJpbmcgcykgeyByZXR1cm4gKHNlcnZlcklEID09IHMpOyB9CiAgICAgICAgaW5saW5l IHZvaWQgc2V0Q29ublN0YXRlKENvbm5lY3Rpb25TdGF0ZSBjcykgeyBfY29ublN0YXRlID0gY3M7 IH07CgogICAgICAgIGlubGluZSBzdGQ6OnN0cmluZyBjb29raWUoKSB7IHJldHVybiBfY29va2ll OyB9CiAgICAgICAgdm9pZCBzZXRDb29raWUoc3RkOjpzdHJpbmcgYykgeyBfY29va2llID0gYzsg fQogICAgICAgIHZvaWQgc2V0SGludHMoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBo aW50cyk7CiAgICAgICAgc3RkOjpzdHJpbmcgZmluZEhpbnQoY29uc3Qgc3RkOjpzdHJpbmcmIG5h bWUpOwoKICAgICAgICBpbmxpbmUgQ29ubmVjdGlvblN0YXRlIGNvbm5TdGF0ZSgpIHsgcmV0dXJu IF9jb25uU3RhdGU7IH07CiAgICAgICAgdmlydHVhbCB2b2lkIGRyb3AoKSA9IDA7CiAgICAgICAg dmlydHVhbCBib29sIGJyb2tlbigpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcVNlbmRCdWZm ZXIoQnVmZmVyICpidWZmZXIpID0gMDsKCiAgICAgICAgdm9pZCBfcmVsZWFzZSgpOwogICAgICAg IHZvaWQgX2NvcHkoKTsKfTsKCn07CiMgMzIgIi4uLy4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgi IDIKIyAxICIuLi8uLi9hcnRzL21jb3Avbm90aWZpY2F0aW9uLmgiIDEKIyAyNiAiLi4vLi4vYXJ0 cy9tY29wL25vdGlmaWNhdGlvbi5oIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvcXVl dWUiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3F1ZXVlIiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9xdWV1ZS5oIiAxIDMKIyAzMSAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9xdWV1ZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAz MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9xdWV1ZS5oIiAyIDMKIyAxICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDMzICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3F1ZXVlLmgiIDIgMwojIDEgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgMzQgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfcXVldWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfcXVldWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM2ICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3F1ZXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX3F1ZXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9xdWV1ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2RlcXVlLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2RlcXVlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2Vw dF9jaGVjay5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9k ZXF1ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJh dG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfZGVxdWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2RlcXVlLmgiIDIgMwojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX3F1ZXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfZnVuY3Rpb24uaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfQXJn LCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBh cmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRl IDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlf ZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVm IF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlw ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs X1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj b25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsg fQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQo cGx1czxfVHA+KSB7CiAgcmV0dXJuIF9UcCgwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxp bmUgX1RwIGlkZW50aXR5X2VsZW1lbnQobXVsdGlwbGllczxfVHA+KSB7CiAgcmV0dXJuIF9UcCgx KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9U cD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194 OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmlu YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwg Y29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg X195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+ CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBi b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl dHVybiBfX3ggPCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVy X2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggPj0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigp KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9f eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlf ZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194 LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJl dHVybiAhX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlf bmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJn dW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJs aWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9w cmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6 YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJl ZGljYXRlPgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiB1bmFyeV9u ZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+ CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg X1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsK cHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6 IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGlj YXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5 cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewog ICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1By ZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJl ZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3By ZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMXN0CiAgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50 X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVz dWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJh dGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25z dCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246 OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9 CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5 cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAg IHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1 bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50 X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9P cGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gp CnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0Fy ZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUo X194KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVu dF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl c3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVy YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNv bnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv bjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kp IHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0 IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl c3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVu dF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoK dGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxf T3BlcmF0aW9uPgpiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194 KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBf QXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlw ZShfX3gpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRp b24yPgpjbGFzcyB1bmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h bWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg dHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPgp7CnByb3RlY3RlZDoKICBfT3BlcmF0 aW9uMSBfTV9mbjE7CiAgX09wZXJhdGlvbjIgX01fZm4yOwpwdWJsaWM6CiAgdW5hcnlfY29tcG9z ZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195KQogICAgOiBf TV9mbjEoX194KSwgX01fZm4yKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0 X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90 eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9mbjEoX01fZm4yKF9feCkpOwogIH0KfTsK CnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjI+CmlubGluZSB1 bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPgpjb21wb3NlMShjb25zdCBfT3Bl cmF0aW9uMSYgX19mbjEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX2ZuMikKewogIHJldHVybiB1bmFy eV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihfX2ZuMSwgX19mbjIpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0 aW9uMz4KY2xhc3MgYmluYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBl bmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVy YXRpb24xIF9NX2ZuMTsKICBfT3BlcmF0aW9uMiBfTV9mbjI7CiAgX09wZXJhdGlvbjMgX01fZm4z OwpwdWJsaWM6CiAgYmluYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3Qg X09wZXJhdGlvbjImIF9feSwKICAgICAgICAgICAgICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX196 KQogICAgOiBfTV9mbjEoX194KSwgX01fZm4yKF9feSksIF9NX2ZuMyhfX3opIHsgfQogIHR5cGVu YW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUg X09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX2Zu MShfTV9mbjIoX194KSwgX01fZm4zKF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3Bl cmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgppbmxpbmUgYmlu YXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsIF9PcGVyYXRpb24yLCBfT3BlcmF0aW9uMz4KY29tcG9z ZTIoY29uc3QgX09wZXJhdGlvbjEmIF9fZm4xLCBjb25zdCBfT3BlcmF0aW9uMiYgX19mbjIsCiAg ICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX2ZuMykKewogIHJldHVybiBiaW5hcnlfY29tcG9z ZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMixfT3BlcmF0aW9uMz4KICAgIChfX2ZuMSwgX19mbjIs IF9fZm4zKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBv aW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jl c3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBw b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5 X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3Vs dCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoK dGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX3Vu YXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZykp CnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PihfX3gp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0Pgpj bGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlv bjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIp KF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkg e30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gp KF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0 b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9f eCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNs YXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJn MixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1 cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsK fQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlf ZnVuY3Rpb248X1RwLF9UcD4gewogIF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyBy ZXR1cm4gX194OyB9CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25z dCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBpZGVudGl0 eSA6IHB1YmxpYyBfSWRlbnRpdHk8X1RwPiB7fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0 cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBf UGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRv cigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNvbnN0 IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gp IGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Q YWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlw ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBl JiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwog IH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3Qg X1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0MXN0IDogcHVibGljIF9TZWxlY3Qxc3Q8X1Bh aXI+IHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3QybmQgOiBwdWJsaWMg X1NlbGVjdDJuZDxfUGFpcj4ge307CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJn Mj4Kc3RydWN0IF9Qcm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0Fy ZzIsIF9BcmcxPiB7CiAgX0FyZzEgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBjb25zdCBf QXJnMiYpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBj bGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0Mm5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf QXJnMSwgX0FyZzIsIF9BcmcyPiB7CiAgX0FyZzIgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNv bnN0IF9BcmcyJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2plY3Qxc3QgOiBwdWJsaWMgX1Byb2plY3Qx c3Q8X0FyZzEsIF9BcmcyPiB7fTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+ CnN0cnVjdCBwcm9qZWN0Mm5kIDogcHVibGljIF9Qcm9qZWN0Mm5kPF9BcmcxLCBfQXJnMj4ge307 CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBfQ29uc3RhbnRfdm9pZF9mdW4g ewogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICByZXN1bHRfdHlwZSBfTV92YWw7Cgog IF9Db25zdGFudF92b2lkX2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9NX3ZhbChfX3Yp IHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiBfTV92 YWw7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQ+CnN0cnVj dCBfQ29uc3RhbnRfdW5hcnlfZnVuIHsKICB0eXBlZGVmIF9Bcmd1bWVudCBhcmd1bWVudF90eXBl OwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICByZXN1bHRfdHlwZSBfTV92YWw7Cgog IF9Db25zdGFudF91bmFyeV9mdW4oY29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBfTV92YWwoX192 KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9Bcmd1bWVudCYpIGNv bnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNz IF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Db25zdGFudF9iaW5hcnlfZnVuIHsKICB0eXBl ZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJn dW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgX1Jlc3VsdCBfTV92 YWw7CgogIF9Db25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92YWwo X192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29u c3QgX0FyZzImKSBjb25zdCB7CiAgICByZXR1cm4gX01fdmFsOwogIH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfUmVzdWx0PgpzdHJ1Y3QgY29uc3RhbnRfdm9pZF9mdW4gOiBwdWJsaWMgX0NvbnN0YW50 X3ZvaWRfZnVuPF9SZXN1bHQ+IHsKICBjb25zdGFudF92b2lkX2Z1bihjb25zdCBfUmVzdWx0JiBf X3YpIDogX0NvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdikge30KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1Jlc3VsdCwKICAgICAgICAgIGNsYXNzIF9Bcmd1bWVudCA9IF9SZXN1bHQ+CnN0cnVj dCBjb25zdGFudF91bmFyeV9mdW4gOiBwdWJsaWMgX0NvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0 LCBfQXJndW1lbnQ+CnsKICBjb25zdGFudF91bmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KQog ICAgOiBfQ29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsIF9Bcmd1bWVudD4oX192KSB7fQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LAogICAgICAgICAgY2xhc3MgX0FyZzEgPSBfUmVzdWx0 LAogICAgICAgICAgY2xhc3MgX0FyZzIgPSBfQXJnMT4Kc3RydWN0IGNvbnN0YW50X2JpbmFyeV9m dW4KICA6IHB1YmxpYyBfQ29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LCBfQXJnMSwgX0FyZzI+ CnsKICBjb25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikKICAgIDogX0NvbnN0 YW50X2JpbmFyeV9mdW48X1Jlc3VsdCwgX0FyZzEsIF9BcmcyPihfX3YpIHt9Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+IGNvbnN0 YW50MChjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF92b2lkX2Z1bjxf UmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3Rh bnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4gY29uc3RhbnQxKGNvbnN0IF9SZXN1bHQmIF9f dmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFs KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF9iaW5hcnlfZnVu PF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0Pgpjb25zdGFudDIoY29uc3QgX1Jlc3VsdCYgX192YWwp CnsKICByZXR1cm4gY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4o X192YWwpOwp9CgoKCmNsYXNzIHN1YnRyYWN0aXZlX3JuZyA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv bjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4gewpwcml2YXRlOgogIHVuc2lnbmVkIGludCBf TV90YWJsZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4MTsKICBzaXplX3QgX01faW5kZXgyOwpwdWJs aWM6CiAgdW5zaWduZWQgaW50IG9wZXJhdG9yKCkodW5zaWduZWQgaW50IF9fbGltaXQpIHsKICAg IF9NX2luZGV4MSA9IChfTV9pbmRleDEgKyAxKSAlIDU1OwogICAgX01faW5kZXgyID0gKF9NX2lu ZGV4MiArIDEpICUgNTU7CiAgICBfTV90YWJsZVtfTV9pbmRleDFdID0gX01fdGFibGVbX01faW5k ZXgxXSAtIF9NX3RhYmxlW19NX2luZGV4Ml07CiAgICByZXR1cm4gX01fdGFibGVbX01faW5kZXgx XSAlIF9fbGltaXQ7CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemUodW5zaWduZWQgaW50IF9fc2Vl ZCkKICB7CiAgICB1bnNpZ25lZCBpbnQgX19rID0gMTsKICAgIF9NX3RhYmxlWzU0XSA9IF9fc2Vl ZDsKICAgIHNpemVfdCBfX2k7CiAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU0OyBfX2krKykgewog ICAgICAgIHNpemVfdCBfX2lpID0gKDIxICogKF9faSArIDEpICUgNTUpIC0gMTsKICAgICAgICBf TV90YWJsZVtfX2lpXSA9IF9fazsKICAgICAgICBfX2sgPSBfX3NlZWQgLSBfX2s7CiAgICAgICAg X19zZWVkID0gX01fdGFibGVbX19paV07CiAgICB9CiAgICBmb3IgKGludCBfX2xvb3AgPSAwOyBf X2xvb3AgPCA0OyBfX2xvb3ArKykgewogICAgICAgIGZvciAoX19pID0gMDsgX19pIDwgNTU7IF9f aSsrKQogICAgICAgICAgICBfTV90YWJsZVtfX2ldID0gX01fdGFibGVbX19pXSAtIF9NX3RhYmxl WygxICsgX19pICsgMzApICUgNTVdOwogICAgfQogICAgX01faW5kZXgxID0gMDsKICAgIF9NX2lu ZGV4MiA9IDMxOwogIH0KCiAgc3VidHJhY3RpdmVfcm5nKHVuc2lnbmVkIGludCBfX3NlZWQpIHsg X01faW5pdGlhbGl6ZShfX3NlZWQpOyB9CiAgc3VidHJhY3RpdmVfcm5nKCkgeyBfTV9pbml0aWFs aXplKDE2MTgwMzM5OHUpOyB9Cn07CiMgNTMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xh c3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6 CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7 fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2Yp KCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNz IF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1 bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1 bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3Bl cmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0K cHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVu Y3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAo X1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19y KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoq X01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0 X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGlj OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25z dCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25z dCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZiko KSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0 PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9Bcmcp KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBj b25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6 Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg X0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29u c3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qo X1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3Bl cmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19w LT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0 Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3Mg bWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsK cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9Bcmcp KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBj b25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoq X01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBf QXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248 X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qo X1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3Bl cmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9N X2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGlj IHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90 KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShf VHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6 Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8 dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0 KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0 IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0 Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+ IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBt ZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQg b3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAg dm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0 X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9p ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6Oipf X3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1Rw JiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N X2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBt ZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCos X0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9f cGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9B cmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1Rw OjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz cyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21l bV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQog IHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+ Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsK fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90 PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9p ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZiko X0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBf X3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N X2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29u c3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9y ZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p ZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9m KShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoK CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9S ZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8 X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGlu ZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNv bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxh dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+ IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90 PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxp bmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoq X19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9f Zik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGlu ZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJn KSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRl IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVu MV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkK ICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9y ZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQog IHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRl IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVu MV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9Bcmcp IGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9f Zik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGlu ZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0Fy ZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1 bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0 KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVt cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4x X3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9Bcmcp KQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1f ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShf QXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJn PihfX2YpOyB9Cgp9CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfcXVl dWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9xdWV1ZS5o IiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9xdWV1ZS5oIiAz CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAz CiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcXVldWUuaCIgMiAzCgpu YW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9T ZXF1ZW5jZSA9IGRlcXVlPF9UcD4gPgpjbGFzcyBxdWV1ZTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9TZXE+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcXVldWU8X1RwLCBfU2Vx PiYsIGNvbnN0IHF1ZXVlPF9UcCwgX1NlcT4mKTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9TZXE+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBxdWV1ZTxfVHAsIF9TZXE+JiwgY29u c3QgcXVldWU8X1RwLCBfU2VxPiYpOwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9TZXF1 ZW5jZT4KY2xhc3MgcXVldWUKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHR5cGVkZWYg dHlwZW5hbWUgX1NlcXVlbmNlOjp2YWx1ZV90eXBlIF9TZXF1ZW5jZV92YWx1ZV90eXBlOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxLCBjbGFzcyBfU2VxMT4KICBmcmll bmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBxdWV1ZTxfVHAxLCBfU2VxMT4mLAogICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXVlPF9UcDEsIF9TZXExPiYpOwogIHRlbXBsYXRlIDxj bGFzcyBfVHAxLCBjbGFzcyBfU2VxMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IHF1 ZXVlPF9UcDEsIF9TZXExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWV1ZTxf VHAxLCBfU2VxMT4mKTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjp2YWx1 ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnNpemVfdHlw ZSBzaXplX3R5cGU7CiAgdHlwZWRlZiBfU2VxdWVuY2UgY29udGFpbmVyX3R5cGU7CgogIHR5cGVk ZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlw ZW5hbWUgX1NlcXVlbmNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwpwcm90ZWN0 ZWQ6CiAgX1NlcXVlbmNlIGM7CnB1YmxpYzoKICBleHBsaWNpdCBxdWV1ZShjb25zdCBfU2VxdWVu Y2UmIF9fYyA9IF9TZXF1ZW5jZSgpKSA6IGMoX19jKSB7fQoKICBib29sIGVtcHR5KCkgY29uc3Qg eyByZXR1cm4gYy5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBj LnNpemUoKTsgfQogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuIGMuZnJvbnQoKTsgfQogIGNv bnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuIGMuZnJvbnQoKTsgfQogIHJlZmVy ZW5jZSBiYWNrKCkgeyByZXR1cm4gYy5iYWNrKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygp IGNvbnN0IHsgcmV0dXJuIGMuYmFjaygpOyB9CiAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUm IF9feCkgeyBjLnB1c2hfYmFjayhfX3gpOyB9CiAgdm9pZCBwb3AoKSB7IGMucG9wX2Zyb250KCk7 IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9TZXF1ZW5jZT4KYm9vbApvcGVyYXRv cj09KGNvbnN0IHF1ZXVlPF9UcCwgX1NlcXVlbmNlPiYgX194LCBjb25zdCBxdWV1ZTxfVHAsIF9T ZXF1ZW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYyA9PSBfX3kuYzsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX1NlcXVlbmNlPgpib29sCm9wZXJhdG9yPChjb25zdCBxdWV1ZTxfVHAs IF9TZXF1ZW5jZT4mIF9feCwgY29uc3QgcXVldWU8X1RwLCBfU2VxdWVuY2U+JiBfX3kpCnsKICBy ZXR1cm4gX194LmMgPCBfX3kuYzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcXVl bmNlPgpib29sCm9wZXJhdG9yIT0oY29uc3QgcXVldWU8X1RwLCBfU2VxdWVuY2U+JiBfX3gsIGNv bnN0IHF1ZXVlPF9UcCwgX1NlcXVlbmNlPiYgX195KQp7CiAgcmV0dXJuICEoX194ID09IF9feSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9TZXF1ZW5jZT4KYm9vbApvcGVyYXRvcj4o Y29uc3QgcXVldWU8X1RwLCBfU2VxdWVuY2U+JiBfX3gsIGNvbnN0IHF1ZXVlPF9UcCwgX1NlcXVl bmNlPiYgX195KQp7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX1NlcXVlbmNlPgpib29sCm9wZXJhdG9yPD0oY29uc3QgcXVldWU8X1RwLCBfU2VxdWVu Y2U+JiBfX3gsIGNvbnN0IHF1ZXVlPF9UcCwgX1NlcXVlbmNlPiYgX195KQp7CiAgcmV0dXJuICEo X195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcXVlbmNlPgpib29s Cm9wZXJhdG9yPj0oY29uc3QgcXVldWU8X1RwLCBfU2VxdWVuY2U+JiBfX3gsIGNvbnN0IHF1ZXVl PF9UcCwgX1NlcXVlbmNlPiYgX195KQp7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9TZXF1ZW5jZSA9IHZlY3RvcjxfVHA+LAog ICAgICAgICAgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVf dHlwZT4gPgpjbGFzcyBwcmlvcml0eV9xdWV1ZQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHR5cGVkZWYgdHlw ZW5hbWUgX1NlcXVlbmNlOjp2YWx1ZV90eXBlIF9TZXF1ZW5jZV92YWx1ZV90eXBlOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h bWUgX1NlcXVlbmNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBf U2VxdWVuY2U6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiBfU2VxdWVuY2UgY29udGFp bmVyX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpyZWZlcmVuY2UgcmVmZXJl bmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3Rf cmVmZXJlbmNlOwpwcm90ZWN0ZWQ6CiAgX1NlcXVlbmNlIGM7CiAgX0NvbXBhcmUgY29tcDsKcHVi bGljOgogIGV4cGxpY2l0IHByaW9yaXR5X3F1ZXVlKGNvbnN0IF9Db21wYXJlJiBfX3ggPSBfQ29t cGFyZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9TZXF1ZW5jZSYgX19zID0g X1NlcXVlbmNlKCkpCiAgICA6IGMoX19zKSwgY29tcChfX3gpCiAgICB7IG1ha2VfaGVhcChjLmJl Z2luKCksIGMuZW5kKCksIGNvbXApOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv cj4KICBwcmlvcml0eV9xdWV1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9feCA9IF9Db21wYXJl KCksCiAgICAgICAgICAgICAgICAgY29uc3QgX1NlcXVlbmNlJiBfX3MgPSBfU2VxdWVuY2UoKSkK ICA6IGMoX19zKSwgY29tcChfX3gpCiAgewogICAgYy5pbnNlcnQoYy5lbmQoKSwgX19maXJzdCwg X19sYXN0KTsKICAgIG1ha2VfaGVhcChjLmJlZ2luKCksIGMuZW5kKCksIGNvbXApOwogIH0KCiAg Ym9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGMuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXpl KCkgY29uc3QgeyByZXR1cm4gYy5zaXplKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgdG9wKCkgY29u c3QgeyByZXR1cm4gYy5mcm9udCgpOyB9CiAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmIF9f eCkgewogICAgICAgICAgICAgIHsKICAgICAgYy5wdXNoX2JhY2soX194KTsKICAgICAgcHVzaF9o ZWFwKGMuYmVnaW4oKSwgYy5lbmQoKSwgY29tcCk7CiAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICB9CiAgdm9pZCBwb3AoKSB7CiAgICAgICAgICAgICAgewogICAgICBwb3BfaGVh cChjLmJlZ2luKCksIGMuZW5kKCksIGNvbXApOwogICAgICBjLnBvcF9iYWNrKCk7CiAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB9Cn07CgoKCn0KIyA0MSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9xdWV1ZS5oIiAyIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9xdWV1ZSIgMiAzCiMgMjcgIi4uLy4uL2FydHMvbWNvcC9ub3RpZmljYXRpb24u aCIgMgoKbmFtZXNwYWNlIEFydHMgewojIDQxICIuLi8uLi9hcnRzL21jb3Avbm90aWZpY2F0aW9u LmgiCnN0cnVjdCBOb3RpZmljYXRpb247CnR5cGVkZWYgdm9pZCAoKk5vdGlmaWNhdGlvbkRlc3Ry b3lGdW5jdGlvbikoY29uc3QgTm90aWZpY2F0aW9uJiBuKTsKCnN0cnVjdCBOb3RpZmljYXRpb24g ewogICAgICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNsaWVudCAqcmVjZWl2ZXI7CiAgICAgICAgaW50 IElEOwogICAgICAgIHZvaWQgKmRhdGE7CiAgICAgICAgdm9pZCAqaW50ZXJuYWw7CgogICAgICAg IHZvaWQgc2V0RGVzdHJveShOb3RpZmljYXRpb25EZXN0cm95RnVuY3Rpb24gZGVzdHJveSk7Cn07 CgpjbGFzcyBOb3RpZmljYXRpb25DbGllbnQgewpwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lk IG5vdGlmeShjb25zdCBOb3RpZmljYXRpb24mIHdtKTsKfTsKCmNsYXNzIE5vdGlmaWNhdGlvbk1h bmFnZXJQcml2YXRlOwpjbGFzcyBOb3RpZmljYXRpb25NYW5hZ2VyIHsKcHJpdmF0ZToKICAgICAg ICBOb3RpZmljYXRpb25NYW5hZ2VyUHJpdmF0ZSAqZDsKcHJvdGVjdGVkOgogICAgICAgIHN0ZDo6 cXVldWU8Tm90aWZpY2F0aW9uPiB0b2RvOwogICAgICAgIHN0YXRpYyBOb3RpZmljYXRpb25NYW5h Z2VyICppbnN0YW5jZTsKCnB1YmxpYzoKICAgICAgICBOb3RpZmljYXRpb25NYW5hZ2VyKCk7CiAg ICAgICAgfk5vdGlmaWNhdGlvbk1hbmFnZXIoKTsKCiAgICAgICAgc3RhdGljIGlubGluZSBOb3Rp ZmljYXRpb25NYW5hZ2VyICp0aGUoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBp bnN0YW5jZTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgc2VuZChOb3RpZmljYXRpb24g d20pCiAgICAgICAgewogICAgICAgICAgICAgICAgdG9kby5wdXNoKHdtKTsKICAgICAgICB9CiAg ICAgICAgaW5saW5lIGJvb2wgcGVuZGluZygpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0 dXJuICF0b2RvLmVtcHR5KCk7CiAgICAgICAgfQogICAgICAgIGJvb2wgcnVuKCk7CiAgICAgICAg dm9pZCByZW1vdmVDbGllbnQoTm90aWZpY2F0aW9uQ2xpZW50ICpjbGllbnQpOwoKfTsKCn07CiMg MzMgIi4uLy4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9kZXF1ZSIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZGVx dWUiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2RlcXVlLmgiIDEg MwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2RlcXVlLmgiIDMKCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0 ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAog IF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9p ZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJv d19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5f ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVu dChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df dW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3Nf ZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfZGVxdWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9kZXF1ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2FsbG9jLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2RlcXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29u c3RydWN0LmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Rl cXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0 aWFsaXplZC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9k ZXF1ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2RlcXVl LmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2RlcXVlLmgi IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAx IDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAyIDMK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw ZXMuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUu aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9i YXNlX2Z1bmNzLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2RlcXVlLmgiIDIgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Rl cXVlLmgiIDIgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2RlcXVlIiAyIDMKIyAz NSAiLi4vLi4vYXJ0cy9tY29wL2Rpc3BhdGNoZXIuaCIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvc3RhY2siIDEgMwojIDM2ICIuLi8uLi9hcnRzL21jb3AvZGlzcGF0Y2hlci5oIiAy CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My92ZWN0b3IiIDEgMwojIDM3ICIuLi8uLi9h cnRzL21jb3AvZGlzcGF0Y2hlci5oIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9s aXN0IiAxIDMKIyAzOCAiLi4vLi4vYXJ0cy9tY29wL2Rpc3BhdGNoZXIuaCIgMgojIDQ2ICIuLi8u Li9hcnRzL21jb3AvZGlzcGF0Y2hlci5oIgpuYW1lc3BhY2UgQXJ0cyB7CgpjbGFzcyBPYmplY3RS ZWZlcmVuY2U7CmNsYXNzIEZsb3dTeXN0ZW1faW1wbDsKY2xhc3MgR2xvYmFsQ29tbTsKY2xhc3Mg SW50ZXJmYWNlUmVwbzsKY2xhc3MgT2JqZWN0TWFuYWdlcjsKY2xhc3MgT2JqZWN0X3NrZWw7CmNs YXNzIFJlZmVyZW5jZUNsZWFuOwpjbGFzcyBEZWxheWVkUmV0dXJuOwoKZXh0ZXJuICJDIiB7CiAg dHlwZWRlZiB2b2lkICgqbWNvcF9zaWdoYW5kbGVyKShpbnQpOwp9CgpjbGFzcyBEaXNwYXRjaGVy IHsKcHJpdmF0ZToKICAgICAgICBjbGFzcyBEaXNwYXRjaGVyUHJpdmF0ZSAqZDsKCnByb3RlY3Rl ZDoKICAgICAgICBzdGF0aWMgRGlzcGF0Y2hlciAqX2luc3RhbmNlOwoKICAgICAgICBQb29sPEJ1 ZmZlcj4gcmVxdWVzdFJlc3VsdFBvb2w7CiAgICAgICAgUG9vbDxPYmplY3Rfc2tlbD4gb2JqZWN0 UG9vbDsKICAgICAgICBzdGQ6Omxpc3Q8Q29ubmVjdGlvbiAqPiBjb25uZWN0aW9uczsKCiAgICAg ICAgc3RkOjpzdHJpbmcgc2VydmVySUQ7CiAgICAgICAgdm9pZCBnZW5lcmF0ZVNlcnZlcklEKCk7 CgogICAgICAgIGJvb2wgZGVsZXRlSU9NYW5hZ2VyT25FeGl0OwoKICAgICAgICBUQ1BTZXJ2ZXIg KnRjcFNlcnZlcjsKICAgICAgICBVbml4U2VydmVyICp1bml4U2VydmVyOwogICAgICAgIElPTWFu YWdlciAqX2lvTWFuYWdlcjsKICAgICAgICBGbG93U3lzdGVtX2ltcGwgKl9mbG93U3lzdGVtOwog ICAgICAgIE9iamVjdE1hbmFnZXIgKm9iamVjdE1hbmFnZXI7CiAgICAgICAgUmVmZXJlbmNlQ2xl YW4gKnJlZmVyZW5jZUNsZWFuOwogICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIgKm5vdGlmaWNh dGlvbk1hbmFnZXI7CgogICAgICAgIG1jb3Bfc2lnaGFuZGxlciBvcmlnX3NpZ3BpcGU7CiAgICAg ICAgQ29ubmVjdGlvbiAqX2FjdGl2ZUNvbm5lY3Rpb247CgoKCgoKCiAgICAgICAgQ29ubmVjdGlv biAqY29ubmVjdFVybChjb25zdCBzdGQ6OnN0cmluZyYgdXJsKTsKCnB1YmxpYzoKICAgICAgICBl bnVtIFN0YXJ0U2VydmVyIHsKICAgICAgICAgICAgICAgIG5vU2VydmVyID0gMCwKICAgICAgICAg ICAgICAgIHN0YXJ0VW5peFNlcnZlciA9IDEsCiAgICAgICAgICAgICAgICBzdGFydFRDUFNlcnZl ciA9IDIsCiAgICAgICAgICAgICAgICBub0F1dGhlbnRpY2F0aW9uID0gNAogICAgICAgIH07Cgog ICAgICAgIERpc3BhdGNoZXIoSU9NYW5hZ2VyICppb01hbmFnZXIgPSAwLCBTdGFydFNlcnZlciBz dGFydFNlcnZlciA9IG5vU2VydmVyKTsKICAgICAgICB+RGlzcGF0Y2hlcigpOwoKICAgICAgICBz dGF0aWMgRGlzcGF0Y2hlciAqdGhlKCk7CiAgICAgICAgaW5saW5lIElPTWFuYWdlciAqaW9NYW5h Z2VyKCkgeyByZXR1cm4gX2lvTWFuYWdlcjsgfTsKICAgICAgICBJbnRlcmZhY2VSZXBvIGludGVy ZmFjZVJlcG8oKTsKICAgICAgICBGbG93U3lzdGVtX2ltcGwgKmZsb3dTeXN0ZW0oKTsKICAgICAg ICBHbG9iYWxDb21tIGdsb2JhbENvbW0oKTsKICAgICAgICB2b2lkIHNldEZsb3dTeXN0ZW0oRmxv d1N5c3RlbV9pbXBsICpmcyk7CgogICAgICAgIHZvaWQgcmVmaWxsUmVxdWVzdElEcygpOwoKCiAg ICAgICAgQnVmZmVyICp3YWl0Rm9yUmVzdWx0KGxvbmcgcmVxdWVzdElELENvbm5lY3Rpb24gKmNv bm5lY3Rpb24pOwoKCiAgICAgICAgQnVmZmVyICpjcmVhdGVSZXF1ZXN0KGxvbmcmIHJlcXVlc3RJ RCwgbG9uZyBvYmplY3RJRCwgbG9uZyBtZXRob2RJRCk7CiAgICAgICAgQnVmZmVyICpjcmVhdGVP bmV3YXlSZXF1ZXN0KGxvbmcgb2JqZWN0SUQsIGxvbmcgbWV0aG9kSUQpOwoKCiAgICAgICAgdm9p ZCBoYW5kbGUoQ29ubmVjdGlvbiAqY29ubiwgQnVmZmVyICpidWZmZXIsIGxvbmcgbWVzc2FnZVR5 cGUpOwoKCgoKICAgICAgICB2b2lkIGhhbmRsZUNvcnJ1cHQoQ29ubmVjdGlvbiAqY29ubik7CgoK CgoKCgogICAgICAgIGxvbmcgYWRkT2JqZWN0KE9iamVjdF9za2VsICpvYmplY3QpOwoKCgoKCgoK ICAgICAgICB2b2lkIHJlbW92ZU9iamVjdChsb25nIG9iamVjdElEKTsKCgoKCgogICAgICAgIHZv aWQgKmNvbm5lY3RPYmplY3RMb2NhbChPYmplY3RSZWZlcmVuY2UmIHJlZmVyZW5jZSwgc3RkOjpz dHJpbmcgaW50ZXJmYWNlKTsKCgoKCgoKCiAgICAgICAgQ29ubmVjdGlvbiAqY29ubmVjdE9iamVj dFJlbW90ZShPYmplY3RSZWZlcmVuY2UmIHJlZmVyZW5jZSk7CgoKCgoKICAgICAgICBzdGQ6OnN0 cmluZyBvYmplY3RUb1N0cmluZyhsb25nIG9iamVjdElEKTsKCgoKCgogICAgICAgIGJvb2wgc3Ry aW5nVG9PYmplY3RSZWZlcmVuY2UoT2JqZWN0UmVmZXJlbmNlJiByLCBzdGQ6OnN0cmluZyBzKTsK CgoKCiAgICAgICAgdm9pZCBydW4oKTsKCgoKCgogICAgICAgIHZvaWQgdGVybWluYXRlKCk7CgoK CgoKICAgICAgICB2b2lkIGluaXRpYXRlQ29ubmVjdGlvbihDb25uZWN0aW9uICpjb25uZWN0aW9u KTsKCgoKCgoKICAgICAgICB2b2lkIGhhbmRsZUNvbm5lY3Rpb25DbG9zZShDb25uZWN0aW9uICpj b25uZWN0aW9uKTsKIyAyMTAgIi4uLy4uL2FydHMvbWNvcC9kaXNwYXRjaGVyLmgiCiAgICAgICAg c3RhdGljIHZvaWQgbG9jaygpOwoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKCk7CiMg MjI1ICIuLi8uLi9hcnRzL21jb3AvZGlzcGF0Y2hlci5oIgogICAgICAgIHN0YXRpYyB2b2lkIHdh a2VVcCgpOwoKCgoKCgogICAgICAgIENvbm5lY3Rpb24gKmFjdGl2ZUNvbm5lY3Rpb24oKTsKCgoK CgoKICAgICAgICBDb25uZWN0aW9uICpsb29wYmFja0Nvbm5lY3Rpb24oKTsKCgoKCgoKCiAgICAg ICAgRGVsYXllZFJldHVybiAqZGVsYXlSZXR1cm4oKTsKCgoKCgogICAgICAgIHZvaWQgcmVsb2Fk VHJhZGVyRGF0YSgpOwp9Owp9OwojIDI5ICIuLi8uLi9hcnRzL21jb3AvY29tbW9uLmgiIDIKIyAx ICIuLi8uLi9hcnRzL21jb3Avb2JqZWN0LmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9tY29wL29iamVj dC5oIgojIDEgIi4uLy4uL2FydHMvbWNvcC9idWZmZXIuaCIgMQojIDI3ICIuLi8uLi9hcnRzL21j b3Avb2JqZWN0LmgiIDIKIyAxICIuLi8uLi9hcnRzL21jb3AvY29ubmVjdGlvbi5oIiAxCiMgMjgg Ii4uLy4uL2FydHMvbWNvcC9vYmplY3QuaCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9ub3RpZmlj YXRpb24uaCIgMQojIDI5ICIuLi8uLi9hcnRzL21jb3Avb2JqZWN0LmgiIDIKCiMgMSAiL3Vzci9p bmNsdWRlL2Fzc2VydC5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0Lmgi IDIgMwojIDMxICIuLi8uLi9hcnRzL21jb3Avb2JqZWN0LmgiIDIKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL21hcCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbWFw IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMSAzCiMg MzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWFwLmgiIDMKCgojIDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdHJlZS5oIiAxIDMKIyA1NiAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDU3ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA1OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF90cmVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF90cmVlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgp0eXBlZGVmIGJvb2wgX1JiX3RyZWVf Q29sb3JfdHlwZTsKY29uc3QgX1JiX3RyZWVfQ29sb3JfdHlwZSBfU19yYl90cmVlX3JlZCA9IGZh bHNlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3JiX3RyZWVfYmxhY2sgPSB0cnVlOwoK c3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQp7CiAgdHlwZWRlZiBfUmJfdHJlZV9Db2xvcl90eXBl IF9Db2xvcl90eXBlOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7Cgog IF9Db2xvcl90eXBlIF9NX2NvbG9yOwogIF9CYXNlX3B0ciBfTV9wYXJlbnQ7CiAgX0Jhc2VfcHRy IF9NX2xlZnQ7CiAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoKICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21p bmltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAgICB3aGlsZSAoX194LT5fTV9sZWZ0ICE9IDApIF9f eCA9IF9feC0+X01fbGVmdDsKICAgIHJldHVybiBfX3g7CiAgfQoKICBzdGF0aWMgX0Jhc2VfcHRy IF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAgICB3aGlsZSAoX194LT5fTV9yaWdodCAh PSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0OwogICAgcmV0dXJuIF9feDsKICB9Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1ZhbHVlPgpzdHJ1Y3QgX1JiX3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9u b2RlX2Jhc2UKewogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+KiBfTGlua190eXBlOwog IF9WYWx1ZSBfTV92YWx1ZV9maWVsZDsKfTsKCgpzdHJ1Y3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRv cgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9CYXNlX3B0ciBfQmFzZV9wdHI7CiAg dHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0 eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgX0Jhc2VfcHRyIF9NX25vZGU7Cgog IHZvaWQgX01faW5jcmVtZW50KCkKICB7CiAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gMCkg ewogICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmlnaHQ7CiAgICAgIHdoaWxlIChfTV9ub2Rl LT5fTV9sZWZ0ICE9IDApCiAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICB9 CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAg ICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9yaWdodCkgewogICAgICAgIF9NX25vZGUgPSBf X3k7CiAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgaWYgKF9NX25v ZGUtPl9NX3JpZ2h0ICE9IF9feSkKICAgICAgICBfTV9ub2RlID0gX195OwogICAgfQogIH0KCiAg dm9pZCBfTV9kZWNyZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5fTV9jb2xvciA9PSBfU19y Yl90cmVlX3JlZCAmJgogICAgICAgIF9NX25vZGUtPl9NX3BhcmVudC0+X01fcGFyZW50ID09IF9N X25vZGUpCiAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgIGVsc2UgaWYgKF9N X25vZGUtPl9NX2xlZnQgIT0gMCkgewogICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01f bGVmdDsKICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQgIT0gMCkKICAgICAgICBfX3kgPSBfX3kt Pl9NX3JpZ2h0OwogICAgICBfTV9ub2RlID0gX195OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9C YXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7CiAgICAgIHdoaWxlIChfTV9ub2RlID09 IF9feS0+X01fbGVmdCkgewogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgX195ID0gX195 LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgX01fbm9kZSA9IF9feTsKICAgIH0KICB9Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfUmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX1Ji X3RyZWVfaXRlcmF0b3IgOiBwdWJsaWMgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRl ZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYg X1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUm LCBfVmFsdWUqPgogICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFs dWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+CiAgICBjb25zdF9pdGVyYXRvcjsKICB0 eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1JlZiwgX1B0cj4KICAgIF9TZWxmOwog IHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+KiBfTGlua190eXBlOwoKICBfUmJfdHJlZV9p dGVyYXRvcigpIHt9CiAgX1JiX3RyZWVfaXRlcmF0b3IoX0xpbmtfdHlwZSBfX3gpIHsgX01fbm9k ZSA9IF9feDsgfQogIF9SYl90cmVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSB7IF9N X25vZGUgPSBfX2l0Ll9NX25vZGU7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsg cmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgcG9pbnRlciBv cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9w ZXJhdG9yKysoKSB7IF9NX2luY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVy YXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIF9NX2luY3JlbWVudCgp OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7IF9NX2RlY3Jl bWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1Nl bGYgX190bXAgPSAqdGhpczsKICAgIF9NX2RlY3JlbWVudCgpOwogICAgcmV0dXJuIF9fdG1wOwog IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+Cmlu bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVm LCBfUHRyPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJh dG9yPF9WYWx1ZSwgX1JlZiwgX1B0cj4mIF9feSkgewogIHJldHVybiBfX3guX01fbm9kZSA9PSBf X3kuX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZT4KaW5saW5lIGJvb2wgb3BlcmF0 b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0 IF9WYWx1ZSo+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRl cmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9u b2RlID09IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9v bCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1ZhbHVlJiwgX1Zh bHVlKj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRv cjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4g X194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNs YXNzIF9SZWYsIGNsYXNzIF9QdHI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1JiX3Ry ZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX194LAogICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1JlZiwgX1B0cj4mIF9feSkgewog IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9W YWx1ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFs dWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+JiBfX3gsCiAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYg X195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJh dG9yPF9WYWx1ZSwgX1ZhbHVlJiwgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9W YWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7Cn0KCmlu bGluZSB2b2lkCl9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBf UmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9 IF9feC0+X01fcmlnaHQ7CiAgX194LT5fTV9yaWdodCA9IF9feS0+X01fbGVmdDsKICBpZiAoX195 LT5fTV9sZWZ0ICE9MCkKICAgIF9feS0+X01fbGVmdC0+X01fcGFyZW50ID0gX194OwogIF9feS0+ X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19y b290ID0gX195OwogIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAg IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogIGVsc2UKICAgIF9feC0+X01fcGFyZW50 LT5fTV9yaWdodCA9IF9feTsKICBfX3ktPl9NX2xlZnQgPSBfX3g7CiAgX194LT5fTV9wYXJlbnQg PSBfX3k7Cn0KCmlubGluZSB2b2lkCl9SYl90cmVlX3JvdGF0ZV9yaWdodChfUmJfdHJlZV9ub2Rl X2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQp7CiAgX1JiX3RyZWVfbm9k ZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAgX194LT5fTV9sZWZ0ID0gX195LT5fTV9yaWdo dDsKICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAgX195LT5fTV9yaWdodC0+X01fcGFyZW50 ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogIGlmIChfX3ggPT0g X19yb290KQogICAgX19yb290ID0gX195OwogIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVu dC0+X01fcmlnaHQpCiAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgZWxzZQog ICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgX195LT5fTV9yaWdodCA9IF9feDsK ICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5saW5lIHZvaWQKX1JiX3RyZWVfcmViYWxhbmNl KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsK ICBfX3gtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgd2hpbGUgKF9feCAhPSBfX3Jvb3Qg JiYgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICBpZiAo X194LT5fTV9wYXJlbnQgPT0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdCkgewog ICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQt Pl9NX3JpZ2h0OwogICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9y ZWQpIHsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNr OwogICAgICAgIF9feS0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+ X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAg X194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgfQogICAgICBlbHNlIHsKICAg ICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkgewogICAgICAgICAgX194 ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9f cm9vdCk7CiAgICAgICAgfQogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3Ji X3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3Ig PSBfU19yYl90cmVlX3JlZDsKICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9w YXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAg IF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01f bGVmdDsKICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7 CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAg ICAgICBfX3ktPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3Bh cmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9feCA9 IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAg aWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkgewogICAgICAgICAgX194ID0gX194 LT5fTV9wYXJlbnQ7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LCBfX3Jvb3Qp OwogICAgICAgIH0KICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVl X2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1Nf cmJfdHJlZV9yZWQ7CiAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194LT5fTV9wYXJlbnQt Pl9NX3BhcmVudCwgX19yb290KTsKICAgICAgfQogICAgfQogIH0KICBfX3Jvb3QtPl9NX2NvbG9y ID0gX1NfcmJfdHJlZV9ibGFjazsKfQoKaW5saW5lIF9SYl90cmVlX25vZGVfYmFzZSoKX1JiX3Ry ZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3JpZ2h0bW9z dCkKewogIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX196OwogIF9SYl90cmVlX25vZGVfYmFz ZSogX194ID0gMDsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feF9wYXJlbnQgPSAwOwogIGlmIChf X3ktPl9NX2xlZnQgPT0gMCkKICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgZWxzZQogICAgaWYg KF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAgX194ID0gX195LT5fTV9sZWZ0OwogICAgZWxzZSB7 CiAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAgICAgIHdoaWxlIChfX3ktPl9NX2xlZnQgIT0g MCkKICAgICAgICBfX3kgPSBfX3ktPl9NX2xlZnQ7CiAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7 CiAgICB9CiAgaWYgKF9feSAhPSBfX3opIHsKICAgIF9fei0+X01fbGVmdC0+X01fcGFyZW50ID0g X195OwogICAgX195LT5fTV9sZWZ0ID0gX196LT5fTV9sZWZ0OwogICAgaWYgKF9feSAhPSBfX3ot Pl9NX3JpZ2h0KSB7CiAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgaWYg KF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgX195LT5fTV9wYXJl bnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgIF9feS0+X01fcmlnaHQgPSBfX3otPl9NX3JpZ2h0Owog ICAgICBfX3otPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICB9CiAgICBlbHNlCiAgICAg IF9feF9wYXJlbnQgPSBfX3k7CiAgICBpZiAoX19yb290ID09IF9feikKICAgICAgX19yb290ID0g X195OwogICAgZWxzZSBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICBf X3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAgIGVsc2UKICAgICAgX196LT5fTV9wYXJl bnQtPl9NX3JpZ2h0ID0gX195OwogICAgX195LT5fTV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsK ICAgIHN0ZDo6c3dhcChfX3ktPl9NX2NvbG9yLCBfX3otPl9NX2NvbG9yKTsKICAgIF9feSA9IF9f ejsKCiAgfQogIGVsc2UgewogICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgaWYg KF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgIGlmIChfX3Jvb3QgPT0g X196KQogICAgICBfX3Jvb3QgPSBfX3g7CiAgICBlbHNlCiAgICAgIGlmIChfX3otPl9NX3BhcmVu dC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7 CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7CiAgICBp ZiAoX19sZWZ0bW9zdCA9PSBfX3opCiAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDApCiAgICAg ICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgZWxzZQogICAgICAgIF9fbGVm dG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsKICAgIGlmIChfX3Jp Z2h0bW9zdCA9PSBfX3opCiAgICAgIGlmIChfX3otPl9NX2xlZnQgPT0gMCkKICAgICAgICBfX3Jp Z2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgZWxzZQogICAgICAgIF9fcmlnaHRtb3N0 ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgfQogIGlmIChfX3ktPl9N X2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7CiAgICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiAo X194ID09IDAgfHwgX194LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSkKICAgICAgaWYg KF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNl KiBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9 PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVf YmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwog ICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAg ICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgIH0KICAgICAgICBpZiAoKF9f dy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09 IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwK ICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2sp KSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBf X3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3Bh cmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQgPT0gMCB8 fAogICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxh Y2spIHsKICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xv ciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90 cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9fdywgX19yb290KTsK ICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICB9CiAgICAg ICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29sb3I7CiAgICAgICAgICBfX3hf cGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBpZiAoX193LT5f TV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAg ICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAg IGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jh c2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgaWYgKF9fdy0+X01fY29sb3Ig PT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVl X2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsK ICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAg ICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICB9CiAgICAgICAgaWYgKChf X3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9y ID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAgICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8 fAogICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNr KSkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAg X194ID0gX194X3BhcmVudDsKICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9w YXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQgPT0gMCB8 fAogICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFj aykgewogICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29s b3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJf dHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19yb290KTsK ICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgIH0KICAgICAg ICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9feF9w YXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ctPl9N X2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAg ICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBi cmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIGlmIChfX3gpIF9feC0+X01fY29sb3IgPSBfU19y Yl90cmVlX2JsYWNrOwogIH0KICByZXR1cm4gX195Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2MsIGJvb2wgX1NfaW5zdGFuY2VsZXNzPgpjbGFzcyBfUmJfdHJlZV9h bGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAs IF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBl IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICBf UmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX25v ZGVfYWxsb2NhdG9yKF9fYSksIF9NX2hlYWRlcigwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVuYW1l IF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlw ZQogICAgICAgICAgIF9NX25vZGVfYWxsb2NhdG9yOwogIF9SYl90cmVlX25vZGU8X1RwPiogX01f aGVhZGVyOwoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkKICAgIHsgcmV0dXJu IF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfUmJf dHJlZV9ub2RlPF9UcD4qIF9fcCkKICAgIHsgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShf X3AsIDEpOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBf UmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVm IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxv Y2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1 cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9j YXRvcl90eXBlJikgOiBfTV9oZWFkZXIoMCkge30KCnByb3RlY3RlZDoKICBfUmJfdHJlZV9ub2Rl PF9UcD4qIF9NX2hlYWRlcjsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90 cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBl OwoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkKICAgIHsgcmV0dXJuIF9BbGxv Y190eXBlOjphbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxf VHA+KiBfX3ApCiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9SYl90cmVlX2Jhc2UKICA6 IHB1YmxpYyBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVz cz4KewogIHR5cGVkZWYgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3Rh bmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9j YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfUmJfdHJlZV9iYXNlKGNvbnN0IGFsbG9jYXRv cl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSkgeyBfTV9oZWFkZXIgPSBfTV9nZXRfbm9kZSgp OyB9CiAgfl9SYl90cmVlX2Jhc2UoKSB7IF9NX3B1dF9ub2RlKF9NX2hlYWRlcik7IH0KCn07CgoK dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIGNs YXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9WYWx1ZT4g PgpjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3RlZCBfUmJfdHJlZV9iYXNlPF9WYWx1ZSwgX0FsbG9j PiB7CiAgdHlwZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWx1ZSwgX0FsbG9jPiBfQmFzZTsKcHJvdGVj dGVkOgogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CiAgdHlwZWRlZiBf UmJfdHJlZV9ub2RlPF9WYWx1ZT4gX1JiX3RyZWVfbm9kZTsKICB0eXBlZGVmIF9SYl90cmVlX0Nv bG9yX3R5cGUgX0NvbG9yX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAg dHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7 CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFs dWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVm ZXJlbmNlOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZSogX0xpbmtfdHlwZTsKICB0eXBlZGVmIHNp emVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0 eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBh bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9h bGxvY2F0b3IoKTsgfQoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKICB1 c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2hlYWRlcjsKCnByb3Rl Y3RlZDoKCiAgX0xpbmtfdHlwZSBfTV9jcmVhdGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gp CiAgewogICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgICAgICAg ewogICAgICBjb25zdHJ1Y3QoJl9fdG1wLT5fTV92YWx1ZV9maWVsZCwgX194KTsKICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgcmV0dXJuIF9fdG1wOwogIH0K CiAgX0xpbmtfdHlwZSBfTV9jbG9uZV9ub2RlKF9MaW5rX3R5cGUgX194KQogIHsKICAgIF9MaW5r X3R5cGUgX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgIF9f dG1wLT5fTV9jb2xvciA9IF9feC0+X01fY29sb3I7CiAgICBfX3RtcC0+X01fbGVmdCA9IDA7CiAg ICBfX3RtcC0+X01fcmlnaHQgPSAwOwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgdm9pZCBkZXN0 cm95X25vZGUoX0xpbmtfdHlwZSBfX3ApCiAgewogICAgZGVzdHJveSgmX19wLT5fTV92YWx1ZV9m aWVsZCk7CiAgICBfTV9wdXRfbm9kZShfX3ApOwogIH0KCnByb3RlY3RlZDoKICBzaXplX3R5cGUg X01fbm9kZV9jb3VudDsKICBfQ29tcGFyZSBfTV9rZXlfY29tcGFyZTsKCiAgX0xpbmtfdHlwZSYg X01fcm9vdCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01f cGFyZW50OyB9CiAgX0xpbmtfdHlwZSYgX01fbGVmdG1vc3QoKSBjb25zdAogICAgeyByZXR1cm4g KF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX2xlZnQ7IH0KICBfTGlua190eXBlJiBfTV9yaWdo dG1vc3QoKSBjb25zdAogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3Jp Z2h0OyB9CgogIHN0YXRpYyBfTGlua190eXBlJiBfU19sZWZ0KF9MaW5rX3R5cGUgX194KQogICAg eyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CiAgc3RhdGljIF9MaW5rX3R5 cGUmIF9TX3JpZ2h0KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShf X3gtPl9NX3JpZ2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19wYXJlbnQoX0xpbmtfdHlw ZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQogIHN0 YXRpYyByZWZlcmVuY2UgX1NfdmFsdWUoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBfX3gt Pl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9LZXkmIF9TX2tleShfTGlua190eXBl IF9feCkKICAgIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KICBzdGF0 aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9yKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9D b2xvcl90eXBlJikoX194LT5fTV9jb2xvcik7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX2xl ZnQoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0 KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19yaWdodChfQmFzZV9wdHIgX194KQogICAgeyBy ZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBl JiBfU19wYXJlbnQoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194 LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGljIHJlZmVyZW5jZSBfU192YWx1ZShfQmFzZV9wdHIgX194 KQogICAgeyByZXR1cm4gKChfTGlua190eXBlKV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3Rh dGljIGNvbnN0IF9LZXkmIF9TX2tleShfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gX0tleU9m VmFsdWUoKShfU192YWx1ZShfTGlua190eXBlKF9feCkpKTt9CiAgc3RhdGljIF9Db2xvcl90eXBl JiBfU19jb2xvcihfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX0xp bmtfdHlwZShfX3gpLT5fTV9jb2xvcik7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUgX1NfbWluaW11 bShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlKSBfUmJfdHJlZV9ub2Rl X2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSBfU19tYXhpbXVt KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVf YmFzZTo6X1NfbWF4aW11bShfX3gpOyB9CgpwdWJsaWM6CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVy YXRvcjx2YWx1ZV90eXBlLCByZWZlcmVuY2UsIHBvaW50ZXI+IGl0ZXJhdG9yOwogIHR5cGVkZWYg X1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgY29uc3RfcmVmZXJlbmNlLCBjb25zdF9wb2lu dGVyPgogICAgICAgICAgY29uc3RfaXRlcmF0b3I7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv cjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVy c2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcml2YXRlOgogIGl0ZXJh dG9yIF9NX2luc2VydChfQmFzZV9wdHIgX194LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90 eXBlJiBfX3YpOwogIF9MaW5rX3R5cGUgX01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlw ZSBfX3ApOwogIHZvaWQgX01fZXJhc2UoX0xpbmtfdHlwZSBfX3gpOwoKcHVibGljOgoKICBfUmJf dHJlZSgpCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBf TV9rZXlfY29tcGFyZSgpCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJl ZShjb25zdCBfQ29tcGFyZSYgX19jb21wKQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwg X01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKQogICAgeyBfTV9lbXB0eV9p bml0aWFsaXplKCk7IH0KCiAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX0Jhc2UoX19hKSwgX01fbm9kZV9jb3VudCgwKSwg X01fa2V5X2NvbXBhcmUoX19jb21wKQogICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAg X1JiX3RyZWUoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPiYgX194KQogICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgX01f bm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX194Ll9NX2tleV9jb21wYXJlKQogIHsKICAg IGlmIChfX3guX01fcm9vdCgpID09IDApCiAgICAgIF9NX2VtcHR5X2luaXRpYWxpemUoKTsKICAg IGVsc2UgewogICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAg IF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAgX01f bGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgX01fcmlnaHRtb3N0KCkg PSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICB9CiAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9N X25vZGVfY291bnQ7CiAgfQogIH5fUmJfdHJlZSgpIHsgY2xlYXIoKTsgfQogIF9SYl90cmVlPF9L ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0 IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCk7 Cgpwcml2YXRlOgogIHZvaWQgX01fZW1wdHlfaW5pdGlhbGl6ZSgpIHsKICAgIF9TX2NvbG9yKF9N X2hlYWRlcikgPSBfU19yYl90cmVlX3JlZDsKCiAgICBfTV9yb290KCkgPSAwOwogICAgX01fbGVm dG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogIH0K CnB1YmxpYzoKCiAgX0NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29t cGFyZTsgfQogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGNv bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGl0 ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2hlYWRlcjsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgp IGNvbnN0IHsgcmV0dXJuIF9NX2hlYWRlcjsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkg eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJh dG9yIHJiZWdpbigpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVu ZCgpKTsKICB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVy YXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsK ICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogIH0KICBib29sIGVt cHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwOyB9CiAgc2l6ZV90eXBlIHNp emUoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2NvdW50OyB9CiAgc2l6ZV90eXBlIG1heF9zaXpl KCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICB2b2lkIHN3YXAoX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX190KSB7CiAgICBzdGQ6 OnN3YXAoX01faGVhZGVyLCBfX3QuX01faGVhZGVyKTsKICAgIHN0ZDo6c3dhcChfTV9ub2RlX2Nv dW50LCBfX3QuX01fbm9kZV9jb3VudCk7CiAgICBzdGQ6OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9f dC5fTV9rZXlfY29tcGFyZSk7CiAgfQoKcHVibGljOgoKICBwYWlyPGl0ZXJhdG9yLGJvb2w+IGlu c2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKICBpdGVyYXRvciBpbnNlcnRfZXF1 YWwoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgaXRlcmF0b3IgaW5zZXJ0X3VuaXF1ZShpdGVy YXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJhdG9yIGluc2Vy dF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfdW5pcXVlKF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CiAgdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19w b3NpdGlvbik7CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIHZvaWQg ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKICB2b2lkIGVyYXNlKGNv bnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBrZXlfdHlwZSogX19sYXN0KTsKICB2b2lkIGNs ZWFyKCkgewogICAgaWYgKF9NX25vZGVfY291bnQgIT0gMCkgewogICAgICBfTV9lcmFzZShfTV9y b290KCkpOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICBfTV9yb290KCkg PSAwOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgX01fbm9kZV9jb3Vu dCA9IDA7CiAgICB9CiAgfQoKcHVibGljOgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBl JiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7 CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9y IGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGxvd2Vy X2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9yIHVwcGVyX2JvdW5k KGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0 IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3Jh bmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0 ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCnB1YmxpYzoK CiAgYm9vbCBfX3JiX3ZlcmlmeSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs YXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwg Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlPF9LZXks X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICBjb25z dCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp CnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9f eC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9L ZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29t cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg Y29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg X195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3gu ZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3ku ZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5 T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi b29sCm9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBf X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW YWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s Cm9wZXJhdG9yPihjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5 T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAg ICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9y PD0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j PiYgX194LAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAg ICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShj b25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsCiAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQKc3dhcChfUmJfdHJlZTxf S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgX1JiX3Ry ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgX194 LnN3YXAoX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNz IF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KX1Ji X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6b3BlcmF0b3I9KGNv bnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9f eCkKewogIGlmICh0aGlzICE9ICZfX3gpIHsKCiAgICBjbGVhcigpOwogICAgX01fbm9kZV9jb3Vu dCA9IDA7CiAgICBfTV9rZXlfY29tcGFyZSA9IF9feC5fTV9rZXlfY29tcGFyZTsKICAgIGlmIChf X3guX01fcm9vdCgpID09IDApIHsKICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgX01fbGVmdG1v c3QoKSA9IF9NX2hlYWRlcjsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICB9 CiAgICBlbHNlIHsKICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9o ZWFkZXIpOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAg ICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgX01fbm9kZV9j b3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAgfQogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tl eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01faW5zZXJ0KF9C YXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195XywgY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlu a190eXBlIF9feCA9IChfTGlua190eXBlKSBfX3hfOwogIF9MaW5rX3R5cGUgX195ID0gKF9MaW5r X3R5cGUpIF9feV87CiAgX0xpbmtfdHlwZSBfX3o7CgogIGlmIChfX3kgPT0gX01faGVhZGVyIHx8 IF9feCAhPSAwIHx8CiAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nf a2V5KF9feSkpKSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfbGVmdChf X3kpID0gX196OwoKICAgIGlmIChfX3kgPT0gX01faGVhZGVyKSB7CiAgICAgIF9NX3Jvb3QoKSA9 IF9fejsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgICB9CiAgICBlbHNlIGlmIChfX3kg PT0gX01fbGVmdG1vc3QoKSkKICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsKICB9CiAgZWxzZSB7 CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfcmlnaHQoX195KSA9IF9fejsK ICAgIGlmIChfX3kgPT0gX01fcmlnaHRtb3N0KCkpCiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196 OwogIH0KICBfU19wYXJlbnQoX196KSA9IF9feTsKICBfU19sZWZ0KF9feikgPSAwOwogIF9TX3Jp Z2h0KF9feikgPSAwOwogIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01fcGFy ZW50KTsKICArK19NX25vZGVfY291bnQ7CiAgcmV0dXJuIGl0ZXJhdG9yKF9feik7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAg ICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tl eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGNv bnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtf dHlwZSBfX3ggPSBfTV9yb290KCk7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBfX3kgPSBfX3g7 CiAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gp KSA/CiAgICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgfQogIHJldHVy biBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh c3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBj bGFzcyBfQWxsb2M+CnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgYm9vbD4KX1JiX3RyZWU8X0tleSxf VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShjb25z dCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5 cGUgX194ID0gX01fcm9vdCgpOwogIGJvb2wgX19jb21wID0gdHJ1ZTsKICB3aGlsZSAoX194ICE9 IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9fY29tcCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZh bHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAgX194ID0gX19jb21wID8gX1NfbGVmdChfX3gp IDogX1NfcmlnaHQoX194KTsKICB9CiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICBp ZiAoX19jb21wKQogICAgaWYgKF9faiA9PSBiZWdpbigpKQogICAgICByZXR1cm4gcGFpcjxpdGVy YXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgZWxzZQogICAg ICAtLV9fajsKICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9m VmFsdWUoKShfX3YpKSkKICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChf X3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX19qLCBm YWxzZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9m VmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBf UmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJh dG9yCl9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPgog IDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsK ICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkgewogICAgaWYg KHNpemUoKSA+IDAgJiYKICAgICAgIF9NX2tleV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9N X25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9z aXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgIGVsc2UKICAgICAg cmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICB9IGVsc2UgaWYgKF9fcG9zaXRpb24u X01fbm9kZSA9PSBfTV9oZWFkZXIpIHsKICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX01f cmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICByZXR1cm4gX01faW5zZXJ0 KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3Vu aXF1ZShfX3YpLmZpcnN0OwogIH0gZWxzZSB7CiAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9z aXRpb247CiAgICAtLV9fYmVmb3JlOwogICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2Jl Zm9yZS5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKQogICAgICAgICYmIF9NX2tleV9jb21w YXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKSB7CiAg ICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVybiBf TV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKICAgICAgZWxzZQogICAgICAgIHJl dHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9f dik7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAg fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9mVmFsdWUs CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJl ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3Ry ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omluc2VydF9lcXVh bChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlv bi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkgewogICAgaWYgKHNpemUoKSA+IDAgJiYK ICAgICAgICAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlP ZlZhbHVlKCkoX192KSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2Rl LCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0 X2VxdWFsKF9fdik7CiAgfSBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVy KSB7CiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9N X3JpZ2h0bW9zdCgpKSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCks IF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9IGVsc2Ug ewogICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwogICAgLS1fX2JlZm9yZTsKICAg IGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19iZWZvcmUu X01fbm9kZSkpCiAgICAgICAgJiYgIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9N X25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9y ZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01f bm9kZSwgX192KTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlv bi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgfSBlbHNlCiAgICAgIHJl dHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz cyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ21wLCBjbGFzcyBfQWxsb2M+CiAgdGVtcGxhdGU8 Y2xhc3MgX0lJPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPgogIDo6 aW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KQp7CiAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNs YXNzIF9BbGxvYz4KICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFs LF9Lb1YsX0NtcCxfQWxsb2M+CiAgOjppbnNlcnRfdW5pcXVlKF9JSSBfX2ZpcnN0LCBfSUkgX19s YXN0KSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0 X3VuaXF1ZSgqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs IGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv Yz4KaW5saW5lIHZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKewogIF9MaW5rX3R5cGUgX195 ID0KICAgIChfTGlua190eXBlKSBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9zaXRp b24uX01fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9NX2hlYWRlci0+X01fcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX01faGVhZGVyLT5fTV9sZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9yaWdodCk7CiAgZGVzdHJveV9ub2Rl KF9feSk7CiAgLS1fTV9ub2RlX2NvdW50Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg X1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFz cyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz46OnNpemVfdHlwZQpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf Q29tcGFyZSxfQWxsb2M+OjplcmFzZShjb25zdCBfS2V5JiBfX3gpCnsKICBwYWlyPGl0ZXJhdG9y LGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShfX3gpOwogIHNpemVfdHlwZSBfX24gPSAwOwog IGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCwgX19uKTsKICBlcmFzZShfX3AuZmlyc3Qs IF9fcC5zZWNvbmQpOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz cyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFt ZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlw ZQpfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9jb3B5KF9M aW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCkKewoKICBfTGlua190eXBlIF9fdG9wID0gX01f Y2xvbmVfbm9kZShfX3gpOwogIF9fdG9wLT5fTV9wYXJlbnQgPSBfX3A7CgogICAgICAgICAgICB7 CiAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgX190b3AtPl9NX3JpZ2h0ID0gX01fY29weShf U19yaWdodChfX3gpLCBfX3RvcCk7CiAgICBfX3AgPSBfX3RvcDsKICAgIF9feCA9IF9TX2xlZnQo X194KTsKCiAgICB3aGlsZSAoX194ICE9IDApIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9j bG9uZV9ub2RlKF9feCk7CiAgICAgIF9fcC0+X01fbGVmdCA9IF9feTsKICAgICAgX195LT5fTV9w YXJlbnQgPSBfX3A7CiAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICAgIF9feS0+X01fcmln aHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9feSk7CiAgICAgIF9fcCA9IF9feTsKICAgICAg X194ID0gX1NfbGVmdChfX3gpOwogICAgfQogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCiAgcmV0dXJuIF9fdG9wOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf QWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs bG9jPgogIDo6X01fZXJhc2UoX0xpbmtfdHlwZSBfX3gpCnsKCiAgd2hpbGUgKF9feCAhPSAwKSB7 CiAgICBfTV9lcmFzZShfU19yaWdodChfX3gpKTsKICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVm dChfX3gpOwogICAgZGVzdHJveV9ub2RlKF9feCk7CiAgICBfX3ggPSBfX3k7CiAgfQp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAg ICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFs dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0b3IgX19maXJz dCwgaXRlcmF0b3IgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3Qg PT0gZW5kKCkpCiAgICBjbGVhcigpOwogIGVsc2UKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz dCkgZXJhc2UoX19maXJzdCsrKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1 ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs bG9jPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz4KICA6OmVyYXNlKGNvbnN0IF9LZXkqIF9fZmlyc3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkKewog IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJhc2UoKl9fZmlyc3QrKyk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFs dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxf VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2sp CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jv b3QoKTsKCiAgd2hpbGUgKF9feCAhPSAwKQogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXko X194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNl CiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9f eSk7CiAgcmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXko X19qLl9NX25vZGUpKSkgPwogICAgIGVuZCgpIDogX19qOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl eSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21w YXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYgX19rKSBjb25z dAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9y b290KCk7CgogIHdoaWxlIChfX3ggIT0gMCkgewogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19r ZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBl bHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIF9faiA9 IGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgcmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2Nv bXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwogICAgZW5kKCkgOiBfX2o7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tl eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCl9SYl90cmVl PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmNvdW50KGNvbnN0 IF9LZXkmIF9faykgY29uc3QKewogIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9y PiBfX3AgPSBlcXVhbF9yYW5nZShfX2spOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNl KF9fcC5maXJzdCwgX19wLnNlY29uZCwgX19uKTsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNs YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1Zh bHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omxvd2VyX2JvdW5kKGNvbnN0IF9L ZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194 ID0gX01fcm9vdCgpOwoKICB3aGlsZSAoX194ICE9IDApCiAgICBpZiAoIV9NX2tleV9jb21wYXJl KF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsK ICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgcmV0dXJuIGl0ZXJhdG9yKF9f eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZh bHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1Ji X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRl cmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgog IDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kg PSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3gg IT0gMCkKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9f eSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdo dChfX3gpOwoKICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBf Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5 T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBf X2spCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9N X3Jvb3QoKTsKCiAgIHdoaWxlIChfX3ggIT0gMCkKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19r LCBfU19rZXkoX194KSkpCiAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAg ICBlbHNlCiAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgcmV0dXJuIGl0ZXJhdG9yKF9f eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZh bHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1Ji X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRl cmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgog IDo6dXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kg PSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICB3aGlsZSAoX194 ICE9IDApCiAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAg X195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgZWxzZQogICAgICAgX194ID0gX1Nf cmlnaHQoX194KTsKCiAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNs YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZQpwYWlyPHR5cGVuYW1lIF9SYl90cmVl PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yLAogICAg IHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz46Oml0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf QWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spCnsKICByZXR1cm4gcGFpcjxp dGVyYXRvciwgaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksIHVwcGVyX2JvdW5kKF9faykpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS29WLCBjbGFzcyBf Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUKcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5 LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwKICAgICB0 eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpj b25zdF9pdGVyYXRvcj4KX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFyZSwgX0Fs bG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgcmV0dXJuIHBh aXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKF9faykp Owp9CgppbmxpbmUgaW50Cl9fYmxhY2tfY291bnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX25vZGUs IF9SYl90cmVlX25vZGVfYmFzZSogX19yb290KQp7CiAgaWYgKF9fbm9kZSA9PSAwKQogICAgcmV0 dXJuIDA7CiAgaW50IF9fc3VtID0gMDsKICBkbyB7CiAgICBpZiAoX19ub2RlLT5fTV9jb2xvciA9 PSBfU19yYl90cmVlX2JsYWNrKQogICAgICArK19fc3VtOwogICAgaWYgKF9fbm9kZSA9PSBfX3Jv b3QpCiAgICAgIGJyZWFrOwogICAgX19ub2RlID0gX19ub2RlLT5fTV9wYXJlbnQ7CiAgfSB3aGls ZSAoMSk7CiAgcmV0dXJuIF9fc3VtOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf QWxsb2M+CmJvb2wgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs bG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAp7CiAgaWYgKF9NX25vZGVfY291bnQgPT0gMCB8fCBi ZWdpbigpID09IGVuZCgpKQogICAgcmV0dXJuIF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigp ID09IGVuZCgpICYmCiAgICAgIF9NX2hlYWRlci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01f aGVhZGVyLT5fTV9yaWdodCA9PSBfTV9oZWFkZXI7CgogIGludCBfX2xlbiA9IF9fYmxhY2tfY291 bnQoX01fbGVmdG1vc3QoKSwgX01fcm9vdCgpKTsKICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQg PSBiZWdpbigpOyBfX2l0ICE9IGVuZCgpOyArK19faXQpIHsKICAgIF9MaW5rX3R5cGUgX194ID0g KF9MaW5rX3R5cGUpIF9faXQuX01fbm9kZTsKICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVmdChf X3gpOwogICAgX0xpbmtfdHlwZSBfX1IgPSBfU19yaWdodChfX3gpOwoKICAgIGlmIChfX3gtPl9N X2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKQogICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9y ID09IF9TX3JiX3RyZWVfcmVkKSB8fAogICAgICAgICAgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09 IF9TX3JiX3RyZWVfcmVkKSkKICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgaWYgKF9fTCAmJiBf TV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX1Nfa2V5KF9fTCkpKQogICAgICByZXR1cm4gZmFs c2U7CiAgICBpZiAoX19SICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194 KSkpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoIV9fTCAmJiAhX19SICYmIF9fYmxhY2tf Y291bnQoX194LCBfTV9yb290KCkpICE9IF9fbGVuKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoK ICBpZiAoX01fbGVmdG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX01f cm9vdCgpKSkKICAgIHJldHVybiBmYWxzZTsKICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1JiX3Ry ZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkpCiAgICByZXR1cm4gZmFsc2U7Cgog IHJldHVybiB0cnVlOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBj bGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfQWxsb2Mg PSBhbGxvY2F0b3I8X1ZhbHVlPiA+CnN0cnVjdCByYl90cmVlIDogcHVibGljIF9SYl90cmVlPF9L ZXksIF9WYWx1ZSwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+CnsKICB0eXBlZGVmIF9S Yl90cmVlPF9LZXksIF9WYWx1ZSwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+IF9CYXNl OwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl OwoKICByYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAogICAgICAg ICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9C YXNlKF9fY29tcCwgX19hKSB7fQoKICB+cmJfdHJlZSgpIHt9Cn07Cgp9CiMgMzQgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWFwLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX21hcC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9tYXAuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX21hcC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9L ZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAgICAgY2xh c3MgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KY2xhc3MgbWFw CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfS2V5IGtleV90 eXBlOwogIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsK ICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Nv bXBhcmUga2V5X2NvbXBhcmU7CgogIGNsYXNzIHZhbHVlX2NvbXBhcmUKICAgIDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNs YXNzIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZCA6CiAgICBfQ29t cGFyZSBjb21wOwogICAgdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpIDogY29tcChfX2MpIHt9 CiAgcHVibGljOgogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUmIF9feCwgY29u c3QgdmFsdWVfdHlwZSYgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBjb21wKF9feC5maXJzdCwg X195LmZpcnN0KTsKICAgIH0KICB9OwoKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90 eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBl Piwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJs aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5 cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYg dHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5 cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5 cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsK ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5 cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5 cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0 b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxs b2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwK ICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl KCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3Qu aW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICBjb25zdCBhbGxvY2F0b3JfdHlw ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90 Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQogIG1hcChjb25zdCBtYXA8X0tleSxf VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CgogIG1hcDxfS2V5 LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtYXA8X0tleSwgX1RwLCBf Q29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVy biAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBf TV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJl dHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBn ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCiAg aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBjb25zdF9pdGVyYXRv ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgp IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl dHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBf TV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7 IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1 cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7 IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90 LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgp OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgp OyB9CiAgX1RwJiBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spIHsKICAgIGl0ZXJhdG9y IF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgaWYgKF9faSA9PSBlbmQoKSB8fCBrZXlfY29t cCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFsdWVfdHlw ZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CiAgdm9pZCBzd2Fw KG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90 KTsgfQoKCgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9f eCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9CiAgaXRlcmF0b3IgaW5z ZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IHJldHVy biBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19s YXN0KTsKICB9CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90LmVyYXNl KF9fcG9zaXRpb24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsg cmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwg aXRlcmF0b3IgX19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICB2 b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtl eV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3Ig ZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsg fQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1 cm4gX01fdC5maW5kKF9feCkgPT0gX01fdC5lbmQoKSA/IDAgOiAxOwogIH0KICBpdGVyYXRvciBs b3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJfYm91bmQo X194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp IGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9y IHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBlcl9ib3Vu ZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CgogIHBhaXI8 aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAg IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRlcmF0b3Is Y29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsK ICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJh dG9yPT0gKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFz cyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3Bl cmF0b3I8IChjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoKdGVtcGxhdGUgPGNs YXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l IGJvb2wgb3BlcmF0b3I9PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194 LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs b2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu ZSBib29sIG9wZXJhdG9yPChjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194 LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv Yz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg Ym9vbCBvcGVyYXRvciE9KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv Yz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl eSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv cGVyYXRvcj4oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp IHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Rw LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNv bnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVy biAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbWFw PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194 IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh cmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUs X0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs b2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgMzYgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfbWFwLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfbXVsdGltYXAuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX211bHRpbWFwLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tl eT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBf VHA+ID4gPgpjbGFzcyBtdWx0aW1hcDsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAs IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29u c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg X0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0Nv bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8 X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmNsYXNzIG11bHRpbWFwCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCnB1YmxpYzoKCgoKICB0eXBlZGVmIF9LZXkga2V5X3R5 cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOwog IHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29t cGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZSA6IHB1YmxpYyBiaW5hcnlf ZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBt dWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZDoKICAgIF9Db21w YXJlIGNvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykge30K ICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25z dCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbXAoX194LmZpcnN0LCBf X3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5 cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4s IGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGlj OgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5 cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBl bmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYg dHlwZW5hbWUgX1JlcF90eXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAg dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBl IHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBl IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9y X3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoKCiAgbXVsdGltYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwg YWxsb2NhdG9yX3R5cGUoKSkgeyB9CiAgZXhwbGljaXQgbXVsdGltYXAoY29uc3QgX0NvbXBhcmUm IF9fY29tcCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g YWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyB9CgogIHRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9y X3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVsdGltYXAoX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9Db21wYXJl JiBfX2NvbXAsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv cl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwoX19m aXJzdCwgX19sYXN0KTsgfQogIG11bHRpbWFwKGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21w YXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7IH0KCiAgbXVsdGltYXA8X0tleSxf VHAsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAs X0NvbXBhcmUsX0FsbG9jPiYgX194KSB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4g KnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01f dC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1 cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0 X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0 ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgY29uc3RfaXRlcmF0b3Ig YmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSB7 IHJldHVybiBfTV90LmVuZCgpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1 cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01f dC5yYmVnaW4oKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyBy ZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJu IF9NX3QucmVuZCgpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyBy ZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5l bXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsg fQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsg fQogIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsg X01fdC5zd2FwKF9feC5fTV90KTsgfQoKCgogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90 eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7IH0KICBpdGVyYXRvciBp bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICBy ZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX19wb3NpdGlvbiwgX194KTsKICB9CiAgdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJz dCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3Qu ZXJhc2UoX19wb3NpdGlvbik7IH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9f eCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2Zp cnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsg fQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgogIGl0ZXJhdG9yIGZpbmQoY29u c3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBjb25zdF9pdGVy YXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChf X3gpOyB9CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0 dXJuIF9NX3QuY291bnQoX194KTsgfQogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90 eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0 b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9N X3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5 X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVy YXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g X01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1 YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFu Z2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxf cmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxf cmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3Mg X0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGltYXA8 X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVs dGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNz IF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25z dCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi b29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21w YXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVt cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl LF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXks X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90 Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xh c3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG11bHRpbWFwPF9LZXksX1Rw LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0 aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0g X195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG11bHRpbWFwPF9LZXks X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11 bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBf X3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tleSxf VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11 bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8 IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8X0tl eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9f eCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w YXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAsX0Nv bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG11bHRpbWFwPF9LZXksX1RwLF9D b21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyAzNyAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMiAzCiMgMzIgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvbWFwIiAyIDMKIyAzMiAiLi4vLi4vYXJ0cy9tY29wL29iamVjdC5oIiAy CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9saXN0IiAxIDMKIyAzMyAiLi4vLi4vYXJ0 cy9tY29wL29iamVjdC5oIiAyCiMgNDQgIi4uLy4uL2FydHMvbWNvcC9vYmplY3QuaCIKbmFtZXNw YWNlIEFydHMgewoKCnR5cGVkZWYgdm9pZCAoKkRpc3BhdGNoRnVuY3Rpb24pKHZvaWQgKm9iamVj dCwgQnVmZmVyICpyZXF1ZXN0LCBCdWZmZXIgKnJlc3VsdCk7CnR5cGVkZWYgdm9pZCAoKk9uZXdh eURpc3BhdGNoRnVuY3Rpb24pKHZvaWQgKm9iamVjdCwgQnVmZmVyICpyZXF1ZXN0KTsKdHlwZWRl ZiB2b2lkICgqRHluYW1pY0Rpc3BhdGNoRnVuY3Rpb24pKHZvaWQgKm9iamVjdCwgbG9uZyBtZXRo b2RJRCwgQnVmZmVyICpyZXF1ZXN0LCBCdWZmZXIgKnJlc3VsdCk7CgpjbGFzcyBTY2hlZHVsZU5v ZGU7CmNsYXNzIE9iamVjdF9za2VsOwpjbGFzcyBPYmplY3Rfc3R1YjsKY2xhc3MgRmxvd1N5c3Rl bTsKY2xhc3MgTWV0aG9kRGVmOwpjbGFzcyBPYmplY3RSZWZlcmVuY2U7CmNsYXNzIFdlYWtSZWZl cmVuY2VCYXNlOwpjbGFzcyBPYmplY3Q7CmNsYXNzIE9iamVjdE1hbmFnZXI7CmNsYXNzIER5bmFt aWNTa2VsZXRvbkRhdGE7CmNsYXNzIER5bmFtaWNTa2VsZXRvbkJhc2U7CgpjbGFzcyBPYmplY3Rf YmFzZSA6IHB1YmxpYyBOb3RpZmljYXRpb25DbGllbnQgewpwcml2YXRlOgogICAgICAgIGZyaWVu ZCBjbGFzcyBEeW5hbWljUmVxdWVzdDsKICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0TWFuYWdl cjsKICAgICAgICBib29sIF9kZWxldGVPazsKCnByb3RlY3RlZDoKIyA3OSAiLi4vLi4vYXJ0cy9t Y29wL29iamVjdC5oIgogICAgICAgIGNsYXNzIE9iamVjdEludGVybmFsRGF0YSAqX2ludGVybmFs RGF0YTsKCiAgICAgICAgc3RydWN0IE9iamVjdFN0cmVhbUluZm87CgogICAgICAgIE9iamVjdF9i YXNlKCk7CiAgICAgICAgdmlydHVhbCB+T2JqZWN0X2Jhc2UoKTsKCgoKCgoKICAgICAgICBsb25n IF9nZXRPYmplY3RJRCgpIGNvbnN0OwogICAgICAgIENvbm5lY3Rpb24gKl9nZXRDb25uZWN0aW9u KCkgY29uc3Q7CgoKCgogICAgICAgIFNjaGVkdWxlTm9kZSAqX3NjaGVkdWxlTm9kZTsKICAgICAg ICBzdGQ6Omxpc3Q8T2JqZWN0U3RyZWFtSW5mbyAqPiBfc3RyZWFtTGlzdDsKCiAgICAgICAgdmly dHVhbCBPYmplY3Rfc2tlbCAqX3NrZWwoKTsKICAgICAgICB2aXJ0dWFsIE9iamVjdF9zdHViICpf c3R1YigpOwoKICAgICAgICBlbnVtIE9iamVjdExvY2F0aW9uIHsgb2JqZWN0SXNMb2NhbCwgb2Jq ZWN0SXNSZW1vdGUgfTsKCiAgICAgICAgdmlydHVhbCBPYmplY3RMb2NhdGlvbiBfbG9jYXRpb24o KTsKCiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVybmFsT2JqZWN0SUQ7CiAgICAgICAgbG9uZyBf bmV4dE5vdGlmeUlEOwogICAgICAgIGxvbmcgX3JlZkNudDsKICAgICAgICBzdGF0aWMgbG9uZyBf c3RhdGljT2JqZWN0Q291bnQ7CgogICAgICAgIHZvaWQgX2Rlc3Ryb3koKTsKCnB1YmxpYzoKICAg ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwojIDEyNSAiLi4vLi4vYXJ0cy9tY29wL29i amVjdC5oIgogICAgICAgIHZpcnR1YWwgQnVmZmVyICpfYWxsb2NDdXN0b21NZXNzYWdlKGxvbmcg aGFuZGxlcklEKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgX3NlbmRDdXN0b21NZXNzYWdlKEJ1ZmZl ciAqZGF0YSk7CgoKCgoKICAgICAgICB2aXJ0dWFsIGxvbmcgX2xvb2t1cE1ldGhvZChjb25zdCBB cnRzOjpNZXRob2REZWYgJikgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgX2ludGVy ZmFjZU5hbWUoKSA9IDA7CiAgICAgICAgdmlydHVhbCBjbGFzcyBJbnRlcmZhY2VEZWYgX3F1ZXJ5 SW50ZXJmYWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCBj bGFzcyBUeXBlRGVmIF9xdWVyeVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpID0gMDsKICAg ICAgICB2aXJ0dWFsIGNsYXNzIEVudW1EZWYgX3F1ZXJ5RW51bShjb25zdCBzdGQ6OnN0cmluZyYg bmFtZSkgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgX3RvU3RyaW5nKCkgPSAwOwoK CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlQmxvY2sodW5zaWduZWQgbG9uZyBjeWNs ZXMpOwogICAgICAgIFNjaGVkdWxlTm9kZSAqX25vZGUoKTsKICAgICAgICB2aXJ0dWFsIEZsb3dT eXN0ZW0gX2Zsb3dTeXN0ZW0oKSA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBfcmVsZWFz ZSgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgX2NvcHlSZW1vdGUoKSA9IDA7CiAgICAgICAg dmlydHVhbCB2b2lkIF91c2VSZW1vdGUoKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIF9yZWxl YXNlUmVtb3RlKCkgPSAwOwoKCiAgICAgICAgdm9pZCBfY2FuY2VsQ29weVJlbW90ZSgpOwoKICAg ICAgICB2b2lkIF9hZGRXZWFrUmVmZXJlbmNlKFdlYWtSZWZlcmVuY2VCYXNlICpyZWZlcmVuY2Up OwogICAgICAgIHZvaWQgX3JlbW92ZVdlYWtSZWZlcmVuY2UoV2Vha1JlZmVyZW5jZUJhc2UgKnJl ZmVyZW5jZSk7CgogICAgICAgIGlubGluZSBPYmplY3RfYmFzZSAqX2NvcHkoKSB7CiAgICAgICAg ICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAg ICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3Rv cjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBz dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKCiAgICAg ICAgdmlydHVhbCB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7CiAgICAgICAgdm9pZCAq X2Nhc3Qoc3RkOjpzdHJpbmcgaW50ZXJmYWNlKTsKCgogICAgICAgIHZpcnR1YWwgYm9vbCBfaXND b21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSkgPSAwOwoKCiAg ICAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBfYWRkQ2hpbGQoQXJ0czo6T2JqZWN0IGNoaWxkLCBj b25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgPSAwOwogICAgICAgIHZpcnR1YWwgYm9vbCBfcmVtb3Zl Q2hpbGQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIEFydHM6 Ok9iamVjdCBfZ2V0Q2hpbGQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpID0gMDsKICAgICAgICB2 aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIF9xdWVyeUNoaWxkcmVuKCkgPSAwOwoK CgoKCgogICAgICAgIHZpcnR1YWwgYm9vbCBfZXJyb3IoKTsKCiAgICAgICAgaW5saW5lIHN0YXRp YyBsb25nIF9vYmplY3RDb3VudCgpIHsgcmV0dXJuIF9zdGF0aWNPYmplY3RDb3VudDsgfQogICAg ICAgIGlubGluZSBsb25nIF9ta05vdGlmeUlEKCkgeyByZXR1cm4gX25leHROb3RpZnlJRCsrOyB9 CgoKICAgICAgICBzdGF0aWMgT2JqZWN0X2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcm IHN1YkNsYXNzID0gIk9iamVjdCIpOwoKCiAgICAgICAgYm9vbCBfaXNFcXVhbChPYmplY3RfYmFz ZSAqb2JqZWN0KSBjb25zdDsKCgogICAgICAgIHN0YXRpYyBPYmplY3RfYmFzZSAqX2Zyb21TdHJp bmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgT2JqZWN0X2Jhc2UgKl9m cm9tUmVmZXJlbmNlKGNsYXNzIE9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwp9 OwoKCgoKCmNsYXNzIEJ1ZmZlcjsKY2xhc3MgTWV0aG9kRGVmOwoKCmNsYXNzIE9iamVjdF9za2Vs X3ByaXZhdGU7CmNsYXNzIEFueUNvbnN0UmVmOwpjbGFzcyBBdHRyaWJ1dGVEZWY7CgpjbGFzcyBP YmplY3Rfc2tlbCA6IHZpcnR1YWwgcHVibGljIE9iamVjdF9iYXNlIHsKcHJpdmF0ZToKICAgICAg ICBmcmllbmQgY2xhc3MgT2JqZWN0X2Jhc2U7CiAgICAgICAgZnJpZW5kIGNsYXNzIER5bmFtaWNT a2VsZXRvbkRhdGE7CiAgICAgICAgZnJpZW5kIGNsYXNzIER5bmFtaWNTa2VsZXRvbkJhc2U7Cgog ICAgICAgIE9iamVjdF9za2VsX3ByaXZhdGUgKl9kX3NrZWw7CgogICAgICAgIGxvbmcgX29iamVj dElEOwoKCgogICAgICAgIGxvbmcgX3JlbW90ZVNlbmRDb3VudDsKICAgICAgICBib29sIF9yZW1v dGVTZW5kVXBkYXRlZDsKICAgICAgICBzdGQ6Omxpc3Q8Y2xhc3MgQ29ubmVjdGlvbiAqPiBfcmVt b3RlVXNlcnM7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgdm9pZCBfYWRkTWV0aG9kKERpc3BhdGNoRnVu Y3Rpb24gZGlzcCwgdm9pZCAqb2JqZWN0LCBjb25zdCBNZXRob2REZWYmIG1kKTsKICAgICAgICB2 b2lkIF9hZGRNZXRob2QoT25ld2F5RGlzcGF0Y2hGdW5jdGlvbiBkaXNwLCB2b2lkICpvYmplY3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBNZXRob2REZWYmIG1kKTsKICAgICAgICB2b2lkIF9hZGRNZXRob2QoRHluYW1pY0Rpc3Bh dGNoRnVuY3Rpb24gZGlzcCwgdm9pZCAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWV0aG9kRGVmJiBtZCk7CiAgICAg ICAgdm9pZCBfaW5pdFN0cmVhbShzdGQ6OnN0cmluZyBuYW1lLCB2b2lkICpwdHIsIGxvbmcgZmxh Z3MpOwoKCiAgICAgICAgYm9vbCBfaW5pdEF0dHJpYnV0ZShjb25zdCBBcnRzOjpBdHRyaWJ1dGVE ZWYmIGF0dHJpYnV0ZSk7CiAgICAgICAgc3RhdGljIGJvb2wgX1F1ZXJ5SW5pdFN0cmVhbUZ1bmMo T2JqZWN0X3NrZWwgKnNrZWwsY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIGJvb2wg X2dlbmVyYXRlU2xvdHMoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5n JiBpbnRlcmZhY2UpOwoKCiAgICAgICAgY29uc3QgTWV0aG9kRGVmJiBfZHNHZXRNZXRob2REZWYo bG9uZyBtZXRob2RJRCk7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgdm9pZCBfZGVmYXVsdE5vdGlmeShj b25zdCBOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbik7CiAgICAgICAgdm9pZCBub3RpZnkoY29u c3QgTm90aWZpY2F0aW9uJiBub3RpZmljYXRpb24pOwogICAgICAgIHZvaWQgX2VtaXRfY2hhbmdl ZChjb25zdCBjaGFyICpzdHJlYW0sIGNvbnN0IEFueUNvbnN0UmVmJiB2YWx1ZSk7CgoKCgoKICAg ICAgICBsb25nIF9hZGRDdXN0b21NZXNzYWdlSGFuZGxlcihPbmV3YXlEaXNwYXRjaEZ1bmN0aW9u IGhhbmRsZXIsIHZvaWQgKm9iamVjdCk7CgogICAgICAgIE9iamVjdF9za2VsICpfc2tlbCgpOwog ICAgICAgIE9iamVjdExvY2F0aW9uIF9sb2NhdGlvbigpOwoKcHVibGljOgogICAgICAgIE9iamVj dF9za2VsKCk7CiAgICAgICAgdmlydHVhbCB+T2JqZWN0X3NrZWwoKTsKCgogICAgICAgIHZvaWQg X2Rpc2Nvbm5lY3RSZW1vdGUoY2xhc3MgQ29ubmVjdGlvbiAqY29ubmVjdGlvbik7CiAgICAgICAg dm9pZCBfcmVmZXJlbmNlQ2xlYW4oKTsKCgogICAgICAgIHZvaWQgX2Rpc3BhdGNoKEJ1ZmZlciAq cmVxdWVzdCwgQnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7CiAgICAgICAgdm9pZCBfZGlz cGF0Y2goQnVmZmVyICpyZXF1ZXN0LCBsb25nIG1ldGhvZElEKTsKICAgICAgICBsb25nIF9sb29r dXBNZXRob2QoY29uc3QgTWV0aG9kRGVmICYpOwoKCgoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJp bmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgdmlydHVhbCB2b2lkIF9idWlsZE1ldGhv ZFRhYmxlKCk7CgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBfcmVsZWFzZSgpOwogICAgICAgIHZp cnR1YWwgdm9pZCBfY29weVJlbW90ZSgpOwogICAgICAgIHZpcnR1YWwgdm9pZCBfdXNlUmVtb3Rl KCk7CiAgICAgICAgdmlydHVhbCB2b2lkIF9yZWxlYXNlUmVtb3RlKCk7CgoKCgogICAgICAgIEZs b3dTeXN0ZW0gX2Zsb3dTeXN0ZW0oKTsKCgoKCiAgICAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBf aW50ZXJmYWNlTmFtZSgpOwogICAgICAgIEludGVyZmFjZURlZiBfcXVlcnlJbnRlcmZhY2UoY29u c3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIFR5cGVEZWYgX3F1ZXJ5VHlwZShjb25zdCBz dGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgRW51bURlZiBfcXVlcnlFbnVtKGNvbnN0IHN0ZDo6 c3RyaW5nJiBuYW1lKTsKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIF90b1N0cmluZygpOwoK CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJm YWNlbmFtZSk7CgoKICAgICAgICBzdGQ6OnN0cmluZyBfYWRkQ2hpbGQoQXJ0czo6T2JqZWN0IGNo aWxkLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgYm9vbCBfcmVtb3ZlQ2hpbGQo Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIEFydHM6Ok9iamVjdCBfZ2V0Q2hpbGQo Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n PiAqIF9xdWVyeUNoaWxkcmVuKCk7Cn07CgpjbGFzcyBPYmplY3Rfc3R1Yl9wcml2YXRlOwoKY2xh c3MgT2JqZWN0X3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBPYmplY3RfYmFzZSB7CnByaXZhdGU6CiAg ICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdF9iYXNlOwoKICAgICAgICBPYmplY3Rfc3R1Yl9wcml2 YXRlICpfZF9zdHViOwoKcHJvdGVjdGVkOgogICAgICAgIGxvbmcgX29iamVjdElELF9sb29rdXBD YWNoZVJhbmRvbTsKICAgICAgICBDb25uZWN0aW9uICpfY29ubmVjdGlvbjsKCiAgICAgICAgT2Jq ZWN0X3N0dWIoKTsKICAgICAgICBPYmplY3Rfc3R1YihDb25uZWN0aW9uICpjb25uZWN0aW9uLCBs b25nIG9iamVjdElEKTsKICAgICAgICB2aXJ0dWFsIH5PYmplY3Rfc3R1YigpOwoKICAgICAgICB2 aXJ0dWFsIE9iamVjdF9zdHViICpfc3R1YigpOwogICAgICAgIE9iamVjdExvY2F0aW9uIF9sb2Nh dGlvbigpOwoKICAgICAgICBlbnVtIHsgX2xvb2t1cE1ldGhvZENhY2hlU2l6ZSA9IDMzNyB9Owog ICAgICAgIHN0YXRpYyBsb25nICpfbG9va3VwTWV0aG9kQ2FjaGU7CgogICAgICAgIGxvbmcgX2xv b2t1cE1ldGhvZEZhc3QoY29uc3QgY2hhciAqbWV0aG9kKTsKICAgICAgICBsb25nIF9sb29rdXBN ZXRob2QoY29uc3QgTWV0aG9kRGVmICYpOwoKcHVibGljOgoKCgoKICAgICAgICBCdWZmZXIgKl9h bGxvY0N1c3RvbU1lc3NhZ2UobG9uZyBoYW5kbGVySUQpOwogICAgICAgIHZvaWQgX3NlbmRDdXN0 b21NZXNzYWdlKEJ1ZmZlciAqZGF0YSk7CgoKCgogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZh Y2VOYW1lKCk7CiAgICAgICAgSW50ZXJmYWNlRGVmIF9xdWVyeUludGVyZmFjZShjb25zdCBzdGQ6 OnN0cmluZyYgbmFtZSk7CiAgICAgICAgVHlwZURlZiBfcXVlcnlUeXBlKGNvbnN0IHN0ZDo6c3Ry aW5nJiBuYW1lKTsKICAgICAgICBFbnVtRGVmIF9xdWVyeUVudW0oY29uc3Qgc3RkOjpzdHJpbmcm IG5hbWUpOwogICAgICAgIHN0ZDo6c3RyaW5nIF90b1N0cmluZygpOwoKCgoKICAgICAgICBGbG93 U3lzdGVtIF9mbG93U3lzdGVtKCk7CgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBfcmVsZWFzZSgp OwogICAgICAgIHZpcnR1YWwgdm9pZCBfY29weVJlbW90ZSgpOwogICAgICAgIHZpcnR1YWwgdm9p ZCBfdXNlUmVtb3RlKCk7CiAgICAgICAgdmlydHVhbCB2b2lkIF9yZWxlYXNlUmVtb3RlKCk7CgoK ICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZh Y2VuYW1lKTsKCgogICAgICAgIHN0ZDo6c3RyaW5nIF9hZGRDaGlsZChBcnRzOjpPYmplY3QgY2hp bGQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgICAgICBib29sIF9yZW1vdmVDaGlsZChj b25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgQXJ0czo6T2JqZWN0IF9nZXRDaGlsZChj b25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ ICogX3F1ZXJ5Q2hpbGRyZW4oKTsKIyAzODQgIi4uLy4uL2FydHMvbWNvcC9vYmplY3QuaCIKICAg ICAgICBib29sIF9lcnJvcigpOwoKCgoKICAgICAgICBzdGF0aWMgdm9pZCBfY2xlYW51cE1ldGhv ZENhY2hlKCk7Cn07Cgp9OwojIDMwICIuLi8uLi9hcnRzL21jb3AvY29tbW9uLmgiIDIKIyAxICIu Li8uLi9hcnRzL21jb3AvY29ubmVjdGlvbi5oIiAxCiMgMzEgIi4uLy4uL2FydHMvbWNvcC9jb21t b24uaCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9vYmplY3RtYW5hZ2VyLmgiIDEKIyAyNiAiLi4v Li4vYXJ0cy9tY29wL29iamVjdG1hbmFnZXIuaCIKIyAxICIuLi8uLi9hcnRzL21jb3Avb2JqZWN0 LmgiIDEKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL29iamVjdG1hbmFnZXIuaCIgMgojIDEgIi4uLy4u L2FydHMvbWNvcC9mYWN0b3J5LmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9tY29wL2ZhY3RvcnkuaCIK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMSAzCiMgMjcgIi4uLy4uL2Fy dHMvbWNvcC9mYWN0b3J5LmgiIDIKIyAxICIuLi8uLi9hcnRzL21jb3Avb2JqZWN0LmgiIDEKIyAy OCAiLi4vLi4vYXJ0cy9tY29wL2ZhY3RvcnkuaCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9zdGFy dHVwbWFuYWdlci5oIiAxCiMgMjYgIi4uLy4uL2FydHMvbWNvcC9zdGFydHVwbWFuYWdlci5oIgoj IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbGlzdCIgMSAzCiMgMjcgIi4uLy4uL2FydHMv bWNvcC9zdGFydHVwbWFuYWdlci5oIiAyCiMgMzggIi4uLy4uL2FydHMvbWNvcC9zdGFydHVwbWFu YWdlci5oIgpuYW1lc3BhY2UgQXJ0cyB7CgpjbGFzcyBTdGFydHVwQ2xhc3MgewpwdWJsaWM6CiAg ICAgICAgU3RhcnR1cENsYXNzKCk7CiAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0dXAoKSA9IDA7 CiAgICAgICAgdmlydHVhbCB2b2lkIHNodXRkb3duKCk7Cn07CgpjbGFzcyBTdGFydHVwTWFuYWdl ciB7CiAgICAgICAgc3RhdGljIHN0ZDo6bGlzdDxTdGFydHVwQ2xhc3MgKj4gKnN0YXJ0dXBDbGFz c2VzOwogICAgICAgIHN0YXRpYyBjbGFzcyBFeHRlbnNpb25Mb2FkZXIgKmFjdGl2ZUV4dGVuc2lv bkxvYWRlcjsKcHVibGljOgogICAgICAgIHN0YXRpYyB2b2lkIGFkZChTdGFydHVwQ2xhc3MgKnNj KTsKICAgICAgICBzdGF0aWMgdm9pZCBzdGFydHVwKCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2h1 dGRvd24oKTsKIyA2MyAiLi4vLi4vYXJ0cy9tY29wL3N0YXJ0dXBtYW5hZ2VyLmgiCiAgICAgICAg c3RhdGljIHZvaWQgc2V0RXh0ZW5zaW9uTG9hZGVyKGNsYXNzIEV4dGVuc2lvbkxvYWRlciAqZXh0 ZW5zaW9uKTsKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxGcmVlQWxsKCk7Cn07Cgp9 OwojIDI5ICIuLi8uLi9hcnRzL21jb3AvZmFjdG9yeS5oIiAyCiMgMzggIi4uLy4uL2FydHMvbWNv cC9mYWN0b3J5LmgiCm5hbWVzcGFjZSBBcnRzIHsKCmNsYXNzIEZhY3RvcnlQcml2YXRlOwoKY2xh c3MgRmFjdG9yeSA6IHB1YmxpYyBTdGFydHVwQ2xhc3Mgewpwcml2YXRlOgogICAgICAgIEZhY3Rv cnlQcml2YXRlICpkOwpwdWJsaWM6CiAgICAgICAgdm9pZCBzdGFydHVwKCk7CiAgICAgICAgdm9p ZCBzaHV0ZG93bigpOwogICAgICAgIHZpcnR1YWwgT2JqZWN0X3NrZWwgKmNyZWF0ZUluc3RhbmNl KCkgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgaW50ZXJmYWNlTmFtZSgpID0gMDsK fTsKIyA2NCAiLi4vLi4vYXJ0cy9tY29wL2ZhY3RvcnkuaCIKfTsKIyAyOCAiLi4vLi4vYXJ0cy9t Y29wL29iamVjdG1hbmFnZXIuaCIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbGlz dCIgMSAzCiMgMjkgIi4uLy4uL2FydHMvbWNvcC9vYmplY3RtYW5hZ2VyLmgiIDIKIyAzNyAiLi4v Li4vYXJ0cy9tY29wL29iamVjdG1hbmFnZXIuaCIKbmFtZXNwYWNlIEFydHMgewoKY2xhc3MgT2Jq ZWN0OwpjbGFzcyBPYmplY3RNYW5hZ2VyUHJpdmF0ZTsKCmNsYXNzIE9iamVjdE1hbmFnZXIgewpw cml2YXRlOgogICAgICAgIE9iamVjdE1hbmFnZXJQcml2YXRlICpkOwoKcHJvdGVjdGVkOgogICAg ICAgIHN0YXRpYyBPYmplY3RNYW5hZ2VyICpfaW5zdGFuY2U7CiAgICAgICAgc3RkOjpsaXN0PEZh Y3RvcnkgKj4gZmFjdG9yaWVzOwogICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gcmVmZXJl bmNlTmFtZXM7CgpwdWJsaWM6CiAgICAgICAgT2JqZWN0TWFuYWdlcigpOwogICAgICAgIH5PYmpl Y3RNYW5hZ2VyKCk7CgogICAgICAgIHN0YXRpYyBPYmplY3RNYW5hZ2VyICp0aGUoKTsKICAgICAg ICBPYmplY3Rfc2tlbCAqY3JlYXRlKHN0ZDo6c3RyaW5nIG5hbWUpOwoKICAgICAgICBib29sIGFk ZEdsb2JhbFJlZmVyZW5jZShPYmplY3Qgb2JqZWN0LCBzdGQ6OnN0cmluZyBuYW1lKTsKICAgICAg ICBzdGQ6OnN0cmluZyBnZXRHbG9iYWxSZWZlcmVuY2Uoc3RkOjpzdHJpbmcgbmFtZSk7CiAgICAg ICAgdm9pZCByZW1vdmVHbG9iYWxSZWZlcmVuY2VzKCk7CiAgICAgICAgdm9pZCByZW1vdmVFeHRl bnNpb25zKCk7CiAgICAgICAgdm9pZCBzaHV0ZG93bkV4dGVuc2lvbnMoKTsKCiAgICAgICAgdm9p ZCByZWdpc3RlckZhY3RvcnkoRmFjdG9yeSAqZmFjdG9yeSk7CiAgICAgICAgdm9pZCByZW1vdmVG YWN0b3J5KEZhY3RvcnkgKmZhY3RvcnkpOwoKICAgICAgICB2b2lkIHByb3ZpZGVDYXBhYmlsaXR5 KGNvbnN0IHN0ZDo6c3RyaW5nJiBjYXBhYmlsaXR5KTsKICAgICAgICB2b2lkIHJlbW92ZUNhcGFi aWxpdHkoY29uc3Qgc3RkOjpzdHJpbmcmIGNhcGFiaWxpdHkpOwp9OwoKfTsKIyAzMiAiLi4vLi4v YXJ0cy9tY29wL2NvbW1vbi5oIiAyCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2lkbGZpbGVyZWcuaCIg MQojIDI2ICIuLi8uLi9hcnRzL21jb3AvaWRsZmlsZXJlZy5oIgojIDEgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvc3RyaW5nIiAxIDMKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL2lkbGZpbGVyZWcu aCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9zdGFydHVwbWFuYWdlci5oIiAxCiMgMjggIi4uLy4u L2FydHMvbWNvcC9pZGxmaWxlcmVnLmgiIDIKIyAzNyAiLi4vLi4vYXJ0cy9tY29wL2lkbGZpbGVy ZWcuaCIKbmFtZXNwYWNlIEFydHMgewoKY2xhc3MgSURMRmlsZVJlZyA6IHB1YmxpYyBTdGFydHVw Q2xhc3MgewogICAgICAgIGxvbmcgbnI7CiAgICAgICAgY29uc3QgY2hhciAqX25hbWUsICpfY29u dGVudHM7CnB1YmxpYzoKICAgICAgICBJRExGaWxlUmVnKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IGNoYXIgKmNvbnRlbnRzKTsKICAgICAgICB2b2lkIHN0YXJ0dXAoKTsKICAgICAgICB2b2lkIHNo dXRkb3duKCk7Cn07Cn07CiMgMzMgIi4uLy4uL2FydHMvbWNvcC9jb21tb24uaCIgMgojIDEgIi4u Ly4uL2FydHMvbWNvcC9hc3luY3N0cmVhbS5oIiAxCiMgMjYgIi4uLy4uL2FydHMvbWNvcC9hc3lu Y3N0cmVhbS5oIgojIDEgIi4uLy4uL2FydHMvbWNvcC9idWZmZXIuaCIgMQojIDI3ICIuLi8uLi9h cnRzL21jb3AvYXN5bmNzdHJlYW0uaCIgMgojIDEgIi4uLy4uL2FydHMvbWNvcC9kYXRhcGFja2V0 LmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9tY29wL2RhdGFwYWNrZXQuaCIKIyAxICIuLi8uLi9hcnRz L21jb3AvYnVmZmVyLmgiIDEKIyAyNyAiLi4vLi4vYXJ0cy9tY29wL2RhdGFwYWNrZXQuaCIgMgoj IDM2ICIuLi8uLi9hcnRzL21jb3AvZGF0YXBhY2tldC5oIgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNz IEdlbmVyaWNEYXRhQ2hhbm5lbFByaXZhdGU7CgoKCmNsYXNzIEdlbmVyaWNEYXRhQ2hhbm5lbCB7 CnByaXZhdGU6CiAgICAgICAgR2VuZXJpY0RhdGFDaGFubmVsUHJpdmF0ZSAqZDsKCnByb3RlY3Rl ZDoKICAgICAgICBmcmllbmQgY2xhc3MgR2VuZXJpY0RhdGFQYWNrZXQ7CgoKCgogICAgICAgIHZp cnR1YWwgdm9pZCBwcm9jZXNzZWRQYWNrZXQoR2VuZXJpY0RhdGFQYWNrZXQgKnBhY2tldCkgPSAw OwoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgc2VuZFBhY2tldChHZW5lcmljRGF0YVBhY2tldCAq cGFja2V0KSA9IDA7CgpwdWJsaWM6CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIHNldFB1bGwoaW50 IHBhY2tldHMsIGludCBjYXBhY2l0eSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBlbmRQdWxs KCkgPSAwOwoKICAgICAgICBHZW5lcmljRGF0YUNoYW5uZWwoKSA6IGQoMCkKICAgICAgICB7CiAg ICAgICAgfQp9OwojIDg0ICIuLi8uLi9hcnRzL21jb3AvZGF0YXBhY2tldC5oIgpjbGFzcyBHZW5l cmljRGF0YVBhY2tldFByaXZhdGU7CgpjbGFzcyBHZW5lcmljRGF0YVBhY2tldCB7CnByaXZhdGU6 CiAgICAgICAgR2VuZXJpY0RhdGFQYWNrZXRQcml2YXRlICpkOwogICAgICAgIHN0YXRpYyBsb25n IF9zdGF0aWNEYXRhUGFja2V0Q291bnQ7CgpwdWJsaWM6CgoKCiAgICAgICAgc3RhdGljIGxvbmcg X2RhdGFQYWNrZXRDb3VudCgpIHsgcmV0dXJuIF9zdGF0aWNEYXRhUGFja2V0Q291bnQ7IH0KCgoK CiAgICAgICAgR2VuZXJpY0RhdGFDaGFubmVsICpjaGFubmVsOwoKCgoKCgoKICAgICAgICB2aXJ0 dWFsIHZvaWQgZW5zdXJlQ2FwYWNpdHkoaW50IGNhcGFjaXR5KSA9IDA7CgoKCgoKICAgICAgICB2 aXJ0dWFsIHZvaWQgcmVhZChCdWZmZXImIHN0cmVhbSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p ZCB3cml0ZShCdWZmZXImIHN0cmVhbSkgPSAwOwoKCgoKCgogICAgICAgIGludCBzaXplOwoKCgoK ICAgICAgICBpbnQgdXNlQ291bnQ7CgogICAgICAgIGlubGluZSB2b2lkIHNlbmQoKQogICAgICAg IHsKICAgICAgICAgICAgICAgIGNoYW5uZWwtPnNlbmRQYWNrZXQodGhpcyk7CiAgICAgICAgfQog ICAgICAgIGlubGluZSB2b2lkIHByb2Nlc3NlZCgpCiAgICAgICAgewogICAgICAgICAgICAgICAg dXNlQ291bnQtLTsKICAgICAgICAgICAgICAgIGlmKHVzZUNvdW50ID09IDApCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoYW5uZWwpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhbm5lbC0+cHJvY2Vzc2VkUGFja2V0KHRoaXMpOwogICAgICAg ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVs ZXRlIHRoaXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIH5H ZW5lcmljRGF0YVBhY2tldCgpCiAgICAgICAgewogICAgICAgICAgICAgICAgX3N0YXRpY0RhdGFQ YWNrZXRDb3VudC0tOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBHZW5lcmljRGF0YVBh Y2tldChHZW5lcmljRGF0YUNoYW5uZWwgKmNoYW5uZWwpCiAgICAgICAgICAgICAgICA6ZCgwKSxj aGFubmVsKGNoYW5uZWwpLHVzZUNvdW50KDApCiAgICAgICAgewogICAgICAgICAgICAgICAgX3N0 YXRpY0RhdGFQYWNrZXRDb3VudCsrOwogICAgICAgIH0KfTsKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBU PgpjbGFzcyBEYXRhUGFja2V0IDogcHVibGljIEdlbmVyaWNEYXRhUGFja2V0IHsKcHVibGljOgog ICAgICAgIFQgKmNvbnRlbnRzOwoKcHJvdGVjdGVkOgogICAgICAgIERhdGFQYWNrZXQoR2VuZXJp Y0RhdGFDaGFubmVsICpjaGFubmVsKQogICAgICAgICAgICA6IEdlbmVyaWNEYXRhUGFja2V0KGNo YW5uZWwpIHt9CiAgICAgICAgfkRhdGFQYWNrZXQoKSB7fQp9OwoKCgoKdGVtcGxhdGU8Y2xhc3Mg VD4KY2xhc3MgUmF3RGF0YVBhY2tldCA6IHB1YmxpYyBEYXRhUGFja2V0PFQ+IHsKcHJvdGVjdGVk OgogICAgICAgIGludCBjYXBhY2l0eTsKICAgICAgICB2b2lkIGVuc3VyZUNhcGFjaXR5KGludCBu ZXdDYXBhY2l0eSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihuZXdDYXBhY2l0eSA+IGNh cGFjaXR5KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVb XSBjb250ZW50czsKICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHkgPSBuZXdDYXBhY2l0 eTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgPSBuZXcgVFtjYXBhY2l0eV07CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIFJhd0RhdGFQYWNrZXQoaW50IGNhcGFj aXR5LCBHZW5lcmljRGF0YUNoYW5uZWwgKmNoYW5uZWwpCiAgICAgICAgICAgICAgICA6RGF0YVBh Y2tldDxUPihjaGFubmVsKSwgY2FwYWNpdHkoY2FwYWNpdHkpCiAgICAgICAgewogICAgICAgICAg ICAgICAgc2l6ZSA9IGNhcGFjaXR5OwogICAgICAgICAgICAgICAgY29udGVudHMgPSBuZXcgVFtj YXBhY2l0eV07CiAgICAgICAgfQogICAgICAgIH5SYXdEYXRhUGFja2V0KCkKICAgICAgICB7CiAg ICAgICAgICAgICAgICBkZWxldGVbXSBjb250ZW50czsKICAgICAgICB9Cn07CgoKCgoKY2xhc3Mg RmxvYXREYXRhUGFja2V0IDogcHVibGljIFJhd0RhdGFQYWNrZXQ8ZmxvYXQ+IHsKcHVibGljOgog ICAgICAgIEZsb2F0RGF0YVBhY2tldChpbnQgY2FwYWNpdHksIEdlbmVyaWNEYXRhQ2hhbm5lbCAq Y2hhbm5lbCkKICAgICAgICAgICAgICAgICAgICAgICAgOiBSYXdEYXRhUGFja2V0PGZsb2F0Pihj YXBhY2l0eSwgY2hhbm5lbCkKICAgICAgICB7CgogICAgICAgIH0KICAgICAgICB2b2lkIHJlYWQo QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGUoQnVmZmVyJiBzdHJlYW0pOwp9OwoK Y2xhc3MgQnl0ZURhdGFQYWNrZXQgOiBwdWJsaWMgUmF3RGF0YVBhY2tldDxtY29wYnl0ZT4gewpw dWJsaWM6CiAgICAgICAgQnl0ZURhdGFQYWNrZXQoaW50IGNhcGFjaXR5LCBHZW5lcmljRGF0YUNo YW5uZWwgKmNoYW5uZWwpCiAgICAgICAgICAgICAgICAgICAgICAgIDogUmF3RGF0YVBhY2tldDxt Y29wYnl0ZT4oY2FwYWNpdHksIGNoYW5uZWwpCiAgICAgICAgewoKICAgICAgICB9CiAgICAgICAg dm9pZCByZWFkKEJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdyaXRlKEJ1ZmZlciYgc3Ry ZWFtKTsKfTsKCn07CiMgMjggIi4uLy4uL2FydHMvbWNvcC9hc3luY3N0cmVhbS5oIiAyCiMgMzkg Ii4uLy4uL2FydHMvbWNvcC9hc3luY3N0cmVhbS5oIgpuYW1lc3BhY2UgQXJ0cyB7CgpjbGFzcyBH ZW5lcmljQXN5bmNTdHJlYW1Qcml2YXRlOwoKY2xhc3MgR2VuZXJpY0FzeW5jU3RyZWFtIHsKcHJp dmF0ZToKICAgICAgICBHZW5lcmljQXN5bmNTdHJlYW1Qcml2YXRlICpkOwpwdWJsaWM6CgoKCiAg ICAgICAgdmlydHVhbCBHZW5lcmljRGF0YVBhY2tldCAqY3JlYXRlUGFja2V0KGludCBjYXBhY2l0 eSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBmcmVlUGFja2V0KEdlbmVyaWNEYXRhUGFja2V0 ICpwYWNrZXQpID0gMDsKCiAgICAgICAgdmlydHVhbCBHZW5lcmljQXN5bmNTdHJlYW0gKmNyZWF0 ZU5ld1N0cmVhbSgpID0gMDsKCiAgICAgICAgR2VuZXJpY0RhdGFDaGFubmVsICpjaGFubmVsOwog ICAgICAgIGludCBfbm90aWZ5SUQ7CgogICAgICAgIGlubGluZSBpbnQgbm90aWZ5SUQoKSB7IHJl dHVybiBfbm90aWZ5SUQ7IH0KfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIEFzeW5jU3RyZWFt IDogcHVibGljIEdlbmVyaWNBc3luY1N0cmVhbSB7CnByb3RlY3RlZDoKICAgICAgICBHZW5lcmlj RGF0YVBhY2tldCAqY3JlYXRlUGFja2V0KGludCBjYXBhY2l0eSkKICAgICAgICB7CiAgICAgICAg ICAgICAgICByZXR1cm4gYWxsb2NQYWNrZXQoY2FwYWNpdHkpOwogICAgICAgIH0KICAgICAgICB2 b2lkIGZyZWVQYWNrZXQoR2VuZXJpY0RhdGFQYWNrZXQgKnBhY2tldCkKICAgICAgICB7CiAgICAg ICAgICAgICAgICBkZWxldGUgcGFja2V0OwogICAgICAgIH0KcHVibGljOgoKICAgICAgICB2aXJ0 dWFsIERhdGFQYWNrZXQ8VD4gKmFsbG9jUGFja2V0KGludCBjYXBhY2l0eSkgPSAwOwoKICAgICAg ICBpbmxpbmUgdm9pZCBzZXRQdWxsKGludCBwYWNrZXRzLCBpbnQgY2FwYWNpdHkpCiAgICAgICAg ewogICAgICAgICAgICAgICAgY2hhbm5lbC0+c2V0UHVsbChwYWNrZXRzLGNhcGFjaXR5KTsKICAg ICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgZW5kUHVsbCgpCiAgICAgICAgewogICAgICAgICAg ICAgICAgY2hhbm5lbC0+ZW5kUHVsbCgpOwogICAgICAgIH0KfTsKCmNsYXNzIEZsb2F0QXN5bmNT dHJlYW0gOiBwdWJsaWMgQXN5bmNTdHJlYW08ZmxvYXQ+CnsKcHVibGljOgogICAgICAgIERhdGFQ YWNrZXQ8ZmxvYXQ+ICphbGxvY1BhY2tldChpbnQgY2FwYWNpdHkpOwogICAgICAgIEdlbmVyaWNB c3luY1N0cmVhbSAqY3JlYXRlTmV3U3RyZWFtKCk7Cn07CgpjbGFzcyBCeXRlQXN5bmNTdHJlYW0g OiBwdWJsaWMgQXN5bmNTdHJlYW08bWNvcGJ5dGU+CnsKcHVibGljOgogICAgICAgIERhdGFQYWNr ZXQ8bWNvcGJ5dGU+ICphbGxvY1BhY2tldChpbnQgY2FwYWNpdHkpOwogICAgICAgIEdlbmVyaWNB c3luY1N0cmVhbSAqY3JlYXRlTmV3U3RyZWFtKCk7Cn07Cgp9OwojIDM0ICIuLi8uLi9hcnRzL21j b3AvY29tbW9uLmgiIDIKIyAxICIuLi8uLi9hcnRzL21jb3AvbWNvcHV0aWxzLmgiIDEKIyAzMyAi Li4vLi4vYXJ0cy9tY29wL21jb3B1dGlscy5oIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvc3RyaW5nIiAxIDMKIyAzNCAiLi4vLi4vYXJ0cy9tY29wL21jb3B1dGlscy5oIiAyCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My92ZWN0b3IiIDEgMwojIDM1ICIuLi8uLi9hcnRzL21j b3AvbWNvcHV0aWxzLmgiIDIKCm5hbWVzcGFjZSBBcnRzIHsKCmNsYXNzIE1DT1BVdGlscyB7CnB1 YmxpYzoKIyA0OCAiLi4vLi4vYXJ0cy9tY29wL21jb3B1dGlscy5oIgogICAgICAgIHN0YXRpYyBz dGQ6OnN0cmluZyBjcmVhdGVGaWxlUGF0aChzdGQ6OnN0cmluZyBuYW1lKTsKCgoKCgoKCiAgICAg ICAgc3RhdGljIHN0ZDo6c3RyaW5nIGdldEZ1bGxIb3N0bmFtZSgpOwoKCgoKICAgICAgICBzdGF0 aWMgc3RkOjpzdHJpbmcgcmVhZENvbmZpZ0VudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlZmF1bHRWYWx1ZSA9ICIi KTsKCgoKCgoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWtlSUlEKGNvbnN0IHN0ZDo6 c3RyaW5nJiBpbnRlcmZhY2VOYW1lKTsKCgoKCiAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6dmVj dG9yPHN0ZDo6c3RyaW5nPiAqdHJhZGVyUGF0aCgpOwoKCgoKICAgICAgICBzdGF0aWMgY29uc3Qg c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICpleHRlbnNpb25QYXRoKCk7CgoKCgoKICAgICAgICBz dGF0aWMgYm9vbCB0b2tlbml6ZShjb25zdCBzdGQ6OnN0cmluZyYgbGluZSwgc3RkOjpzdHJpbmcm IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2 ZWN0b3I8c3RkOjpzdHJpbmc+JiB2YWx1ZXMpOwp9OwoKfTsKIyAzNSAiLi4vLi4vYXJ0cy9tY29w L2NvbW1vbi5oIiAyCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2FueXJlZi5oIiAxCiMgMjYgIi4uLy4u L2FydHMvbWNvcC9hbnlyZWYuaCIKIyAxICIuLi8uLi9hcnRzL21jb3AvYnVmZmVyLmgiIDEKIyAy NyAiLi4vLi4vYXJ0cy9tY29wL2FueXJlZi5oIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9zdHJpbmciIDEgMwojIDI4ICIuLi8uLi9hcnRzL21jb3AvYW55cmVmLmgiIDIKIyAzNiAi Li4vLi4vYXJ0cy9tY29wL2FueXJlZi5oIgpuYW1lc3BhY2UgQXJ0cyB7CgpjbGFzcyBBbnk7CmNs YXNzIEFueVJlZkJhc2Ugewpwcm90ZWN0ZWQ6CiAgICAgICAgdm9pZCAqZGF0YTsKCgoKCgoKICAg ICAgICBzdGQ6OnN0cmluZyBfdHlwZTsKIyA2MCAiLi4vLi4vYXJ0cy9tY29wL2FueXJlZi5oIgog ICAgICAgIGVudW0gUmVwcmVzZW50YXRpb24gewogICAgICAgICAgICAgICAgcmVwVm9pZCA9IDAs CiAgICAgICAgICAgICAgICByZXBCeXRlID0gMTAsCiAgICAgICAgICAgICAgICByZXBMb25nID0g MjAsIHJlcEludCA9IDIxICwKICAgICAgICAgICAgICAgIHJlcEZsb2F0ID0gMzAsIHJlcERvdWJs ZSA9IDMxICwKICAgICAgICAgICAgICAgIHJlcFN0cmluZyA9IDQwLCByZXBDU3RyaW5nID0gNDEg LAogICAgICAgICAgICAgICAgcmVwQm9vbCA9IDUwLAogICAgICAgICAgICAgICAgcmVwQnl0ZVNl cSA9IDUxMCwKICAgICAgICAgICAgICAgIHJlcExvbmdTZXEgPSA1MjAsCiAgICAgICAgICAgICAg ICByZXBGbG9hdFNlcSA9IDUzMCwKICAgICAgICAgICAgICAgIHJlcFN0cmluZ1NlcSA9IDU0MCwK ICAgICAgICAgICAgICAgIHJlcEJvb2xTZXEgPSA1NTAsCiAgICAgICAgICAgICAgICByZXBBbnkg PSAxMDAwCiAgICAgICAgfSByZXA7CgogICAgICAgIHZvaWQgX3dyaXRlKEJ1ZmZlciAqYikgY29u c3Q7CiAgICAgICAgdm9pZCBfcmVhZChCdWZmZXIgKmIpIGNvbnN0OwoKICAgICAgICBBbnlSZWZC YXNlKGNvbnN0IHZvaWQgKmRhdGEsIFJlcHJlc2VudGF0aW9uIHJlcCkKICAgICAgICAgICAgICAg IDogZGF0YShjb25zdF9jYXN0PHZvaWQgKj4oZGF0YSkpLCByZXAocmVwKSB7IH07CiAgICAgICAg QW55UmVmQmFzZShjb25zdCB2b2lkICpkYXRhLCBSZXByZXNlbnRhdGlvbiByZXAsIGNvbnN0IGNo YXIgKnR5cGUpCiAgICAgICAgICAgICAgICA6IGRhdGEoY29uc3RfY2FzdDx2b2lkICo+KGRhdGEp KSwgX3R5cGUodHlwZSksIHJlcChyZXApIHsgfTsKICAgICAgICBBbnlSZWZCYXNlKGNvbnN0IEFu eVJlZkJhc2UgJmNvcHkpCiAgICAgICAgICAgICAgICA6IGRhdGEoY29weS5kYXRhKSwgX3R5cGUo Y29weS5fdHlwZSksIHJlcChjb3B5LnJlcCkgeyB9CnB1YmxpYzoKICAgICAgICBzdGQ6OnN0cmlu ZyB0eXBlKCkgY29uc3Q7Cn07CgpjbGFzcyBBbnlDb25zdFJlZiA6IHB1YmxpYyBBbnlSZWZCYXNl IHsKcHVibGljOgogICAgICAgIEFueUNvbnN0UmVmKCkgOiBBbnlSZWZCYXNlKDAscmVwVm9pZCkg eyB9OwogICAgICAgIEFueUNvbnN0UmVmKGNvbnN0IG1jb3BieXRlJiB2YWx1ZSkgOiBBbnlSZWZC YXNlKCZ2YWx1ZSxyZXBCeXRlKSB7IH07CiAgICAgICAgQW55Q29uc3RSZWYoY29uc3QgaW50JiB2 YWx1ZSkgOiBBbnlSZWZCYXNlKCZ2YWx1ZSxyZXBJbnQpIHsgfTsKICAgICAgICBBbnlDb25zdFJl Zihjb25zdCBsb25nJiB2YWx1ZSkgOiBBbnlSZWZCYXNlKCZ2YWx1ZSxyZXBMb25nKSB7IH07CiAg ICAgICAgQW55Q29uc3RSZWYoY29uc3QgZmxvYXQmIHZhbHVlKSA6IEFueVJlZkJhc2UoJnZhbHVl LHJlcEZsb2F0KSB7IH07CiAgICAgICAgQW55Q29uc3RSZWYoY29uc3QgZG91YmxlJiB2YWx1ZSkg OiBBbnlSZWZCYXNlKCZ2YWx1ZSxyZXBEb3VibGUpIHsgfTsKICAgICAgICBBbnlDb25zdFJlZihj b25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwU3RyaW5nKSB7 IH07CiAgICAgICAgQW55Q29uc3RSZWYoY29uc3QgY2hhciAqdmFsdWUpIDogQW55UmVmQmFzZSh2 YWx1ZSxyZXBDU3RyaW5nKSB7IH07CiAgICAgICAgQW55Q29uc3RSZWYoY29uc3QgYm9vbCYgdmFs dWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwQm9vbCkgeyB9OwoKICAgICAgICBBbnlDb25zdFJl Zihjb25zdCBzdGQ6OnZlY3RvcjxtY29wYnl0ZT4mIHYpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiBBbnlSZWZCYXNlKCZ2LHJlcEJ5dGVTZXEpIHsgfTsKICAgICAgICBBbnlDb25zdFJlZihjb25z dCBzdGQ6OnZlY3Rvcjxsb25nPiYgdikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFueVJlZkJh c2UoJnYscmVwTG9uZ1NlcSkgeyB9OwogICAgICAgIEFueUNvbnN0UmVmKGNvbnN0IHN0ZDo6dmVj dG9yPGZsb2F0PiYgdikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFueVJlZkJhc2UoJnYscmVw RmxvYXRTZXEpIHsgfTsKICAgICAgICBBbnlDb25zdFJlZihjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6 OnN0cmluZz4mIHYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBbnlSZWZCYXNlKCZ2LHJlcFN0 cmluZ1NlcSkgeyB9OwogICAgICAgIEFueUNvbnN0UmVmKGNvbnN0IHN0ZDo6dmVjdG9yPGJvb2w+ JiB2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQW55UmVmQmFzZSgmdixyZXBCb29sU2VxKSB7 IH07CgogICAgICAgIEFueUNvbnN0UmVmKGNvbnN0IEFueSYgdmFsdWUpIDogQW55UmVmQmFzZSgm dmFsdWUscmVwQW55KSB7IH07CgogICAgICAgIEFueUNvbnN0UmVmKGNvbnN0IEFueUNvbnN0UmVm JiByZWYpIDogQW55UmVmQmFzZShyZWYpIHsgfQogICAgICAgIHZvaWQgd3JpdGUoQnVmZmVyICpi KSBjb25zdCB7IF93cml0ZShiKTsgfQp9OwoKY2xhc3MgQW55UmVmIDogcHVibGljIEFueVJlZkJh c2UgewpwdWJsaWM6CiAgICAgICAgQW55UmVmKCkgOiBBbnlSZWZCYXNlKDAscmVwVm9pZCkgeyB9 OwoKCiAgICAgICAgQW55UmVmKG1jb3BieXRlJiB2YWx1ZSkgOiBBbnlSZWZCYXNlKCZ2YWx1ZSxy ZXBCeXRlKSB7IH07CiAgICAgICAgQW55UmVmKGludCYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFs dWUscmVwSW50KSB7IH07CiAgICAgICAgQW55UmVmKGxvbmcmIHZhbHVlKSA6IEFueVJlZkJhc2Uo JnZhbHVlLHJlcExvbmcpIHsgfTsKICAgICAgICBBbnlSZWYoZmxvYXQmIHZhbHVlKSA6IEFueVJl ZkJhc2UoJnZhbHVlLHJlcEZsb2F0KSB7IH07CiAgICAgICAgQW55UmVmKGRvdWJsZSYgdmFsdWUp IDogQW55UmVmQmFzZSgmdmFsdWUscmVwRG91YmxlKSB7IH07CiAgICAgICAgQW55UmVmKHN0ZDo6 c3RyaW5nJiB2YWx1ZSkgOiBBbnlSZWZCYXNlKCZ2YWx1ZSxyZXBTdHJpbmcpIHsgfTsKICAgICAg ICBBbnlSZWYoYm9vbCYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwQm9vbCkgeyB9OwoK CiAgICAgICAgQW55UmVmKHN0ZDo6dmVjdG9yPG1jb3BieXRlPiYgdmFsdWUpIDogQW55UmVmQmFz ZSgmdmFsdWUscmVwQnl0ZVNlcSkgeyB9OwogICAgICAgIEFueVJlZihzdGQ6OnZlY3Rvcjxsb25n PiYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwTG9uZ1NlcSkgeyB9OwogICAgICAgIEFu eVJlZihzdGQ6OnZlY3RvcjxmbG9hdD4mIHZhbHVlKSA6IEFueVJlZkJhc2UoJnZhbHVlLHJlcEZs b2F0U2VxKSB7IH07CiAgICAgICAgQW55UmVmKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdmFs dWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwU3RyaW5nU2VxKXt9OwogICAgICAgIEFueVJlZihz dGQ6OnZlY3Rvcjxib29sPiYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwQm9vbFNlcSl7 fTsKCiAgICAgICAgQW55UmVmKEFueSYgdmFsdWUpIDogQW55UmVmQmFzZSgmdmFsdWUscmVwQW55 KSB7IH07CgogICAgICAgIEFueVJlZihjb25zdCBBbnlSZWYmIHJlZikgOiBBbnlSZWZCYXNlKHJl ZikgeyB9CgogICAgICAgIHZvaWQgcmVhZChCdWZmZXIgKmIpIGNvbnN0IHsgX3JlYWQoYik7IH0K ICAgICAgICB2b2lkIHdyaXRlKEJ1ZmZlciAqYikgY29uc3QgeyBfd3JpdGUoYik7IH0KfTsKCn07 CiMgMzYgIi4uLy4uL2FydHMvbWNvcC9jb21tb24uaCIgMgojIDUwICIuLi8uLi9hcnRzL21jb3Av Y29tbW9uLmgiCiMgMSAiLi4vLi4vYXJ0cy9tY29wL2NvcmUuaCIgMQoKCgoKCiMgMSAiLi4vLi4v YXJ0cy9tY29wL2NvbW1vbi5oIiAxCiMgNyAiLi4vLi4vYXJ0cy9tY29wL2NvcmUuaCIgMgoKbmFt ZXNwYWNlIEFydHMgewplbnVtIEhlYWRlck1hZ2ljIHtNQ09QX01BR0lDID0gMTI5NjI1Njg0OH07 CmVudW0gTWVzc2FnZVR5cGUge21jb3BNZXNzYWdlSW52YWxpZCA9IDAsIG1jb3BTZXJ2ZXJIZWxs byA9IDEsIG1jb3BDbGllbnRIZWxsbyA9IDIsIG1jb3BBdXRoQWNjZXB0ID0gMywgbWNvcEludm9j YXRpb24gPSA0LCBtY29wUmV0dXJuID0gNSwgbWNvcE9uZXdheUludm9jYXRpb24gPSA2fTsKZW51 bSBNZXRob2RUeXBlIHttZXRob2RPbmV3YXkgPSAxLCBtZXRob2RUd293YXkgPSAyfTsKZW51bSBB dHRyaWJ1dGVUeXBlIHtzdHJlYW1JbiA9IDEsIHN0cmVhbU91dCA9IDIsIHN0cmVhbU11bHRpID0g NCwgYXR0cmlidXRlU3RyZWFtID0gOCwgYXR0cmlidXRlQXR0cmlidXRlID0gMTYsIHN0cmVhbUFz eW5jID0gMzIsIHN0cmVhbURlZmF1bHQgPSA2NH07CmVudW0gVHlwZUlkZW50aWZpY2F0aW9uIHt0 aVVua25vd24gPSAwLCB0aVZvaWQgPSAxLCB0aUxvbmcgPSAyLCB0aUJ5dGUgPSAzLCB0aVN0cmlu ZyA9IDQsIHRpQm9vbGVhbiA9IDUsIHRpRmxvYXQgPSA2LCB0aUVudW0gPSAxMjgsIHRpVHlwZSA9 IDEyOSwgdGlJbnRlcmZhY2UgPSAxMzB9Owp9OwpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIEhlYWRl ciA6IHB1YmxpYyBBcnRzOjpUeXBlIHsKcHVibGljOgogICAgICAgIEhlYWRlcigpOwogICAgICAg IEhlYWRlcihBcnRzOjpIZWFkZXJNYWdpYyBfYV9tYWdpYywgbG9uZyBfYV9tZXNzYWdlTGVuZ3Ro LCBBcnRzOjpNZXNzYWdlVHlwZSBfYV9tZXNzYWdlVHlwZSk7CiAgICAgICAgSGVhZGVyKEFydHM6 OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICBIZWFkZXIoY29uc3QgSGVhZGVyJiBjb3B5VHlwZSk7 CiAgICAgICAgSGVhZGVyJiBvcGVyYXRvcj0oY29uc3QgSGVhZGVyJiBhc3NpZ25UeXBlKTsKICAg ICAgICBBcnRzOjpIZWFkZXJNYWdpYyBtYWdpYzsKICAgICAgICBsb25nIG1lc3NhZ2VMZW5ndGg7 CiAgICAgICAgQXJ0czo6TWVzc2FnZVR5cGUgbWVzc2FnZVR5cGU7CgoKICAgICAgICB2b2lkIHJl YWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdyaXRlVHlwZShBcnRz OjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07CgpjbGFzcyBJbnZvY2F0aW9uIDogcHVibGljIEFy dHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgSW52b2NhdGlvbigpOwogICAgICAgIEludm9jYXRp b24obG9uZyBfYV9vYmplY3RJRCwgbG9uZyBfYV9tZXRob2RJRCwgbG9uZyBfYV9yZXF1ZXN0SUQp OwogICAgICAgIEludm9jYXRpb24oQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIEludm9j YXRpb24oY29uc3QgSW52b2NhdGlvbiYgY29weVR5cGUpOwogICAgICAgIEludm9jYXRpb24mIG9w ZXJhdG9yPShjb25zdCBJbnZvY2F0aW9uJiBhc3NpZ25UeXBlKTsKICAgICAgICBsb25nIG9iamVj dElEOwogICAgICAgIGxvbmcgbWV0aG9kSUQ7CiAgICAgICAgbG9uZyByZXF1ZXN0SUQ7CgoKICAg ICAgICB2b2lkIHJlYWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdy aXRlVHlwZShBcnRzOjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07CgpjbGFzcyBPbmV3YXlJbnZv Y2F0aW9uIDogcHVibGljIEFydHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgT25ld2F5SW52b2Nh dGlvbigpOwogICAgICAgIE9uZXdheUludm9jYXRpb24obG9uZyBfYV9vYmplY3RJRCwgbG9uZyBf YV9tZXRob2RJRCk7CiAgICAgICAgT25ld2F5SW52b2NhdGlvbihBcnRzOjpCdWZmZXImIHN0cmVh bSk7CiAgICAgICAgT25ld2F5SW52b2NhdGlvbihjb25zdCBPbmV3YXlJbnZvY2F0aW9uJiBjb3B5 VHlwZSk7CiAgICAgICAgT25ld2F5SW52b2NhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IE9uZXdheUlu dm9jYXRpb24mIGFzc2lnblR5cGUpOwogICAgICAgIGxvbmcgb2JqZWN0SUQ7CiAgICAgICAgbG9u ZyBtZXRob2RJRDsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0p OwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKSBjb25zdDsKfTsK CmNsYXNzIFNlcnZlckhlbGxvIDogcHVibGljIEFydHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAg U2VydmVySGVsbG8oKTsKICAgICAgICBTZXJ2ZXJIZWxsbyhjb25zdCBzdGQ6OnN0cmluZyYgX2Ff bWNvcFZlcnNpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiBfYV9zZXJ2ZXJJRCwgY29uc3Qgc3RkOjp2 ZWN0b3I8c3RkOjpzdHJpbmc+JiBfYV9hdXRoUHJvdG9jb2xzLCBjb25zdCBzdGQ6OnN0cmluZyYg X2FfYXV0aFNlZWQpOwogICAgICAgIFNlcnZlckhlbGxvKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsK ICAgICAgICBTZXJ2ZXJIZWxsbyhjb25zdCBTZXJ2ZXJIZWxsbyYgY29weVR5cGUpOwogICAgICAg IFNlcnZlckhlbGxvJiBvcGVyYXRvcj0oY29uc3QgU2VydmVySGVsbG8mIGFzc2lnblR5cGUpOwog ICAgICAgIHN0ZDo6c3RyaW5nIG1jb3BWZXJzaW9uOwogICAgICAgIHN0ZDo6c3RyaW5nIHNlcnZl cklEOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhdXRoUHJvdG9jb2xzOwogICAg ICAgIHN0ZDo6c3RyaW5nIGF1dGhTZWVkOwoKCiAgICAgICAgdm9pZCByZWFkVHlwZShBcnRzOjpC dWZmZXImIHN0cmVhbSk7CiAgICAgICAgdm9pZCB3cml0ZVR5cGUoQXJ0czo6QnVmZmVyJiBzdHJl YW0pIGNvbnN0Owp9OwoKY2xhc3MgQ2xpZW50SGVsbG8gOiBwdWJsaWMgQXJ0czo6VHlwZSB7CnB1 YmxpYzoKICAgICAgICBDbGllbnRIZWxsbygpOwogICAgICAgIENsaWVudEhlbGxvKGNvbnN0IHN0 ZDo6c3RyaW5nJiBfYV9zZXJ2ZXJJRCwgY29uc3Qgc3RkOjpzdHJpbmcmIF9hX2F1dGhQcm90b2Nv bCwgY29uc3Qgc3RkOjpzdHJpbmcmIF9hX2F1dGhEYXRhKTsKICAgICAgICBDbGllbnRIZWxsbyhB cnRzOjpCdWZmZXImIHN0cmVhbSk7CiAgICAgICAgQ2xpZW50SGVsbG8oY29uc3QgQ2xpZW50SGVs bG8mIGNvcHlUeXBlKTsKICAgICAgICBDbGllbnRIZWxsbyYgb3BlcmF0b3I9KGNvbnN0IENsaWVu dEhlbGxvJiBhc3NpZ25UeXBlKTsKICAgICAgICBzdGQ6OnN0cmluZyBzZXJ2ZXJJRDsKICAgICAg ICBzdGQ6OnN0cmluZyBhdXRoUHJvdG9jb2w7CiAgICAgICAgc3RkOjpzdHJpbmcgYXV0aERhdGE7 CgoKICAgICAgICB2b2lkIHJlYWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2 b2lkIHdyaXRlVHlwZShBcnRzOjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07CgpjbGFzcyBBdXRo QWNjZXB0IDogcHVibGljIEFydHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgQXV0aEFjY2VwdCgp OwogICAgICAgIEF1dGhBY2NlcHQoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBfYV9o aW50cyk7CiAgICAgICAgQXV0aEFjY2VwdChBcnRzOjpCdWZmZXImIHN0cmVhbSk7CiAgICAgICAg QXV0aEFjY2VwdChjb25zdCBBdXRoQWNjZXB0JiBjb3B5VHlwZSk7CiAgICAgICAgQXV0aEFjY2Vw dCYgb3BlcmF0b3I9KGNvbnN0IEF1dGhBY2NlcHQmIGFzc2lnblR5cGUpOwogICAgICAgIHN0ZDo6 dmVjdG9yPHN0ZDo6c3RyaW5nPiBoaW50czsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6 QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3Ry ZWFtKSBjb25zdDsKfTsKCmNsYXNzIE9iamVjdFJlZmVyZW5jZSA6IHB1YmxpYyBBcnRzOjpUeXBl IHsKcHVibGljOgogICAgICAgIE9iamVjdFJlZmVyZW5jZSgpOwogICAgICAgIE9iamVjdFJlZmVy ZW5jZShjb25zdCBzdGQ6OnN0cmluZyYgX2Ffc2VydmVySUQsIGxvbmcgX2Ffb2JqZWN0SUQsIGNv bnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgX2FfdXJscyk7CiAgICAgICAgT2JqZWN0UmVm ZXJlbmNlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICBPYmplY3RSZWZlcmVuY2UoY29u c3QgT2JqZWN0UmVmZXJlbmNlJiBjb3B5VHlwZSk7CiAgICAgICAgT2JqZWN0UmVmZXJlbmNlJiBv cGVyYXRvcj0oY29uc3QgT2JqZWN0UmVmZXJlbmNlJiBhc3NpZ25UeXBlKTsKICAgICAgICBzdGQ6 OnN0cmluZyBzZXJ2ZXJJRDsKICAgICAgICBsb25nIG9iamVjdElEOwogICAgICAgIHN0ZDo6dmVj dG9yPHN0ZDo6c3RyaW5nPiB1cmxzOwoKCiAgICAgICAgdm9pZCByZWFkVHlwZShBcnRzOjpCdWZm ZXImIHN0cmVhbSk7CiAgICAgICAgdm9pZCB3cml0ZVR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0p IGNvbnN0Owp9OwoKY2xhc3MgUGFyYW1EZWYgOiBwdWJsaWMgQXJ0czo6VHlwZSB7CnB1YmxpYzoK ICAgICAgICBQYXJhbURlZigpOwogICAgICAgIFBhcmFtRGVmKGNvbnN0IHN0ZDo6c3RyaW5nJiBf YV90eXBlLCBjb25zdCBzdGQ6OnN0cmluZyYgX2FfbmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3Rk OjpzdHJpbmc+JiBfYV9oaW50cyk7CiAgICAgICAgUGFyYW1EZWYoQXJ0czo6QnVmZmVyJiBzdHJl YW0pOwogICAgICAgIFBhcmFtRGVmKGNvbnN0IFBhcmFtRGVmJiBjb3B5VHlwZSk7CiAgICAgICAg UGFyYW1EZWYmIG9wZXJhdG9yPShjb25zdCBQYXJhbURlZiYgYXNzaWduVHlwZSk7CiAgICAgICAg c3RkOjpzdHJpbmcgdHlwZTsKICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgICAgIHN0ZDo6 dmVjdG9yPHN0ZDo6c3RyaW5nPiBoaW50czsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6 QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3Ry ZWFtKSBjb25zdDsKfTsKCmNsYXNzIE1ldGhvZERlZiA6IHB1YmxpYyBBcnRzOjpUeXBlIHsKcHVi bGljOgogICAgICAgIE1ldGhvZERlZigpOwogICAgICAgIE1ldGhvZERlZihjb25zdCBzdGQ6OnN0 cmluZyYgX2FfbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIF9hX3R5cGUsIEFydHM6Ok1ldGhvZFR5 cGUgX2FfZmxhZ3MsIGNvbnN0IHN0ZDo6dmVjdG9yPEFydHM6OlBhcmFtRGVmPiYgX2Ffc2lnbmF0 dXJlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIF9hX2hpbnRzKTsKICAgICAgICBN ZXRob2REZWYoQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIE1ldGhvZERlZihjb25zdCBN ZXRob2REZWYmIGNvcHlUeXBlKTsKICAgICAgICBNZXRob2REZWYmIG9wZXJhdG9yPShjb25zdCBN ZXRob2REZWYmIGFzc2lnblR5cGUpOwogICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICAgICAg c3RkOjpzdHJpbmcgdHlwZTsKICAgICAgICBBcnRzOjpNZXRob2RUeXBlIGZsYWdzOwogICAgICAg IHN0ZDo6dmVjdG9yPEFydHM6OlBhcmFtRGVmPiBzaWduYXR1cmU7CiAgICAgICAgc3RkOjp2ZWN0 b3I8c3RkOjpzdHJpbmc+IGhpbnRzOwoKCiAgICAgICAgdm9pZCByZWFkVHlwZShBcnRzOjpCdWZm ZXImIHN0cmVhbSk7CiAgICAgICAgdm9pZCB3cml0ZVR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0p IGNvbnN0Owp9OwoKY2xhc3MgQXR0cmlidXRlRGVmIDogcHVibGljIEFydHM6OlR5cGUgewpwdWJs aWM6CiAgICAgICAgQXR0cmlidXRlRGVmKCk7CiAgICAgICAgQXR0cmlidXRlRGVmKGNvbnN0IHN0 ZDo6c3RyaW5nJiBfYV9uYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgX2FfdHlwZSwgQXJ0czo6QXR0 cmlidXRlVHlwZSBfYV9mbGFncywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBfYV9o aW50cyk7CiAgICAgICAgQXR0cmlidXRlRGVmKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAg ICBBdHRyaWJ1dGVEZWYoY29uc3QgQXR0cmlidXRlRGVmJiBjb3B5VHlwZSk7CiAgICAgICAgQXR0 cmlidXRlRGVmJiBvcGVyYXRvcj0oY29uc3QgQXR0cmlidXRlRGVmJiBhc3NpZ25UeXBlKTsKICAg ICAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CiAgICAgICAg QXJ0czo6QXR0cmlidXRlVHlwZSBmbGFnczsKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu Zz4gaGludHM7CgoKICAgICAgICB2b2lkIHJlYWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsK ICAgICAgICB2b2lkIHdyaXRlVHlwZShBcnRzOjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07Cgpj bGFzcyBJbnRlcmZhY2VEZWYgOiBwdWJsaWMgQXJ0czo6VHlwZSB7CnB1YmxpYzoKICAgICAgICBJ bnRlcmZhY2VEZWYoKTsKICAgICAgICBJbnRlcmZhY2VEZWYoY29uc3Qgc3RkOjpzdHJpbmcmIF9h X25hbWUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgX2FfaW5oZXJpdGVkSW50ZXJm YWNlcywgY29uc3Qgc3RkOjp2ZWN0b3I8QXJ0czo6TWV0aG9kRGVmPiYgX2FfbWV0aG9kcywgY29u c3Qgc3RkOjp2ZWN0b3I8QXJ0czo6QXR0cmlidXRlRGVmPiYgX2FfYXR0cmlidXRlcywgY29uc3Qg c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBfYV9kZWZhdWx0UG9ydHMsIGNvbnN0IHN0ZDo6dmVj dG9yPHN0ZDo6c3RyaW5nPiYgX2FfaGludHMpOwogICAgICAgIEludGVyZmFjZURlZihBcnRzOjpC dWZmZXImIHN0cmVhbSk7CiAgICAgICAgSW50ZXJmYWNlRGVmKGNvbnN0IEludGVyZmFjZURlZiYg Y29weVR5cGUpOwogICAgICAgIEludGVyZmFjZURlZiYgb3BlcmF0b3I9KGNvbnN0IEludGVyZmFj ZURlZiYgYXNzaWduVHlwZSk7CiAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICBzdGQ6 OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5oZXJpdGVkSW50ZXJmYWNlczsKICAgICAgICBzdGQ6OnZl Y3RvcjxBcnRzOjpNZXRob2REZWY+IG1ldGhvZHM7CiAgICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6 QXR0cmlidXRlRGVmPiBhdHRyaWJ1dGVzOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n PiBkZWZhdWx0UG9ydHM7CiAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGhpbnRzOwoK CiAgICAgICAgdm9pZCByZWFkVHlwZShBcnRzOjpCdWZmZXImIHN0cmVhbSk7CiAgICAgICAgdm9p ZCB3cml0ZVR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0pIGNvbnN0Owp9OwoKY2xhc3MgVHlwZUNv bXBvbmVudCA6IHB1YmxpYyBBcnRzOjpUeXBlIHsKcHVibGljOgogICAgICAgIFR5cGVDb21wb25l bnQoKTsKICAgICAgICBUeXBlQ29tcG9uZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBfYV90eXBlLCBj b25zdCBzdGQ6OnN0cmluZyYgX2FfbmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ JiBfYV9oaW50cyk7CiAgICAgICAgVHlwZUNvbXBvbmVudChBcnRzOjpCdWZmZXImIHN0cmVhbSk7 CiAgICAgICAgVHlwZUNvbXBvbmVudChjb25zdCBUeXBlQ29tcG9uZW50JiBjb3B5VHlwZSk7CiAg ICAgICAgVHlwZUNvbXBvbmVudCYgb3BlcmF0b3I9KGNvbnN0IFR5cGVDb21wb25lbnQmIGFzc2ln blR5cGUpOwogICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CiAgICAgICAgc3RkOjpzdHJpbmcgbmFt ZTsKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaGludHM7CgoKICAgICAgICB2b2lk IHJlYWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdyaXRlVHlwZShB cnRzOjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07CgpjbGFzcyBUeXBlRGVmIDogcHVibGljIEFy dHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgVHlwZURlZigpOwogICAgICAgIFR5cGVEZWYoY29u c3Qgc3RkOjpzdHJpbmcmIF9hX25hbWUsIGNvbnN0IHN0ZDo6dmVjdG9yPEFydHM6OlR5cGVDb21w b25lbnQ+JiBfYV9jb250ZW50cywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBfYV9o aW50cyk7CiAgICAgICAgVHlwZURlZihBcnRzOjpCdWZmZXImIHN0cmVhbSk7CiAgICAgICAgVHlw ZURlZihjb25zdCBUeXBlRGVmJiBjb3B5VHlwZSk7CiAgICAgICAgVHlwZURlZiYgb3BlcmF0b3I9 KGNvbnN0IFR5cGVEZWYmIGFzc2lnblR5cGUpOwogICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAg ICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6VHlwZUNvbXBvbmVudD4gY29udGVudHM7CiAgICAgICAg c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGhpbnRzOwoKCiAgICAgICAgdm9pZCByZWFkVHlwZShB cnRzOjpCdWZmZXImIHN0cmVhbSk7CiAgICAgICAgdm9pZCB3cml0ZVR5cGUoQXJ0czo6QnVmZmVy JiBzdHJlYW0pIGNvbnN0Owp9OwoKY2xhc3MgRW51bUNvbXBvbmVudCA6IHB1YmxpYyBBcnRzOjpU eXBlIHsKcHVibGljOgogICAgICAgIEVudW1Db21wb25lbnQoKTsKICAgICAgICBFbnVtQ29tcG9u ZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBfYV9uYW1lLCBsb25nIF9hX3ZhbHVlLCBjb25zdCBzdGQ6 OnZlY3RvcjxzdGQ6OnN0cmluZz4mIF9hX2hpbnRzKTsKICAgICAgICBFbnVtQ29tcG9uZW50KEFy dHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICBFbnVtQ29tcG9uZW50KGNvbnN0IEVudW1Db21w b25lbnQmIGNvcHlUeXBlKTsKICAgICAgICBFbnVtQ29tcG9uZW50JiBvcGVyYXRvcj0oY29uc3Qg RW51bUNvbXBvbmVudCYgYXNzaWduVHlwZSk7CiAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAg ICAgICBsb25nIHZhbHVlOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBoaW50czsK CgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZv aWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKSBjb25zdDsKfTsKCmNsYXNzIEVudW1E ZWYgOiBwdWJsaWMgQXJ0czo6VHlwZSB7CnB1YmxpYzoKICAgICAgICBFbnVtRGVmKCk7CiAgICAg ICAgRW51bURlZihjb25zdCBzdGQ6OnN0cmluZyYgX2FfbmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8 QXJ0czo6RW51bUNvbXBvbmVudD4mIF9hX2NvbnRlbnRzLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6 OnN0cmluZz4mIF9hX2hpbnRzKTsKICAgICAgICBFbnVtRGVmKEFydHM6OkJ1ZmZlciYgc3RyZWFt KTsKICAgICAgICBFbnVtRGVmKGNvbnN0IEVudW1EZWYmIGNvcHlUeXBlKTsKICAgICAgICBFbnVt RGVmJiBvcGVyYXRvcj0oY29uc3QgRW51bURlZiYgYXNzaWduVHlwZSk7CiAgICAgICAgc3RkOjpz dHJpbmcgbmFtZTsKICAgICAgICBzdGQ6OnZlY3RvcjxBcnRzOjpFbnVtQ29tcG9uZW50PiBjb250 ZW50czsKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaGludHM7CgoKICAgICAgICB2 b2lkIHJlYWRUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdyaXRlVHlw ZShBcnRzOjpCdWZmZXImIHN0cmVhbSkgY29uc3Q7Cn07CgpjbGFzcyBNb2R1bGVEZWYgOiBwdWJs aWMgQXJ0czo6VHlwZSB7CnB1YmxpYzoKICAgICAgICBNb2R1bGVEZWYoKTsKICAgICAgICBNb2R1 bGVEZWYoY29uc3Qgc3RkOjpzdHJpbmcmIF9hX21vZHVsZU5hbWUsIGNvbnN0IHN0ZDo6dmVjdG9y PEFydHM6OkVudW1EZWY+JiBfYV9lbnVtcywgY29uc3Qgc3RkOjp2ZWN0b3I8QXJ0czo6VHlwZURl Zj4mIF9hX3R5cGVzLCBjb25zdCBzdGQ6OnZlY3RvcjxBcnRzOjpJbnRlcmZhY2VEZWY+JiBfYV9p bnRlcmZhY2VzLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIF9hX2hpbnRzKTsKICAg ICAgICBNb2R1bGVEZWYoQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIE1vZHVsZURlZihj b25zdCBNb2R1bGVEZWYmIGNvcHlUeXBlKTsKICAgICAgICBNb2R1bGVEZWYmIG9wZXJhdG9yPShj b25zdCBNb2R1bGVEZWYmIGFzc2lnblR5cGUpOwogICAgICAgIHN0ZDo6c3RyaW5nIG1vZHVsZU5h bWU7CiAgICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6RW51bURlZj4gZW51bXM7CiAgICAgICAgc3Rk Ojp2ZWN0b3I8QXJ0czo6VHlwZURlZj4gdHlwZXM7CiAgICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6 SW50ZXJmYWNlRGVmPiBpbnRlcmZhY2VzOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n PiBoaW50czsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwog ICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKSBjb25zdDsKfTsKCmNs YXNzIEFueSA6IHB1YmxpYyBBcnRzOjpUeXBlIHsKcHVibGljOgogICAgICAgIEFueSgpOwogICAg ICAgIEFueShjb25zdCBzdGQ6OnN0cmluZyYgX2FfdHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8QXJ0 czo6bWNvcGJ5dGU+JiBfYV92YWx1ZSk7CiAgICAgICAgQW55KEFydHM6OkJ1ZmZlciYgc3RyZWFt KTsKICAgICAgICBBbnkoY29uc3QgQW55JiBjb3B5VHlwZSk7CiAgICAgICAgQW55JiBvcGVyYXRv cj0oY29uc3QgQW55JiBhc3NpZ25UeXBlKTsKICAgICAgICBzdGQ6OnN0cmluZyB0eXBlOwogICAg ICAgIHN0ZDo6dmVjdG9yPEFydHM6Om1jb3BieXRlPiB2YWx1ZTsKCgogICAgICAgIHZvaWQgcmVh ZFR5cGUoQXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6 OkJ1ZmZlciYgc3RyZWFtKSBjb25zdDsKfTsKCmNsYXNzIFRyYWRlckVudHJ5IDogcHVibGljIEFy dHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgVHJhZGVyRW50cnkoKTsKICAgICAgICBUcmFkZXJF bnRyeShjb25zdCBzdGQ6OnN0cmluZyYgX2FfaW50ZXJmYWNlTmFtZSwgY29uc3Qgc3RkOjp2ZWN0 b3I8c3RkOjpzdHJpbmc+JiBfYV9saW5lcyk7CiAgICAgICAgVHJhZGVyRW50cnkoQXJ0czo6QnVm ZmVyJiBzdHJlYW0pOwogICAgICAgIFRyYWRlckVudHJ5KGNvbnN0IFRyYWRlckVudHJ5JiBjb3B5 VHlwZSk7CiAgICAgICAgVHJhZGVyRW50cnkmIG9wZXJhdG9yPShjb25zdCBUcmFkZXJFbnRyeSYg YXNzaWduVHlwZSk7CiAgICAgICAgc3RkOjpzdHJpbmcgaW50ZXJmYWNlTmFtZTsKICAgICAgICBz dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGluZXM7CgoKICAgICAgICB2b2lkIHJlYWRUeXBlKEFy dHM6OkJ1ZmZlciYgc3RyZWFtKTsKICAgICAgICB2b2lkIHdyaXRlVHlwZShBcnRzOjpCdWZmZXIm IHN0cmVhbSkgY29uc3Q7Cn07Cgp9OwpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIEludGVyZmFjZVJl cG87CmNsYXNzIEludGVyZmFjZVJlcG9WMjsKY2xhc3MgRmxvd1N5c3RlbVNlbmRlcjsKY2xhc3Mg Rmxvd1N5c3RlbVJlY2VpdmVyOwpjbGFzcyBGbG93U3lzdGVtOwpjbGFzcyBHbG9iYWxDb21tOwpj bGFzcyBUbXBHbG9iYWxDb21tOwpjbGFzcyBUcmFkZXJPZmZlcjsKY2xhc3MgVHJhZGVyUXVlcnk7 CmNsYXNzIExvYWRlcjsKCmNsYXNzIEludGVyZmFjZVJlcG9fYmFzZSA6IHZpcnR1YWwgcHVibGlj IEFydHM6Ok9iamVjdF9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n IF9JSUQ7CgogICAgICAgIHN0YXRpYyBJbnRlcmZhY2VSZXBvX2Jhc2UgKl9jcmVhdGUoY29uc3Qg c3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OkludGVyZmFjZVJlcG8iKTsKICAgICAgICBz dGF0aWMgSW50ZXJmYWNlUmVwb19iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3Ry ZWYpOwogICAgICAgIHN0YXRpYyBJbnRlcmZhY2VSZXBvX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFy dHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMg SW50ZXJmYWNlUmVwb19iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYg b2JqZWN0KTsKICAgICAgICBpbmxpbmUgSW50ZXJmYWNlUmVwb19iYXNlICpfY29weSgpIHsKICAg ICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAg ICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2 ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1 YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAg ICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIGxv bmcgaW5zZXJ0TW9kdWxlKGNvbnN0IEFydHM6Ok1vZHVsZURlZiYgbmV3TW9kdWxlKSA9IDA7CiAg ICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZU1vZHVsZShsb25nIG1vZHVsZUlEKSA9IDA7CiAgICAg ICAgdmlydHVhbCBBcnRzOjpJbnRlcmZhY2VEZWYgcXVlcnlJbnRlcmZhY2UoY29uc3Qgc3RkOjpz dHJpbmcmIG5hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIEFydHM6OlR5cGVEZWYgcXVlcnlUeXBl KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCBBcnRzOjpFbnVt RGVmIHF1ZXJ5RW51bShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgPSAwOwogICAgICAgIHZpcnR1 YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogcXVlcnlDaGlsZHJlbihjb25zdCBzdGQ6OnN0 cmluZyYgbmFtZSkgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ ICogcXVlcnlJbnRlcmZhY2VzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3Rk OjpzdHJpbmc+ICogcXVlcnlUeXBlcygpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9y PHN0ZDo6c3RyaW5nPiAqIHF1ZXJ5RW51bXMoKSA9IDA7Cn07CgpjbGFzcyBJbnRlcmZhY2VSZXBv X3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBJbnRlcmZhY2VSZXBvX2Jhc2UsIHZpcnR1YWwgcHVibGlj IEFydHM6Ok9iamVjdF9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIEludGVyZmFjZVJlcG9fc3R1 YigpOwoKcHVibGljOgogICAgICAgIEludGVyZmFjZVJlcG9fc3R1YihBcnRzOjpDb25uZWN0aW9u ICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgbG9uZyBpbnNlcnRNb2R1bGUo Y29uc3QgQXJ0czo6TW9kdWxlRGVmJiBuZXdNb2R1bGUpOwogICAgICAgIHZvaWQgcmVtb3ZlTW9k dWxlKGxvbmcgbW9kdWxlSUQpOwogICAgICAgIEFydHM6OkludGVyZmFjZURlZiBxdWVyeUludGVy ZmFjZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgQXJ0czo6VHlwZURlZiBxdWVy eVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIEFydHM6OkVudW1EZWYgcXVl cnlFbnVtKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6 OnN0cmluZz4gKiBxdWVyeUNoaWxkcmVuKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgICAg ICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gKiBxdWVyeUludGVyZmFjZXMoKTsKICAgICAgICBz dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gKiBxdWVyeVR5cGVzKCk7CiAgICAgICAgc3RkOjp2ZWN0 b3I8c3RkOjpzdHJpbmc+ICogcXVlcnlFbnVtcygpOwp9OwoKY2xhc3MgSW50ZXJmYWNlUmVwb19z a2VsIDogdmlydHVhbCBwdWJsaWMgSW50ZXJmYWNlUmVwb19iYXNlLCB2aXJ0dWFsIHB1YmxpYyBB cnRzOjpPYmplY3Rfc2tlbCB7CnB1YmxpYzoKICAgICAgICBJbnRlcmZhY2VSZXBvX3NrZWwoKTsK CiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgpOwogICAgICAg IHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxl V2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9pZCBfYnVp bGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1 ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07CiMgMSAiLi4v Li4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMzIgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVu Y2UuaCIKIyAxICIuLi8uLi9hcnRzL21jb3AvY29tbW9uLmgiIDEKIyAzMyAiLi4vLi4vYXJ0cy9t Y29wL3JlZmVyZW5jZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zdHJpbmci IDEgMwojIDM0ICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDIKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL3ZlY3RvciIgMSAzCiMgMzUgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVu Y2UuaCIgMgoKbmFtZXNwYWNlIEFydHMgewoKCmNsYXNzIFJlZmVyZW5jZSB7CnByaXZhdGU6CiAg ICAgICAgT2JqZWN0UmVmZXJlbmNlIG15cmVmOwogICAgICAgIHN0ZDo6c3RyaW5nIG15czsKICAg ICAgICBib29sIHN0ck1vZGU7CnB1YmxpYzoKCiAgICAgICAgaW5saW5lIGV4cGxpY2l0IFJlZmVy ZW5jZShjb25zdCBPYmplY3RSZWZlcmVuY2UmIHJlZikgewogICAgICAgICAgICAgICAgbXlyZWY9 cmVmOwogICAgICAgICAgICAgICAgc3RyTW9kZT1mYWxzZTsKICAgICAgICB9CgogICAgICAgIGlu bGluZSBleHBsaWNpdCBSZWZlcmVuY2UoY29uc3Qgc3RkOjpzdHJpbmcmIHMpIHsKICAgICAgICAg ICAgICAgIG15cz1zOwogICAgICAgICAgICAgICAgc3RyTW9kZT10cnVlOwogICAgICAgIH0KCiAg ICAgICAgaW5saW5lIGV4cGxpY2l0IFJlZmVyZW5jZShjb25zdCBjaGFyKiBjKSB7CiAgICAgICAg ICAgICAgICBteXM9YzsKICAgICAgICAgICAgICAgIHN0ck1vZGU9dHJ1ZTsKICAgICAgICB9CiAg ICAgICAgaW5saW5lIFJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IHN0ZDo6c3RyaW5nJiBzKSB7 CiAgICAgICAgICAgICAgICBteXM9czsKICAgICAgICAgICAgICAgIHN0ck1vZGU9dHJ1ZTsKICAg ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIFJlZmVy ZW5jZSYgb3BlcmF0b3I9KGNvbnN0IGNoYXIqYykgewogICAgICAgICAgICAgICAgbXlzPWM7CiAg ICAgICAgICAgICAgICBzdHJNb2RlPXRydWU7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7 CiAgICAgICAgfQogICAgICAgIGlubGluZSBib29sIGlzU3RyaW5nKCkgY29uc3Qge3JldHVybiBz dHJNb2RlO30KCiAgICAgICAgaW5saW5lIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmcoKSBjb25z dCB7cmV0dXJuIG15czt9CgogICAgICAgIGlubGluZSBjb25zdCBPYmplY3RSZWZlcmVuY2UmIHJl ZmVyZW5jZSgpIGNvbnN0IHtyZXR1cm4gbXlyZWY7fQp9OwoKCmNsYXNzIFN1YkNsYXNzIHsKcHJp dmF0ZToKICAgICAgICBzdGQ6OnN0cmluZyBteXM7CnB1YmxpYzoKCiAgICAgICAgaW5saW5lIGV4 cGxpY2l0IFN1YkNsYXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBzKSA6IG15cyhzKSB7fQogICAgICAg IGlubGluZSBleHBsaWNpdCBTdWJDbGFzcyhjb25zdCBjaGFyKiBjKSA6IG15cyhjKSB7fQogICAg ICAgIGlubGluZSBTdWJDbGFzcyYgb3BlcmF0b3I9KGNvbnN0IHN0ZDo6c3RyaW5nJiBzKSB7bXlz PXM7IHJldHVybiAqdGhpczt9CiAgICAgICAgaW5saW5lIFN1YkNsYXNzJiBvcGVyYXRvcj0oY29u c3QgY2hhcipjKSB7bXlzPWM7IHJldHVybiAqdGhpczt9CgogICAgICAgIGlubGluZSBjb25zdCBz dGQ6OnN0cmluZyYgc3RyaW5nKCkgY29uc3Qge3JldHVybiBteXM7fQp9OwoKCmNsYXNzIFNjaGVk dWxlTm9kZTsKY2xhc3MgRmxvd1N5c3RlbTsKCgoKCgoKY2xhc3MgT2JqZWN0IHsKcHJvdGVjdGVk OgoKICAgICAgICBjbGFzcyBQb29sIHsKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBPYmpl Y3Q7CiAgICAgICAgICAgICAgICBPYmplY3RfYmFzZSogKCpjcmVhdG9yKSgpOwogICAgICAgICAg ICAgICAgYm9vbCBjcmVhdGVkOwogICAgICAgICAgICAgICAgaW50IGNvdW50OwogICAgICAgIHB1 YmxpYzoKICAgICAgICAgICAgICAgIE9iamVjdF9iYXNlKiBiYXNlOwogICAgICAgICAgICAgICAg aW5saW5lIFBvb2woT2JqZWN0X2Jhc2UqIGIpCiAgICAgICAgICAgICAgICAgICAgICAgIDogY3Jl YXRvcigwKSwgY3JlYXRlZCh0cnVlKSwgY291bnQoMSksIGJhc2UoYikge30KICAgICAgICAgICAg ICAgIGlubGluZSBQb29sKE9iamVjdF9iYXNlKiAoKmNvcikoKSkKICAgICAgICAgICAgICAgICAg ICAgICAgOiBjcmVhdG9yKGNvciksIGNyZWF0ZWQoZmFsc2UpLCBjb3VudCgxKSwgYmFzZSgwKSB7 fQogICAgICAgICAgICAgICAgaW5saW5lIHZvaWQgSW5jKCkge2NvdW50Kys7fQogICAgICAgICAg ICAgICAgaW5saW5lIHZvaWQgRGVjKCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1j b3VudD09MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJhc2UpIGJhc2Ut Pl9yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXM7 CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIGlubGluZSB2b2lkIGNoZWNrY3JlYXRlKCkgewogICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIWNyZWF0ZWQpIHtiYXNlID0gY3JlYXRvcigpOyBjcmVhdGVkPXRydWU7fQogICAgICAgICAg ICAgICAgfQogICAgICAgIH0gKl9wb29sOwoKICAgICAgICBpbmxpbmUgT2JqZWN0KE9iamVjdF9i YXNlKiAoKmNvcikoKSkgewogICAgICAgICAgICAgICAgX3Bvb2wgPSBuZXcgUG9vbChjb3IpOwog ICAgICAgIH0KICAgICAgICBpbmxpbmUgT2JqZWN0KFBvb2wqIHApIDogX3Bvb2wocCkgewogICAg ICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgT2JqZWN0 KFBvb2wmIHApIDogX3Bvb2woJnApIHsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAg ICAgICB9CiAgICAgICAgaW5saW5lIE9iamVjdChPYmplY3RfYmFzZSogYikgewogICAgICAgICAg ICAgICAgX3Bvb2wgPSBuZXcgUG9vbChiKTsKICAgICAgICB9CnB1YmxpYzoKICAgICAgICB0eXBl ZGVmIE9iamVjdF9iYXNlIF9iYXNlX2NsYXNzOwoKCgogICAgICAgIGlubGluZSBQb29sKiBfZ2V0 X3Bvb2woKSBjb25zdCB7cmV0dXJuIF9wb29sO30KCiAgICAgICAgaW5saW5lIH5PYmplY3QoKSB7 CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgfQoKCgoKICAgICAgICBpbmxp bmUgT2JqZWN0KGNvbnN0IFN1YkNsYXNzJiBzKSB7CiAgICAgICAgICAgICAgICBfcG9vbCA9IG5l dyBQb29sKE9iamVjdF9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKTsKICAgICAgICB9CiAgICAg ICAgaW5saW5lIE9iamVjdChjb25zdCBSZWZlcmVuY2UgJnIpIHsKICAgICAgICAgICAgICAgIF9w b29sID0gbmV3IFBvb2woci5pc1N0cmluZygpPyhPYmplY3RfYmFzZTo6X2Zyb21TdHJpbmcoci5z dHJpbmcoKSkpOihPYmplY3RfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVl KSkpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgT2JqZWN0KGNvbnN0IE9iamVjdCYgdGFyZ2V0 KSA6IF9wb29sKHRhcmdldC5fcG9vbCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwog ICAgICAgIH0KICAgICAgICBpbmxpbmUgT2JqZWN0KCkgewogICAgICAgICAgICAgICAgX3Bvb2wg PSBuZXcgUG9vbCgoT2JqZWN0X2Jhc2UqKTApOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgT2Jq ZWN0JiBvcGVyYXRvcj0oY29uc3QgT2JqZWN0JiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlm IChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9w b29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAg ICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICAgIH0KCgogICAgICAgIGlubGluZSBPYmplY3RfYmFzZSogX2Jhc2UoKSBjb25zdCB7CiAgICAg ICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIHJldHVybiBf cG9vbC0+YmFzZTsKICAgICAgICB9CgoKICAgICAgICBpbmxpbmUgYm9vbCBpc051bGwoKSBjb25z dCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAg IHJldHVybiAhKF9wb29sLT5iYXNlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIGJvb2wgZXJy b3IoKSBjb25zdCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAg ICByZXR1cm4gX3Bvb2wtPmJhc2UgJiYgX3Bvb2wtPmJhc2UtPl9lcnJvcigpOwogICAgICAgIH0K CgogICAgICAgIGlubGluZSBib29sIF9pc0VxdWFsKGNvbnN0IE9iamVjdCYgb3RoZXIpIGNvbnN0 IHsKICAgICAgICAgICAgICAgIGlmKGlzTnVsbCgpICE9IG90aGVyLmlzTnVsbCgpKSByZXR1cm4g ZmFsc2U7CgoKCiAgICAgICAgICAgICAgICBpZighaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiBfcG9vbC0+YmFzZS0+X2lzRXF1YWwob3RoZXIuX3Bvb2wtPmJhc2UpOwoK CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgoKCgoKICAgICAgICBpbmxp bmUgQnVmZmVyICpfYWxsb2NDdXN0b21NZXNzYWdlKGxvbmcgaGFuZGxlcklEKSBjb25zdCB7CiAg ICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgICgodm9p ZCkgMCk7CiAgICAgICAgICAgICAgICByZXR1cm4gX3Bvb2wtPmJhc2UtPl9hbGxvY0N1c3RvbU1l c3NhZ2UoaGFuZGxlcklEKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSB2b2lkIF9zZW5kQ3Vz dG9tTWVzc2FnZShCdWZmZXIgKmRhdGEpIGNvbnN0IHsKICAgICAgICAgICAgICAgIF9wb29sLT5j aGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAg IF9wb29sLT5iYXNlLT5fc2VuZEN1c3RvbU1lc3NhZ2UoZGF0YSk7CiAgICAgICAgfQoKCgogICAg ICAgIGlubGluZSBsb25nIF9sb29rdXBNZXRob2QoY29uc3QgTWV0aG9kRGVmJiBtZXRob2REZWYp IGNvbnN0IHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAg ICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIHJldHVybiBfcG9vbC0+YmFzZS0+X2xv b2t1cE1ldGhvZChtZXRob2REZWYpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgc3RkOjpzdHJp bmcgX2ludGVyZmFjZU5hbWUoKSBjb25zdCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tj cmVhdGUoKTsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICByZXR1 cm4gX3Bvb2wtPmJhc2UtPl9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgfQogICAgICAgIGlubGlu ZSBJbnRlcmZhY2VEZWYgX3F1ZXJ5SW50ZXJmYWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBj b25zdCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAg ICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICByZXR1cm4gX3Bvb2wtPmJhc2UtPl9xdWVy eUludGVyZmFjZShuYW1lKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIFR5cGVEZWYgX3F1ZXJ5 VHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bv b2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAg ICAgICAgcmV0dXJuIF9wb29sLT5iYXNlLT5fcXVlcnlUeXBlKG5hbWUpOwogICAgICAgIH0KICAg ICAgICBpbmxpbmUgRW51bURlZiBfcXVlcnlFbnVtKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBj b25zdCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAg ICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICByZXR1cm4gX3Bvb2wtPmJhc2UtPl9xdWVy eUVudW0obmFtZSk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgX3RvU3Ry aW5nKCkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAg ICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgcmV0dXJuIF9wb29sLT5iYXNl LT5fdG9TdHJpbmcoKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIHRvU3Ry aW5nKCkgY29uc3Qge3JldHVybiBfdG9TdHJpbmcoKTt9CgoKICAgICAgICBpbmxpbmUgdm9pZCBj YWxjdWxhdGVCbG9jayh1bnNpZ25lZCBsb25nIGN5Y2xlcykgY29uc3QgewogICAgICAgICAgICAg ICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAg ICAgICAgICAgICAgX3Bvb2wtPmJhc2UtPmNhbGN1bGF0ZUJsb2NrKGN5Y2xlcyk7CiAgICAgICAg fQoKICAgICAgICBpbmxpbmUgU2NoZWR1bGVOb2RlICpfbm9kZSgpIGNvbnN0IHsKICAgICAgICAg ICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsK ICAgICAgICAgICAgICAgIHJldHVybiBfcG9vbC0+YmFzZS0+X25vZGUoKTsKICAgICAgICB9CgoK ICAgICAgICBGbG93U3lzdGVtIF9mbG93U3lzdGVtKCkgY29uc3Q7CgogICAgICAgIGlubGluZSB2 b2lkIF9jb3B5UmVtb3RlKCkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3Jl YXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3Bvb2wt PmJhc2UtPl9jb3B5UmVtb3RlKCk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIF91c2VS ZW1vdGUoKSBjb25zdCB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAg ICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcG9vbC0+YmFzZS0+X3Vz ZVJlbW90ZSgpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBfcmVsZWFzZVJlbW90ZSgp IGNvbnN0IHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAg ICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIF9wb29sLT5iYXNlLT5fcmVsZWFzZVJl bW90ZSgpOwogICAgICAgIH0KCgogICAgICAgIGlubGluZSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu Zz4gX2RlZmF1bHRQb3J0c0luKCkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNr Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgcmV0 dXJuIF9wb29sLT5iYXNlLT5fZGVmYXVsdFBvcnRzSW4oKTsKICAgICAgICB9CiAgICAgICAgaW5s aW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Qgewog ICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICAoKHZv aWQpIDApOwogICAgICAgICAgICAgICAgcmV0dXJuIF9wb29sLT5iYXNlLT5fZGVmYXVsdFBvcnRz T3V0KCk7CiAgICAgICAgfQoKCiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIF9hZGRDaGlsZChB cnRzOjpPYmplY3QgY2hpbGQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdCB7CiAgICAg ICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgICgodm9pZCkg MCk7CiAgICAgICAgICAgICAgICByZXR1cm4gX3Bvb2wtPmJhc2UtPl9hZGRDaGlsZChjaGlsZCwg bmFtZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSBib29sIF9yZW1vdmVDaGlsZChjb25zdCBz dGQ6OnN0cmluZyYgbmFtZSkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3Jl YXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgcmV0dXJu IF9wb29sLT5iYXNlLT5fcmVtb3ZlQ2hpbGQobmFtZSk7CiAgICAgICAgfQogICAgICAgIGlubGlu ZSBBcnRzOjpPYmplY3QgX2dldENoaWxkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdCB7 CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgICgo dm9pZCkgMCk7CiAgICAgICAgICAgICAgICByZXR1cm4gX3Bvb2wtPmJhc2UtPl9nZXRDaGlsZChu YW1lKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAq IF9xdWVyeUNoaWxkcmVuKCkgY29uc3QgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3Jl YXRlKCk7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgcmV0dXJu IF9wb29sLT5iYXNlLT5fcXVlcnlDaGlsZHJlbigpOwogICAgICAgIH0KIyAzMzIgIi4uLy4uL2Fy dHMvbWNvcC9yZWZlcmVuY2UuaCIKICAgICAgICBpbmxpbmUgc3RhdGljIE9iamVjdCBudWxsKCkg e3JldHVybiBPYmplY3QoKE9iamVjdF9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBP YmplY3QgX2Zyb21fYmFzZShPYmplY3RfYmFzZSogYikge3JldHVybiBPYmplY3QoYik7fQp9OwoK CmNsYXNzIER5bmFtaWNDYXN0IHsKcHJpdmF0ZToKICAgICAgICBPYmplY3Qgb2JqOwpwdWJsaWM6 CiAgICAgICAgaW5saW5lIGV4cGxpY2l0IER5bmFtaWNDYXN0KGNvbnN0IE9iamVjdCYgbykgOiBv Ymoobykge30KICAgICAgICBpbmxpbmUgY29uc3QgT2JqZWN0JiBvYmplY3QoKSBjb25zdCB7cmV0 dXJuIG9iajt9Cn07Cgp9OwojIDM4MyAiLi4vLi4vYXJ0cy9tY29wL2NvcmUuaCIgMgpuYW1lc3Bh Y2UgQXJ0cyB7CmNsYXNzIEludGVyZmFjZVJlcG8gOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJp dmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAg ICAgSW50ZXJmYWNlUmVwb19iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIEludGVyZmFjZVJl cG9fYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3Jl YXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAg ICAgICAgICBfY2FjaGU9KEludGVyZmFjZVJlcG9fYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChJ bnRlcmZhY2VSZXBvX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQp IDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAg ICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIEludGVyZmFjZVJlcG8oSW50ZXJmYWNl UmVwb19iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgog ICAgICAgIHR5cGVkZWYgSW50ZXJmYWNlUmVwb19iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBp bmxpbmUgSW50ZXJmYWNlUmVwbygpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDAp IHt9CiAgICAgICAgaW5saW5lIEludGVyZmFjZVJlcG8oY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMp IDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChJbnRlcmZhY2VSZXBvX2Jhc2U6Ol9jcmVh dGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgSW50ZXJmYWNlUmVw byhjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVj dChyLmlzU3RyaW5nKCk/KEludGVyZmFjZVJlcG9fYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmco KSkpOihJbnRlcmZhY2VSZXBvX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1 ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEludGVyZmFjZVJlcG8oY29uc3QgQXJ0 czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KEludGVyZmFjZVJlcG9fYmFzZTo6X2Zy b21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBJ bnRlcmZhY2VSZXBvKGNvbnN0IEludGVyZmFjZVJlcG8mIHRhcmdldCkgOiBBcnRzOjpPYmplY3Qo dGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIElu dGVyZmFjZVJlcG8oQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2Nh Y2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBJbnRlcmZhY2VSZXBvIG51bGwoKSB7cmV0 dXJuIEludGVyZmFjZVJlcG8oKEludGVyZmFjZVJlcG9fYmFzZSopMCk7fQogICAgICAgIGlubGlu ZSBzdGF0aWMgSW50ZXJmYWNlUmVwbyBfZnJvbV9iYXNlKEludGVyZmFjZVJlcG9fYmFzZSogYikg e3JldHVybiBJbnRlcmZhY2VSZXBvKGIpO30KICAgICAgICBpbmxpbmUgSW50ZXJmYWNlUmVwbyYg b3BlcmF0b3I9KGNvbnN0IEludGVyZmFjZVJlcG8mIHRhcmdldCkgewogICAgICAgICAgICAgICAg aWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAg X3Bvb2wtPkRlYygpOwogICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAg ICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wt PkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBp bmxpbmUgSW50ZXJmYWNlUmVwb19iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpf bWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBsb25nIGluc2VydE1vZHVsZShjb25zdCBB cnRzOjpNb2R1bGVEZWYmIG5ld01vZHVsZSk7CiAgICAgICAgaW5saW5lIHZvaWQgcmVtb3ZlTW9k dWxlKGxvbmcgbW9kdWxlSUQpOwogICAgICAgIGlubGluZSBBcnRzOjpJbnRlcmZhY2VEZWYgcXVl cnlJbnRlcmZhY2UoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIGlubGluZSBBcnRz OjpUeXBlRGVmIHF1ZXJ5VHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5s aW5lIEFydHM6OkVudW1EZWYgcXVlcnlFbnVtKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAg ICAgICBpbmxpbmUgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogcXVlcnlDaGlsZHJlbihjb25z dCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry aW5nPiAqIHF1ZXJ5SW50ZXJmYWNlcygpOwogICAgICAgIGlubGluZSBzdGQ6OnZlY3RvcjxzdGQ6 OnN0cmluZz4gKiBxdWVyeVR5cGVzKCk7CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6 c3RyaW5nPiAqIHF1ZXJ5RW51bXMoKTsKfTsKCmNsYXNzIEludGVyZmFjZVJlcG9WMl9iYXNlIDog dmlydHVhbCBwdWJsaWMgQXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlIHsKcHVibGljOgogICAgICAg IHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBJbnRlcmZhY2VSZXBv VjJfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6SW50 ZXJmYWNlUmVwb1YyIik7CiAgICAgICAgc3RhdGljIEludGVyZmFjZVJlcG9WMl9iYXNlICpfZnJv bVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBJbnRlcmZhY2VS ZXBvVjJfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9v bCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBJbnRlcmZhY2VSZXBvVjJfYmFzZSAqX2Zyb21E eW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5lIElu dGVyZmFjZVJlcG9WMl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7 CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK ICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZh dWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp bmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWdu ZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIEFydHM6OlR5cGVJZGVudGlmaWNhdGlvbiBp ZGVudGlmeVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpID0gMDsKfTsKCmNsYXNzIEludGVy ZmFjZVJlcG9WMl9zdHViIDogdmlydHVhbCBwdWJsaWMgSW50ZXJmYWNlUmVwb1YyX2Jhc2UsIHZp cnR1YWwgcHVibGljIEFydHM6OkludGVyZmFjZVJlcG9fc3R1YiB7CnByb3RlY3RlZDoKICAgICAg ICBJbnRlcmZhY2VSZXBvVjJfc3R1YigpOwoKcHVibGljOgogICAgICAgIEludGVyZmFjZVJlcG9W Ml9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAg ICAgICBBcnRzOjpUeXBlSWRlbnRpZmljYXRpb24gaWRlbnRpZnlUeXBlKGNvbnN0IHN0ZDo6c3Ry aW5nJiBuYW1lKTsKfTsKCmNsYXNzIEludGVyZmFjZVJlcG9WMl9za2VsIDogdmlydHVhbCBwdWJs aWMgSW50ZXJmYWNlUmVwb1YyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OkludGVyZmFjZVJl cG9fc2tlbCB7CnB1YmxpYzoKICAgICAgICBJbnRlcmZhY2VSZXBvVjJfc2tlbCgpOwoKICAgICAg ICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpz dHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNv bnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhv ZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFy dHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRz L21jb3AvcmVmZXJlbmNlLmgiIDEKIyA0ODEgIi4uLy4uL2FydHMvbWNvcC9jb3JlLmgiIDIKbmFt ZXNwYWNlIEFydHMgewpjbGFzcyBJbnRlcmZhY2VSZXBvVjIgOiBwdWJsaWMgQXJ0czo6T2JqZWN0 IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7 CiAgICAgICAgSW50ZXJmYWNlUmVwb1YyX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgSW50 ZXJmYWNlUmVwb1YyX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29s LT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgX2NhY2hlPShJbnRlcmZhY2VSZXBvVjJfYmFzZSAqKV9wb29sLT5i YXNlLT5fY2FzdChJbnRlcmZhY2VSZXBvVjJfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAg ICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1 cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgSW50ZXJmYWNl UmVwb1YyKEludGVyZmFjZVJlcG9WMl9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hl KDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgSW50ZXJmYWNlUmVwb1YyX2Jhc2UgX2Jh c2VfY2xhc3M7CgogICAgICAgIGlubGluZSBJbnRlcmZhY2VSZXBvVjIoKSA6IEFydHM6Ok9iamVj dChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBJbnRlcmZhY2VSZXBvVjIo Y29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChJ bnRlcmZhY2VSZXBvVjJfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQog ICAgICAgIGlubGluZSBJbnRlcmZhY2VSZXBvVjIoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6 CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhJbnRlcmZhY2VSZXBv VjJfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihJbnRlcmZhY2VSZXBvVjJfYmFzZTo6 X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAg ICBpbmxpbmUgSW50ZXJmYWNlUmVwb1YyKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFy dHM6Ok9iamVjdChJbnRlcmZhY2VSZXBvVjJfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVj dCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBJbnRlcmZhY2VSZXBvVjIoY29uc3Qg SW50ZXJmYWNlUmVwb1YyJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9j YWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBJbnRlcmZhY2VSZXBvVjIoQXJ0 czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAg ICAgaW5saW5lIHN0YXRpYyBJbnRlcmZhY2VSZXBvVjIgbnVsbCgpIHtyZXR1cm4gSW50ZXJmYWNl UmVwb1YyKChJbnRlcmZhY2VSZXBvVjJfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMg SW50ZXJmYWNlUmVwb1YyIF9mcm9tX2Jhc2UoSW50ZXJmYWNlUmVwb1YyX2Jhc2UqIGIpIHtyZXR1 cm4gSW50ZXJmYWNlUmVwb1YyKGIpO30KICAgICAgICBpbmxpbmUgSW50ZXJmYWNlUmVwb1YyJiBv cGVyYXRvcj0oY29uc3QgSW50ZXJmYWNlUmVwb1YyJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAg IGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAg IF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAg ICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29s LT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAg aW5saW5lIG9wZXJhdG9yIEFydHM6OkludGVyZmFjZVJlcG8oKSBjb25zdCB7IHJldHVybiBBcnRz OjpJbnRlcmZhY2VSZXBvKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgSW50ZXJmYWNlUmVwb1Yy X2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAg ICAgICAgaW5saW5lIGxvbmcgaW5zZXJ0TW9kdWxlKGNvbnN0IEFydHM6Ok1vZHVsZURlZiYgbmV3 TW9kdWxlKTsKICAgICAgICBpbmxpbmUgdm9pZCByZW1vdmVNb2R1bGUobG9uZyBtb2R1bGVJRCk7 CiAgICAgICAgaW5saW5lIEFydHM6OkludGVyZmFjZURlZiBxdWVyeUludGVyZmFjZShjb25zdCBz dGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5saW5lIEFydHM6OlR5cGVEZWYgcXVlcnlUeXBl KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgICAgICBpbmxpbmUgQXJ0czo6RW51bURlZiBx dWVyeUVudW0oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIGlubGluZSBzdGQ6OnZl Y3RvcjxzdGQ6OnN0cmluZz4gKiBxdWVyeUNoaWxkcmVuKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1l KTsKICAgICAgICBpbmxpbmUgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogcXVlcnlJbnRlcmZh Y2VzKCk7CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIHF1ZXJ5VHlw ZXMoKTsKICAgICAgICBpbmxpbmUgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogcXVlcnlFbnVt cygpOwogICAgICAgIGlubGluZSBBcnRzOjpUeXBlSWRlbnRpZmljYXRpb24gaWRlbnRpZnlUeXBl KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKfTsKCmNsYXNzIEZsb3dTeXN0ZW1TZW5kZXJfYmFz ZSA6IHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9iYXNlIHsKcHVibGljOgogICAgICAgIHN0 YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBGbG93U3lzdGVtU2VuZGVy X2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OkZsb3dT eXN0ZW1TZW5kZXIiKTsKICAgICAgICBzdGF0aWMgRmxvd1N5c3RlbVNlbmRlcl9iYXNlICpfZnJv bVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBGbG93U3lzdGVt U2VuZGVyX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJv b2wgbmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMgRmxvd1N5c3RlbVNlbmRlcl9iYXNlICpfZnJv bUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUg Rmxvd1N5c3RlbVNlbmRlcl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkg MCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp czsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9k ZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpz dHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5z aWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc2VkKCkgPSAwOwog ICAgICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCkgPSAwOwp9OwoKY2xhc3MgRmxvd1N5c3Rl bVNlbmRlcl9zdHViIDogdmlydHVhbCBwdWJsaWMgRmxvd1N5c3RlbVNlbmRlcl9iYXNlLCB2aXJ0 dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBGbG93U3lz dGVtU2VuZGVyX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBGbG93U3lzdGVtU2VuZGVyX3N0dWIo QXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIHZv aWQgcHJvY2Vzc2VkKCk7CiAgICAgICAgdm9pZCBkaXNjb25uZWN0KCk7Cn07CgpjbGFzcyBGbG93 U3lzdGVtU2VuZGVyX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBGbG93U3lzdGVtU2VuZGVyX2Jhc2Us IHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9za2VsIHsKcHVibGljOgogICAgICAgIEZsb3dT eXN0ZW1TZW5kZXJfc2tlbCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFj ZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAg ICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1l KTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRj aChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9k SUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA1ODMgIi4u Ly4uL2FydHMvbWNvcC9jb3JlLmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBGbG93U3lzdGVt U2VuZGVyIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFy dHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIEZsb3dTeXN0ZW1TZW5kZXJfYmFz ZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBGbG93U3lzdGVtU2VuZGVyX2Jhc2UgKl9tZXRob2Rf Y2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAg ICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShG bG93U3lzdGVtU2VuZGVyX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoRmxvd1N5c3RlbVNlbmRl cl9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJv dGVjdGVkOgogICAgICAgIGlubGluZSBGbG93U3lzdGVtU2VuZGVyKEZsb3dTeXN0ZW1TZW5kZXJf YmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAg ICB0eXBlZGVmIEZsb3dTeXN0ZW1TZW5kZXJfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5s aW5lIEZsb3dTeXN0ZW1TZW5kZXIoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgw KSB7fQogICAgICAgIGlubGluZSBGbG93U3lzdGVtU2VuZGVyKGNvbnN0IEFydHM6OlN1YkNsYXNz JiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoRmxvd1N5c3RlbVNlbmRlcl9iYXNl OjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEZsb3dT eXN0ZW1TZW5kZXIoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBB cnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhGbG93U3lzdGVtU2VuZGVyX2Jhc2U6Ol9mcm9tU3Ry aW5nKHIuc3RyaW5nKCkpKTooRmxvd1N5c3RlbVNlbmRlcl9iYXNlOjpfZnJvbVJlZmVyZW5jZShy LnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBGbG93U3lz dGVtU2VuZGVyKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChGbG93 U3lzdGVtU2VuZGVyX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUo MCkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbVNlbmRlcihjb25zdCBGbG93U3lzdGVtU2Vu ZGVyJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQu X2NhY2hlKSB7fQogICAgICAgIGlubGluZSBGbG93U3lzdGVtU2VuZGVyKEFydHM6Ok9iamVjdDo6 UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBz dGF0aWMgRmxvd1N5c3RlbVNlbmRlciBudWxsKCkge3JldHVybiBGbG93U3lzdGVtU2VuZGVyKChG bG93U3lzdGVtU2VuZGVyX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIEZsb3dTeXN0 ZW1TZW5kZXIgX2Zyb21fYmFzZShGbG93U3lzdGVtU2VuZGVyX2Jhc2UqIGIpIHtyZXR1cm4gRmxv d1N5c3RlbVNlbmRlcihiKTt9CiAgICAgICAgaW5saW5lIEZsb3dTeXN0ZW1TZW5kZXImIG9wZXJh dG9yPShjb25zdCBGbG93U3lzdGVtU2VuZGVyJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlm IChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9w b29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAg ICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5J bmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5s aW5lIEZsb3dTeXN0ZW1TZW5kZXJfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6 X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgdm9pZCBwcm9jZXNzZWQoKTsKICAgICAg ICBpbmxpbmUgdm9pZCBkaXNjb25uZWN0KCk7Cn07CgpjbGFzcyBGbG93U3lzdGVtUmVjZWl2ZXJf YmFzZSA6IHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9iYXNlIHsKcHVibGljOgogICAgICAg IHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBGbG93U3lzdGVtUmVj ZWl2ZXJfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6 Rmxvd1N5c3RlbVJlY2VpdmVyIik7CiAgICAgICAgc3RhdGljIEZsb3dTeXN0ZW1SZWNlaXZlcl9i YXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBG bG93U3lzdGVtUmVjZWl2ZXJfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJl bmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBGbG93U3lzdGVtUmVjZWl2 ZXJfYmFzZSAqX2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAg ICAgICAgaW5saW5lIEZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNlICpfY29weSgpIHsKICAgICAgICAg ICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAg ICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8 c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3Rk Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAg dm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIGxvbmcgcmVj ZWl2ZUhhbmRsZXJJRCgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCgpID0g MDsKfTsKCmNsYXNzIEZsb3dTeXN0ZW1SZWNlaXZlcl9zdHViIDogdmlydHVhbCBwdWJsaWMgRmxv d1N5c3RlbVJlY2VpdmVyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9zdHViIHsK cHJvdGVjdGVkOgogICAgICAgIEZsb3dTeXN0ZW1SZWNlaXZlcl9zdHViKCk7CgpwdWJsaWM6CiAg ICAgICAgRmxvd1N5c3RlbVJlY2VpdmVyX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlv biwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIGxvbmcgcmVjZWl2ZUhhbmRsZXJJRCgpOwogICAg ICAgIHZvaWQgZGlzY29ubmVjdCgpOwp9OwoKY2xhc3MgRmxvd1N5c3RlbVJlY2VpdmVyX3NrZWwg OiB2aXJ0dWFsIHB1YmxpYyBGbG93U3lzdGVtUmVjZWl2ZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMg QXJ0czo6T2JqZWN0X3NrZWwgewpwcm90ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIHJlY2Vp dmVIYW5kbGVySURfY2hhbmdlZChsb25nIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1p dF9jaGFuZ2VkKCJyZWNlaXZlSGFuZGxlcklEX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9 CgpwdWJsaWM6CiAgICAgICAgRmxvd1N5c3RlbVJlY2VpdmVyX3NrZWwoKTsKCiAgICAgICAgc3Rh dGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5n IF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBz dGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJs ZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpC dWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29w L3JlZmVyZW5jZS5oIiAxCiMgNjgyICIuLi8uLi9hcnRzL21jb3AvY29yZS5oIiAyCm5hbWVzcGFj ZSBBcnRzIHsKY2xhc3MgRmxvd1N5c3RlbVJlY2VpdmVyIDogcHVibGljIEFydHM6Ok9iamVjdCB7 CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwog ICAgICAgIEZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIEZs b3dTeXN0ZW1SZWNlaXZlcl9iYXNlICpfbWV0aG9kX2NhbGwoKSB7CiAgICAgICAgICAgICAgICBf cG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIGlmKF9wb29sLT5iYXNlKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2UgKilf cG9vbC0+YmFzZS0+X2Nhc3QoRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2U6Ol9JSUQpOwogICAgICAg ICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5l IEZsb3dTeXN0ZW1SZWNlaXZlcihGbG93U3lzdGVtUmVjZWl2ZXJfYmFzZSogYikgOiBBcnRzOjpP YmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIEZsb3dTeXN0 ZW1SZWNlaXZlcl9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbVJl Y2VpdmVyKCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBp bmxpbmUgRmxvd1N5c3RlbVJlY2VpdmVyKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAg ICAgICAgICAgICBBcnRzOjpPYmplY3QoRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2U6Ol9jcmVhdGUo cy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbVJlY2Vp dmVyKGNvbnN0IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2Jq ZWN0KHIuaXNTdHJpbmcoKT8oRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2U6Ol9mcm9tU3RyaW5nKHIu c3RyaW5nKCkpKTooRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVm ZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEZsb3dTeXN0ZW1S ZWNlaXZlcihjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoRmxvd1N5 c3RlbVJlY2VpdmVyX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUo MCkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbVJlY2VpdmVyKGNvbnN0IEZsb3dTeXN0ZW1S ZWNlaXZlciYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFy Z2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbVJlY2VpdmVyKEFydHM6Ok9i amVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlu bGluZSBzdGF0aWMgRmxvd1N5c3RlbVJlY2VpdmVyIG51bGwoKSB7cmV0dXJuIEZsb3dTeXN0ZW1S ZWNlaXZlcigoRmxvd1N5c3RlbVJlY2VpdmVyX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3Rh dGljIEZsb3dTeXN0ZW1SZWNlaXZlciBfZnJvbV9iYXNlKEZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNl KiBiKSB7cmV0dXJuIEZsb3dTeXN0ZW1SZWNlaXZlcihiKTt9CiAgICAgICAgaW5saW5lIEZsb3dT eXN0ZW1SZWNlaXZlciYgb3BlcmF0b3I9KGNvbnN0IEZsb3dTeXN0ZW1SZWNlaXZlciYgdGFyZ2V0 KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRo aXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9 IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAg ICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7 CiAgICAgICAgfQogICAgICAgIGlubGluZSBGbG93U3lzdGVtUmVjZWl2ZXJfYmFzZSogX2Jhc2Uo KSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUg bG9uZyByZWNlaXZlSGFuZGxlcklEKCk7CiAgICAgICAgaW5saW5lIHZvaWQgZGlzY29ubmVjdCgp Owp9OwoKY2xhc3MgRmxvd1N5c3RlbV9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0 X2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAg ICAgc3RhdGljIEZsb3dTeXN0ZW1fYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3Vi Q2xhc3MgPSAiQXJ0czo6Rmxvd1N5c3RlbSIpOwogICAgICAgIHN0YXRpYyBGbG93U3lzdGVtX2Jh c2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIEZs b3dTeXN0ZW1fYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwg Ym9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBGbG93U3lzdGVtX2Jhc2UgKl9mcm9tRHlu YW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBGbG93 U3lzdGVtX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAg ICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAg IH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0 c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2Rl ZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25n IGlpZCk7CgogICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydE9iamVjdChBcnRzOjpPYmplY3Qgbm9k ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wT2JqZWN0KEFydHM6Ok9iamVjdCBub2Rl KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNvbm5lY3RPYmplY3QoQXJ0czo6T2JqZWN0IHNv dXJjZU9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZVBvcnQsIEFydHM6Ok9iamVjdCBk ZXN0T2JqZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdFBvcnQpID0gMDsKICAgICAgICB2aXJ0 dWFsIHZvaWQgZGlzY29ubmVjdE9iamVjdChBcnRzOjpPYmplY3Qgc291cmNlT2JqZWN0LCBjb25z dCBzdGQ6OnN0cmluZyYgc291cmNlUG9ydCwgQXJ0czo6T2JqZWN0IGRlc3RPYmplY3QsIGNvbnN0 IHN0ZDo6c3RyaW5nJiBkZXN0UG9ydCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0czo6QXR0cmli dXRlVHlwZSBxdWVyeUZsYWdzKEFydHM6Ok9iamVjdCBub2RlLCBjb25zdCBzdGQ6OnN0cmluZyYg cG9ydCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGbG9hdFZhbHVlKEFydHM6Ok9iamVj dCBub2RlLCBjb25zdCBzdGQ6OnN0cmluZyYgcG9ydCwgZmxvYXQgdmFsdWUpID0gMDsKICAgICAg ICB2aXJ0dWFsIEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlciBjcmVhdGVSZWNlaXZlcihBcnRzOjpP YmplY3QgZGVzdE9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlc3RQb3J0LCBBcnRzOjpGbG93 U3lzdGVtU2VuZGVyIHNlbmRlcikgPSAwOwp9OwoKY2xhc3MgRmxvd1N5c3RlbV9zdHViIDogdmly dHVhbCBwdWJsaWMgRmxvd1N5c3RlbV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rf c3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBGbG93U3lzdGVtX3N0dWIoKTsKCnB1YmxpYzoKICAg ICAgICBGbG93U3lzdGVtX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBv YmplY3RJRCk7CgogICAgICAgIHZvaWQgc3RhcnRPYmplY3QoQXJ0czo6T2JqZWN0IG5vZGUpOwog ICAgICAgIHZvaWQgc3RvcE9iamVjdChBcnRzOjpPYmplY3Qgbm9kZSk7CiAgICAgICAgdm9pZCBj b25uZWN0T2JqZWN0KEFydHM6Ok9iamVjdCBzb3VyY2VPYmplY3QsIGNvbnN0IHN0ZDo6c3RyaW5n JiBzb3VyY2VQb3J0LCBBcnRzOjpPYmplY3QgZGVzdE9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcm IGRlc3RQb3J0KTsKICAgICAgICB2b2lkIGRpc2Nvbm5lY3RPYmplY3QoQXJ0czo6T2JqZWN0IHNv dXJjZU9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZVBvcnQsIEFydHM6Ok9iamVjdCBk ZXN0T2JqZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdFBvcnQpOwogICAgICAgIEFydHM6OkF0 dHJpYnV0ZVR5cGUgcXVlcnlGbGFncyhBcnRzOjpPYmplY3Qgbm9kZSwgY29uc3Qgc3RkOjpzdHJp bmcmIHBvcnQpOwogICAgICAgIHZvaWQgc2V0RmxvYXRWYWx1ZShBcnRzOjpPYmplY3Qgbm9kZSwg Y29uc3Qgc3RkOjpzdHJpbmcmIHBvcnQsIGZsb2F0IHZhbHVlKTsKICAgICAgICBBcnRzOjpGbG93 U3lzdGVtUmVjZWl2ZXIgY3JlYXRlUmVjZWl2ZXIoQXJ0czo6T2JqZWN0IGRlc3RPYmplY3QsIGNv bnN0IHN0ZDo6c3RyaW5nJiBkZXN0UG9ydCwgQXJ0czo6Rmxvd1N5c3RlbVNlbmRlciBzZW5kZXIp Owp9OwoKY2xhc3MgRmxvd1N5c3RlbV9za2VsIDogdmlydHVhbCBwdWJsaWMgRmxvd1N5c3RlbV9i YXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc2tlbCB7CnB1YmxpYzoKICAgICAgICBG bG93U3lzdGVtX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VO YW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAg Ym9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7 CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2go QXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElE KTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgNzg1ICIuLi8u Li9hcnRzL21jb3AvY29yZS5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgRmxvd1N5c3RlbSA6 IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmpl Y3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBGbG93U3lzdGVtX2Jhc2UgKl9jYWNoZTsKICAg ICAgICBpbmxpbmUgRmxvd1N5c3RlbV9iYXNlICpfbWV0aG9kX2NhbGwoKSB7CiAgICAgICAgICAg ICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIGlmKF9wb29sLT5iYXNl KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oRmxvd1N5c3RlbV9iYXNlICopX3Bv b2wtPmJhc2UtPl9jYXN0KEZsb3dTeXN0ZW1fYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAg ICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1 cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgRmxvd1N5c3Rl bShGbG93U3lzdGVtX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpw dWJsaWM6CiAgICAgICAgdHlwZWRlZiBGbG93U3lzdGVtX2Jhc2UgX2Jhc2VfY2xhc3M7CgogICAg ICAgIGlubGluZSBGbG93U3lzdGVtKCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUo MCkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbShjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykg OgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KEZsb3dTeXN0ZW1fYmFzZTo6X2NyZWF0ZShz LnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBGbG93U3lzdGVtKGNvbnN0 IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNT dHJpbmcoKT8oRmxvd1N5c3RlbV9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KEZsb3dT eXN0ZW1fYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUo MCkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbShjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYg YykgOiBBcnRzOjpPYmplY3QoRmxvd1N5c3RlbV9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2Jq ZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEZsb3dTeXN0ZW0oY29uc3QgRmxv d1N5c3RlbSYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFy Z2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgRmxvd1N5c3RlbShBcnRzOjpPYmplY3Q6OlBv b2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3Rh dGljIEZsb3dTeXN0ZW0gbnVsbCgpIHtyZXR1cm4gRmxvd1N5c3RlbSgoRmxvd1N5c3RlbV9iYXNl KikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBGbG93U3lzdGVtIF9mcm9tX2Jhc2UoRmxvd1N5 c3RlbV9iYXNlKiBiKSB7cmV0dXJuIEZsb3dTeXN0ZW0oYik7fQogICAgICAgIGlubGluZSBGbG93 U3lzdGVtJiBvcGVyYXRvcj0oY29uc3QgRmxvd1N5c3RlbSYgdGFyZ2V0KSB7CiAgICAgICAgICAg ICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAgICAgICAgICAg ICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdldC5fcG9vbDsK ICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAgICAgICAgICBf cG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAg ICAgIGlubGluZSBGbG93U3lzdGVtX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hl Ol9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnRPYmplY3QoQXJ0czo6 T2JqZWN0IG5vZGUpOwogICAgICAgIGlubGluZSB2b2lkIHN0b3BPYmplY3QoQXJ0czo6T2JqZWN0 IG5vZGUpOwogICAgICAgIGlubGluZSB2b2lkIGNvbm5lY3RPYmplY3QoQXJ0czo6T2JqZWN0IHNv dXJjZU9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZVBvcnQsIEFydHM6Ok9iamVjdCBk ZXN0T2JqZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdFBvcnQpOwogICAgICAgIGlubGluZSB2 b2lkIGRpc2Nvbm5lY3RPYmplY3QoQXJ0czo6T2JqZWN0IHNvdXJjZU9iamVjdCwgY29uc3Qgc3Rk OjpzdHJpbmcmIHNvdXJjZVBvcnQsIEFydHM6Ok9iamVjdCBkZXN0T2JqZWN0LCBjb25zdCBzdGQ6 OnN0cmluZyYgZGVzdFBvcnQpOwogICAgICAgIGlubGluZSBBcnRzOjpBdHRyaWJ1dGVUeXBlIHF1 ZXJ5RmxhZ3MoQXJ0czo6T2JqZWN0IG5vZGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwb3J0KTsKICAg ICAgICBpbmxpbmUgdm9pZCBzZXRGbG9hdFZhbHVlKEFydHM6Ok9iamVjdCBub2RlLCBjb25zdCBz dGQ6OnN0cmluZyYgcG9ydCwgZmxvYXQgdmFsdWUpOwogICAgICAgIGlubGluZSBBcnRzOjpGbG93 U3lzdGVtUmVjZWl2ZXIgY3JlYXRlUmVjZWl2ZXIoQXJ0czo6T2JqZWN0IGRlc3RPYmplY3QsIGNv bnN0IHN0ZDo6c3RyaW5nJiBkZXN0UG9ydCwgQXJ0czo6Rmxvd1N5c3RlbVNlbmRlciBzZW5kZXIp Owp9OwoKY2xhc3MgR2xvYmFsQ29tbV9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0 X2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAg ICAgc3RhdGljIEdsb2JhbENvbW1fYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3Vi Q2xhc3MgPSAiQXJ0czo6R2xvYmFsQ29tbSIpOwogICAgICAgIHN0YXRpYyBHbG9iYWxDb21tX2Jh c2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIEds b2JhbENvbW1fYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwg Ym9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBHbG9iYWxDb21tX2Jhc2UgKl9mcm9tRHlu YW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBHbG9i YWxDb21tX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAg ICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAg IH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0 c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2Rl ZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25n IGlpZCk7CgogICAgICAgIHZpcnR1YWwgYm9vbCBwdXQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlh YmxlLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6 c3RyaW5nIGdldChjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUpID0gMDsKICAgICAgICB2aXJ0 dWFsIHZvaWQgZXJhc2UoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlKSA9IDA7Cn07CgpjbGFz cyBHbG9iYWxDb21tX3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBHbG9iYWxDb21tX2Jhc2UsIHZpcnR1 YWwgcHVibGljIEFydHM6Ok9iamVjdF9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIEdsb2JhbENv bW1fc3R1YigpOwoKcHVibGljOgogICAgICAgIEdsb2JhbENvbW1fc3R1YihBcnRzOjpDb25uZWN0 aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgYm9vbCBwdXQoY29uc3Qg c3RkOjpzdHJpbmcmIHZhcmlhYmxlLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpOwogICAgICAg IHN0ZDo6c3RyaW5nIGdldChjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUpOwogICAgICAgIHZv aWQgZXJhc2UoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlKTsKfTsKCmNsYXNzIEdsb2JhbENv bW1fc2tlbCA6IHZpcnR1YWwgcHVibGljIEdsb2JhbENvbW1fYmFzZSwgdmlydHVhbCBwdWJsaWMg QXJ0czo6T2JqZWN0X3NrZWwgewpwdWJsaWM6CiAgICAgICAgR2xvYmFsQ29tbV9za2VsKCk7Cgog ICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBz dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdp dGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxk TWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVz dCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4u L2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDg4NSAiLi4vLi4vYXJ0cy9tY29wL2NvcmUuaCIg MgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIEdsb2JhbENvbW0gOiBwdWJsaWMgQXJ0czo6T2JqZWN0 IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7 CiAgICAgICAgR2xvYmFsQ29tbV9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIEdsb2JhbENv bW1fYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3Jl YXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAg ICAgICAgICBfY2FjaGU9KEdsb2JhbENvbW1fYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChHbG9i YWxDb21tX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9 Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIEdsb2JhbENvbW0oR2xvYmFsQ29tbV9iYXNlKiBi KSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVk ZWYgR2xvYmFsQ29tbV9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgR2xvYmFsQ29t bSgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l IEdsb2JhbENvbW0oY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFy dHM6Ok9iamVjdChHbG9iYWxDb21tX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUo MCkge30KICAgICAgICBpbmxpbmUgR2xvYmFsQ29tbShjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIp IDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KEdsb2JhbENvbW1f YmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihHbG9iYWxDb21tX2Jhc2U6Ol9mcm9tUmVm ZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l IEdsb2JhbENvbW0oY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KEds b2JhbENvbW1fYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7 fQogICAgICAgIGlubGluZSBHbG9iYWxDb21tKGNvbnN0IEdsb2JhbENvbW0mIHRhcmdldCkgOiBB cnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAg ICAgaW5saW5lIEdsb2JhbENvbW0oQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVj dChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBHbG9iYWxDb21tIG51bGwo KSB7cmV0dXJuIEdsb2JhbENvbW0oKEdsb2JhbENvbW1fYmFzZSopMCk7fQogICAgICAgIGlubGlu ZSBzdGF0aWMgR2xvYmFsQ29tbSBfZnJvbV9iYXNlKEdsb2JhbENvbW1fYmFzZSogYikge3JldHVy biBHbG9iYWxDb21tKGIpO30KICAgICAgICBpbmxpbmUgR2xvYmFsQ29tbSYgb3BlcmF0b3I9KGNv bnN0IEdsb2JhbENvbW0mIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRh cmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwog ICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2Fj aGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAg ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgR2xvYmFsQ29t bV9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9Cgog ICAgICAgIGlubGluZSBib29sIHB1dChjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUsIGNvbnN0 IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIGdldChjb25z dCBzdGQ6OnN0cmluZyYgdmFyaWFibGUpOwogICAgICAgIGlubGluZSB2b2lkIGVyYXNlKGNvbnN0 IHN0ZDo6c3RyaW5nJiB2YXJpYWJsZSk7Cn07CgpjbGFzcyBUbXBHbG9iYWxDb21tX2Jhc2UgOiB2 aXJ0dWFsIHB1YmxpYyBBcnRzOjpHbG9iYWxDb21tX2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3Rh dGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFRtcEdsb2JhbENvbW1fYmFz ZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6VG1wR2xvYmFs Q29tbSIpOwogICAgICAgIHN0YXRpYyBUbXBHbG9iYWxDb21tX2Jhc2UgKl9mcm9tU3RyaW5nKHN0 ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFRtcEdsb2JhbENvbW1fYmFzZSAq X2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7 CgogICAgICAgIHN0YXRpYyBUbXBHbG9iYWxDb21tX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29u c3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBUbXBHbG9iYWxDb21tX2Jh c2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAg IF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAg ICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29u c3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0 c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7Cgp9 OwoKY2xhc3MgVG1wR2xvYmFsQ29tbV9zdHViIDogdmlydHVhbCBwdWJsaWMgVG1wR2xvYmFsQ29t bV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpHbG9iYWxDb21tX3N0dWIgewpwcm90ZWN0ZWQ6 CiAgICAgICAgVG1wR2xvYmFsQ29tbV9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgVG1wR2xvYmFs Q29tbV9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoK fTsKCmNsYXNzIFRtcEdsb2JhbENvbW1fc2tlbCA6IHZpcnR1YWwgcHVibGljIFRtcEdsb2JhbENv bW1fYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6R2xvYmFsQ29tbV9za2VsIHsKcHVibGljOgog ICAgICAgIFRtcEdsb2JhbENvbW1fc2tlbCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcg X2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUo KTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRl cmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9p ZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxv bmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEK IyA5NzUgIi4uLy4uL2FydHMvbWNvcC9jb3JlLmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBU bXBHbG9iYWxDb21tIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3Rh dGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFRtcEdsb2JhbENvbW1f YmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBUbXBHbG9iYWxDb21tX2Jhc2UgKl9tZXRob2Rf Y2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAg ICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShU bXBHbG9iYWxDb21tX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoVG1wR2xvYmFsQ29tbV9iYXNl OjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVk OgogICAgICAgIGlubGluZSBUbXBHbG9iYWxDb21tKFRtcEdsb2JhbENvbW1fYmFzZSogYikgOiBB cnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIFRt cEdsb2JhbENvbW1fYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFRtcEdsb2JhbENv bW0oKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGlu ZSBUbXBHbG9iYWxDb21tKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAg ICBBcnRzOjpPYmplY3QoVG1wR2xvYmFsQ29tbV9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwg X2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFRtcEdsb2JhbENvbW0oY29uc3QgQXJ0czo6UmVm ZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhU bXBHbG9iYWxDb21tX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooVG1wR2xvYmFsQ29t bV9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7 fQogICAgICAgIGlubGluZSBUbXBHbG9iYWxDb21tKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBj KSA6IEFydHM6Ok9iamVjdChUbXBHbG9iYWxDb21tX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5v YmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgVG1wR2xvYmFsQ29tbShjb25z dCBUbXBHbG9iYWxDb21tJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9j YWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBUbXBHbG9iYWxDb21tKEFydHM6 Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAg IGlubGluZSBzdGF0aWMgVG1wR2xvYmFsQ29tbSBudWxsKCkge3JldHVybiBUbXBHbG9iYWxDb21t KChUbXBHbG9iYWxDb21tX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIFRtcEdsb2Jh bENvbW0gX2Zyb21fYmFzZShUbXBHbG9iYWxDb21tX2Jhc2UqIGIpIHtyZXR1cm4gVG1wR2xvYmFs Q29tbShiKTt9CiAgICAgICAgaW5saW5lIFRtcEdsb2JhbENvbW0mIG9wZXJhdG9yPShjb25zdCBU bXBHbG9iYWxDb21tJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJn ZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAg ICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hl ID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAg ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFy dHM6Okdsb2JhbENvbW0oKSBjb25zdCB7IHJldHVybiBBcnRzOjpHbG9iYWxDb21tKCpfcG9vbCk7 IH0KICAgICAgICBpbmxpbmUgVG1wR2xvYmFsQ29tbV9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2Nh Y2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBib29sIHB1dChjb25z dCBzdGQ6OnN0cmluZyYgdmFyaWFibGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CiAgICAg ICAgaW5saW5lIHN0ZDo6c3RyaW5nIGdldChjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUpOwog ICAgICAgIGlubGluZSB2b2lkIGVyYXNlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJpYWJsZSk7Cn07 CgpjbGFzcyBUcmFkZXJPZmZlcl9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X2Jh c2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAg c3RhdGljIFRyYWRlck9mZmVyX2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNs YXNzID0gIkFydHM6OlRyYWRlck9mZmVyIik7CiAgICAgICAgc3RhdGljIFRyYWRlck9mZmVyX2Jh c2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFRy YWRlck9mZmVyX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYs IGJvb2wgbmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMgVHJhZGVyT2ZmZXJfYmFzZSAqX2Zyb21E eW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5lIFRy YWRlck9mZmVyX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAg ICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg ICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQ b3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g X2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBs b25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgaW50ZXJmYWNlTmFtZSgpID0g MDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIGdldFByb3BlcnR5 KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSA9IDA7Cn07CgpjbGFzcyBUcmFkZXJPZmZlcl9zdHVi IDogdmlydHVhbCBwdWJsaWMgVHJhZGVyT2ZmZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6 T2JqZWN0X3N0dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgVHJhZGVyT2ZmZXJfc3R1YigpOwoKcHVi bGljOgogICAgICAgIFRyYWRlck9mZmVyX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlv biwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIHN0ZDo6c3RyaW5nIGludGVyZmFjZU5hbWUoKTsK ICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gKiBnZXRQcm9wZXJ0eShjb25zdCBzdGQ6 OnN0cmluZyYgbmFtZSk7Cn07CgpjbGFzcyBUcmFkZXJPZmZlcl9za2VsIDogdmlydHVhbCBwdWJs aWMgVHJhZGVyT2ZmZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X3NrZWwgewpw cm90ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIGludGVyZmFjZU5hbWVfY2hhbmdlZChjb25z dCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQo ImludGVyZmFjZU5hbWVfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAg ICAgICBUcmFkZXJPZmZlcl9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50 ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwog ICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFj ZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRp c3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBt ZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDEw NzYgIi4uLy4uL2FydHMvbWNvcC9jb3JlLmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBUcmFk ZXJPZmZlciA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBB cnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBUcmFkZXJPZmZlcl9iYXNlICpf Y2FjaGU7CiAgICAgICAgaW5saW5lIFRyYWRlck9mZmVyX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsK ICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYo X3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShUcmFkZXJPZmZl cl9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFRyYWRlck9mZmVyX2Jhc2U6Ol9JSUQpOwogICAg ICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5s aW5lIFRyYWRlck9mZmVyKFRyYWRlck9mZmVyX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBf Y2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBUcmFkZXJPZmZlcl9iYXNlIF9i YXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgVHJhZGVyT2ZmZXIoKSA6IEFydHM6Ok9iamVjdChf Q3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBUcmFkZXJPZmZlcihjb25zdCBB cnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KFRyYWRlck9m ZmVyX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxp bmUgVHJhZGVyT2ZmZXIoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAg ICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhUcmFkZXJPZmZlcl9iYXNlOjpfZnJvbVN0cmlu ZyhyLnN0cmluZygpKSk6KFRyYWRlck9mZmVyX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJl bmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFRyYWRlck9mZmVyKGNv bnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChUcmFkZXJPZmZlcl9iYXNl OjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5s aW5lIFRyYWRlck9mZmVyKGNvbnN0IFRyYWRlck9mZmVyJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0 KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBU cmFkZXJPZmZlcihBcnRzOjpPYmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2Fj aGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIFRyYWRlck9mZmVyIG51bGwoKSB7cmV0dXJu IFRyYWRlck9mZmVyKChUcmFkZXJPZmZlcl9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRp YyBUcmFkZXJPZmZlciBfZnJvbV9iYXNlKFRyYWRlck9mZmVyX2Jhc2UqIGIpIHtyZXR1cm4gVHJh ZGVyT2ZmZXIoYik7fQogICAgICAgIGlubGluZSBUcmFkZXJPZmZlciYgb3BlcmF0b3I9KGNvbnN0 IFRyYWRlck9mZmVyJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJn ZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAg ICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hl ID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAg ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIFRyYWRlck9mZmVy X2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAg ICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIGludGVyZmFjZU5hbWUoKTsKICAgICAgICBpbmxpbmUg c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogZ2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcm IG5hbWUpOwp9OwoKY2xhc3MgVHJhZGVyUXVlcnlfYmFzZSA6IHZpcnR1YWwgcHVibGljIEFydHM6 Ok9iamVjdF9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7 CgogICAgICAgIHN0YXRpYyBUcmFkZXJRdWVyeV9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3Ry aW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpUcmFkZXJRdWVyeSIpOwogICAgICAgIHN0YXRpYyBUcmFk ZXJRdWVyeV9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAg IHN0YXRpYyBUcmFkZXJRdWVyeV9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZl cmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFRyYWRlclF1ZXJ5X2Jh c2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAg IGlubGluZSBUcmFkZXJRdWVyeV9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9p ZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4g dGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3Rk OjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3Qo dW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQgc3VwcG9ydHMoY29uc3Qg c3RkOjpzdHJpbmcmIHByb3BlcnR5LCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKICAg ICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPEFydHM6OlRyYWRlck9mZmVyPiAqIHF1ZXJ5KCkgPSAw Owp9OwoKY2xhc3MgVHJhZGVyUXVlcnlfc3R1YiA6IHZpcnR1YWwgcHVibGljIFRyYWRlclF1ZXJ5 X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9zdHViIHsKcHJvdGVjdGVkOgogICAg ICAgIFRyYWRlclF1ZXJ5X3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBUcmFkZXJRdWVyeV9zdHVi KEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICB2 b2lkIHN1cHBvcnRzKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwgY29uc3Qgc3RkOjpzdHJp bmcmIHZhbHVlKTsKICAgICAgICBzdGQ6OnZlY3RvcjxBcnRzOjpUcmFkZXJPZmZlcj4gKiBxdWVy eSgpOwp9OwoKY2xhc3MgVHJhZGVyUXVlcnlfc2tlbCA6IHZpcnR1YWwgcHVibGljIFRyYWRlclF1 ZXJ5X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9za2VsIHsKcHVibGljOgogICAg ICAgIFRyYWRlclF1ZXJ5X3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRl cmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAg ICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNl bmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlz cGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1l dGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMTE2 OSAiLi4vLi4vYXJ0cy9tY29wL2NvcmUuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFRyYWRl clF1ZXJ5IDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFy dHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFRyYWRlclF1ZXJ5X2Jhc2UgKl9j YWNoZTsKICAgICAgICBpbmxpbmUgVHJhZGVyUXVlcnlfYmFzZSAqX21ldGhvZF9jYWxsKCkgewog ICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihf cG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFRyYWRlclF1ZXJ5 X2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoVHJhZGVyUXVlcnlfYmFzZTo6X0lJRCk7CiAgICAg ICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxp bmUgVHJhZGVyUXVlcnkoVHJhZGVyUXVlcnlfYmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9j YWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIFRyYWRlclF1ZXJ5X2Jhc2UgX2Jh c2VfY2xhc3M7CgogICAgICAgIGlubGluZSBUcmFkZXJRdWVyeSgpIDogQXJ0czo6T2JqZWN0KF9D cmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFRyYWRlclF1ZXJ5KGNvbnN0IEFy dHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoVHJhZGVyUXVl cnlfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGlu ZSBUcmFkZXJRdWVyeShjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAg IEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFRyYWRlclF1ZXJ5X2Jhc2U6Ol9mcm9tU3RyaW5n KHIuc3RyaW5nKCkpKTooVHJhZGVyUXVlcnlfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVu Y2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgVHJhZGVyUXVlcnkoY29u c3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KFRyYWRlclF1ZXJ5X2Jhc2U6 Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxp bmUgVHJhZGVyUXVlcnkoY29uc3QgVHJhZGVyUXVlcnkmIHRhcmdldCkgOiBBcnRzOjpPYmplY3Qo dGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFRy YWRlclF1ZXJ5KEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNo ZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgVHJhZGVyUXVlcnkgbnVsbCgpIHtyZXR1cm4g VHJhZGVyUXVlcnkoKFRyYWRlclF1ZXJ5X2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGlj IFRyYWRlclF1ZXJ5IF9mcm9tX2Jhc2UoVHJhZGVyUXVlcnlfYmFzZSogYikge3JldHVybiBUcmFk ZXJRdWVyeShiKTt9CiAgICAgICAgaW5saW5lIFRyYWRlclF1ZXJ5JiBvcGVyYXRvcj0oY29uc3Qg VHJhZGVyUXVlcnkmIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdl dC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAg ICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUg PSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAg ICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgVHJhZGVyUXVlcnlf YmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAg ICAgICBpbmxpbmUgdm9pZCBzdXBwb3J0cyhjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNv bnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPEFydHM6 OlRyYWRlck9mZmVyPiAqIHF1ZXJ5KCk7Cn07CgpjbGFzcyBMb2FkZXJfYmFzZSA6IHZpcnR1YWwg cHVibGljIEFydHM6Ok9iamVjdF9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25l ZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBMb2FkZXJfYmFzZSAqX2NyZWF0ZShjb25zdCBz dGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6TG9hZGVyIik7CiAgICAgICAgc3RhdGljIExv YWRlcl9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0 YXRpYyBMb2FkZXJfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJl ZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBMb2FkZXJfYmFzZSAqX2Zyb21EeW5h bWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5lIExvYWRl cl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAg ICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9Cgog ICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigp IGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0 UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQp OwoKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGRhdGFWZXJzaW9uKCkgPSAwOwogICAgICAg IHZpcnR1YWwgc3RkOjp2ZWN0b3I8QXJ0czo6VHJhZGVyRW50cnk+ICogdHJhZGVyRW50cmllcygp ID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPEFydHM6Ok1vZHVsZURlZj4gKiBtb2R1 bGVzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0czo6T2JqZWN0IGxvYWRPYmplY3QoQXJ0czo6 VHJhZGVyT2ZmZXIgb2ZmZXIpID0gMDsKfTsKCmNsYXNzIExvYWRlcl9zdHViIDogdmlydHVhbCBw dWJsaWMgTG9hZGVyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9zdHViIHsKcHJv dGVjdGVkOgogICAgICAgIExvYWRlcl9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgTG9hZGVyX3N0 dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7CgogICAgICAg IHN0ZDo6c3RyaW5nIGRhdGFWZXJzaW9uKCk7CiAgICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6VHJh ZGVyRW50cnk+ICogdHJhZGVyRW50cmllcygpOwogICAgICAgIHN0ZDo6dmVjdG9yPEFydHM6Ok1v ZHVsZURlZj4gKiBtb2R1bGVzKCk7CiAgICAgICAgQXJ0czo6T2JqZWN0IGxvYWRPYmplY3QoQXJ0 czo6VHJhZGVyT2ZmZXIgb2ZmZXIpOwp9OwoKY2xhc3MgTG9hZGVyX3NrZWwgOiB2aXJ0dWFsIHB1 YmxpYyBMb2FkZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X3NrZWwgewpwcm90 ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIGRhdGFWZXJzaW9uX2NoYW5nZWQoY29uc3Qgc3Rk OjpzdHJpbmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJkYXRh VmVyc2lvbl9jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQoKcHVibGljOgogICAgICAgIExv YWRlcl9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNr ZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wg X2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAg ICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6 OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07 Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDEyNzIgIi4uLy4uL2Fy dHMvbWNvcC9jb3JlLmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBMb2FkZXIgOiBwdWJsaWMg QXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2Uq IF9DcmVhdG9yKCk7CiAgICAgICAgTG9hZGVyX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUg TG9hZGVyX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVj a2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgX2NhY2hlPShMb2FkZXJfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChMb2Fk ZXJfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnBy b3RlY3RlZDoKICAgICAgICBpbmxpbmUgTG9hZGVyKExvYWRlcl9iYXNlKiBiKSA6IEFydHM6Ok9i amVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgTG9hZGVyX2Jh c2UgX2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGluZSBMb2FkZXIoKSA6IEFydHM6Ok9iamVjdChf Q3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBMb2FkZXIoY29uc3QgQXJ0czo6 U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChMb2FkZXJfYmFzZTo6 X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBMb2FkZXIo Y29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qo ci5pc1N0cmluZygpPyhMb2FkZXJfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihMb2Fk ZXJfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkg e30KICAgICAgICBpbmxpbmUgTG9hZGVyKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFy dHM6Ok9iamVjdChMb2FkZXJfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9j YWNoZSgwKSB7fQogICAgICAgIGlubGluZSBMb2FkZXIoY29uc3QgTG9hZGVyJiB0YXJnZXQpIDog QXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAg ICAgIGlubGluZSBMb2FkZXIoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChw KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBMb2FkZXIgbnVsbCgpIHtyZXR1 cm4gTG9hZGVyKChMb2FkZXJfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgTG9hZGVy IF9mcm9tX2Jhc2UoTG9hZGVyX2Jhc2UqIGIpIHtyZXR1cm4gTG9hZGVyKGIpO30KICAgICAgICBp bmxpbmUgTG9hZGVyJiBvcGVyYXRvcj0oY29uc3QgTG9hZGVyJiB0YXJnZXQpIHsKICAgICAgICAg ICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAg ICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29s OwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAg IF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAg ICAgICAgaW5saW5lIExvYWRlcl9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpf bWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBzdGQ6OnN0cmluZyBkYXRhVmVyc2lvbigp OwogICAgICAgIGlubGluZSBzdGQ6OnZlY3RvcjxBcnRzOjpUcmFkZXJFbnRyeT4gKiB0cmFkZXJF bnRyaWVzKCk7CiAgICAgICAgaW5saW5lIHN0ZDo6dmVjdG9yPEFydHM6Ok1vZHVsZURlZj4gKiBt b2R1bGVzKCk7CiAgICAgICAgaW5saW5lIEFydHM6Ok9iamVjdCBsb2FkT2JqZWN0KEFydHM6OlRy YWRlck9mZmVyIG9mZmVyKTsKfTsKCgoKaW5saW5lIGxvbmcgQXJ0czo6SW50ZXJmYWNlUmVwbzo6 aW5zZXJ0TW9kdWxlKGNvbnN0IEFydHM6Ok1vZHVsZURlZiYgbmV3TW9kdWxlKQp7CiAgICAgICAg cmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jhc2UqPihfY2Fj aGUpLT5pbnNlcnRNb2R1bGUobmV3TW9kdWxlKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VS ZXBvX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmluc2VydE1vZHVsZShuZXdNb2R1bGUpOwp9Cgpp bmxpbmUgdm9pZCBBcnRzOjpJbnRlcmZhY2VSZXBvOjpyZW1vdmVNb2R1bGUobG9uZyBtb2R1bGVJ RCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNl Kj4oX2NhY2hlKS0+cmVtb3ZlTW9kdWxlKG1vZHVsZUlEKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRl cmZhY2VSZXBvX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnJlbW92ZU1vZHVsZShtb2R1bGVJRCk7 Cn0KCmlubGluZSBBcnRzOjpJbnRlcmZhY2VEZWYgQXJ0czo6SW50ZXJmYWNlUmVwbzo6cXVlcnlJ bnRlcmZhY2UoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hl P3N0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+KF9jYWNoZSktPnF1ZXJ5SW50 ZXJmYWNlKG5hbWUpOnN0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+KF9tZXRo b2RfY2FsbCgpKS0+cXVlcnlJbnRlcmZhY2UobmFtZSk7Cn0KCmlubGluZSBBcnRzOjpUeXBlRGVm IEFydHM6OkludGVyZmFjZVJlcG86OnF1ZXJ5VHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkK ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19i YXNlKj4oX2NhY2hlKS0+cXVlcnlUeXBlKG5hbWUpOnN0YXRpY19jYXN0PEFydHM6OkludGVyZmFj ZVJlcG9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cXVlcnlUeXBlKG5hbWUpOwp9CgppbmxpbmUg QXJ0czo6RW51bURlZiBBcnRzOjpJbnRlcmZhY2VSZXBvOjpxdWVyeUVudW0oY29uc3Qgc3RkOjpz dHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6Oklu dGVyZmFjZVJlcG9fYmFzZSo+KF9jYWNoZSktPnF1ZXJ5RW51bShuYW1lKTpzdGF0aWNfY2FzdDxB cnRzOjpJbnRlcmZhY2VSZXBvX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnF1ZXJ5RW51bShuYW1l KTsKfQoKaW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIEFydHM6OkludGVyZmFjZVJl cG86OnF1ZXJ5Q2hpbGRyZW4oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1 cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+KF9jYWNoZSkt PnF1ZXJ5Q2hpbGRyZW4obmFtZSk6c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeUNoaWxkcmVuKG5hbWUpOwp9CgppbmxpbmUgc3RkOjp2 ZWN0b3I8c3RkOjpzdHJpbmc+ICogQXJ0czo6SW50ZXJmYWNlUmVwbzo6cXVlcnlJbnRlcmZhY2Vz KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVw b19iYXNlKj4oX2NhY2hlKS0+cXVlcnlJbnRlcmZhY2VzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW50 ZXJmYWNlUmVwb19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeUludGVyZmFjZXMoKTsKfQoK aW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIEFydHM6OkludGVyZmFjZVJlcG86OnF1 ZXJ5VHlwZXMoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnRl cmZhY2VSZXBvX2Jhc2UqPihfY2FjaGUpLT5xdWVyeVR5cGVzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6 SW50ZXJmYWNlUmVwb19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeVR5cGVzKCk7Cn0KCmlu bGluZSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gKiBBcnRzOjpJbnRlcmZhY2VSZXBvOjpxdWVy eUVudW1zKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJm YWNlUmVwb19iYXNlKj4oX2NhY2hlKS0+cXVlcnlFbnVtcygpOnN0YXRpY19jYXN0PEFydHM6Oklu dGVyZmFjZVJlcG9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cXVlcnlFbnVtcygpOwp9Cgppbmxp bmUgbG9uZyBBcnRzOjpJbnRlcmZhY2VSZXBvVjI6Omluc2VydE1vZHVsZShjb25zdCBBcnRzOjpN b2R1bGVEZWYmIG5ld01vZHVsZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlKj4oX2NhY2hlKS0+aW5zZXJ0TW9kdWxlKG5ld01vZHVs ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlKj4oX21ldGhvZF9jYWxsKCkp LT5pbnNlcnRNb2R1bGUobmV3TW9kdWxlKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6SW50ZXJmYWNl UmVwb1YyOjpyZW1vdmVNb2R1bGUobG9uZyBtb2R1bGVJRCkKewogICAgICAgICBfY2FjaGU/c3Rh dGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlKj4oX2NhY2hlKS0+cmVtb3ZlTW9kdWxl KG1vZHVsZUlEKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jhc2UqPihfbWV0aG9k X2NhbGwoKSktPnJlbW92ZU1vZHVsZShtb2R1bGVJRCk7Cn0KCmlubGluZSBBcnRzOjpJbnRlcmZh Y2VEZWYgQXJ0czo6SW50ZXJmYWNlUmVwb1YyOjpxdWVyeUludGVyZmFjZShjb25zdCBzdGQ6OnN0 cmluZyYgbmFtZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW50 ZXJmYWNlUmVwb19iYXNlKj4oX2NhY2hlKS0+cXVlcnlJbnRlcmZhY2UobmFtZSk6c3RhdGljX2Nh c3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeUludGVy ZmFjZShuYW1lKTsKfQoKaW5saW5lIEFydHM6OlR5cGVEZWYgQXJ0czo6SW50ZXJmYWNlUmVwb1Yy OjpxdWVyeVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1cm4gX2Nh Y2hlP3N0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+KF9jYWNoZSktPnF1ZXJ5 VHlwZShuYW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jhc2UqPihfbWV0aG9k X2NhbGwoKSktPnF1ZXJ5VHlwZShuYW1lKTsKfQoKaW5saW5lIEFydHM6OkVudW1EZWYgQXJ0czo6 SW50ZXJmYWNlUmVwb1YyOjpxdWVyeUVudW0oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAg ICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+ KF9jYWNoZSktPnF1ZXJ5RW51bShuYW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBv X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnF1ZXJ5RW51bShuYW1lKTsKfQoKaW5saW5lIHN0ZDo6 dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIEFydHM6OkludGVyZmFjZVJlcG9WMjo6cXVlcnlDaGlsZHJl bihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGlj X2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVwb19iYXNlKj4oX2NhY2hlKS0+cXVlcnlDaGlsZHJlbihu YW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jhc2UqPihfbWV0aG9kX2NhbGwo KSktPnF1ZXJ5Q2hpbGRyZW4obmFtZSk7Cn0KCmlubGluZSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu Zz4gKiBBcnRzOjpJbnRlcmZhY2VSZXBvVjI6OnF1ZXJ5SW50ZXJmYWNlcygpCnsKICAgICAgICBy ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFzZSo+KF9jYWNo ZSktPnF1ZXJ5SW50ZXJmYWNlcygpOnN0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9fYmFz ZSo+KF9tZXRob2RfY2FsbCgpKS0+cXVlcnlJbnRlcmZhY2VzKCk7Cn0KCmlubGluZSBzdGQ6OnZl Y3RvcjxzdGQ6OnN0cmluZz4gKiBBcnRzOjpJbnRlcmZhY2VSZXBvVjI6OnF1ZXJ5VHlwZXMoKQp7 CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jh c2UqPihfY2FjaGUpLT5xdWVyeVR5cGVzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVw b19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeVR5cGVzKCk7Cn0KCmlubGluZSBzdGQ6OnZl Y3RvcjxzdGQ6OnN0cmluZz4gKiBBcnRzOjpJbnRlcmZhY2VSZXBvVjI6OnF1ZXJ5RW51bXMoKQp7 CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnRlcmZhY2VSZXBvX2Jh c2UqPihfY2FjaGUpLT5xdWVyeUVudW1zKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW50ZXJmYWNlUmVw b19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5xdWVyeUVudW1zKCk7Cn0KCmlubGluZSBBcnRzOjpU eXBlSWRlbnRpZmljYXRpb24gQXJ0czo6SW50ZXJmYWNlUmVwb1YyOjppZGVudGlmeVR5cGUoY29u c3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0 PEFydHM6OkludGVyZmFjZVJlcG9WMl9iYXNlKj4oX2NhY2hlKS0+aWRlbnRpZnlUeXBlKG5hbWUp OnN0YXRpY19jYXN0PEFydHM6OkludGVyZmFjZVJlcG9WMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkp LT5pZGVudGlmeVR5cGUobmFtZSk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkZsb3dTeXN0ZW1TZW5k ZXI6OnByb2Nlc3NlZCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkZsb3dT eXN0ZW1TZW5kZXJfYmFzZSo+KF9jYWNoZSktPnByb2Nlc3NlZCgpOnN0YXRpY19jYXN0PEFydHM6 OkZsb3dTeXN0ZW1TZW5kZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cHJvY2Vzc2VkKCk7Cn0K CmlubGluZSB2b2lkIEFydHM6OkZsb3dTeXN0ZW1TZW5kZXI6OmRpc2Nvbm5lY3QoKQp7CiAgICAg ICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpGbG93U3lzdGVtU2VuZGVyX2Jhc2UqPihfY2Fj aGUpLT5kaXNjb25uZWN0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbVNlbmRlcl9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5kaXNjb25uZWN0KCk7Cn0KCmlubGluZSBsb25nIEFydHM6OkZs b3dTeXN0ZW1SZWNlaXZlcjo6cmVjZWl2ZUhhbmRsZXJJRCgpCnsKICAgICAgICByZXR1cm4gX2Nh Y2hlP3N0YXRpY19jYXN0PEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNlKj4oX2NhY2hlKS0+ cmVjZWl2ZUhhbmRsZXJJRCgpOnN0YXRpY19jYXN0PEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlcl9i YXNlKj4oX21ldGhvZF9jYWxsKCkpLT5yZWNlaXZlSGFuZGxlcklEKCk7Cn0KCmlubGluZSB2b2lk IEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlcjo6ZGlzY29ubmVjdCgpCnsKICAgICAgICAgX2NhY2hl P3N0YXRpY19jYXN0PEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNlKj4oX2NhY2hlKS0+ZGlz Y29ubmVjdCgpOnN0YXRpY19jYXN0PEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlcl9iYXNlKj4oX21l dGhvZF9jYWxsKCkpLT5kaXNjb25uZWN0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkZsb3dTeXN0 ZW06OnN0YXJ0T2JqZWN0KEFydHM6Ok9iamVjdCBub2RlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0 aWNfY2FzdDxBcnRzOjpGbG93U3lzdGVtX2Jhc2UqPihfY2FjaGUpLT5zdGFydE9iamVjdChub2Rl KTpzdGF0aWNfY2FzdDxBcnRzOjpGbG93U3lzdGVtX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0 YXJ0T2JqZWN0KG5vZGUpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpGbG93U3lzdGVtOjpzdG9wT2Jq ZWN0KEFydHM6Ok9iamVjdCBub2RlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz OjpGbG93U3lzdGVtX2Jhc2UqPihfY2FjaGUpLT5zdG9wT2JqZWN0KG5vZGUpOnN0YXRpY19jYXN0 PEFydHM6OkZsb3dTeXN0ZW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RvcE9iamVjdChub2Rl KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6Rmxvd1N5c3RlbTo6Y29ubmVjdE9iamVjdChBcnRzOjpP YmplY3Qgc291cmNlT2JqZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlUG9ydCwgQXJ0czo6 T2JqZWN0IGRlc3RPYmplY3QsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXN0UG9ydCkKewogICAgICAg ICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbV9iYXNlKj4oX2NhY2hlKS0+Y29u bmVjdE9iamVjdChzb3VyY2VPYmplY3QsIHNvdXJjZVBvcnQsIGRlc3RPYmplY3QsIGRlc3RQb3J0 KTpzdGF0aWNfY2FzdDxBcnRzOjpGbG93U3lzdGVtX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNv bm5lY3RPYmplY3Qoc291cmNlT2JqZWN0LCBzb3VyY2VQb3J0LCBkZXN0T2JqZWN0LCBkZXN0UG9y dCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkZsb3dTeXN0ZW06OmRpc2Nvbm5lY3RPYmplY3QoQXJ0 czo6T2JqZWN0IHNvdXJjZU9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZVBvcnQsIEFy dHM6Ok9iamVjdCBkZXN0T2JqZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdFBvcnQpCnsKICAg ICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkZsb3dTeXN0ZW1fYmFzZSo+KF9jYWNoZSkt PmRpc2Nvbm5lY3RPYmplY3Qoc291cmNlT2JqZWN0LCBzb3VyY2VQb3J0LCBkZXN0T2JqZWN0LCBk ZXN0UG9ydCk6c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbV9iYXNlKj4oX21ldGhvZF9jYWxs KCkpLT5kaXNjb25uZWN0T2JqZWN0KHNvdXJjZU9iamVjdCwgc291cmNlUG9ydCwgZGVzdE9iamVj dCwgZGVzdFBvcnQpOwp9CgppbmxpbmUgQXJ0czo6QXR0cmlidXRlVHlwZSBBcnRzOjpGbG93U3lz dGVtOjpxdWVyeUZsYWdzKEFydHM6Ok9iamVjdCBub2RlLCBjb25zdCBzdGQ6OnN0cmluZyYgcG9y dCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbV9i YXNlKj4oX2NhY2hlKS0+cXVlcnlGbGFncyhub2RlLCBwb3J0KTpzdGF0aWNfY2FzdDxBcnRzOjpG bG93U3lzdGVtX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnF1ZXJ5RmxhZ3Mobm9kZSwgcG9ydCk7 Cn0KCmlubGluZSB2b2lkIEFydHM6OkZsb3dTeXN0ZW06OnNldEZsb2F0VmFsdWUoQXJ0czo6T2Jq ZWN0IG5vZGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwb3J0LCBmbG9hdCB2YWx1ZSkKewogICAgICAg ICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbV9iYXNlKj4oX2NhY2hlKS0+c2V0 RmxvYXRWYWx1ZShub2RlLCBwb3J0LCB2YWx1ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3Rl bV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zZXRGbG9hdFZhbHVlKG5vZGUsIHBvcnQsIHZhbHVl KTsKfQoKaW5saW5lIEFydHM6OkZsb3dTeXN0ZW1SZWNlaXZlciBBcnRzOjpGbG93U3lzdGVtOjpj cmVhdGVSZWNlaXZlcihBcnRzOjpPYmplY3QgZGVzdE9iamVjdCwgY29uc3Qgc3RkOjpzdHJpbmcm IGRlc3RQb3J0LCBBcnRzOjpGbG93U3lzdGVtU2VuZGVyIHNlbmRlcikKewogICAgICAgIHJldHVy biBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Rmxvd1N5c3RlbV9iYXNlKj4oX2NhY2hlKS0+Y3Jl YXRlUmVjZWl2ZXIoZGVzdE9iamVjdCwgZGVzdFBvcnQsIHNlbmRlcik6c3RhdGljX2Nhc3Q8QXJ0 czo6Rmxvd1N5c3RlbV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jcmVhdGVSZWNlaXZlcihkZXN0 T2JqZWN0LCBkZXN0UG9ydCwgc2VuZGVyKTsKfQoKaW5saW5lIGJvb2wgQXJ0czo6R2xvYmFsQ29t bTo6cHV0KGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJpYWJsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZh bHVlKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpHbG9iYWxDb21t X2Jhc2UqPihfY2FjaGUpLT5wdXQodmFyaWFibGUsIHZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpH bG9iYWxDb21tX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnB1dCh2YXJpYWJsZSwgdmFsdWUpOwp9 CgppbmxpbmUgc3RkOjpzdHJpbmcgQXJ0czo6R2xvYmFsQ29tbTo6Z2V0KGNvbnN0IHN0ZDo6c3Ry aW5nJiB2YXJpYWJsZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6 R2xvYmFsQ29tbV9iYXNlKj4oX2NhY2hlKS0+Z2V0KHZhcmlhYmxlKTpzdGF0aWNfY2FzdDxBcnRz OjpHbG9iYWxDb21tX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmdldCh2YXJpYWJsZSk7Cn0KCmlu bGluZSB2b2lkIEFydHM6Okdsb2JhbENvbW06OmVyYXNlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJp YWJsZSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6R2xvYmFsQ29tbV9iYXNl Kj4oX2NhY2hlKS0+ZXJhc2UodmFyaWFibGUpOnN0YXRpY19jYXN0PEFydHM6Okdsb2JhbENvbW1f YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZXJhc2UodmFyaWFibGUpOwp9CgppbmxpbmUgYm9vbCBB cnRzOjpUbXBHbG9iYWxDb21tOjpwdXQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlLCBjb25z dCBzdGQ6OnN0cmluZyYgdmFsdWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0 PEFydHM6Okdsb2JhbENvbW1fYmFzZSo+KF9jYWNoZSktPnB1dCh2YXJpYWJsZSwgdmFsdWUpOnN0 YXRpY19jYXN0PEFydHM6Okdsb2JhbENvbW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cHV0KHZh cmlhYmxlLCB2YWx1ZSk7Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBBcnRzOjpUbXBHbG9iYWxDb21t OjpnZXQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlKQp7CiAgICAgICAgcmV0dXJuIF9jYWNo ZT9zdGF0aWNfY2FzdDxBcnRzOjpHbG9iYWxDb21tX2Jhc2UqPihfY2FjaGUpLT5nZXQodmFyaWFi bGUpOnN0YXRpY19jYXN0PEFydHM6Okdsb2JhbENvbW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ Z2V0KHZhcmlhYmxlKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6VG1wR2xvYmFsQ29tbTo6ZXJhc2Uo Y29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2Fz dDxBcnRzOjpHbG9iYWxDb21tX2Jhc2UqPihfY2FjaGUpLT5lcmFzZSh2YXJpYWJsZSk6c3RhdGlj X2Nhc3Q8QXJ0czo6R2xvYmFsQ29tbV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5lcmFzZSh2YXJp YWJsZSk7Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBBcnRzOjpUcmFkZXJPZmZlcjo6aW50ZXJmYWNl TmFtZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlRyYWRlck9m ZmVyX2Jhc2UqPihfY2FjaGUpLT5pbnRlcmZhY2VOYW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6VHJh ZGVyT2ZmZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+aW50ZXJmYWNlTmFtZSgpOwp9Cgppbmxp bmUgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogQXJ0czo6VHJhZGVyT2ZmZXI6OmdldFByb3Bl cnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0 aWNfY2FzdDxBcnRzOjpUcmFkZXJPZmZlcl9iYXNlKj4oX2NhY2hlKS0+Z2V0UHJvcGVydHkobmFt ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6VHJhZGVyT2ZmZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ Z2V0UHJvcGVydHkobmFtZSk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlRyYWRlclF1ZXJ5OjpzdXBw b3J0cyhjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1 ZSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6VHJhZGVyUXVlcnlfYmFzZSo+ KF9jYWNoZSktPnN1cHBvcnRzKHByb3BlcnR5LCB2YWx1ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6VHJh ZGVyUXVlcnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3VwcG9ydHMocHJvcGVydHksIHZhbHVl KTsKfQoKaW5saW5lIHN0ZDo6dmVjdG9yPEFydHM6OlRyYWRlck9mZmVyPiAqIEFydHM6OlRyYWRl clF1ZXJ5OjpxdWVyeSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6 OlRyYWRlclF1ZXJ5X2Jhc2UqPihfY2FjaGUpLT5xdWVyeSgpOnN0YXRpY19jYXN0PEFydHM6OlRy YWRlclF1ZXJ5X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnF1ZXJ5KCk7Cn0KCmlubGluZSBzdGQ6 OnN0cmluZyBBcnRzOjpMb2FkZXI6OmRhdGFWZXJzaW9uKCkKewogICAgICAgIHJldHVybiBfY2Fj aGU/c3RhdGljX2Nhc3Q8QXJ0czo6TG9hZGVyX2Jhc2UqPihfY2FjaGUpLT5kYXRhVmVyc2lvbigp OnN0YXRpY19jYXN0PEFydHM6OkxvYWRlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5kYXRhVmVy c2lvbigpOwp9CgppbmxpbmUgc3RkOjp2ZWN0b3I8QXJ0czo6VHJhZGVyRW50cnk+ICogQXJ0czo6 TG9hZGVyOjp0cmFkZXJFbnRyaWVzKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nh c3Q8QXJ0czo6TG9hZGVyX2Jhc2UqPihfY2FjaGUpLT50cmFkZXJFbnRyaWVzKCk6c3RhdGljX2Nh c3Q8QXJ0czo6TG9hZGVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnRyYWRlckVudHJpZXMoKTsK fQoKaW5saW5lIHN0ZDo6dmVjdG9yPEFydHM6Ok1vZHVsZURlZj4gKiBBcnRzOjpMb2FkZXI6Om1v ZHVsZXMoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpMb2FkZXJf YmFzZSo+KF9jYWNoZSktPm1vZHVsZXMoKTpzdGF0aWNfY2FzdDxBcnRzOjpMb2FkZXJfYmFzZSo+ KF9tZXRob2RfY2FsbCgpKS0+bW9kdWxlcygpOwp9CgppbmxpbmUgQXJ0czo6T2JqZWN0IEFydHM6 OkxvYWRlcjo6bG9hZE9iamVjdChBcnRzOjpUcmFkZXJPZmZlciBvZmZlcikKewogICAgICAgIHJl dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6TG9hZGVyX2Jhc2UqPihfY2FjaGUpLT5sb2Fk T2JqZWN0KG9mZmVyKTpzdGF0aWNfY2FzdDxBcnRzOjpMb2FkZXJfYmFzZSo+KF9tZXRob2RfY2Fs bCgpKS0+bG9hZE9iamVjdChvZmZlcik7Cn0KCn07CiMgNTEgIi4uLy4uL2FydHMvbWNvcC9jb21t b24uaCIgMgoKbmFtZXNwYWNlIEFydHMgewoKCnRlbXBsYXRlPGNsYXNzIFQ+CnZvaWQgcmVhZFR5 cGVTZXEoQnVmZmVyJiBzdHJlYW0sIHN0ZDo6dmVjdG9yPFQ+JiBzZXF1ZW5jZSkgewogICAgICAg IHNlcXVlbmNlLmNsZWFyKCk7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgbCA9IHN0cmVhbS5yZWFk TG9uZygpOwogICAgICAgIHdoaWxlKGwtLSkgc2VxdWVuY2UucHVzaF9iYWNrKFQoc3RyZWFtKSk7 Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+CnZvaWQgd3JpdGVUeXBlU2VxKEJ1ZmZlciYgc3RyZWFtLCBj b25zdCBzdGQ6OnZlY3RvcjxUPiYgc2VxdWVuY2UpIHsKICAgICAgICBzdHJlYW0ud3JpdGVMb25n KHNlcXVlbmNlLnNpemUoKSk7CiAgICAgICAgZm9yKHVuc2lnbmVkIGxvbmcgbD0wO2w8c2VxdWVu Y2Uuc2l6ZSgpO2wrKykKICAgICAgICAgICAgICAgIHNlcXVlbmNlW2xdLndyaXRlVHlwZShzdHJl YW0pOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgp2b2lkIHdyaXRlT2JqZWN0KEJ1ZmZlciYgc3RyZWFt LCBUKiBvYmplY3QpIHsKICAgICAgICBpZihvYmplY3QpCiAgICAgICAgewoKCgoKCiAgICAgICAg ICAgICAgICBzdGQ6OnN0cmluZyBzID0gb2JqZWN0LT5fdG9TdHJpbmcoKTsKCiAgICAgICAgICAg ICAgICBCdWZmZXIgYnVmZmVyOwogICAgICAgICAgICAgICAgYnVmZmVyLmZyb21TdHJpbmcocywi TUNPUC1PYmplY3QiKTsKICAgICAgICAgICAgICAgIE9iamVjdFJlZmVyZW5jZSByZWZlcmVuY2Uo YnVmZmVyKTsKCiAgICAgICAgICAgICAgICBvYmplY3QtPl9jb3B5UmVtb3RlKCk7CiAgICAgICAg ICAgICAgICByZWZlcmVuY2Uud3JpdGVUeXBlKHN0cmVhbSk7CiAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICB7CiAgICAgICAgICAgICAgICBPYmplY3RSZWZlcmVuY2UgbnVsbF9yZWZlcmVu Y2U7CgogICAgICAgICAgICAgICAgbnVsbF9yZWZlcmVuY2Uuc2VydmVySUQgPSAibnVsbCI7CiAg ICAgICAgICAgICAgICBudWxsX3JlZmVyZW5jZS5vYmplY3RJRCA9IDA7CiAgICAgICAgICAgICAg ICBudWxsX3JlZmVyZW5jZS53cml0ZVR5cGUoc3RyZWFtKTsKICAgICAgICB9Cn0KCnRlbXBsYXRl PGNsYXNzIFQ+CnZvaWQgcmVhZE9iamVjdChCdWZmZXImIHN0cmVhbSwgVComIHJlc3VsdCkgewog ICAgICAgIE9iamVjdFJlZmVyZW5jZSByZWZlcmVuY2Uoc3RyZWFtKTsKCiAgICAgICAgaWYocmVm ZXJlbmNlLnNlcnZlcklEID09ICJudWxsIikKICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7CiAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmVzdWx0ID0gVDo6X2Zyb21SZWZlcmVuY2UocmVm ZXJlbmNlLGZhbHNlKTsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCByZWFkT2JqZWN0U2VxKEJ1 ZmZlciYgc3RyZWFtLCBzdGQ6OnZlY3RvcjxUPiYgc2VxdWVuY2UpCnsKICAgICAgICBzZXF1ZW5j ZS5jbGVhcigpOwoKICAgICAgICB1bnNpZ25lZCBsb25nIGwgPSBzdHJlYW0ucmVhZExvbmcoKTsK ICAgICAgICB3aGlsZShsLS0pCiAgICAgICAgewogICAgICAgICAgICAgICAgdHlwZW5hbWUgVDo6 X2Jhc2VfY2xhc3MgKnRlbXA7CiAgICAgICAgICAgICAgICByZWFkT2JqZWN0KHN0cmVhbSwgdGVt cCk7CiAgICAgICAgICAgICAgICBzZXF1ZW5jZS5wdXNoX2JhY2soVDo6X2Zyb21fYmFzZSh0ZW1w KSk7CiAgICAgICAgfQp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgp2b2lkIHdyaXRlT2JqZWN0U2VxKEJ1 ZmZlciYgc3RyZWFtLCBjb25zdCBzdGQ6OnZlY3RvcjxUPiYgc2VxdWVuY2UpCnsKICAgICAgICBz dHJlYW0ud3JpdGVMb25nKHNlcXVlbmNlLnNpemUoKSk7CgogICAgICAgIGZvcih1bnNpZ25lZCBs b25nIGw9MDtsPHNlcXVlbmNlLnNpemUoKTtsKyspCiAgICAgICAgewogICAgICAgICAgICAgICAg VCBvYmplY3QgPSBzZXF1ZW5jZVtsXTsKICAgICAgICAgICAgICAgIHdyaXRlT2JqZWN0KHN0cmVh bSxvYmplY3QuX2Jhc2UoKSk7CiAgICAgICAgfQp9CgoKCgoKCn07CiMgNyAic291bmRzZXJ2ZXIu aCIgMgoKCiMgMSAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDEKCgoKCgojIDEgIi4uLy4u L2FydHMvbWNvcC9jb21tb24uaCIgMQojIDcgIi4uLy4uL2FydHMvZmxvdy9hcnRzZmxvdy5oIiAy CgpuYW1lc3BhY2UgQXJ0cyB7CmVudW0gQXV0b1N1c3BlbmRTdGF0ZSB7YXNOb1N1c3BlbmQgPSAw LCBhc1N1c3BlbmQgPSAxLCBhc1N1c3BlbmRTdG9wID0gMn07CmVudW0gQXVkaW9NYW5hZ2VyRGly ZWN0aW9uIHthbVBsYXkgPSAwLCBhbVJlY29yZCA9IDF9Owp9OwpuYW1lc3BhY2UgQXJ0cyB7CmNs YXNzIEF1ZGlvTWFuYWdlckluZm8gOiBwdWJsaWMgQXJ0czo6VHlwZSB7CnB1YmxpYzoKICAgICAg ICBBdWRpb01hbmFnZXJJbmZvKCk7CiAgICAgICAgQXVkaW9NYW5hZ2VySW5mbyhsb25nIF9hX0lE LCBjb25zdCBzdGQ6OnN0cmluZyYgX2FfZGVzdGluYXRpb24sIEFydHM6OkF1ZGlvTWFuYWdlckRp cmVjdGlvbiBfYV9kaXJlY3Rpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiBfYV90aXRsZSwgY29uc3Qg c3RkOjpzdHJpbmcmIF9hX2F1dG9SZXN0b3JlSUQpOwogICAgICAgIEF1ZGlvTWFuYWdlckluZm8o QXJ0czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIEF1ZGlvTWFuYWdlckluZm8oY29uc3QgQXVk aW9NYW5hZ2VySW5mbyYgY29weVR5cGUpOwogICAgICAgIEF1ZGlvTWFuYWdlckluZm8mIG9wZXJh dG9yPShjb25zdCBBdWRpb01hbmFnZXJJbmZvJiBhc3NpZ25UeXBlKTsKICAgICAgICBsb25nIElE OwogICAgICAgIHN0ZDo6c3RyaW5nIGRlc3RpbmF0aW9uOwogICAgICAgIEFydHM6OkF1ZGlvTWFu YWdlckRpcmVjdGlvbiBkaXJlY3Rpb247CiAgICAgICAgc3RkOjpzdHJpbmcgdGl0bGU7CiAgICAg ICAgc3RkOjpzdHJpbmcgYXV0b1Jlc3RvcmVJRDsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0 czo6QnVmZmVyJiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYg c3RyZWFtKSBjb25zdDsKfTsKCn07Cm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3ludGhNb2R1bGU7 CmNsYXNzIFN5bnRoX1BMQVk7CmNsYXNzIFN5bnRoX1JFQ09SRDsKY2xhc3MgU3ludGhfRlJFUVVF TkNZOwpjbGFzcyBTeW50aF9XQVZFX1NJTjsKY2xhc3MgU3ludGhfTVVMVElfQUREOwpjbGFzcyBT eW50aF9BREQ7CmNsYXNzIFN5bnRoX01VTDsKY2xhc3MgU3ludGhfUExBWV9XQVY7CmNsYXNzIFN5 bnRoX0JVU19VUExJTks7CmNsYXNzIFN5bnRoX0JVU19ET1dOTElOSzsKY2xhc3MgQnl0ZVN0cmVh bVRvQXVkaW87CmNsYXNzIFN0ZXJlb0VmZmVjdDsKY2xhc3MgU3RlcmVvVm9sdW1lQ29udHJvbDsK Y2xhc3MgU3RlcmVvRkZUU2NvcGU7CmNsYXNzIFN0ZXJlb0VmZmVjdFN0YWNrOwpjbGFzcyBBdWRp b01hbmFnZXJDbGllbnQ7CmNsYXNzIEF1ZGlvTWFuYWdlcjsKY2xhc3MgU3ludGhfQU1BTl9QTEFZ OwpjbGFzcyBTeW50aF9BTUFOX1JFQ09SRDsKCmNsYXNzIFN5bnRoTW9kdWxlX2Jhc2UgOiB2aXJ0 dWFsIHB1YmxpYyBBcnRzOjpPYmplY3RfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3ludGhNb2R1bGVfYmFzZSAqX2NyZWF0 ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3ludGhNb2R1bGUiKTsKICAg ICAgICBzdGF0aWMgU3ludGhNb2R1bGVfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2Jq ZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3ludGhNb2R1bGVfYmFzZSAqX2Zyb21SZWZlcmVuY2Uo QXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRp YyBTeW50aE1vZHVsZV9iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYg b2JqZWN0KTsKICAgICAgICBpbmxpbmUgU3ludGhNb2R1bGVfYmFzZSAqX2NvcHkoKSB7CiAgICAg ICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAg ICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVj dG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFs IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAg ICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVhbCBBcnRz OjpBdXRvU3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p ZCBzdGFydCgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKICAgICAgICB2 aXJ0dWFsIHZvaWQgc3RyZWFtSW5pdCgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt U3RhcnQoKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbUVuZCgpID0gMDsKfTsKCmNs YXNzIFN5bnRoTW9kdWxlX3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBTeW50aE1vZHVsZV9iYXNlLCB2 aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTeW50 aE1vZHVsZV9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgU3ludGhNb2R1bGVfc3R1YihBcnRzOjpD b25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgQXJ0czo6QXV0 b1N1c3BlbmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwogICAgICAgIHZvaWQgc3RhcnQoKTsKICAgICAg ICB2b2lkIHN0b3AoKTsKICAgICAgICB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICB2b2lkIHN0 cmVhbVN0YXJ0KCk7CiAgICAgICAgdm9pZCBzdHJlYW1FbmQoKTsKfTsKCmNsYXNzIFN5bnRoTW9k dWxlX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTeW50aE1vZHVsZV9iYXNlLCB2aXJ0dWFsIHB1Ymxp YyBBcnRzOjpPYmplY3Rfc2tlbCB7CnB1YmxpYzoKICAgICAgICBTeW50aE1vZHVsZV9za2VsKCk7 CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAg ICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJs ZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1 aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVx dWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4u Ly4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDExMCAiLi4vLi4vYXJ0cy9mbG93L2FydHNm bG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTeW50aE1vZHVsZSA6IHB1YmxpYyBBcnRz OjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0Ny ZWF0b3IoKTsKICAgICAgICBTeW50aE1vZHVsZV9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5l IFN5bnRoTW9kdWxlX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29s LT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgX2NhY2hlPShTeW50aE1vZHVsZV9iYXNlICopX3Bvb2wtPmJhc2Ut Pl9jYXN0KFN5bnRoTW9kdWxlX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAo KHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNo ZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFN5bnRoTW9kdWxlKFN5bnRo TW9kdWxlX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6 CiAgICAgICAgdHlwZWRlZiBTeW50aE1vZHVsZV9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBp bmxpbmUgU3ludGhNb2R1bGUoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7 fQogICAgICAgIGlubGluZSBTeW50aE1vZHVsZShjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgog ICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KFN5bnRoTW9kdWxlX2Jhc2U6Ol9jcmVhdGUocy5z dHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhNb2R1bGUoY29uc3Qg QXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0 cmluZygpPyhTeW50aE1vZHVsZV9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN5bnRo TW9kdWxlX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hl KDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoTW9kdWxlKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0 JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aE1vZHVsZV9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMu b2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoTW9kdWxlKGNvbnN0 IFN5bnRoTW9kdWxlJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNo ZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBTeW50aE1vZHVsZShBcnRzOjpPYmpl Y3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxp bmUgc3RhdGljIFN5bnRoTW9kdWxlIG51bGwoKSB7cmV0dXJuIFN5bnRoTW9kdWxlKChTeW50aE1v ZHVsZV9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTeW50aE1vZHVsZSBfZnJvbV9i YXNlKFN5bnRoTW9kdWxlX2Jhc2UqIGIpIHtyZXR1cm4gU3ludGhNb2R1bGUoYik7fQogICAgICAg IGlubGluZSBTeW50aE1vZHVsZSYgb3BlcmF0b3I9KGNvbnN0IFN5bnRoTW9kdWxlJiB0YXJnZXQp IHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhp czsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0g dGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAg ICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK ICAgICAgICB9CiAgICAgICAgaW5saW5lIFN5bnRoTW9kdWxlX2Jhc2UqIF9iYXNlKCkge3JldHVy biBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIEFydHM6OkF1 dG9TdXNwZW5kU3RhdGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgp OwogICAgICAgIGlubGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1J bml0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUg dm9pZCBzdHJlYW1FbmQoKTsKfTsKCmNsYXNzIFN5bnRoX1BMQVlfYmFzZSA6IHZpcnR1YWwgcHVi bGljIEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2ln bmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFN5bnRoX1BMQVlfYmFzZSAqX2NyZWF0ZShj b25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3ludGhfUExBWSIpOwogICAgICAg IHN0YXRpYyBTeW50aF9QTEFZX2Jhc2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJl Zik7CiAgICAgICAgc3RhdGljIFN5bnRoX1BMQVlfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6 T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTeW50 aF9QTEFZX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3Qp OwogICAgICAgIGlubGluZSBTeW50aF9QTEFZX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAg ICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAg IHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6 OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZl Y3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lk ICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7Cgp9OwoKY2xhc3MgU3ludGhfUExBWV9zdHViIDog dmlydHVhbCBwdWJsaWMgU3ludGhfUExBWV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50 aE1vZHVsZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFN5bnRoX1BMQVlfc3R1YigpOwoKcHVi bGljOgogICAgICAgIFN5bnRoX1BMQVlfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9u LCBsb25nIG9iamVjdElEKTsKCn07CgpjbGFzcyBTeW50aF9QTEFZX3NrZWwgOiB2aXJ0dWFsIHB1 YmxpYyBTeW50aF9QTEFZX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9kdWxlX3Nr ZWwgewpwcm90ZWN0ZWQ6CgogICAgICAgIGZsb2F0ICppbnZhbHVlX2xlZnQ7CiAgICAgICAgZmxv YXQgKmludmFsdWVfcmlnaHQ7CgpwdWJsaWM6CiAgICAgICAgU3ludGhfUExBWV9za2VsKCk7Cgog ICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBz dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdp dGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxk TWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVz dCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4u L2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDIwOCAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93 LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTeW50aF9QTEFZIDogcHVibGljIEFydHM6Ok9i amVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRv cigpOwogICAgICAgIFN5bnRoX1BMQVlfYmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBTeW50 aF9QTEFZX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVj a2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgX2NhY2hlPShTeW50aF9QTEFZX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3Qo U3ludGhfUExBWV9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAw KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAg ICAgfQoKcHJvdGVjdGVkOgogICAgICAgIGlubGluZSBTeW50aF9QTEFZKFN5bnRoX1BMQVlfYmFz ZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0 eXBlZGVmIFN5bnRoX1BMQVlfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN5bnRo X1BMQVkoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlu bGluZSBTeW50aF9QTEFZKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAg ICBBcnRzOjpPYmplY3QoU3ludGhfUExBWV9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwgX2Nh Y2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX1BMQVkoY29uc3QgQXJ0czo6UmVmZXJlbmNl ICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhTeW50aF9Q TEFZX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooU3ludGhfUExBWV9iYXNlOjpfZnJv bVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlu bGluZSBTeW50aF9QTEFZKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVj dChTeW50aF9QTEFZX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUo MCkge30KICAgICAgICBpbmxpbmUgU3ludGhfUExBWShjb25zdCBTeW50aF9QTEFZJiB0YXJnZXQp IDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQog ICAgICAgIGlubGluZSBTeW50aF9QTEFZKEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpP YmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgU3ludGhfUExBWSBu dWxsKCkge3JldHVybiBTeW50aF9QTEFZKChTeW50aF9QTEFZX2Jhc2UqKTApO30KICAgICAgICBp bmxpbmUgc3RhdGljIFN5bnRoX1BMQVkgX2Zyb21fYmFzZShTeW50aF9QTEFZX2Jhc2UqIGIpIHty ZXR1cm4gU3ludGhfUExBWShiKTt9CiAgICAgICAgaW5saW5lIFN5bnRoX1BMQVkmIG9wZXJhdG9y PShjb25zdCBTeW50aF9QTEFZJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9 PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMo KTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAg X2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAg ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJh dG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3ludGhNb2R1bGUo Kl9wb29sKTsgfQogICAgICAgIGlubGluZSBTeW50aF9QTEFZX2Jhc2UqIF9iYXNlKCkge3JldHVy biBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIEFydHM6OkF1 dG9TdXNwZW5kU3RhdGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgp OwogICAgICAgIGlubGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1J bml0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUg dm9pZCBzdHJlYW1FbmQoKTsKfTsKCmNsYXNzIFN5bnRoX1JFQ09SRF9iYXNlIDogdmlydHVhbCBw dWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3ludGhfUkVDT1JEX2Jhc2UgKl9jcmVh dGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OlN5bnRoX1JFQ09SRCIpOwog ICAgICAgIHN0YXRpYyBTeW50aF9SRUNPUkRfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcg b2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3ludGhfUkVDT1JEX2Jhc2UgKl9mcm9tUmVmZXJl bmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwoKICAgICAgICBz dGF0aWMgU3ludGhfUkVDT1JEX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2Jq ZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTeW50aF9SRUNPUkRfYmFzZSAqX2NvcHkoKSB7 CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwog ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0 ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2 aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7 CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCn07CgpjbGFzcyBTeW50 aF9SRUNPUkRfc3R1YiA6IHZpcnR1YWwgcHVibGljIFN5bnRoX1JFQ09SRF9iYXNlLCB2aXJ0dWFs IHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFN5bnRo X1JFQ09SRF9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgU3ludGhfUkVDT1JEX3N0dWIoQXJ0czo6 Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7Cgp9OwoKY2xhc3MgU3ludGhf UkVDT1JEX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTeW50aF9SRUNPUkRfYmFzZSwgdmlydHVhbCBw dWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc2tlbCB7CnByb3RlY3RlZDoKCiAgICAgICAgZmxvYXQg KmxlZnQ7CiAgICAgICAgZmxvYXQgKnJpZ2h0OwoKcHVibGljOgogICAgICAgIFN5bnRoX1JFQ09S RF9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwo KTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lz Q29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAg IHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1 ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9 OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDMwNyAiLi4vLi4vYXJ0cy9m bG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTeW50aF9SRUNPUkQgOiBw dWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0 X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3ludGhfUkVDT1JEX2Jhc2UgKl9jYWNoZTsKICAg ICAgICBpbmxpbmUgU3ludGhfUkVDT1JEX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAg ICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJh c2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShTeW50aF9SRUNPUkRfYmFzZSAq KV9wb29sLT5iYXNlLT5fY2FzdChTeW50aF9SRUNPUkRfYmFzZTo6X0lJRCk7CiAgICAgICAgICAg ICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgU3lu dGhfUkVDT1JEKFN5bnRoX1JFQ09SRF9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hl KDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgU3ludGhfUkVDT1JEX2Jhc2UgX2Jhc2Vf Y2xhc3M7CgogICAgICAgIGlubGluZSBTeW50aF9SRUNPUkQoKSA6IEFydHM6Ok9iamVjdChfQ3Jl YXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9SRUNPUkQoY29uc3QgQXJ0 czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChTeW50aF9SRUNP UkRfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGlu ZSBTeW50aF9SRUNPUkQoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAg ICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhTeW50aF9SRUNPUkRfYmFzZTo6X2Zyb21TdHJp bmcoci5zdHJpbmcoKSkpOihTeW50aF9SRUNPUkRfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZl cmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfUkVDT1JE KGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aF9SRUNPUkRf YmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAg IGlubGluZSBTeW50aF9SRUNPUkQoY29uc3QgU3ludGhfUkVDT1JEJiB0YXJnZXQpIDogQXJ0czo6 T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlu bGluZSBTeW50aF9SRUNPUkQoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChw KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTeW50aF9SRUNPUkQgbnVsbCgp IHtyZXR1cm4gU3ludGhfUkVDT1JEKChTeW50aF9SRUNPUkRfYmFzZSopMCk7fQogICAgICAgIGlu bGluZSBzdGF0aWMgU3ludGhfUkVDT1JEIF9mcm9tX2Jhc2UoU3ludGhfUkVDT1JEX2Jhc2UqIGIp IHtyZXR1cm4gU3ludGhfUkVDT1JEKGIpO30KICAgICAgICBpbmxpbmUgU3ludGhfUkVDT1JEJiBv cGVyYXRvcj0oY29uc3QgU3ludGhfUkVDT1JEJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlm IChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9w b29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAg ICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5J bmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5s aW5lIG9wZXJhdG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3lu dGhNb2R1bGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTeW50aF9SRUNPUkRfYmFzZSogX2Jh c2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxp bmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwogICAgICAgIGlubGluZSB2 b2lkIHN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RvcCgpOwogICAgICAgIGlubGluZSB2 b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1TdGFydCgpOwogICAg ICAgIGlubGluZSB2b2lkIHN0cmVhbUVuZCgpOwp9OwoKY2xhc3MgU3ludGhfRlJFUVVFTkNZX2Jh c2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9iYXNlIHsKcHVibGljOgogICAg ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBTeW50aF9GUkVR VUVOQ1lfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6 U3ludGhfRlJFUVVFTkNZIik7CiAgICAgICAgc3RhdGljIFN5bnRoX0ZSRVFVRU5DWV9iYXNlICpf ZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBTeW50aF9G UkVRVUVOQ1lfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwg Ym9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTeW50aF9GUkVRVUVOQ1lfYmFzZSAqX2Zy b21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5l IFN5bnRoX0ZSRVFVRU5DWV9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkg MCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp czsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9k ZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpz dHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5z aWduZWQgbG9uZyBpaWQpOwoKfTsKCmNsYXNzIFN5bnRoX0ZSRVFVRU5DWV9zdHViIDogdmlydHVh bCBwdWJsaWMgU3ludGhfRlJFUVVFTkNZX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRo TW9kdWxlX3N0dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgU3ludGhfRlJFUVVFTkNZX3N0dWIoKTsK CnB1YmxpYzoKICAgICAgICBTeW50aF9GUkVRVUVOQ1lfc3R1YihBcnRzOjpDb25uZWN0aW9uICpj b25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCn07CgpjbGFzcyBTeW50aF9GUkVRVUVOQ1lfc2tl bCA6IHZpcnR1YWwgcHVibGljIFN5bnRoX0ZSRVFVRU5DWV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBB cnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoKICAgICAgICBmbG9hdCAqZnJlcXVl bmN5OwogICAgICAgIGZsb2F0ICpwb3M7CgpwdWJsaWM6CiAgICAgICAgU3ludGhfRlJFUVVFTkNZ X3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgp OwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXND b21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAg dm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVm ZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07 CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgNDA2ICIuLi8uLi9hcnRzL2Zs b3cvYXJ0c2Zsb3cuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFN5bnRoX0ZSRVFVRU5DWSA6 IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmpl Y3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTeW50aF9GUkVRVUVOQ1lfYmFzZSAqX2NhY2hl OwogICAgICAgIGlubGluZSBTeW50aF9GUkVRVUVOQ1lfYmFzZSAqX21ldGhvZF9jYWxsKCkgewog ICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihf cG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFN5bnRoX0ZSRVFV RU5DWV9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN5bnRoX0ZSRVFVRU5DWV9iYXNlOjpfSUlE KTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVkOgogICAg ICAgIGlubGluZSBTeW50aF9GUkVRVUVOQ1koU3ludGhfRlJFUVVFTkNZX2Jhc2UqIGIpIDogQXJ0 czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBTeW50 aF9GUkVRVUVOQ1lfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN5bnRoX0ZSRVFV RU5DWSgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5s aW5lIFN5bnRoX0ZSRVFVRU5DWShjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAg ICAgICAgQXJ0czo6T2JqZWN0KFN5bnRoX0ZSRVFVRU5DWV9iYXNlOjpfY3JlYXRlKHMuc3RyaW5n KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX0ZSRVFVRU5DWShjb25zdCBB cnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3Ry aW5nKCk/KFN5bnRoX0ZSRVFVRU5DWV9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN5 bnRoX0ZSRVFVRU5DWV9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSks IF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9GUkVRVUVOQ1koY29uc3QgQXJ0czo6 RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KFN5bnRoX0ZSRVFVRU5DWV9iYXNlOjpfZnJv bUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5 bnRoX0ZSRVFVRU5DWShjb25zdCBTeW50aF9GUkVRVUVOQ1kmIHRhcmdldCkgOiBBcnRzOjpPYmpl Y3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5l IFN5bnRoX0ZSRVFVRU5DWShBcnRzOjpPYmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHAp LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRoX0ZSRVFVRU5DWSBudWxs KCkge3JldHVybiBTeW50aF9GUkVRVUVOQ1koKFN5bnRoX0ZSRVFVRU5DWV9iYXNlKikwKTt9CiAg ICAgICAgaW5saW5lIHN0YXRpYyBTeW50aF9GUkVRVUVOQ1kgX2Zyb21fYmFzZShTeW50aF9GUkVR VUVOQ1lfYmFzZSogYikge3JldHVybiBTeW50aF9GUkVRVUVOQ1koYik7fQogICAgICAgIGlubGlu ZSBTeW50aF9GUkVRVUVOQ1kmIG9wZXJhdG9yPShjb25zdCBTeW50aF9GUkVRVUVOQ1kmIHRhcmdl dCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0 aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAgICAgX3Bvb2wg PSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQuX2NhY2hlOwog ICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz OwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6U3ludGhNb2R1bGUoKSBj b25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgqX3Bvb2wpOyB9CiAgICAgICAgaW5saW5l IFN5bnRoX0ZSRVFVRU5DWV9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0 aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIGF1dG9T dXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9p ZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5pdCgpOwogICAgICAgIGlubGlu ZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtRW5kKCk7Cn07 CgpjbGFzcyBTeW50aF9XQVZFX1NJTl9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhN b2R1bGVfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoK ICAgICAgICBzdGF0aWMgU3ludGhfV0FWRV9TSU5fYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0 cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3ludGhfV0FWRV9TSU4iKTsKICAgICAgICBzdGF0aWMg U3ludGhfV0FWRV9TSU5fYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsK ICAgICAgICBzdGF0aWMgU3ludGhfV0FWRV9TSU5fYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6 T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTeW50 aF9XQVZFX1NJTl9iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2Jq ZWN0KTsKICAgICAgICBpbmxpbmUgU3ludGhfV0FWRV9TSU5fYmFzZSAqX2NvcHkoKSB7CiAgICAg ICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAg ICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVj dG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFs IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAg ICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCn07CgpjbGFzcyBTeW50aF9XQVZF X1NJTl9zdHViIDogdmlydHVhbCBwdWJsaWMgU3ludGhfV0FWRV9TSU5fYmFzZSwgdmlydHVhbCBw dWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTeW50aF9X QVZFX1NJTl9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgU3ludGhfV0FWRV9TSU5fc3R1YihBcnRz OjpDb25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCn07CgpjbGFzcyBTeW50 aF9XQVZFX1NJTl9za2VsIDogdmlydHVhbCBwdWJsaWMgU3ludGhfV0FWRV9TSU5fYmFzZSwgdmly dHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc2tlbCB7CnByb3RlY3RlZDoKCiAgICAgICAg ZmxvYXQgKnBvczsKICAgICAgICBmbG9hdCAqb3V0dmFsdWU7CgpwdWJsaWM6CiAgICAgICAgU3lu dGhfV0FWRV9TSU5fc2tlbCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFj ZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAg ICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1l KTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRj aChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9k SUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA1MDUgIi4u Ly4uL2FydHMvZmxvdy9hcnRzZmxvdy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3ludGhf V0FWRV9TSU4gOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMg QXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3ludGhfV0FWRV9TSU5fYmFz ZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBTeW50aF9XQVZFX1NJTl9iYXNlICpfbWV0aG9kX2Nh bGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAg ICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oU3lu dGhfV0FWRV9TSU5fYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChTeW50aF9XQVZFX1NJTl9iYXNl OjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVk OgogICAgICAgIGlubGluZSBTeW50aF9XQVZFX1NJTihTeW50aF9XQVZFX1NJTl9iYXNlKiBiKSA6 IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYg U3ludGhfV0FWRV9TSU5fYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN5bnRoX1dB VkVfU0lOKCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBp bmxpbmUgU3ludGhfV0FWRV9TSU4oY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAg ICAgICAgIEFydHM6Ok9iamVjdChTeW50aF9XQVZFX1NJTl9iYXNlOjpfY3JlYXRlKHMuc3RyaW5n KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX1dBVkVfU0lOKGNvbnN0IEFy dHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJp bmcoKT8oU3ludGhfV0FWRV9TSU5fYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTeW50 aF9XQVZFX1NJTl9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9j YWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9XQVZFX1NJTihjb25zdCBBcnRzOjpEeW5h bWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoU3ludGhfV0FWRV9TSU5fYmFzZTo6X2Zyb21EeW5h bWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9X QVZFX1NJTihjb25zdCBTeW50aF9XQVZFX1NJTiYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJn ZXQuX3Bvb2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgU3ludGhf V0FWRV9TSU4oQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hl KDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTeW50aF9XQVZFX1NJTiBudWxsKCkge3JldHVy biBTeW50aF9XQVZFX1NJTigoU3ludGhfV0FWRV9TSU5fYmFzZSopMCk7fQogICAgICAgIGlubGlu ZSBzdGF0aWMgU3ludGhfV0FWRV9TSU4gX2Zyb21fYmFzZShTeW50aF9XQVZFX1NJTl9iYXNlKiBi KSB7cmV0dXJuIFN5bnRoX1dBVkVfU0lOKGIpO30KICAgICAgICBpbmxpbmUgU3ludGhfV0FWRV9T SU4mIG9wZXJhdG9yPShjb25zdCBTeW50aF9XQVZFX1NJTiYgdGFyZ2V0KSB7CiAgICAgICAgICAg ICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAgICAgICAgICAg ICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdldC5fcG9vbDsK ICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAgICAgICAgICBf cG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAg ICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIEFy dHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgU3ludGhfV0FWRV9TSU5f YmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAg ICAgICBpbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwogICAgICAg IGlubGluZSB2b2lkIHN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RvcCgpOwogICAgICAg IGlubGluZSB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1TdGFy dCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUVuZCgpOwp9OwoKY2xhc3MgU3ludGhfTVVM VElfQUREX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9iYXNlIHsKcHVi bGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBT eW50aF9NVUxUSV9BRERfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3Mg PSAiQXJ0czo6U3ludGhfTVVMVElfQUREIik7CiAgICAgICAgc3RhdGljIFN5bnRoX01VTFRJX0FE RF9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRp YyBTeW50aF9NVUxUSV9BRERfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJl bmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTeW50aF9NVUxUSV9BRERf YmFzZSAqX2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAg ICAgaW5saW5lIFN5bnRoX01VTFRJX0FERF9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAg ICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICBy ZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpz dHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0 b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAq X2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKfTsKCmNsYXNzIFN5bnRoX01VTFRJX0FERF9zdHVi IDogdmlydHVhbCBwdWJsaWMgU3ludGhfTVVMVElfQUREX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFy dHM6OlN5bnRoTW9kdWxlX3N0dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgU3ludGhfTVVMVElfQURE X3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBTeW50aF9NVUxUSV9BRERfc3R1YihBcnRzOjpDb25u ZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCn07CgpjbGFzcyBTeW50aF9NVUxU SV9BRERfc2tlbCA6IHZpcnR1YWwgcHVibGljIFN5bnRoX01VTFRJX0FERF9iYXNlLCB2aXJ0dWFs IHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoKICAgICAgICBmbG9h dCAqKmludmFsdWU7CiAgICAgICAgZmxvYXQgKm91dHZhbHVlOwoKcHVibGljOgogICAgICAgIFN5 bnRoX01VTFRJX0FERF9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJm YWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAg ICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5h bWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3Bh dGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRo b2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDYwNCAi Li4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTeW50 aF9NVUxUSV9BREQgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0 aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3ludGhfTVVMVElfQURE X2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgU3ludGhfTVVMVElfQUREX2Jhc2UgKl9tZXRo b2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAg ICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hl PShTeW50aF9NVUxUSV9BRERfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChTeW50aF9NVUxUSV9B RERfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnBy b3RlY3RlZDoKICAgICAgICBpbmxpbmUgU3ludGhfTVVMVElfQUREKFN5bnRoX01VTFRJX0FERF9i YXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAg IHR5cGVkZWYgU3ludGhfTVVMVElfQUREX2Jhc2UgX2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGlu ZSBTeW50aF9NVUxUSV9BREQoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7 fQogICAgICAgIGlubGluZSBTeW50aF9NVUxUSV9BREQoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMp IDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChTeW50aF9NVUxUSV9BRERfYmFzZTo6X2Ny ZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9NVUxU SV9BREQoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpP YmplY3Qoci5pc1N0cmluZygpPyhTeW50aF9NVUxUSV9BRERfYmFzZTo6X2Zyb21TdHJpbmcoci5z dHJpbmcoKSkpOihTeW50aF9NVUxUSV9BRERfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVu Y2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfTVVMVElfQURE KGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aF9NVUxUSV9B RERfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAg ICAgIGlubGluZSBTeW50aF9NVUxUSV9BREQoY29uc3QgU3ludGhfTVVMVElfQUREJiB0YXJnZXQp IDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQog ICAgICAgIGlubGluZSBTeW50aF9NVUxUSV9BREQoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFy dHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTeW50aF9N VUxUSV9BREQgbnVsbCgpIHtyZXR1cm4gU3ludGhfTVVMVElfQUREKChTeW50aF9NVUxUSV9BRERf YmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgU3ludGhfTVVMVElfQUREIF9mcm9tX2Jh c2UoU3ludGhfTVVMVElfQUREX2Jhc2UqIGIpIHtyZXR1cm4gU3ludGhfTVVMVElfQUREKGIpO30K ICAgICAgICBpbmxpbmUgU3ludGhfTVVMVElfQUREJiBvcGVyYXRvcj0oY29uc3QgU3ludGhfTVVM VElfQUREJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bv b2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAg ICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFy Z2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAg IHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlN5 bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3ludGhNb2R1bGUoKl9wb29sKTsgfQog ICAgICAgIGlubGluZSBTeW50aF9NVUxUSV9BRERfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNo ZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgQXJ0czo6QXV0b1N1c3Bl bmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0YXJ0KCk7CiAgICAg ICAgaW5saW5lIHZvaWQgc3RvcCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUluaXQoKTsK ICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1TdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0 cmVhbUVuZCgpOwp9OwoKY2xhc3MgU3ludGhfQUREX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRz OjpTeW50aE1vZHVsZV9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n IF9JSUQ7CgogICAgICAgIHN0YXRpYyBTeW50aF9BRERfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6 OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3ludGhfQUREIik7CiAgICAgICAgc3RhdGljIFN5 bnRoX0FERF9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAg IHN0YXRpYyBTeW50aF9BRERfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJl bmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTeW50aF9BRERfYmFzZSAq X2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5s aW5lIFN5bnRoX0FERF9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7 CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK ICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZh dWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp bmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWdu ZWQgbG9uZyBpaWQpOwoKfTsKCmNsYXNzIFN5bnRoX0FERF9zdHViIDogdmlydHVhbCBwdWJsaWMg U3ludGhfQUREX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9kdWxlX3N0dWIgewpw cm90ZWN0ZWQ6CiAgICAgICAgU3ludGhfQUREX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBTeW50 aF9BRERfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsK Cn07CgpjbGFzcyBTeW50aF9BRERfc2tlbCA6IHZpcnR1YWwgcHVibGljIFN5bnRoX0FERF9iYXNl LCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoKICAg ICAgICBmbG9hdCAqaW52YWx1ZTE7CiAgICAgICAgZmxvYXQgKmludmFsdWUyOwogICAgICAgIGZs b2F0ICpvdXR2YWx1ZTsKCnB1YmxpYzoKICAgICAgICBTeW50aF9BRERfc2tlbCgpOwoKICAgICAg ICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpz dHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNv bnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhv ZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFy dHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRz L21jb3AvcmVmZXJlbmNlLmgiIDEKIyA3MDQgIi4uLy4uL2FydHMvZmxvdy9hcnRzZmxvdy5oIiAy Cm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3ludGhfQUREIDogcHVibGljIEFydHM6Ok9iamVjdCB7 CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwog ICAgICAgIFN5bnRoX0FERF9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFN5bnRoX0FERF9i YXNlICpfbWV0aG9kX2NhbGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUo KTsKICAgICAgICAgICAgICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgIF9jYWNoZT0oU3ludGhfQUREX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoU3ludGhfQURE X2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90 ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFN5bnRoX0FERChTeW50aF9BRERfYmFzZSogYikgOiBBcnRz OjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIFN5bnRo X0FERF9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgU3ludGhfQUREKCkgOiBBcnRz OjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfQURE KGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qo U3ludGhfQUREX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAg ICBpbmxpbmUgU3ludGhfQUREKGNvbnN0IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAg ICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oU3ludGhfQUREX2Jhc2U6Ol9mcm9tU3Ry aW5nKHIuc3RyaW5nKCkpKTooU3ludGhfQUREX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJl bmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX0FERChjb25z dCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoU3ludGhfQUREX2Jhc2U6Ol9m cm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUg U3ludGhfQUREKGNvbnN0IFN5bnRoX0FERCYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQu X3Bvb2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgU3ludGhfQURE KEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQog ICAgICAgIGlubGluZSBzdGF0aWMgU3ludGhfQUREIG51bGwoKSB7cmV0dXJuIFN5bnRoX0FERCgo U3ludGhfQUREX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRoX0FERCBfZnJv bV9iYXNlKFN5bnRoX0FERF9iYXNlKiBiKSB7cmV0dXJuIFN5bnRoX0FERChiKTt9CiAgICAgICAg aW5saW5lIFN5bnRoX0FERCYgb3BlcmF0b3I9KGNvbnN0IFN5bnRoX0FERCYgdGFyZ2V0KSB7CiAg ICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAg ICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdl dC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAg ICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg ICAgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNvbnN0IHsg cmV0dXJuIEFydHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgU3ludGhf QUREX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30K CiAgICAgICAgaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgYXV0b1N1c3BlbmQoKTsKICAg ICAgICBpbmxpbmUgdm9pZCBzdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0b3AoKTsKICAg ICAgICBpbmxpbmUgdm9pZCBzdHJlYW1Jbml0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFt U3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1FbmQoKTsKfTsKCmNsYXNzIFN5bnRo X01VTF9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfYmFzZSB7CnB1Ymxp YzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3lu dGhfTVVMX2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6 OlN5bnRoX01VTCIpOwogICAgICAgIHN0YXRpYyBTeW50aF9NVUxfYmFzZSAqX2Zyb21TdHJpbmco c3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3ludGhfTVVMX2Jhc2UgKl9m cm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwoK ICAgICAgICBzdGF0aWMgU3ludGhfTVVMX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0 czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTeW50aF9NVUxfYmFzZSAqX2NvcHko KSB7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsr OwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFs IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAg ICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29u c3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCn07CgpjbGFzcyBT eW50aF9NVUxfc3R1YiA6IHZpcnR1YWwgcHVibGljIFN5bnRoX01VTF9iYXNlLCB2aXJ0dWFsIHB1 YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFN5bnRoX01V TF9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgU3ludGhfTVVMX3N0dWIoQXJ0czo6Q29ubmVjdGlv biAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7Cgp9OwoKY2xhc3MgU3ludGhfTVVMX3NrZWwg OiB2aXJ0dWFsIHB1YmxpYyBTeW50aF9NVUxfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3lu dGhNb2R1bGVfc2tlbCB7CnByb3RlY3RlZDoKCiAgICAgICAgZmxvYXQgKmludmFsdWUxOwogICAg ICAgIGZsb2F0ICppbnZhbHVlMjsKICAgICAgICBmbG9hdCAqb3V0dmFsdWU7CgpwdWJsaWM6CiAg ICAgICAgU3ludGhfTVVMX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRl cmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAg ICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNl bmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlz cGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1l dGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgODA0 ICIuLi8uLi9hcnRzL2Zsb3cvYXJ0c2Zsb3cuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFN5 bnRoX01VTCA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBB cnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTeW50aF9NVUxfYmFzZSAqX2Nh Y2hlOwogICAgICAgIGlubGluZSBTeW50aF9NVUxfYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAg ICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9v bC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFN5bnRoX01VTF9iYXNl ICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN5bnRoX01VTF9iYXNlOjpfSUlEKTsKICAgICAgICAgICAg ICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVkOgogICAgICAgIGlubGluZSBTeW50 aF9NVUwoU3ludGhfTVVMX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30K CgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBTeW50aF9NVUxfYmFzZSBfYmFzZV9jbGFzczsKCiAg ICAgICAgaW5saW5lIFN5bnRoX01VTCgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hl KDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX01VTChjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykg OgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KFN5bnRoX01VTF9iYXNlOjpfY3JlYXRlKHMu c3RyaW5nKCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX01VTChjb25zdCBB cnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3Ry aW5nKCk/KFN5bnRoX01VTF9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN5bnRoX01V TF9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7 fQogICAgICAgIGlubGluZSBTeW50aF9NVUwoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDog QXJ0czo6T2JqZWN0KFN5bnRoX01VTF9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkp KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX01VTChjb25zdCBTeW50aF9NVUwm IHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2Fj aGUpIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX01VTChBcnRzOjpPYmplY3Q6OlBvb2wmIHApIDog QXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRo X01VTCBudWxsKCkge3JldHVybiBTeW50aF9NVUwoKFN5bnRoX01VTF9iYXNlKikwKTt9CiAgICAg ICAgaW5saW5lIHN0YXRpYyBTeW50aF9NVUwgX2Zyb21fYmFzZShTeW50aF9NVUxfYmFzZSogYikg e3JldHVybiBTeW50aF9NVUwoYik7fQogICAgICAgIGlubGluZSBTeW50aF9NVUwmIG9wZXJhdG9y PShjb25zdCBTeW50aF9NVUwmIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09 IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygp OwogICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBf Y2FjaGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAg ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0 b3IgQXJ0czo6U3ludGhNb2R1bGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgq X3Bvb2wpOyB9CiAgICAgICAgaW5saW5lIFN5bnRoX01VTF9iYXNlKiBfYmFzZSgpIHtyZXR1cm4g X2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRv U3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsK ICAgICAgICBpbmxpbmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5p dCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZv aWQgc3RyZWFtRW5kKCk7Cn07CgpjbGFzcyBTeW50aF9QTEFZX1dBVl9iYXNlIDogdmlydHVhbCBw dWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3ludGhfUExBWV9XQVZfYmFzZSAqX2Ny ZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3ludGhfUExBWV9XQVYi KTsKICAgICAgICBzdGF0aWMgU3ludGhfUExBWV9XQVZfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpz dHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3ludGhfUExBWV9XQVZfYmFzZSAqX2Zy b21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7Cgog ICAgICAgIHN0YXRpYyBTeW50aF9QTEFZX1dBVl9iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0 IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUgU3ludGhfUExBWV9XQVZfYmFz ZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAg X3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAg ICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25z dDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRz T3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAg ICAgICAgdmlydHVhbCBmbG9hdCBzcGVlZCgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc3Bl ZWQoZmxvYXQgbmV3VmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGZpbGVu YW1lKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBmaWxlbmFtZShjb25zdCBzdGQ6OnN0cmlu ZyYgbmV3VmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIGJvb2wgZmluaXNoZWQoKSA9IDA7Cn07 CgpjbGFzcyBTeW50aF9QTEFZX1dBVl9zdHViIDogdmlydHVhbCBwdWJsaWMgU3ludGhfUExBWV9X QVZfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc3R1YiB7CnByb3RlY3Rl ZDoKICAgICAgICBTeW50aF9QTEFZX1dBVl9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgU3ludGhf UExBWV9XQVZfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElE KTsKCiAgICAgICAgZmxvYXQgc3BlZWQoKTsKICAgICAgICB2b2lkIHNwZWVkKGZsb2F0IG5ld1Zh bHVlKTsKICAgICAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZSgpOwogICAgICAgIHZvaWQgZmlsZW5h bWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKTsKICAgICAgICBib29sIGZpbmlzaGVkKCk7 Cn07CgpjbGFzcyBTeW50aF9QTEFZX1dBVl9za2VsIDogdmlydHVhbCBwdWJsaWMgU3ludGhfUExB WV9XQVZfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc2tlbCB7CnByb3Rl Y3RlZDoKCiAgICAgICAgZmxvYXQgKmxlZnQ7CiAgICAgICAgZmxvYXQgKnJpZ2h0OwoKcHJvdGVj dGVkOgoKICAgICAgICBpbmxpbmUgdm9pZCBzcGVlZF9jaGFuZ2VkKGZsb2F0IG5ld1ZhbHVlKSB7 CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJzcGVlZF9jaGFuZ2VkIixuZXdWYWx1ZSk7 CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGZpbGVuYW1lX2NoYW5nZWQoY29uc3Qgc3Rk OjpzdHJpbmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJmaWxl bmFtZV9jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGZp bmlzaGVkX2NoYW5nZWQoYm9vbCBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hh bmdlZCgiZmluaXNoZWRfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAg ICAgICBTeW50aF9QTEFZX1dBVl9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBf aW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgp OwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVy ZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lk IGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9u ZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQoj IDkyNSAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFz cyBTeW50aF9QTEFZX1dBViA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAg IHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTeW50aF9QTEFZ X1dBVl9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFN5bnRoX1BMQVlfV0FWX2Jhc2UgKl9t ZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAg ICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2Nh Y2hlPShTeW50aF9QTEFZX1dBVl9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN5bnRoX1BMQVlf V0FWX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpw cm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFN5bnRoX1BMQVlfV0FWKFN5bnRoX1BMQVlfV0FWX2Jh c2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAg dHlwZWRlZiBTeW50aF9QTEFZX1dBVl9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUg U3ludGhfUExBWV9XQVYoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQog ICAgICAgIGlubGluZSBTeW50aF9QTEFZX1dBVihjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgog ICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KFN5bnRoX1BMQVlfV0FWX2Jhc2U6Ol9jcmVhdGUo cy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfUExBWV9XQVYo Y29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qo ci5pc1N0cmluZygpPyhTeW50aF9QTEFZX1dBVl9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygp KSk6KFN5bnRoX1BMQVlfV0FWX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1 ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX1BMQVlfV0FWKGNvbnN0IEFy dHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aF9QTEFZX1dBVl9iYXNlOjpf ZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l IFN5bnRoX1BMQVlfV0FWKGNvbnN0IFN5bnRoX1BMQVlfV0FWJiB0YXJnZXQpIDogQXJ0czo6T2Jq ZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGlu ZSBTeW50aF9QTEFZX1dBVihBcnRzOjpPYmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHAp LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRoX1BMQVlfV0FWIG51bGwo KSB7cmV0dXJuIFN5bnRoX1BMQVlfV0FWKChTeW50aF9QTEFZX1dBVl9iYXNlKikwKTt9CiAgICAg ICAgaW5saW5lIHN0YXRpYyBTeW50aF9QTEFZX1dBViBfZnJvbV9iYXNlKFN5bnRoX1BMQVlfV0FW X2Jhc2UqIGIpIHtyZXR1cm4gU3ludGhfUExBWV9XQVYoYik7fQogICAgICAgIGlubGluZSBTeW50 aF9QTEFZX1dBViYgb3BlcmF0b3I9KGNvbnN0IFN5bnRoX1BMQVlfV0FWJiB0YXJnZXQpIHsKICAg ICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAg ICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0 Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAg ICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg ICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyBy ZXR1cm4gQXJ0czo6U3ludGhNb2R1bGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTeW50aF9Q TEFZX1dBVl9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwo KTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCk7 CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdG9wKCk7 CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5pdCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0 cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtRW5kKCk7CiAgICAgICAgaW5s aW5lIGZsb2F0IHNwZWVkKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3BlZWQoZmxvYXQgX25ld1Zh bHVlKTsKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgZmlsZW5hbWUoKTsKICAgICAgICBpbmxp bmUgdm9pZCBmaWxlbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKTsKICAgICAgICBp bmxpbmUgYm9vbCBmaW5pc2hlZCgpOwp9OwoKY2xhc3MgU3ludGhfQlVTX1VQTElOS19iYXNlIDog dmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfYmFzZSB7CnB1YmxpYzoKICAgICAgICBz dGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3ludGhfQlVTX1VQTElO S19iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTeW50 aF9CVVNfVVBMSU5LIik7CiAgICAgICAgc3RhdGljIFN5bnRoX0JVU19VUExJTktfYmFzZSAqX2Zy b21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3ludGhfQlVT X1VQTElOS19iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBi b29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFN5bnRoX0JVU19VUExJTktfYmFzZSAqX2Zy b21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5l IFN5bnRoX0JVU19VUExJTktfYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZvaWQp IDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRo aXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBf ZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6 c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVu c2lnbmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBidXNuYW1lKCkg PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBidXNuYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdW YWx1ZSkgPSAwOwp9OwoKY2xhc3MgU3ludGhfQlVTX1VQTElOS19zdHViIDogdmlydHVhbCBwdWJs aWMgU3ludGhfQlVTX1VQTElOS19iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVs ZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFN5bnRoX0JVU19VUExJTktfc3R1YigpOwoKcHVi bGljOgogICAgICAgIFN5bnRoX0JVU19VUExJTktfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25u ZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgc3RkOjpzdHJpbmcgYnVzbmFtZSgpOwog ICAgICAgIHZvaWQgYnVzbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpOwp9OwoKY2xh c3MgU3ludGhfQlVTX1VQTElOS19za2VsIDogdmlydHVhbCBwdWJsaWMgU3ludGhfQlVTX1VQTElO S19iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVk OgoKICAgICAgICBmbG9hdCAqbGVmdDsKICAgICAgICBmbG9hdCAqcmlnaHQ7Cgpwcm90ZWN0ZWQ6 CgogICAgICAgIGlubGluZSB2b2lkIGJ1c25hbWVfY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYg bmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoImJ1c25hbWVfY2hhbmdl ZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAgICAgICBTeW50aF9CVVNfVVBMSU5L X3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgp OwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXND b21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAg dm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVm ZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07 CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMTAzOSAiLi4vLi4vYXJ0cy9m bG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTeW50aF9CVVNfVVBMSU5L IDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9i amVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFN5bnRoX0JVU19VUExJTktfYmFzZSAqX2Nh Y2hlOwogICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBMSU5LX2Jhc2UgKl9tZXRob2RfY2FsbCgp IHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAg aWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShTeW50aF9C VVNfVVBMSU5LX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoU3ludGhfQlVTX1VQTElOS19iYXNl OjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVk OgogICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBMSU5LKFN5bnRoX0JVU19VUExJTktfYmFzZSog YikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBl ZGVmIFN5bnRoX0JVU19VUExJTktfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN5 bnRoX0JVU19VUExJTksoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQog ICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBMSU5LKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6 CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoU3ludGhfQlVTX1VQTElOS19iYXNlOjpfY3Jl YXRlKHMuc3RyaW5nKCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX0JVU19V UExJTksoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpP YmplY3Qoci5pc1N0cmluZygpPyhTeW50aF9CVVNfVVBMSU5LX2Jhc2U6Ol9mcm9tU3RyaW5nKHIu c3RyaW5nKCkpKTooU3ludGhfQlVTX1VQTElOS19iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVy ZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBM SU5LKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aF9CVVNf VVBMSU5LX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30K ICAgICAgICBpbmxpbmUgU3ludGhfQlVTX1VQTElOSyhjb25zdCBTeW50aF9CVVNfVVBMSU5LJiB0 YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hl KSB7fQogICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBMSU5LKEFydHM6Ok9iamVjdDo6UG9vbCYg cCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMg U3ludGhfQlVTX1VQTElOSyBudWxsKCkge3JldHVybiBTeW50aF9CVVNfVVBMSU5LKChTeW50aF9C VVNfVVBMSU5LX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRoX0JVU19VUExJ TksgX2Zyb21fYmFzZShTeW50aF9CVVNfVVBMSU5LX2Jhc2UqIGIpIHtyZXR1cm4gU3ludGhfQlVT X1VQTElOSyhiKTt9CiAgICAgICAgaW5saW5lIFN5bnRoX0JVU19VUExJTksmIG9wZXJhdG9yPShj b25zdCBTeW50aF9CVVNfVVBMSU5LJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9v bCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5E ZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAg ICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsK ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9w ZXJhdG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3ludGhNb2R1 bGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTeW50aF9CVVNfVVBMSU5LX2Jhc2UqIF9iYXNl KCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5l IEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9p ZCBzdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9p ZCBzdHJlYW1Jbml0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAg ICBpbmxpbmUgdm9pZCBzdHJlYW1FbmQoKTsKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgYnVz bmFtZSgpOwogICAgICAgIGlubGluZSB2b2lkIGJ1c25hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIF9u ZXdWYWx1ZSk7Cn07CgpjbGFzcyBTeW50aF9CVVNfRE9XTkxJTktfYmFzZSA6IHZpcnR1YWwgcHVi bGljIEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2ln bmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFN5bnRoX0JVU19ET1dOTElOS19iYXNlICpf Y3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTeW50aF9CVVNfRE9X TkxJTksiKTsKICAgICAgICBzdGF0aWMgU3ludGhfQlVTX0RPV05MSU5LX2Jhc2UgKl9mcm9tU3Ry aW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFN5bnRoX0JVU19ET1dO TElOS19iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29s IG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFN5bnRoX0JVU19ET1dOTElOS19iYXNlICpfZnJv bUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUg U3ludGhfQlVTX0RPV05MSU5LX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lk KSAwKTsKICAgICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0 aGlzOwogICAgICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g X2RlZmF1bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6 OnN0cmluZz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1 bnNpZ25lZCBsb25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgYnVzbmFtZSgp ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgYnVzbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3 VmFsdWUpID0gMDsKfTsKCmNsYXNzIFN5bnRoX0JVU19ET1dOTElOS19zdHViIDogdmlydHVhbCBw dWJsaWMgU3ludGhfQlVTX0RPV05MSU5LX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRo TW9kdWxlX3N0dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgU3ludGhfQlVTX0RPV05MSU5LX3N0dWIo KTsKCnB1YmxpYzoKICAgICAgICBTeW50aF9CVVNfRE9XTkxJTktfc3R1YihBcnRzOjpDb25uZWN0 aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgc3RkOjpzdHJpbmcgYnVz bmFtZSgpOwogICAgICAgIHZvaWQgYnVzbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUp Owp9OwoKY2xhc3MgU3ludGhfQlVTX0RPV05MSU5LX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTeW50 aF9CVVNfRE9XTkxJTktfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc2tl bCB7CnByb3RlY3RlZDoKCiAgICAgICAgZmxvYXQgKmxlZnQ7CiAgICAgICAgZmxvYXQgKnJpZ2h0 OwoKcHJvdGVjdGVkOgoKICAgICAgICBpbmxpbmUgdm9pZCBidXNuYW1lX2NoYW5nZWQoY29uc3Qg c3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJi dXNuYW1lX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CgpwdWJsaWM6CiAgICAgICAgU3lu dGhfQlVTX0RPV05MSU5LX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRl cmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAg ICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNl bmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlz cGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1l dGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMTE1 MCAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBT eW50aF9CVVNfRE9XTkxJTksgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAg ICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3ludGhfQlVT X0RPV05MSU5LX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgU3ludGhfQlVTX0RPV05MSU5L X2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0 ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgX2NhY2hlPShTeW50aF9CVVNfRE9XTkxJTktfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2Fz dChTeW50aF9CVVNfRE9XTkxJTktfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAg ICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2Nh Y2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgU3ludGhfQlVTX0RPV05M SU5LKFN5bnRoX0JVU19ET1dOTElOS19iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hl KDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgU3ludGhfQlVTX0RPV05MSU5LX2Jhc2Ug X2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGluZSBTeW50aF9CVVNfRE9XTkxJTksoKSA6IEFydHM6 Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9CVVNf RE9XTkxJTksoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6 Ok9iamVjdChTeW50aF9CVVNfRE9XTkxJTktfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9j YWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9CVVNfRE9XTkxJTksoY29uc3QgQXJ0czo6 UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygp PyhTeW50aF9CVVNfRE9XTkxJTktfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTeW50 aF9CVVNfRE9XTkxJTktfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkp LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfQlVTX0RPV05MSU5LKGNvbnN0IEFy dHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChTeW50aF9CVVNfRE9XTkxJTktfYmFz ZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlu bGluZSBTeW50aF9CVVNfRE9XTkxJTksoY29uc3QgU3ludGhfQlVTX0RPV05MSU5LJiB0YXJnZXQp IDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQog ICAgICAgIGlubGluZSBTeW50aF9CVVNfRE9XTkxJTksoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6 IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTeW50 aF9CVVNfRE9XTkxJTksgbnVsbCgpIHtyZXR1cm4gU3ludGhfQlVTX0RPV05MSU5LKChTeW50aF9C VVNfRE9XTkxJTktfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgU3ludGhfQlVTX0RP V05MSU5LIF9mcm9tX2Jhc2UoU3ludGhfQlVTX0RPV05MSU5LX2Jhc2UqIGIpIHtyZXR1cm4gU3lu dGhfQlVTX0RPV05MSU5LKGIpO30KICAgICAgICBpbmxpbmUgU3ludGhfQlVTX0RPV05MSU5LJiBv cGVyYXRvcj0oY29uc3QgU3ludGhfQlVTX0RPV05MSU5LJiB0YXJnZXQpIHsKICAgICAgICAgICAg ICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAg ICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwog ICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9w b29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAg ICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0 czo6U3ludGhNb2R1bGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTeW50aF9CVVNfRE9XTkxJ TktfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoK ICAgICAgICBpbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwogICAg ICAgIGlubGluZSB2b2lkIHN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RvcCgpOwogICAg ICAgIGlubGluZSB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1T dGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUVuZCgpOwogICAgICAgIGlubGluZSBz dGQ6OnN0cmluZyBidXNuYW1lKCk7CiAgICAgICAgaW5saW5lIHZvaWQgYnVzbmFtZShjb25zdCBz dGQ6OnN0cmluZyYgX25ld1ZhbHVlKTsKfTsKCmNsYXNzIEJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2Ug OiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9iYXNlIHsKcHVibGljOgogICAgICAg IHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBCeXRlU3RyZWFtVG9B dWRpb19iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpC eXRlU3RyZWFtVG9BdWRpbyIpOwogICAgICAgIHN0YXRpYyBCeXRlU3RyZWFtVG9BdWRpb19iYXNl ICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBCeXRl U3RyZWFtVG9BdWRpb19iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2Ug cmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIEJ5dGVTdHJlYW1Ub0F1ZGlvX2Jh c2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAg IGlubGluZSBCeXRlU3RyZWFtVG9BdWRpb19iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAg ICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICBy ZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpz dHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0 b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAq X2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIGxvbmcgc2FtcGxpbmdS YXRlKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzYW1wbGluZ1JhdGUobG9uZyBuZXdWYWx1 ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgbG9uZyBjaGFubmVscygpID0gMDsKICAgICAgICB2aXJ0 dWFsIHZvaWQgY2hhbm5lbHMobG9uZyBuZXdWYWx1ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgbG9u ZyBiaXRzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBiaXRzKGxvbmcgbmV3VmFsdWUpID0g MDsKICAgICAgICB2aXJ0dWFsIGJvb2wgcnVubmluZygpID0gMDsKfTsKCmNsYXNzIEJ5dGVTdHJl YW1Ub0F1ZGlvX3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBCeXRlU3RyZWFtVG9BdWRpb19iYXNlLCB2 aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAg IEJ5dGVTdHJlYW1Ub0F1ZGlvX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBCeXRlU3RyZWFtVG9B dWRpb19zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoK ICAgICAgICBsb25nIHNhbXBsaW5nUmF0ZSgpOwogICAgICAgIHZvaWQgc2FtcGxpbmdSYXRlKGxv bmcgbmV3VmFsdWUpOwogICAgICAgIGxvbmcgY2hhbm5lbHMoKTsKICAgICAgICB2b2lkIGNoYW5u ZWxzKGxvbmcgbmV3VmFsdWUpOwogICAgICAgIGxvbmcgYml0cygpOwogICAgICAgIHZvaWQgYml0 cyhsb25nIG5ld1ZhbHVlKTsKICAgICAgICBib29sIHJ1bm5pbmcoKTsKfTsKCmNsYXNzIEJ5dGVT dHJlYW1Ub0F1ZGlvX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBCeXRlU3RyZWFtVG9BdWRpb19iYXNl LCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoKICAg ICAgICBBcnRzOjpCeXRlQXN5bmNTdHJlYW0gaW5kYXRhOwogICAgICAgIGZsb2F0ICpsZWZ0Owog ICAgICAgIGZsb2F0ICpyaWdodDsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzX2luZGF0 YShBcnRzOjpEYXRhUGFja2V0PEFydHM6Om1jb3BieXRlPiAqKSA9IDA7Cgpwcm90ZWN0ZWQ6Cgog ICAgICAgIGlubGluZSB2b2lkIHNhbXBsaW5nUmF0ZV9jaGFuZ2VkKGxvbmcgbmV3VmFsdWUpIHsK ICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoInNhbXBsaW5nUmF0ZV9jaGFuZ2VkIixuZXdW YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGNoYW5uZWxzX2NoYW5nZWQobG9u ZyBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgiY2hhbm5lbHNfY2hh bmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBiaXRzX2NoYW5n ZWQobG9uZyBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgiYml0c19j aGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIHJ1bm5pbmdf Y2hhbmdlZChib29sIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJy dW5uaW5nX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CgpwdWJsaWM6CiAgICAgICAgQnl0 ZVN0cmVhbVRvQXVkaW9fc2tlbCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVy ZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAg ICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2Vu YW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNw YXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0 aG9kSUQpOwogICAgICAgIHZvaWQgbm90aWZ5KGNvbnN0IEFydHM6Ok5vdGlmaWNhdGlvbiYgbm90 aWZpY2F0aW9uKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMg MTI4NSAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFz cyBCeXRlU3RyZWFtVG9BdWRpbyA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAg ICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBCeXRlU3Ry ZWFtVG9BdWRpb19iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIEJ5dGVTdHJlYW1Ub0F1ZGlv X2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0 ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgX2NhY2hlPShCeXRlU3RyZWFtVG9BdWRpb19iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0 KEJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAo KHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNo ZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIEJ5dGVTdHJlYW1Ub0F1ZGlv KEJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkg e30KCgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBCeXRlU3RyZWFtVG9BdWRpb19iYXNlIF9iYXNl X2NsYXNzOwoKICAgICAgICBpbmxpbmUgQnl0ZVN0cmVhbVRvQXVkaW8oKSA6IEFydHM6Ok9iamVj dChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBCeXRlU3RyZWFtVG9BdWRp byhjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0 KEJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkg e30KICAgICAgICBpbmxpbmUgQnl0ZVN0cmVhbVRvQXVkaW8oY29uc3QgQXJ0czo6UmVmZXJlbmNl ICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhCeXRlU3Ry ZWFtVG9BdWRpb19iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KEJ5dGVTdHJlYW1Ub0F1 ZGlvX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDAp IHt9CiAgICAgICAgaW5saW5lIEJ5dGVTdHJlYW1Ub0F1ZGlvKGNvbnN0IEFydHM6OkR5bmFtaWND YXN0JiBjKSA6IEFydHM6Ok9iamVjdChCeXRlU3RyZWFtVG9BdWRpb19iYXNlOjpfZnJvbUR5bmFt aWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEJ5dGVTdHJl YW1Ub0F1ZGlvKGNvbnN0IEJ5dGVTdHJlYW1Ub0F1ZGlvJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0 KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBC eXRlU3RyZWFtVG9BdWRpbyhBcnRzOjpPYmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHAp LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIEJ5dGVTdHJlYW1Ub0F1ZGlvIG51 bGwoKSB7cmV0dXJuIEJ5dGVTdHJlYW1Ub0F1ZGlvKChCeXRlU3RyZWFtVG9BdWRpb19iYXNlKikw KTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBCeXRlU3RyZWFtVG9BdWRpbyBfZnJvbV9iYXNlKEJ5 dGVTdHJlYW1Ub0F1ZGlvX2Jhc2UqIGIpIHtyZXR1cm4gQnl0ZVN0cmVhbVRvQXVkaW8oYik7fQog ICAgICAgIGlubGluZSBCeXRlU3RyZWFtVG9BdWRpbyYgb3BlcmF0b3I9KGNvbnN0IEJ5dGVTdHJl YW1Ub0F1ZGlvJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQu X3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAg ICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0g dGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAg ICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6 OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3ludGhNb2R1bGUoKl9wb29sKTsg fQogICAgICAgIGlubGluZSBCeXRlU3RyZWFtVG9BdWRpb19iYXNlKiBfYmFzZSgpIHtyZXR1cm4g X2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRv U3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsK ICAgICAgICBpbmxpbmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5p dCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZv aWQgc3RyZWFtRW5kKCk7CiAgICAgICAgaW5saW5lIGxvbmcgc2FtcGxpbmdSYXRlKCk7CiAgICAg ICAgaW5saW5lIHZvaWQgc2FtcGxpbmdSYXRlKGxvbmcgX25ld1ZhbHVlKTsKICAgICAgICBpbmxp bmUgbG9uZyBjaGFubmVscygpOwogICAgICAgIGlubGluZSB2b2lkIGNoYW5uZWxzKGxvbmcgX25l d1ZhbHVlKTsKICAgICAgICBpbmxpbmUgbG9uZyBiaXRzKCk7CiAgICAgICAgaW5saW5lIHZvaWQg Yml0cyhsb25nIF9uZXdWYWx1ZSk7CiAgICAgICAgaW5saW5lIGJvb2wgcnVubmluZygpOwp9OwoK Y2xhc3MgU3RlcmVvRWZmZWN0X2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVs ZV9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAg ICAgIHN0YXRpYyBTdGVyZW9FZmZlY3RfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYg c3ViQ2xhc3MgPSAiQXJ0czo6U3RlcmVvRWZmZWN0Iik7CiAgICAgICAgc3RhdGljIFN0ZXJlb0Vm ZmVjdF9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0 YXRpYyBTdGVyZW9FZmZlY3RfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJl bmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTdGVyZW9FZmZlY3RfYmFz ZSAqX2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAg aW5saW5lIFN0ZXJlb0VmZmVjdF9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9p ZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4g dGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3Rk OjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3Qo dW5zaWduZWQgbG9uZyBpaWQpOwoKfTsKCmNsYXNzIFN0ZXJlb0VmZmVjdF9zdHViIDogdmlydHVh bCBwdWJsaWMgU3RlcmVvRWZmZWN0X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9k dWxlX3N0dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgU3RlcmVvRWZmZWN0X3N0dWIoKTsKCnB1Ymxp YzoKICAgICAgICBTdGVyZW9FZmZlY3Rfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9u LCBsb25nIG9iamVjdElEKTsKCn07CgpjbGFzcyBTdGVyZW9FZmZlY3Rfc2tlbCA6IHZpcnR1YWwg cHVibGljIFN0ZXJlb0VmZmVjdF9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVs ZV9za2VsIHsKcHJvdGVjdGVkOgoKICAgICAgICBmbG9hdCAqaW5sZWZ0OwogICAgICAgIGZsb2F0 ICppbnJpZ2h0OwogICAgICAgIGZsb2F0ICpvdXRsZWZ0OwogICAgICAgIGZsb2F0ICpvdXRyaWdo dDsKCnB1YmxpYzoKICAgICAgICBTdGVyZW9FZmZlY3Rfc2tlbCgpOwoKICAgICAgICBzdGF0aWMg c3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2lu dGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6 c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7 CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZl ciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVm ZXJlbmNlLmgiIDEKIyAxMzkzICIuLi8uLi9hcnRzL2Zsb3cvYXJ0c2Zsb3cuaCIgMgpuYW1lc3Bh Y2UgQXJ0cyB7CmNsYXNzIFN0ZXJlb0VmZmVjdCA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2 YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAg ICBTdGVyZW9FZmZlY3RfYmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3Rf YmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRl KCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAg ICAgICBfY2FjaGU9KFN0ZXJlb0VmZmVjdF9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN0ZXJl b0VmZmVjdF9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAg fQoKcHJvdGVjdGVkOgogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3QoU3RlcmVvRWZmZWN0X2Jh c2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAg dHlwZWRlZiBTdGVyZW9FZmZlY3RfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN0 ZXJlb0VmZmVjdCgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAg ICAgaW5saW5lIFN0ZXJlb0VmZmVjdChjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAg ICAgICAgICAgQXJ0czo6T2JqZWN0KFN0ZXJlb0VmZmVjdF9iYXNlOjpfY3JlYXRlKHMuc3RyaW5n KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdChjb25zdCBBcnRz OjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5n KCk/KFN0ZXJlb0VmZmVjdF9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN0ZXJlb0Vm ZmVjdF9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgw KSB7fQogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3QoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3Qm IGMpIDogQXJ0czo6T2JqZWN0KFN0ZXJlb0VmZmVjdF9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMu b2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdChjb25z dCBTdGVyZW9FZmZlY3QmIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2Nh Y2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdChBcnRzOjpP YmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBp bmxpbmUgc3RhdGljIFN0ZXJlb0VmZmVjdCBudWxsKCkge3JldHVybiBTdGVyZW9FZmZlY3QoKFN0 ZXJlb0VmZmVjdF9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTdGVyZW9FZmZlY3Qg X2Zyb21fYmFzZShTdGVyZW9FZmZlY3RfYmFzZSogYikge3JldHVybiBTdGVyZW9FZmZlY3QoYik7 fQogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3QmIG9wZXJhdG9yPShjb25zdCBTdGVyZW9FZmZl Y3QmIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkg cmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAg ICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQu X2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0 dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6U3ludGhN b2R1bGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgqX3Bvb2wpOyB9CiAgICAg ICAgaW5saW5lIFN0ZXJlb0VmZmVjdF9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNo ZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRl IGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsKICAgICAgICBpbmxp bmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5pdCgpOwogICAgICAg IGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtRW5k KCk7Cn07CgpjbGFzcyBTdGVyZW9Wb2x1bWVDb250cm9sX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBB cnRzOjpTdGVyZW9FZmZlY3RfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQg bG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgU3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlICpfY3Jl YXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTdGVyZW9Wb2x1bWVDb250 cm9sIik7CiAgICAgICAgc3RhdGljIFN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZSAqX2Zyb21TdHJp bmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgU3RlcmVvVm9sdW1lQ29u dHJvbF9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29s IG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZSAqX2Zy b21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5l IFN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZv aWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJu IHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n PiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0 ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0 KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3Rvcigp ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2NhbGVGYWN0b3IoZmxvYXQgbmV3VmFsdWUpID0g MDsKICAgICAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRWb2x1bWVMZWZ0KCkgPSAwOwogICAgICAg IHZpcnR1YWwgZmxvYXQgY3VycmVudFZvbHVtZVJpZ2h0KCkgPSAwOwp9OwoKY2xhc3MgU3RlcmVv Vm9sdW1lQ29udHJvbF9zdHViIDogdmlydHVhbCBwdWJsaWMgU3RlcmVvVm9sdW1lQ29udHJvbF9i YXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTdGVyZW9FZmZlY3Rfc3R1YiB7CnByb3RlY3RlZDoK ICAgICAgICBTdGVyZW9Wb2x1bWVDb250cm9sX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBTdGVy ZW9Wb2x1bWVDb250cm9sX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBv YmplY3RJRCk7CgogICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yKCk7CiAgICAgICAgdm9pZCBzY2Fs ZUZhY3RvcihmbG9hdCBuZXdWYWx1ZSk7CiAgICAgICAgZmxvYXQgY3VycmVudFZvbHVtZUxlZnQo KTsKICAgICAgICBmbG9hdCBjdXJyZW50Vm9sdW1lUmlnaHQoKTsKfTsKCmNsYXNzIFN0ZXJlb1Zv bHVtZUNvbnRyb2xfc2tlbCA6IHZpcnR1YWwgcHVibGljIFN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFz ZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3RlcmVvRWZmZWN0X3NrZWwgewpwcm90ZWN0ZWQ6Cgog ICAgICAgIGlubGluZSB2b2lkIHNjYWxlRmFjdG9yX2NoYW5nZWQoZmxvYXQgbmV3VmFsdWUpIHsK ICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoInNjYWxlRmFjdG9yX2NoYW5nZWQiLG5ld1Zh bHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgY3VycmVudFZvbHVtZUxlZnRfY2hh bmdlZChmbG9hdCBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgiY3Vy cmVudFZvbHVtZUxlZnRfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxp bmUgdm9pZCBjdXJyZW50Vm9sdW1lUmlnaHRfY2hhbmdlZChmbG9hdCBuZXdWYWx1ZSkgewogICAg ICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgiY3VycmVudFZvbHVtZVJpZ2h0X2NoYW5nZWQiLG5l d1ZhbHVlKTsKICAgICAgICB9CgpwdWJsaWM6CiAgICAgICAgU3RlcmVvVm9sdW1lQ29udHJvbF9z a2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsK ICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29t cGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZv aWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZl ciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9Owoj IDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDE1MDcgIi4uLy4uL2FydHMvZmxv dy9hcnRzZmxvdy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3RlcmVvVm9sdW1lQ29udHJv bCA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpP YmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTdGVyZW9Wb2x1bWVDb250cm9sX2Jhc2Ug Kl9jYWNoZTsKICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlICpfbWV0aG9k X2NhbGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAg ICAgICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0o U3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN0ZXJlb1ZvbHVt ZUNvbnRyb2xfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAg IH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJvbChTdGVyZW9W b2x1bWVDb250cm9sX2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpw dWJsaWM6CiAgICAgICAgdHlwZWRlZiBTdGVyZW9Wb2x1bWVDb250cm9sX2Jhc2UgX2Jhc2VfY2xh c3M7CgogICAgICAgIGlubGluZSBTdGVyZW9Wb2x1bWVDb250cm9sKCkgOiBBcnRzOjpPYmplY3Qo X0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJv bChjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0 KFN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgw KSB7fQogICAgICAgIGlubGluZSBTdGVyZW9Wb2x1bWVDb250cm9sKGNvbnN0IEFydHM6OlJlZmVy ZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oU3Rl cmVvVm9sdW1lQ29udHJvbF9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN0ZXJlb1Zv bHVtZUNvbnRyb2xfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBf Y2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJvbChjb25zdCBBcnRz OjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoU3RlcmVvVm9sdW1lQ29udHJvbF9iYXNl OjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5s aW5lIFN0ZXJlb1ZvbHVtZUNvbnRyb2woY29uc3QgU3RlcmVvVm9sdW1lQ29udHJvbCYgdGFyZ2V0 KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkge30K ICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJvbChBcnRzOjpPYmplY3Q6OlBvb2wmIHAp IDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGljIFN0 ZXJlb1ZvbHVtZUNvbnRyb2wgbnVsbCgpIHtyZXR1cm4gU3RlcmVvVm9sdW1lQ29udHJvbCgoU3Rl cmVvVm9sdW1lQ29udHJvbF9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTdGVyZW9W b2x1bWVDb250cm9sIF9mcm9tX2Jhc2UoU3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlKiBiKSB7cmV0 dXJuIFN0ZXJlb1ZvbHVtZUNvbnRyb2woYik7fQogICAgICAgIGlubGluZSBTdGVyZW9Wb2x1bWVD b250cm9sJiBvcGVyYXRvcj0oY29uc3QgU3RlcmVvVm9sdW1lQ29udHJvbCYgdGFyZ2V0KSB7CiAg ICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAg ICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdl dC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAg ICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg ICAgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTdGVyZW9FZmZlY3QoKSBjb25zdCB7 IHJldHVybiBBcnRzOjpTdGVyZW9FZmZlY3QoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBvcGVy YXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9kdWxl KCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgU3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlKiBfYmFz ZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGlu ZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZv aWQgc3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZv aWQgc3RyZWFtSW5pdCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAg ICAgaW5saW5lIHZvaWQgc3RyZWFtRW5kKCk7CiAgICAgICAgaW5saW5lIGZsb2F0IHNjYWxlRmFj dG9yKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc2NhbGVGYWN0b3IoZmxvYXQgX25ld1ZhbHVlKTsK ICAgICAgICBpbmxpbmUgZmxvYXQgY3VycmVudFZvbHVtZUxlZnQoKTsKICAgICAgICBpbmxpbmUg ZmxvYXQgY3VycmVudFZvbHVtZVJpZ2h0KCk7Cn07CgpjbGFzcyBTdGVyZW9GRlRTY29wZV9iYXNl IDogdmlydHVhbCBwdWJsaWMgQXJ0czo6U3RlcmVvRWZmZWN0X2Jhc2UgewpwdWJsaWM6CiAgICAg ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFN0ZXJlb0ZGVFNj b3BlX2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OlN0 ZXJlb0ZGVFNjb3BlIik7CiAgICAgICAgc3RhdGljIFN0ZXJlb0ZGVFNjb3BlX2Jhc2UgKl9mcm9t U3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFN0ZXJlb0ZGVFNj b3BlX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wg bmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMgU3RlcmVvRkZUU2NvcGVfYmFzZSAqX2Zyb21EeW5h bWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAgaW5saW5lIFN0ZXJl b0ZGVFNjb3BlX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAg ICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg ICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQ b3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g X2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBs b25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8ZmxvYXQ+ICogc2NvcGUoKSA9 IDA7Cn07CgpjbGFzcyBTdGVyZW9GRlRTY29wZV9zdHViIDogdmlydHVhbCBwdWJsaWMgU3RlcmVv RkZUU2NvcGVfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3RlcmVvRWZmZWN0X3N0dWIgewpw cm90ZWN0ZWQ6CiAgICAgICAgU3RlcmVvRkZUU2NvcGVfc3R1YigpOwoKcHVibGljOgogICAgICAg IFN0ZXJlb0ZGVFNjb3BlX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBv YmplY3RJRCk7CgogICAgICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiAqIHNjb3BlKCk7Cn07CgpjbGFz cyBTdGVyZW9GRlRTY29wZV9za2VsIDogdmlydHVhbCBwdWJsaWMgU3RlcmVvRkZUU2NvcGVfYmFz ZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3RlcmVvRWZmZWN0X3NrZWwgewpwcm90ZWN0ZWQ6Cgog ICAgICAgIGlubGluZSB2b2lkIHNjb3BlX2NoYW5nZWQoY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQ+ JiBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgic2NvcGVfY2hhbmdl ZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAgICAgICBTdGVyZW9GRlRTY29wZV9z a2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsK ICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29t cGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZv aWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZl ciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9Owoj IDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDE2MTQgIi4uLy4uL2FydHMvZmxv dy9hcnRzZmxvdy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3RlcmVvRkZUU2NvcGUgOiBw dWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0 X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3RlcmVvRkZUU2NvcGVfYmFzZSAqX2NhY2hlOwog ICAgICAgIGlubGluZSBTdGVyZW9GRlRTY29wZV9iYXNlICpfbWV0aG9kX2NhbGwoKSB7CiAgICAg ICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIGlmKF9wb29s LT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oU3RlcmVvRkZUU2NvcGVf YmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChTdGVyZW9GRlRTY29wZV9iYXNlOjpfSUlEKTsKICAg ICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVkOgogICAgICAgIGlu bGluZSBTdGVyZW9GRlRTY29wZShTdGVyZW9GRlRTY29wZV9iYXNlKiBiKSA6IEFydHM6Ok9iamVj dChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgU3RlcmVvRkZUU2Nv cGVfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN0ZXJlb0ZGVFNjb3BlKCkgOiBB cnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3RlcmVv RkZUU2NvcGUoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6 Ok9iamVjdChTdGVyZW9GRlRTY29wZV9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwgX2NhY2hl KDApIHt9CiAgICAgICAgaW5saW5lIFN0ZXJlb0ZGVFNjb3BlKGNvbnN0IEFydHM6OlJlZmVyZW5j ZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oU3RlcmVv RkZUU2NvcGVfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTdGVyZW9GRlRTY29wZV9i YXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQog ICAgICAgIGlubGluZSBTdGVyZW9GRlRTY29wZShjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYgYykg OiBBcnRzOjpPYmplY3QoU3RlcmVvRkZUU2NvcGVfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9i amVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTdGVyZW9GRlRTY29wZShjb25z dCBTdGVyZW9GRlRTY29wZSYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBf Y2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgU3RlcmVvRkZUU2NvcGUoQXJ0 czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAg ICAgaW5saW5lIHN0YXRpYyBTdGVyZW9GRlRTY29wZSBudWxsKCkge3JldHVybiBTdGVyZW9GRlRT Y29wZSgoU3RlcmVvRkZUU2NvcGVfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgU3Rl cmVvRkZUU2NvcGUgX2Zyb21fYmFzZShTdGVyZW9GRlRTY29wZV9iYXNlKiBiKSB7cmV0dXJuIFN0 ZXJlb0ZGVFNjb3BlKGIpO30KICAgICAgICBpbmxpbmUgU3RlcmVvRkZUU2NvcGUmIG9wZXJhdG9y PShjb25zdCBTdGVyZW9GRlRTY29wZSYgdGFyZ2V0KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bv b2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+ RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAg ICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7 CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAgICAgIGlubGluZSBv cGVyYXRvciBBcnRzOjpTdGVyZW9FZmZlY3QoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTdGVyZW9F ZmZlY3QoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1vZHVs ZSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAgICBp bmxpbmUgU3RlcmVvRkZUU2NvcGVfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6 X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBh dXRvU3VzcGVuZCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0YXJ0KCk7CiAgICAgICAgaW5saW5l IHZvaWQgc3RvcCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICBp bmxpbmUgdm9pZCBzdHJlYW1TdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUVuZCgp OwogICAgICAgIGlubGluZSBzdGQ6OnZlY3RvcjxmbG9hdD4gKiBzY29wZSgpOwp9OwoKY2xhc3Mg U3RlcmVvRWZmZWN0U3RhY2tfYmFzZSA6IHZpcnR1YWwgcHVibGljIEFydHM6OlN0ZXJlb0VmZmVj dF9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAg ICAgIHN0YXRpYyBTdGVyZW9FZmZlY3RTdGFja19iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3Ry aW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTdGVyZW9FZmZlY3RTdGFjayIpOwogICAgICAgIHN0YXRp YyBTdGVyZW9FZmZlY3RTdGFja19iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3Ry ZWYpOwogICAgICAgIHN0YXRpYyBTdGVyZW9FZmZlY3RTdGFja19iYXNlICpfZnJvbVJlZmVyZW5j ZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3Rh dGljIFN0ZXJlb0VmZmVjdFN0YWNrX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6 T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3RTdGFja19iYXNlICpf Y29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVm Q250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZp cnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0Owog ICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQo KSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAg ICB2aXJ0dWFsIGxvbmcgaW5zZXJ0VG9wKEFydHM6OlN0ZXJlb0VmZmVjdCBlZmZlY3QsIGNvbnN0 IHN0ZDo6c3RyaW5nJiBuYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCBsb25nIGluc2VydEJvdHRv bShBcnRzOjpTdGVyZW9FZmZlY3QgZWZmZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgPSAw OwogICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmUobG9uZyBJRCkgPSAwOwp9OwoKY2xhc3MgU3Rl cmVvRWZmZWN0U3RhY2tfc3R1YiA6IHZpcnR1YWwgcHVibGljIFN0ZXJlb0VmZmVjdFN0YWNrX2Jh c2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN0ZXJlb0VmZmVjdF9zdHViIHsKcHJvdGVjdGVkOgog ICAgICAgIFN0ZXJlb0VmZmVjdFN0YWNrX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBTdGVyZW9F ZmZlY3RTdGFja19zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0 SUQpOwoKICAgICAgICBsb25nIGluc2VydFRvcChBcnRzOjpTdGVyZW9FZmZlY3QgZWZmZWN0LCBj b25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgbG9uZyBpbnNlcnRCb3R0b20oQXJ0czo6 U3RlcmVvRWZmZWN0IGVmZmVjdCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIHZv aWQgcmVtb3ZlKGxvbmcgSUQpOwp9OwoKY2xhc3MgU3RlcmVvRWZmZWN0U3RhY2tfc2tlbCA6IHZp cnR1YWwgcHVibGljIFN0ZXJlb0VmZmVjdFN0YWNrX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6 OlN0ZXJlb0VmZmVjdF9za2VsIHsKcHVibGljOgogICAgICAgIFN0ZXJlb0VmZmVjdFN0YWNrX3Nr ZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgpOwog ICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXNDb21w YXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9p ZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVy ICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07CiMg MSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMTcxNiAiLi4vLi4vYXJ0cy9mbG93 L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBTdGVyZW9FZmZlY3RTdGFjayA6 IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmpl Y3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTdGVyZW9FZmZlY3RTdGFja19iYXNlICpfY2Fj aGU7CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdFN0YWNrX2Jhc2UgKl9tZXRob2RfY2FsbCgp IHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAg aWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShTdGVyZW9F ZmZlY3RTdGFja19iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN0ZXJlb0VmZmVjdFN0YWNrX2Jh c2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0 ZWQ6CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdFN0YWNrKFN0ZXJlb0VmZmVjdFN0YWNrX2Jh c2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAg dHlwZWRlZiBTdGVyZW9FZmZlY3RTdGFja19iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxp bmUgU3RlcmVvRWZmZWN0U3RhY2soKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgw KSB7fQogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3RTdGFjayhjb25zdCBBcnRzOjpTdWJDbGFz cyYgcykgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KFN0ZXJlb0VmZmVjdFN0YWNrX2Jh c2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3Rl cmVvRWZmZWN0U3RhY2soY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAg ICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhTdGVyZW9FZmZlY3RTdGFja19iYXNlOjpfZnJv bVN0cmluZyhyLnN0cmluZygpKSk6KFN0ZXJlb0VmZmVjdFN0YWNrX2Jhc2U6Ol9mcm9tUmVmZXJl bmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0 ZXJlb0VmZmVjdFN0YWNrKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVj dChTdGVyZW9FZmZlY3RTdGFja19iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwg X2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0ZXJlb0VmZmVjdFN0YWNrKGNvbnN0IFN0ZXJl b0VmZmVjdFN0YWNrJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNo ZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3RTdGFjayhBcnRz OjpPYmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAg ICBpbmxpbmUgc3RhdGljIFN0ZXJlb0VmZmVjdFN0YWNrIG51bGwoKSB7cmV0dXJuIFN0ZXJlb0Vm ZmVjdFN0YWNrKChTdGVyZW9FZmZlY3RTdGFja19iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0 YXRpYyBTdGVyZW9FZmZlY3RTdGFjayBfZnJvbV9iYXNlKFN0ZXJlb0VmZmVjdFN0YWNrX2Jhc2Uq IGIpIHtyZXR1cm4gU3RlcmVvRWZmZWN0U3RhY2soYik7fQogICAgICAgIGlubGluZSBTdGVyZW9F ZmZlY3RTdGFjayYgb3BlcmF0b3I9KGNvbnN0IFN0ZXJlb0VmZmVjdFN0YWNrJiB0YXJnZXQpIHsK ICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsK ICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFy Z2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAg ICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAg ICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlN0ZXJlb0VmZmVjdCgpIGNvbnN0 IHsgcmV0dXJuIEFydHM6OlN0ZXJlb0VmZmVjdCgqX3Bvb2wpOyB9CiAgICAgICAgaW5saW5lIG9w ZXJhdG9yIEFydHM6OlN5bnRoTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6U3ludGhNb2R1 bGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTdGVyZW9FZmZlY3RTdGFja19iYXNlKiBfYmFz ZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGlu ZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZv aWQgc3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZv aWQgc3RyZWFtSW5pdCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAg ICAgaW5saW5lIHZvaWQgc3RyZWFtRW5kKCk7CiAgICAgICAgaW5saW5lIGxvbmcgaW5zZXJ0VG9w KEFydHM6OlN0ZXJlb0VmZmVjdCBlZmZlY3QsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAg ICAgICBpbmxpbmUgbG9uZyBpbnNlcnRCb3R0b20oQXJ0czo6U3RlcmVvRWZmZWN0IGVmZmVjdCwg Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogICAgICAgIGlubGluZSB2b2lkIHJlbW92ZShsb25n IElEKTsKfTsKCmNsYXNzIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlIDogdmlydHVhbCBwdWJsaWMg QXJ0czo6T2JqZWN0X2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg X0lJRDsKCiAgICAgICAgc3RhdGljIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlICpfY3JlYXRlKGNv bnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpBdWRpb01hbmFnZXJDbGllbnQiKTsK ICAgICAgICBzdGF0aWMgQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UgKl9mcm9tU3RyaW5nKHN0ZDo6 c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNl ICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRjb3B5 KTsKCiAgICAgICAgc3RhdGljIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlICpfZnJvbUR5bmFtaWND YXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUgQXVkaW9NYW5h Z2VyQ2xpZW50X2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAg ICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg ICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQ b3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g X2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBs b25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgbG9uZyBJRCgpID0gMDsKICAgICAgICB2aXJ0dWFs IEFydHM6OkF1ZGlvTWFuYWdlckRpcmVjdGlvbiBkaXJlY3Rpb24oKSA9IDA7CiAgICAgICAgdmly dHVhbCB2b2lkIGRpcmVjdGlvbihBcnRzOjpBdWRpb01hbmFnZXJEaXJlY3Rpb24gbmV3VmFsdWUp ID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIHRpdGxlKCkgPSAwOwogICAgICAgIHZp cnR1YWwgdm9pZCB0aXRsZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpID0gMDsKICAgICAg ICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGF1dG9SZXN0b3JlSUQoKSA9IDA7CiAgICAgICAgdmlydHVh bCB2b2lkIGF1dG9SZXN0b3JlSUQoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSA9IDA7CiAg ICAgICAgdmlydHVhbCB2b2lkIGNvbnN0cnVjdG9yKEFydHM6OkF1ZGlvTWFuYWdlckRpcmVjdGlv biBkaXJlY3Rpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiB0aXRsZSwgY29uc3Qgc3RkOjpzdHJpbmcm IGF1dG9SZXN0b3JlSUQpID0gMDsKfTsKCmNsYXNzIEF1ZGlvTWFuYWdlckNsaWVudF9zdHViIDog dmlydHVhbCBwdWJsaWMgQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFy dHM6Ok9iamVjdF9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIEF1ZGlvTWFuYWdlckNsaWVudF9z dHViKCk7CgpwdWJsaWM6CiAgICAgICAgQXVkaW9NYW5hZ2VyQ2xpZW50X3N0dWIoQXJ0czo6Q29u bmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIGxvbmcgSUQoKTsK ICAgICAgICBBcnRzOjpBdWRpb01hbmFnZXJEaXJlY3Rpb24gZGlyZWN0aW9uKCk7CiAgICAgICAg dm9pZCBkaXJlY3Rpb24oQXJ0czo6QXVkaW9NYW5hZ2VyRGlyZWN0aW9uIG5ld1ZhbHVlKTsKICAg ICAgICBzdGQ6OnN0cmluZyB0aXRsZSgpOwogICAgICAgIHZvaWQgdGl0bGUoY29uc3Qgc3RkOjpz dHJpbmcmIG5ld1ZhbHVlKTsKICAgICAgICBzdGQ6OnN0cmluZyBhdXRvUmVzdG9yZUlEKCk7CiAg ICAgICAgdm9pZCBhdXRvUmVzdG9yZUlEKGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSk7CiAg ICAgICAgdm9pZCBjb25zdHJ1Y3RvcihBcnRzOjpBdWRpb01hbmFnZXJEaXJlY3Rpb24gZGlyZWN0 aW9uLCBjb25zdCBzdGQ6OnN0cmluZyYgdGl0bGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBhdXRvUmVz dG9yZUlEKTsKfTsKCmNsYXNzIEF1ZGlvTWFuYWdlckNsaWVudF9za2VsIDogdmlydHVhbCBwdWJs aWMgQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9z a2VsIHsKcHJvdGVjdGVkOgoKICAgICAgICBpbmxpbmUgdm9pZCBJRF9jaGFuZ2VkKGxvbmcgbmV3 VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoIklEX2NoYW5nZWQiLG5ld1Zh bHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgdGl0bGVfY2hhbmdlZChjb25zdCBz dGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoInRp dGxlX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgYXV0 b1Jlc3RvcmVJRF9jaGFuZ2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSkgewogICAgICAg ICAgICAgICAgX2VtaXRfY2hhbmdlZCgiYXV0b1Jlc3RvcmVJRF9jaGFuZ2VkIixuZXdWYWx1ZSk7 CiAgICAgICAgfQoKcHVibGljOgogICAgICAgIEF1ZGlvTWFuYWdlckNsaWVudF9za2VsKCk7Cgog ICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBz dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdp dGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxk TWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVz dCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4u L2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDE4NDIgIi4uLy4uL2FydHMvZmxvdy9hcnRzZmxv dy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgQXVkaW9NYW5hZ2VyQ2xpZW50IDogcHVibGlj IEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNl KiBfQ3JlYXRvcigpOwogICAgICAgIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlICpfY2FjaGU7CiAg ICAgICAgaW5saW5lIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlICpfbWV0aG9kX2NhbGwoKSB7CiAg ICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIGlmKF9w b29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oQXVkaW9NYW5hZ2Vy Q2xpZW50X2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2U6 Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6 CiAgICAgICAgaW5saW5lIEF1ZGlvTWFuYWdlckNsaWVudChBdWRpb01hbmFnZXJDbGllbnRfYmFz ZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0 eXBlZGVmIEF1ZGlvTWFuYWdlckNsaWVudF9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxp bmUgQXVkaW9NYW5hZ2VyQ2xpZW50KCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUo MCkge30KICAgICAgICBpbmxpbmUgQXVkaW9NYW5hZ2VyQ2xpZW50KGNvbnN0IEFydHM6OlN1YkNs YXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoQXVkaW9NYW5hZ2VyQ2xpZW50 X2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUg QXVkaW9NYW5hZ2VyQ2xpZW50KGNvbnN0IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAg ICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2U6 Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2U6Ol9mcm9t UmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5s aW5lIEF1ZGlvTWFuYWdlckNsaWVudChjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRz OjpPYmplY3QoQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmpl Y3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgQXVkaW9NYW5hZ2VyQ2xpZW50KGNv bnN0IEF1ZGlvTWFuYWdlckNsaWVudCYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bv b2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgQXVkaW9NYW5hZ2Vy Q2xpZW50KEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgw KSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgQXVkaW9NYW5hZ2VyQ2xpZW50IG51bGwoKSB7cmV0 dXJuIEF1ZGlvTWFuYWdlckNsaWVudCgoQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UqKTApO30KICAg ICAgICBpbmxpbmUgc3RhdGljIEF1ZGlvTWFuYWdlckNsaWVudCBfZnJvbV9iYXNlKEF1ZGlvTWFu YWdlckNsaWVudF9iYXNlKiBiKSB7cmV0dXJuIEF1ZGlvTWFuYWdlckNsaWVudChiKTt9CiAgICAg ICAgaW5saW5lIEF1ZGlvTWFuYWdlckNsaWVudCYgb3BlcmF0b3I9KGNvbnN0IEF1ZGlvTWFuYWdl ckNsaWVudCYgdGFyZ2V0KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9w b29sKSByZXR1cm4gKnRoaXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAg ICAgICAgICBfcG9vbCA9IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRh cmdldC5fY2FjaGU7CiAgICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAgICAgIGlubGluZSBBdWRpb01hbmFnZXJDbGll bnRfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoK ICAgICAgICBpbmxpbmUgbG9uZyBJRCgpOwogICAgICAgIGlubGluZSBBcnRzOjpBdWRpb01hbmFn ZXJEaXJlY3Rpb24gZGlyZWN0aW9uKCk7CiAgICAgICAgaW5saW5lIHZvaWQgZGlyZWN0aW9uKEFy dHM6OkF1ZGlvTWFuYWdlckRpcmVjdGlvbiBfbmV3VmFsdWUpOwogICAgICAgIGlubGluZSBzdGQ6 OnN0cmluZyB0aXRsZSgpOwogICAgICAgIGlubGluZSB2b2lkIHRpdGxlKGNvbnN0IHN0ZDo6c3Ry aW5nJiBfbmV3VmFsdWUpOwogICAgICAgIGlubGluZSBzdGQ6OnN0cmluZyBhdXRvUmVzdG9yZUlE KCk7CiAgICAgICAgaW5saW5lIHZvaWQgYXV0b1Jlc3RvcmVJRChjb25zdCBzdGQ6OnN0cmluZyYg X25ld1ZhbHVlKTsKICAgICAgICBpbmxpbmUgQXVkaW9NYW5hZ2VyQ2xpZW50KEFydHM6OkF1ZGlv TWFuYWdlckRpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiB0aXRsZSwgY29u c3Qgc3RkOjpzdHJpbmcmIGF1dG9SZXN0b3JlSUQpOwp9OwoKY2xhc3MgQXVkaW9NYW5hZ2VyX2Jh c2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3RfYmFzZSB7CnB1YmxpYzoKICAgICAgICBz dGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgQXVkaW9NYW5hZ2VyX2Jh c2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OkF1ZGlvTWFu YWdlciIpOwogICAgICAgIHN0YXRpYyBBdWRpb01hbmFnZXJfYmFzZSAqX2Zyb21TdHJpbmcoc3Rk OjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgQXVkaW9NYW5hZ2VyX2Jhc2UgKl9m cm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwoK ICAgICAgICBzdGF0aWMgQXVkaW9NYW5hZ2VyX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3Qg QXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBBdWRpb01hbmFnZXJfYmFzZSAq X2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3Jl ZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2 aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsK ICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0 KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAgICAg ICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gKiBkZXN0aW5hdGlvbnMoKSA9IDA7 CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxBcnRzOjpBdWRpb01hbmFnZXJJbmZvPiAqIGNs aWVudHMoKSA9IDA7CiAgICAgICAgdmlydHVhbCBsb25nIGNoYW5nZXMoKSA9IDA7CiAgICAgICAg dmlydHVhbCB2b2lkIHNldERlc3RpbmF0aW9uKGxvbmcgSUQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBk ZXN0aW5hdGlvbikgPSAwOwp9OwoKY2xhc3MgQXVkaW9NYW5hZ2VyX3N0dWIgOiB2aXJ0dWFsIHB1 YmxpYyBBdWRpb01hbmFnZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X3N0dWIg ewpwcm90ZWN0ZWQ6CiAgICAgICAgQXVkaW9NYW5hZ2VyX3N0dWIoKTsKCnB1YmxpYzoKICAgICAg ICBBdWRpb01hbmFnZXJfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9i amVjdElEKTsKCiAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICogZGVzdGluYXRpb25z KCk7CiAgICAgICAgc3RkOjp2ZWN0b3I8QXJ0czo6QXVkaW9NYW5hZ2VySW5mbz4gKiBjbGllbnRz KCk7CiAgICAgICAgbG9uZyBjaGFuZ2VzKCk7CiAgICAgICAgdm9pZCBzZXREZXN0aW5hdGlvbihs b25nIElELCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdGluYXRpb24pOwp9OwoKY2xhc3MgQXVkaW9N YW5hZ2VyX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBBdWRpb01hbmFnZXJfYmFzZSwgdmlydHVhbCBw dWJsaWMgQXJ0czo6T2JqZWN0X3NrZWwgewpwcm90ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lk IGRlc3RpbmF0aW9uc19jaGFuZ2VkKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbmV3 VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoImRlc3RpbmF0aW9uc19jaGFu Z2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGNoYW5nZXNfY2hh bmdlZChsb25nIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJjaGFu Z2VzX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CgpwdWJsaWM6CiAgICAgICAgQXVkaW9N YW5hZ2VyX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1l U2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9v bCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAg ICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0 czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsK fTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMTk1NCAiLi4vLi4v YXJ0cy9mbG93L2FydHNmbG93LmgiIDIKbmFtZXNwYWNlIEFydHMgewpjbGFzcyBBdWRpb01hbmFn ZXIgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6 T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgQXVkaW9NYW5hZ2VyX2Jhc2UgKl9jYWNo ZTsKICAgICAgICBpbmxpbmUgQXVkaW9NYW5hZ2VyX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAg ICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bv b2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlPShBdWRpb01hbmFnZXJf YmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChBdWRpb01hbmFnZXJfYmFzZTo6X0lJRCk7CiAgICAg ICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxp bmUgQXVkaW9NYW5hZ2VyKEF1ZGlvTWFuYWdlcl9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwg X2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgQXVkaW9NYW5hZ2VyX2Jhc2Ug X2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGluZSBBdWRpb01hbmFnZXIoKSA6IEFydHM6Ok9iamVj dChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBBdWRpb01hbmFnZXIoY29u c3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChBdWRp b01hbmFnZXJfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAg IGlubGluZSBBdWRpb01hbmFnZXIoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAg ICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhBdWRpb01hbmFnZXJfYmFzZTo6X2Zy b21TdHJpbmcoci5zdHJpbmcoKSkpOihBdWRpb01hbmFnZXJfYmFzZTo6X2Zyb21SZWZlcmVuY2Uo ci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgQXVkaW9N YW5hZ2VyKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChBdWRpb01h bmFnZXJfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQog ICAgICAgIGlubGluZSBBdWRpb01hbmFnZXIoY29uc3QgQXVkaW9NYW5hZ2VyJiB0YXJnZXQpIDog QXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAg ICAgIGlubGluZSBBdWRpb01hbmFnZXIoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9i amVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBBdWRpb01hbmFnZXIg bnVsbCgpIHtyZXR1cm4gQXVkaW9NYW5hZ2VyKChBdWRpb01hbmFnZXJfYmFzZSopMCk7fQogICAg ICAgIGlubGluZSBzdGF0aWMgQXVkaW9NYW5hZ2VyIF9mcm9tX2Jhc2UoQXVkaW9NYW5hZ2VyX2Jh c2UqIGIpIHtyZXR1cm4gQXVkaW9NYW5hZ2VyKGIpO30KICAgICAgICBpbmxpbmUgQXVkaW9NYW5h Z2VyJiBvcGVyYXRvcj0oY29uc3QgQXVkaW9NYW5hZ2VyJiB0YXJnZXQpIHsKICAgICAgICAgICAg ICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAg ICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwog ICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9w b29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAg ICAgaW5saW5lIEF1ZGlvTWFuYWdlcl9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNo ZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu Zz4gKiBkZXN0aW5hdGlvbnMoKTsKICAgICAgICBpbmxpbmUgc3RkOjp2ZWN0b3I8QXJ0czo6QXVk aW9NYW5hZ2VySW5mbz4gKiBjbGllbnRzKCk7CiAgICAgICAgaW5saW5lIGxvbmcgY2hhbmdlcygp OwogICAgICAgIGlubGluZSB2b2lkIHNldERlc3RpbmF0aW9uKGxvbmcgSUQsIGNvbnN0IHN0ZDo6 c3RyaW5nJiBkZXN0aW5hdGlvbik7Cn07CgpjbGFzcyBTeW50aF9BTUFOX1BMQVlfYmFzZSA6IHZp cnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3Rh dGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFN5bnRoX0FNQU5fUExBWV9i YXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTeW50aF9B TUFOX1BMQVkiKTsKICAgICAgICBzdGF0aWMgU3ludGhfQU1BTl9QTEFZX2Jhc2UgKl9mcm9tU3Ry aW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFN5bnRoX0FNQU5fUExB WV9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5l ZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFN5bnRoX0FNQU5fUExBWV9iYXNlICpfZnJvbUR5bmFt aWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUgU3ludGhf QU1BTl9QTEFZX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAg ICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg ICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQ b3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g X2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBs b25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgdGl0bGUoKSA9IDA7CiAgICAg ICAgdmlydHVhbCB2b2lkIHRpdGxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSkgPSAwOwog ICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgYXV0b1Jlc3RvcmVJRCgpID0gMDsKICAgICAgICB2 aXJ0dWFsIHZvaWQgYXV0b1Jlc3RvcmVJRChjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpID0g MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY29uc3RydWN0b3IoQXJ0czo6QXVkaW9NYW5hZ2VyQ2xp ZW50IGNsaWVudCkgPSAwOwp9OwoKY2xhc3MgU3ludGhfQU1BTl9QTEFZX3N0dWIgOiB2aXJ0dWFs IHB1YmxpYyBTeW50aF9BTUFOX1BMQVlfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhN b2R1bGVfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTeW50aF9BTUFOX1BMQVlfc3R1YigpOwoK cHVibGljOgogICAgICAgIFN5bnRoX0FNQU5fUExBWV9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNv bm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICBzdGQ6OnN0cmluZyB0aXRsZSgpOwog ICAgICAgIHZvaWQgdGl0bGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKTsKICAgICAgICBz dGQ6OnN0cmluZyBhdXRvUmVzdG9yZUlEKCk7CiAgICAgICAgdm9pZCBhdXRvUmVzdG9yZUlEKGNv bnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSk7CiAgICAgICAgdm9pZCBjb25zdHJ1Y3RvcihBcnRz OjpBdWRpb01hbmFnZXJDbGllbnQgY2xpZW50KTsKfTsKCmNsYXNzIFN5bnRoX0FNQU5fUExBWV9z a2VsIDogdmlydHVhbCBwdWJsaWMgU3ludGhfQU1BTl9QTEFZX2Jhc2UsIHZpcnR1YWwgcHVibGlj IEFydHM6OlN5bnRoTW9kdWxlX3NrZWwgewpwcm90ZWN0ZWQ6CgogICAgICAgIGZsb2F0ICpsZWZ0 OwogICAgICAgIGZsb2F0ICpyaWdodDsKCnByb3RlY3RlZDoKCiAgICAgICAgaW5saW5lIHZvaWQg dGl0bGVfY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAgICAgICAg ICAgIF9lbWl0X2NoYW5nZWQoInRpdGxlX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CiAg ICAgICAgaW5saW5lIHZvaWQgYXV0b1Jlc3RvcmVJRF9jaGFuZ2VkKGNvbnN0IHN0ZDo6c3RyaW5n JiBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdlZCgiYXV0b1Jlc3RvcmVJ RF9jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQoKcHVibGljOgogICAgICAgIFN5bnRoX0FN QU5fUExBWV9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFt ZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJv b2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwog ICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFy dHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7 Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDIwNjkgIi4uLy4u L2FydHMvZmxvdy9hcnRzZmxvdy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3ludGhfQU1B Tl9QTEFZIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFy dHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFN5bnRoX0FNQU5fUExBWV9iYXNl ICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFN5bnRoX0FNQU5fUExBWV9iYXNlICpfbWV0aG9kX2Nh bGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAg ICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oU3lu dGhfQU1BTl9QTEFZX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoU3ludGhfQU1BTl9QTEFZX2Jh c2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0 ZWQ6CiAgICAgICAgaW5saW5lIFN5bnRoX0FNQU5fUExBWShTeW50aF9BTUFOX1BMQVlfYmFzZSog YikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBl ZGVmIFN5bnRoX0FNQU5fUExBWV9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgU3lu dGhfQU1BTl9QTEFZKCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAg ICAgICBpbmxpbmUgU3ludGhfQU1BTl9QTEFZKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAg ICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoU3ludGhfQU1BTl9QTEFZX2Jhc2U6Ol9jcmVhdGUo cy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfQU1BTl9QTEFZ KGNvbnN0IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0 KHIuaXNTdHJpbmcoKT8oU3ludGhfQU1BTl9QTEFZX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5n KCkpKTooU3ludGhfQU1BTl9QTEFZX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCks dHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN5bnRoX0FNQU5fUExBWShjb25z dCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoU3ludGhfQU1BTl9QTEFZX2Jh c2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBp bmxpbmUgU3ludGhfQU1BTl9QTEFZKGNvbnN0IFN5bnRoX0FNQU5fUExBWSYgdGFyZ2V0KSA6IEFy dHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAg ICBpbmxpbmUgU3ludGhfQU1BTl9QTEFZKEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpP YmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgU3ludGhfQU1BTl9Q TEFZIG51bGwoKSB7cmV0dXJuIFN5bnRoX0FNQU5fUExBWSgoU3ludGhfQU1BTl9QTEFZX2Jhc2Uq KTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIFN5bnRoX0FNQU5fUExBWSBfZnJvbV9iYXNlKFN5 bnRoX0FNQU5fUExBWV9iYXNlKiBiKSB7cmV0dXJuIFN5bnRoX0FNQU5fUExBWShiKTt9CiAgICAg ICAgaW5saW5lIFN5bnRoX0FNQU5fUExBWSYgb3BlcmF0b3I9KGNvbnN0IFN5bnRoX0FNQU5fUExB WSYgdGFyZ2V0KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSBy ZXR1cm4gKnRoaXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAg ICBfcG9vbCA9IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5f Y2FjaGU7CiAgICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1 cm4gKnRoaXM7CiAgICAgICAgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1v ZHVsZSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAg ICBpbmxpbmUgU3ludGhfQU1BTl9QTEFZX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2Nh Y2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3Rh dGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgpOwogICAgICAgIGlu bGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1Jbml0KCk7CiAgICAg ICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1F bmQoKTsKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgdGl0bGUoKTsKICAgICAgICBpbmxpbmUg dm9pZCB0aXRsZShjb25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKTsKICAgICAgICBpbmxpbmUg c3RkOjpzdHJpbmcgYXV0b1Jlc3RvcmVJRCgpOwogICAgICAgIGlubGluZSB2b2lkIGF1dG9SZXN0 b3JlSUQoY29uc3Qgc3RkOjpzdHJpbmcmIF9uZXdWYWx1ZSk7CiAgICAgICAgaW5saW5lIFN5bnRo X0FNQU5fUExBWShBcnRzOjpBdWRpb01hbmFnZXJDbGllbnQgY2xpZW50KTsKfTsKCmNsYXNzIFN5 bnRoX0FNQU5fUkVDT1JEX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9i YXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAg IHN0YXRpYyBTeW50aF9BTUFOX1JFQ09SRF9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5n JiBzdWJDbGFzcyA9ICJBcnRzOjpTeW50aF9BTUFOX1JFQ09SRCIpOwogICAgICAgIHN0YXRpYyBT eW50aF9BTUFOX1JFQ09SRF9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYp OwogICAgICAgIHN0YXRpYyBTeW50aF9BTUFOX1JFQ09SRF9iYXNlICpfZnJvbVJlZmVyZW5jZShB cnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGlj IFN5bnRoX0FNQU5fUkVDT1JEX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2Jq ZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTeW50aF9BTUFOX1JFQ09SRF9iYXNlICpfY29w eSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250 Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1 YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAg ICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBj b25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2 aXJ0dWFsIHN0ZDo6c3RyaW5nIHRpdGxlKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCB0aXRs ZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6 c3RyaW5nIGF1dG9SZXN0b3JlSUQoKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGF1dG9SZXN0 b3JlSUQoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2 b2lkIGNvbnN0cnVjdG9yKEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudCBjbGllbnQpID0gMDsKfTsK CmNsYXNzIFN5bnRoX0FNQU5fUkVDT1JEX3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBTeW50aF9BTUFO X1JFQ09SRF9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHViIHsKcHJv dGVjdGVkOgogICAgICAgIFN5bnRoX0FNQU5fUkVDT1JEX3N0dWIoKTsKCnB1YmxpYzoKICAgICAg ICBTeW50aF9BTUFOX1JFQ09SRF9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxv bmcgb2JqZWN0SUQpOwoKICAgICAgICBzdGQ6OnN0cmluZyB0aXRsZSgpOwogICAgICAgIHZvaWQg dGl0bGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKTsKICAgICAgICBzdGQ6OnN0cmluZyBh dXRvUmVzdG9yZUlEKCk7CiAgICAgICAgdm9pZCBhdXRvUmVzdG9yZUlEKGNvbnN0IHN0ZDo6c3Ry aW5nJiBuZXdWYWx1ZSk7CiAgICAgICAgdm9pZCBjb25zdHJ1Y3RvcihBcnRzOjpBdWRpb01hbmFn ZXJDbGllbnQgY2xpZW50KTsKfTsKCmNsYXNzIFN5bnRoX0FNQU5fUkVDT1JEX3NrZWwgOiB2aXJ0 dWFsIHB1YmxpYyBTeW50aF9BTUFOX1JFQ09SRF9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpT eW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoKICAgICAgICBmbG9hdCAqbGVmdDsKICAgICAg ICBmbG9hdCAqcmlnaHQ7Cgpwcm90ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIHRpdGxlX2No YW5nZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1p dF9jaGFuZ2VkKCJ0aXRsZV9jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlu bGluZSB2b2lkIGF1dG9SZXN0b3JlSURfY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFs dWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoImF1dG9SZXN0b3JlSURfY2hhbmdl ZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAgICAgICBTeW50aF9BTUFOX1JFQ09S RF9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwo KTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lz Q29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAg IHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1 ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9 OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIgMQojIDIxOTIgIi4uLy4uL2FydHMv Zmxvdy9hcnRzZmxvdy5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU3ludGhfQU1BTl9SRUNP UkQgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6 T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU3ludGhfQU1BTl9SRUNPUkRfYmFzZSAq X2NhY2hlOwogICAgICAgIGlubGluZSBTeW50aF9BTUFOX1JFQ09SRF9iYXNlICpfbWV0aG9kX2Nh bGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAg ICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oU3lu dGhfQU1BTl9SRUNPUkRfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChTeW50aF9BTUFOX1JFQ09S RF9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoKcHJv dGVjdGVkOgogICAgICAgIGlubGluZSBTeW50aF9BTUFOX1JFQ09SRChTeW50aF9BTUFOX1JFQ09S RF9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAg ICAgIHR5cGVkZWYgU3ludGhfQU1BTl9SRUNPUkRfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAg aW5saW5lIFN5bnRoX0FNQU5fUkVDT1JEKCkgOiBBcnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2Fj aGUoMCkge30KICAgICAgICBpbmxpbmUgU3ludGhfQU1BTl9SRUNPUkQoY29uc3QgQXJ0czo6U3Vi Q2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChTeW50aF9BTUFOX1JFQ09S RF9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l IFN5bnRoX0FNQU5fUkVDT1JEKGNvbnN0IEFydHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAg ICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oU3ludGhfQU1BTl9SRUNPUkRfYmFzZTo6 X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTeW50aF9BTUFOX1JFQ09SRF9iYXNlOjpfZnJvbVJl ZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGlu ZSBTeW50aF9BTUFOX1JFQ09SRChjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpP YmplY3QoU3ludGhfQU1BTl9SRUNPUkRfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgp KSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTeW50aF9BTUFOX1JFQ09SRChjb25zdCBT eW50aF9BTUFOX1JFQ09SRCYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBf Y2FjaGUodGFyZ2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgU3ludGhfQU1BTl9SRUNPUkQo QXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAg ICAgICAgaW5saW5lIHN0YXRpYyBTeW50aF9BTUFOX1JFQ09SRCBudWxsKCkge3JldHVybiBTeW50 aF9BTUFOX1JFQ09SRCgoU3ludGhfQU1BTl9SRUNPUkRfYmFzZSopMCk7fQogICAgICAgIGlubGlu ZSBzdGF0aWMgU3ludGhfQU1BTl9SRUNPUkQgX2Zyb21fYmFzZShTeW50aF9BTUFOX1JFQ09SRF9i YXNlKiBiKSB7cmV0dXJuIFN5bnRoX0FNQU5fUkVDT1JEKGIpO30KICAgICAgICBpbmxpbmUgU3lu dGhfQU1BTl9SRUNPUkQmIG9wZXJhdG9yPShjb25zdCBTeW50aF9BTUFOX1JFQ09SRCYgdGFyZ2V0 KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRo aXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9 IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAg ICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7 CiAgICAgICAgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNv bnN0IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUg U3ludGhfQU1BTl9SRUNPUkRfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21l dGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBhdXRv U3VzcGVuZCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZv aWQgc3RvcCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICBpbmxp bmUgdm9pZCBzdHJlYW1TdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0cmVhbUVuZCgpOwog ICAgICAgIGlubGluZSBzdGQ6OnN0cmluZyB0aXRsZSgpOwogICAgICAgIGlubGluZSB2b2lkIHRp dGxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBfbmV3VmFsdWUpOwogICAgICAgIGlubGluZSBzdGQ6OnN0 cmluZyBhdXRvUmVzdG9yZUlEKCk7CiAgICAgICAgaW5saW5lIHZvaWQgYXV0b1Jlc3RvcmVJRChj b25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKTsKICAgICAgICBpbmxpbmUgU3ludGhfQU1BTl9S RUNPUkQoQXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50IGNsaWVudCk7Cn07CgoKCmlubGluZSBBcnRz OjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoTW9kdWxlOjphdXRvU3VzcGVuZCgpCnsKICAg ICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf Y2FjaGUpLT5hdXRvU3VzcGVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2Uq PihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5 bnRoTW9kdWxlOjpzdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5 bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRo TW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFy dHM6OlN5bnRoTW9kdWxlOjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0 czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpT eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lk IEFydHM6OlN5bnRoTW9kdWxlOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGlj X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpzdGF0 aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1J bml0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoTW9kdWxlOjpzdHJlYW1TdGFydCgpCnsK ICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2Fj aGUpLT5zdHJlYW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf bWV0aG9kX2NhbGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRo TW9kdWxlOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT eW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6 U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGlu ZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoX1BMQVk6OmF1dG9TdXNwZW5kKCkK ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz ZSo+KF9jYWNoZSktPmF1dG9TdXNwZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YXV0b1N1c3BlbmQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0 czo6U3ludGhfUExBWTo6c3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz OjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpT eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdGFydCgpOwp9CgppbmxpbmUgdm9p ZCBBcnRzOjpTeW50aF9QTEFZOjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRz OjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2 b2lkIEFydHM6OlN5bnRoX1BMQVk6OnN0cmVhbUluaXQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0 aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtSW5pdCgpOnN0 YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVh bUluaXQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfUExBWTo6c3RyZWFtU3RhcnQoKQp7 CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2Nh Y2hlKS0+c3RyZWFtU3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o X21ldGhvZF9jYWxsKCkpLT5zdHJlYW1TdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50 aF9QTEFZOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT eW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6 U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGlu ZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoX1JFQ09SRDo6YXV0b1N1c3BlbmQo KQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9i YXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVs ZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9CgppbmxpbmUgdm9pZCBB cnRzOjpTeW50aF9SRUNPUkQ6OnN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0 czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5saW5l IHZvaWQgQXJ0czo6U3ludGhfUkVDT1JEOjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGlj X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2Fz dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlu bGluZSB2b2lkIEFydHM6OlN5bnRoX1JFQ09SRDo6c3RyZWFtSW5pdCgpCnsKICAgICAgICAgX2Nh Y2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1J bml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgp KS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9SRUNPUkQ6OnN0cmVh bVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf YmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1 bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQoKTsKfQoKaW5saW5lIHZvaWQg QXJ0czo6U3ludGhfUkVDT1JEOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNf Y2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGlj X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5k KCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoX0ZSRVFVRU5D WTo6YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz OjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxB cnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9 CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9GUkVRVUVOQ1k6OnN0YXJ0KCkKewogICAgICAgICBf Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0 KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfRlJFUVVFTkNZOjpzdG9wKCkKewog ICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNo ZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9j YWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0ZSRVFVRU5DWTo6c3Ry ZWFtSW5pdCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxl X2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1 bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBB cnRzOjpTeW50aF9GUkVRVUVOQ1k6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3Rh dGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6 c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3Ry ZWFtU3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfRlJFUVVFTkNZOjpzdHJlYW1F bmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl Kj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz ZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3Vz cGVuZFN0YXRlIEFydHM6OlN5bnRoX1dBVkVfU0lOOjphdXRvU3VzcGVuZCgpCnsKICAgICAgICBy ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUp LT5hdXRvU3VzcGVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0 aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1dB VkVfU0lOOjpzdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRo TW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9k dWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6 OlN5bnRoX1dBVkVfU0lOOjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0 czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpT eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lk IEFydHM6OlN5bnRoX1dBVkVfU0lOOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3Rh dGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpz dGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJl YW1Jbml0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1dBVkVfU0lOOjpzdHJlYW1TdGFy dCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2Uq PihfY2FjaGUpLT5zdHJlYW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jh c2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6 OlN5bnRoX1dBVkVfU0lOOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2Fz dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nh c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7 Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoX01VTFRJX0FERDo6 YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT eW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRz OjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9Cgpp bmxpbmUgdm9pZCBBcnRzOjpTeW50aF9NVUxUSV9BREQ6OnN0YXJ0KCkKewogICAgICAgICBfY2Fj aGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0KCk6 c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3Rh cnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfTVVMVElfQUREOjpzdG9wKCkKewogICAg ICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSkt PnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxs KCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX01VTFRJX0FERDo6c3RyZWFt SW5pdCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jh c2UqPihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRz OjpTeW50aF9NVUxUSV9BREQ6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGlj X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3Rh dGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFt U3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfTVVMVElfQUREOjpzdHJlYW1FbmQo KQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o X2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+ KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVu ZFN0YXRlIEFydHM6OlN5bnRoX0FERDo6YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9j YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1 c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxs KCkpLT5hdXRvU3VzcGVuZCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9BREQ6OnN0YXJ0 KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+ KF9jYWNoZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9t ZXRob2RfY2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQUREOjpz dG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz ZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o X21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0FERDo6 c3RyZWFtSW5pdCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9k dWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhN b2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9p ZCBBcnRzOjpTeW50aF9BREQ6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGlj X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3Rh dGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFt U3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQUREOjpzdHJlYW1FbmQoKQp7CiAg ICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hl KS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRo b2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRl IEFydHM6OlN5bnRoX01VTDo6YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9z dGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQo KTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5h dXRvU3VzcGVuZCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9NVUw6OnN0YXJ0KCkKewog ICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNo ZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2Rf Y2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfTVVMOjpzdG9wKCkK ewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9j YWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhv ZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX01VTDo6c3RyZWFt SW5pdCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jh c2UqPihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRz OjpTeW50aF9NVUw6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nh c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQo KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfTVVMOjpzdHJlYW1FbmQoKQp7CiAgICAgICAg IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3Ry ZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2Fs bCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6 OlN5bnRoX1BMQVlfV0FWOjphdXRvU3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0 YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRvU3VzcGVuZCgp OnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1 dG9TdXNwZW5kKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1BMQVlfV0FWOjpzdGFydCgp CnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf Y2FjaGUpLT5zdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0 aG9kX2NhbGwoKSktPnN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1BMQVlfV0FW OjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf YmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1BM QVlfV0FWOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6 U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2FzdDxBcnRz OjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7Cn0KCmlu bGluZSB2b2lkIEFydHM6OlN5bnRoX1BMQVlfV0FWOjpzdHJlYW1TdGFydCgpCnsKICAgICAgICAg X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJl YW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2Nh bGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX1BMQVlfV0FW OjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v ZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhN b2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBmbG9h dCBBcnRzOjpTeW50aF9QTEFZX1dBVjo6c3BlZWQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9z dGF0aWNfY2FzdDxBcnRzOjpTeW50aF9QTEFZX1dBVl9iYXNlKj4oX2NhY2hlKS0+c3BlZWQoKTpz dGF0aWNfY2FzdDxBcnRzOjpTeW50aF9QTEFZX1dBVl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5z cGVlZCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9QTEFZX1dBVjo6c3BlZWQoZmxvYXQg X25ld1ZhbHVlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aF9QTEFZ X1dBVl9iYXNlKj4oX2NhY2hlKS0+c3BlZWQoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpT eW50aF9QTEFZX1dBVl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zcGVlZChfbmV3VmFsdWUpOwp9 CgppbmxpbmUgc3RkOjpzdHJpbmcgQXJ0czo6U3ludGhfUExBWV9XQVY6OmZpbGVuYW1lKCkKewog ICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhfUExBWV9XQVZfYmFz ZSo+KF9jYWNoZSktPmZpbGVuYW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhfUExBWV9XQVZf YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZmlsZW5hbWUoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6 U3ludGhfUExBWV9XQVY6OmZpbGVuYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBfbmV3VmFsdWUpCnsK ICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoX1BMQVlfV0FWX2Jhc2UqPihf Y2FjaGUpLT5maWxlbmFtZShfbmV3VmFsdWUpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoX1BMQVlf V0FWX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmZpbGVuYW1lKF9uZXdWYWx1ZSk7Cn0KCmlubGlu ZSBib29sIEFydHM6OlN5bnRoX1BMQVlfV0FWOjpmaW5pc2hlZCgpCnsKICAgICAgICByZXR1cm4g X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoX1BMQVlfV0FWX2Jhc2UqPihfY2FjaGUpLT5m aW5pc2hlZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoX1BMQVlfV0FWX2Jhc2UqPihfbWV0aG9k X2NhbGwoKSktPmZpbmlzaGVkKCk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFy dHM6OlN5bnRoX0JVU19VUExJTks6OmF1dG9TdXNwZW5kKCkKewogICAgICAgIHJldHVybiBfY2Fj aGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPmF1dG9TdXNw ZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgp KS0+YXV0b1N1c3BlbmQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQlVTX1VQTElOSzo6 c3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9i YXNlKj4oX2NhY2hlKS0+c3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5zdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9C VVNfVVBMSU5LOjpzdG9wKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3lu dGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3AoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v ZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6 OlN5bnRoX0JVU19VUExJTks6OnN0cmVhbUluaXQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNf Y2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtSW5pdCgpOnN0YXRp Y19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbUlu aXQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQlVTX1VQTElOSzo6c3RyZWFtU3RhcnQo KQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o X2NhY2hlKS0+c3RyZWFtU3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1TdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpT eW50aF9CVVNfVVBMSU5LOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2Fz dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nh c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7 Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBBcnRzOjpTeW50aF9CVVNfVVBMSU5LOjpidXNuYW1lKCkK ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhfQlVTX1VQTElO S19iYXNlKj4oX2NhY2hlKS0+YnVzbmFtZSgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoX0JVU19V UExJTktfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YnVzbmFtZSgpOwp9CgppbmxpbmUgdm9pZCBB cnRzOjpTeW50aF9CVVNfVVBMSU5LOjpidXNuYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBfbmV3VmFs dWUpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoX0JVU19VUExJTktf YmFzZSo+KF9jYWNoZSktPmJ1c25hbWUoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50 aF9CVVNfVVBMSU5LX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmJ1c25hbWUoX25ld1ZhbHVlKTsK fQoKaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgQXJ0czo6U3ludGhfQlVTX0RPV05MSU5L OjphdXRvU3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6 OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRvU3VzcGVuZCgpOnN0YXRpY19jYXN0PEFy dHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0K CmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0JVU19ET1dOTElOSzo6c3RhcnQoKQp7CiAgICAgICAg IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3Rh cnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkp LT5zdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9CVVNfRE9XTkxJTks6OnN0b3Ao KQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o X2NhY2hlKS0+c3RvcCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0 aG9kX2NhbGwoKSktPnN0b3AoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQlVTX0RPV05M SU5LOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3lu dGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2FzdDxBcnRzOjpT eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7Cn0KCmlubGlu ZSB2b2lkIEFydHM6OlN5bnRoX0JVU19ET1dOTElOSzo6c3RyZWFtU3RhcnQoKQp7CiAgICAgICAg IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3Ry ZWFtU3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9j YWxsKCkpLT5zdHJlYW1TdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9CVVNfRE9X TkxJTks6OnN0cmVhbUVuZCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5 bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1FbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpT eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1FbmQoKTsKfQoKaW5saW5l IHN0ZDo6c3RyaW5nIEFydHM6OlN5bnRoX0JVU19ET1dOTElOSzo6YnVzbmFtZSgpCnsKICAgICAg ICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoX0JVU19ET1dOTElOS19iYXNl Kj4oX2NhY2hlKS0+YnVzbmFtZSgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoX0JVU19ET1dOTElO S19iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5idXNuYW1lKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6 OlN5bnRoX0JVU19ET1dOTElOSzo6YnVzbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVl KQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aF9CVVNfRE9XTkxJTktf YmFzZSo+KF9jYWNoZSktPmJ1c25hbWUoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50 aF9CVVNfRE9XTkxJTktfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YnVzbmFtZShfbmV3VmFsdWUp Owp9CgppbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBBcnRzOjpCeXRlU3RyZWFtVG9BdWRp bzo6YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz OjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxB cnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9 CgppbmxpbmUgdm9pZCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRpbzo6c3RhcnQoKQp7CiAgICAgICAg IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3Rh cnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkp LT5zdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRpbzo6c3RvcCgp CnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf Y2FjaGUpLT5zdG9wKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRo b2RfY2FsbCgpKS0+c3RvcCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRp bzo6c3RyZWFtSW5pdCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRo TW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3lu dGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUg dm9pZCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRpbzo6c3RyZWFtU3RhcnQoKQp7CiAgICAgICAgIF9j YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFt U3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxs KCkpLT5zdHJlYW1TdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRp bzo6c3RyZWFtRW5kKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhN b2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRo TW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbUVuZCgpOwp9CgppbmxpbmUgbG9u ZyBBcnRzOjpCeXRlU3RyZWFtVG9BdWRpbzo6c2FtcGxpbmdSYXRlKCkKewogICAgICAgIHJldHVy biBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVN0cmVhbVRvQXVkaW9fYmFzZSo+KF9jYWNo ZSktPnNhbXBsaW5nUmF0ZSgpOnN0YXRpY19jYXN0PEFydHM6OkJ5dGVTdHJlYW1Ub0F1ZGlvX2Jh c2UqPihfbWV0aG9kX2NhbGwoKSktPnNhbXBsaW5nUmF0ZSgpOwp9CgppbmxpbmUgdm9pZCBBcnRz OjpCeXRlU3RyZWFtVG9BdWRpbzo6c2FtcGxpbmdSYXRlKGxvbmcgX25ld1ZhbHVlKQp7CiAgICAg ICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpCeXRlU3RyZWFtVG9BdWRpb19iYXNlKj4oX2Nh Y2hlKS0+c2FtcGxpbmdSYXRlKF9uZXdWYWx1ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVN0cmVh bVRvQXVkaW9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2FtcGxpbmdSYXRlKF9uZXdWYWx1ZSk7 Cn0KCmlubGluZSBsb25nIEFydHM6OkJ5dGVTdHJlYW1Ub0F1ZGlvOjpjaGFubmVscygpCnsKICAg ICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkJ5dGVTdHJlYW1Ub0F1ZGlvX2Jh c2UqPihfY2FjaGUpLT5jaGFubmVscygpOnN0YXRpY19jYXN0PEFydHM6OkJ5dGVTdHJlYW1Ub0F1 ZGlvX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNoYW5uZWxzKCk7Cn0KCmlubGluZSB2b2lkIEFy dHM6OkJ5dGVTdHJlYW1Ub0F1ZGlvOjpjaGFubmVscyhsb25nIF9uZXdWYWx1ZSkKewogICAgICAg ICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVN0cmVhbVRvQXVkaW9fYmFzZSo+KF9jYWNo ZSktPmNoYW5uZWxzKF9uZXdWYWx1ZSk6c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVN0cmVhbVRvQXVk aW9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y2hhbm5lbHMoX25ld1ZhbHVlKTsKfQoKaW5saW5l IGxvbmcgQXJ0czo6Qnl0ZVN0cmVhbVRvQXVkaW86OmJpdHMoKQp7CiAgICAgICAgcmV0dXJuIF9j YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpCeXRlU3RyZWFtVG9BdWRpb19iYXNlKj4oX2NhY2hlKS0+ Yml0cygpOnN0YXRpY19jYXN0PEFydHM6OkJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2UqPihfbWV0aG9k X2NhbGwoKSktPmJpdHMoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6Qnl0ZVN0cmVhbVRvQXVkaW86 OmJpdHMobG9uZyBfbmV3VmFsdWUpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6 OkJ5dGVTdHJlYW1Ub0F1ZGlvX2Jhc2UqPihfY2FjaGUpLT5iaXRzKF9uZXdWYWx1ZSk6c3RhdGlj X2Nhc3Q8QXJ0czo6Qnl0ZVN0cmVhbVRvQXVkaW9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Yml0 cyhfbmV3VmFsdWUpOwp9CgppbmxpbmUgYm9vbCBBcnRzOjpCeXRlU3RyZWFtVG9BdWRpbzo6cnVu bmluZygpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkJ5dGVTdHJl YW1Ub0F1ZGlvX2Jhc2UqPihfY2FjaGUpLT5ydW5uaW5nKCk6c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0 ZVN0cmVhbVRvQXVkaW9fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cnVubmluZygpOwp9Cgppbmxp bmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBBcnRzOjpTdGVyZW9FZmZlY3Q6OmF1dG9TdXNwZW5k KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf YmFzZSo+KF9jYWNoZSktPmF1dG9TdXNwZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1 bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YXV0b1N1c3BlbmQoKTsKfQoKaW5saW5lIHZvaWQg QXJ0czo6U3RlcmVvRWZmZWN0OjpzdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0 PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdGFydCgpOnN0YXRpY19jYXN0PEFy dHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXJ0KCk7Cn0KCmlubGlu ZSB2b2lkIEFydHM6OlN0ZXJlb0VmZmVjdDo6c3RvcCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRp Y19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdG9wKCk6c3RhdGljX2Nh c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RvcCgpOwp9Cgpp bmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9FZmZlY3Q6OnN0cmVhbUluaXQoKQp7CiAgICAgICAgIF9j YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFt SW5pdCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwo KSktPnN0cmVhbUluaXQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0OjpzdHJl YW1TdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxl X2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9k dWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlubGluZSB2b2lk IEFydHM6OlN0ZXJlb0VmZmVjdDo6c3RyZWFtRW5kKCkKewogICAgICAgICBfY2FjaGU/c3RhdGlj X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUVuZCgpOnN0YXRp Y19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbUVu ZCgpOwp9CgppbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBBcnRzOjpTdGVyZW9Wb2x1bWVD b250cm9sOjphdXRvU3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0 PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRvU3VzcGVuZCgpOnN0YXRpY19j YXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5k KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN0ZXJlb1ZvbHVtZUNvbnRyb2w6OnN0YXJ0KCkKewog ICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNo ZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2Rf Y2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvVm9sdW1lQ29udHJv bDo6c3RvcCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxl X2Jhc2UqPihfY2FjaGUpLT5zdG9wKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz ZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RvcCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9W b2x1bWVDb250cm9sOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2Fz dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7 Cn0KCmlubGluZSB2b2lkIEFydHM6OlN0ZXJlb1ZvbHVtZUNvbnRyb2w6OnN0cmVhbVN0YXJ0KCkK ewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9j YWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+ KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3Rl cmVvVm9sdW1lQ29udHJvbDo6c3RyZWFtRW5kKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nh c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUVuZCgpOnN0YXRpY19j YXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbUVuZCgp Owp9CgppbmxpbmUgZmxvYXQgQXJ0czo6U3RlcmVvVm9sdW1lQ29udHJvbDo6c2NhbGVGYWN0b3Io KQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9Wb2x1bWVD b250cm9sX2Jhc2UqPihfY2FjaGUpLT5zY2FsZUZhY3RvcigpOnN0YXRpY19jYXN0PEFydHM6OlN0 ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2NhbGVGYWN0b3IoKTsK fQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvVm9sdW1lQ29udHJvbDo6c2NhbGVGYWN0b3IoZmxv YXQgX25ld1ZhbHVlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9W b2x1bWVDb250cm9sX2Jhc2UqPihfY2FjaGUpLT5zY2FsZUZhY3RvcihfbmV3VmFsdWUpOnN0YXRp Y19jYXN0PEFydHM6OlN0ZXJlb1ZvbHVtZUNvbnRyb2xfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ c2NhbGVGYWN0b3IoX25ld1ZhbHVlKTsKfQoKaW5saW5lIGZsb2F0IEFydHM6OlN0ZXJlb1ZvbHVt ZUNvbnRyb2w6OmN1cnJlbnRWb2x1bWVMZWZ0KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3Rh dGljX2Nhc3Q8QXJ0czo6U3RlcmVvVm9sdW1lQ29udHJvbF9iYXNlKj4oX2NhY2hlKS0+Y3VycmVu dFZvbHVtZUxlZnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9Wb2x1bWVDb250cm9sX2Jhc2Uq PihfbWV0aG9kX2NhbGwoKSktPmN1cnJlbnRWb2x1bWVMZWZ0KCk7Cn0KCmlubGluZSBmbG9hdCBB cnRzOjpTdGVyZW9Wb2x1bWVDb250cm9sOjpjdXJyZW50Vm9sdW1lUmlnaHQoKQp7CiAgICAgICAg cmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9Wb2x1bWVDb250cm9sX2Jhc2Uq PihfY2FjaGUpLT5jdXJyZW50Vm9sdW1lUmlnaHQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9W b2x1bWVDb250cm9sX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmN1cnJlbnRWb2x1bWVSaWdodCgp Owp9CgppbmxpbmUgQXJ0czo6QXV0b1N1c3BlbmRTdGF0ZSBBcnRzOjpTdGVyZW9GRlRTY29wZTo6 YXV0b1N1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT eW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRz OjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9Cgpp bmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9GRlRTY29wZTo6c3RhcnQoKQp7CiAgICAgICAgIF9jYWNo ZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RhcnQoKTpz dGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdGFy dCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9GRlRTY29wZTo6c3RvcCgpCnsKICAgICAg ICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5z dG9wKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgp KS0+c3RvcCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9GRlRTY29wZTo6c3RyZWFtSW5p dCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2Uq PihfY2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz ZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpT dGVyZW9GRlRTY29wZTo6c3RyZWFtU3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2Fz dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtU3RhcnQoKTpzdGF0aWNf Y2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1TdGFy dCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGVyZW9GRlRTY29wZTo6c3RyZWFtRW5kKCkKewog ICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNo ZSktPnN0cmVhbUVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0 aG9kX2NhbGwoKSktPnN0cmVhbUVuZCgpOwp9CgppbmxpbmUgc3RkOjp2ZWN0b3I8ZmxvYXQ+ICog QXJ0czo6U3RlcmVvRkZUU2NvcGU6OnNjb3BlKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3Rh dGljX2Nhc3Q8QXJ0czo6U3RlcmVvRkZUU2NvcGVfYmFzZSo+KF9jYWNoZSktPnNjb3BlKCk6c3Rh dGljX2Nhc3Q8QXJ0czo6U3RlcmVvRkZUU2NvcGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2Nv cGUoKTsKfQoKaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgQXJ0czo6U3RlcmVvRWZmZWN0 U3RhY2s6OmF1dG9TdXNwZW5kKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPmF1dG9TdXNwZW5kKCk6c3RhdGljX2Nh c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YXV0b1N1c3BlbmQo KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2s6OnN0YXJ0KCkKewogICAg ICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSkt PnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2Fs bCgpKS0+c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2s6OnN0 b3AoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl Kj4oX2NhY2hlKS0+c3RvcCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf bWV0aG9kX2NhbGwoKSktPnN0b3AoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0 U3RhY2s6OnN0cmVhbUluaXQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT eW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtSW5pdCgpOnN0YXRpY19jYXN0PEFydHM6 OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbUluaXQoKTsKfQoKaW5s aW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2s6OnN0cmVhbVN0YXJ0KCkKewogICAgICAg ICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0 cmVhbVN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2Rf Y2FsbCgpKS0+c3RyZWFtU3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3RlcmVvRWZmZWN0 U3RhY2s6OnN0cmVhbUVuZCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5 bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1FbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpT eW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1FbmQoKTsKfQoKaW5saW5l IGxvbmcgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2s6Omluc2VydFRvcChBcnRzOjpTdGVyZW9FZmZl Y3QgZWZmZWN0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKewogICAgICAgIHJldHVybiBfY2Fj aGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3RlcmVvRWZmZWN0U3RhY2tfYmFzZSo+KF9jYWNoZSktPmlu c2VydFRvcChlZmZlY3QsIG5hbWUpOnN0YXRpY19jYXN0PEFydHM6OlN0ZXJlb0VmZmVjdFN0YWNr X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmluc2VydFRvcChlZmZlY3QsIG5hbWUpOwp9Cgppbmxp bmUgbG9uZyBBcnRzOjpTdGVyZW9FZmZlY3RTdGFjazo6aW5zZXJ0Qm90dG9tKEFydHM6OlN0ZXJl b0VmZmVjdCBlZmZlY3QsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQp7CiAgICAgICAgcmV0dXJu IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTdGVyZW9FZmZlY3RTdGFja19iYXNlKj4oX2NhY2hl KS0+aW5zZXJ0Qm90dG9tKGVmZmVjdCwgbmFtZSk6c3RhdGljX2Nhc3Q8QXJ0czo6U3RlcmVvRWZm ZWN0U3RhY2tfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+aW5zZXJ0Qm90dG9tKGVmZmVjdCwgbmFt ZSk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN0ZXJlb0VmZmVjdFN0YWNrOjpyZW1vdmUobG9uZyBJ RCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3RlcmVvRWZmZWN0U3RhY2tf YmFzZSo+KF9jYWNoZSktPnJlbW92ZShJRCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3RlcmVvRWZmZWN0 U3RhY2tfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cmVtb3ZlKElEKTsKfQoKaW5saW5lIGxvbmcg QXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50OjpJRCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0 YXRpY19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudF9iYXNlKj4oX2NhY2hlKS0+SUQoKTpz dGF0aWNfY2FzdDxBcnRzOjpBdWRpb01hbmFnZXJDbGllbnRfYmFzZSo+KF9tZXRob2RfY2FsbCgp KS0+SUQoKTsKfQoKaW5saW5lIEFydHM6OkF1ZGlvTWFuYWdlckRpcmVjdGlvbiBBcnRzOjpBdWRp b01hbmFnZXJDbGllbnQ6OmRpcmVjdGlvbigpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRp Y19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudF9iYXNlKj4oX2NhY2hlKS0+ZGlyZWN0aW9u KCk6c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UqPihfbWV0aG9kX2Nh bGwoKSktPmRpcmVjdGlvbigpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpBdWRpb01hbmFnZXJDbGll bnQ6OmRpcmVjdGlvbihBcnRzOjpBdWRpb01hbmFnZXJEaXJlY3Rpb24gX25ld1ZhbHVlKQp7CiAg ICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpBdWRpb01hbmFnZXJDbGllbnRfYmFzZSo+ KF9jYWNoZSktPmRpcmVjdGlvbihfbmV3VmFsdWUpOnN0YXRpY19jYXN0PEFydHM6OkF1ZGlvTWFu YWdlckNsaWVudF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5kaXJlY3Rpb24oX25ld1ZhbHVlKTsK fQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudDo6dGl0bGUoKQp7 CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpBdWRpb01hbmFnZXJDbGll bnRfYmFzZSo+KF9jYWNoZSktPnRpdGxlKCk6c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5hZ2Vy Q2xpZW50X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnRpdGxlKCk7Cn0KCmlubGluZSB2b2lkIEFy dHM6OkF1ZGlvTWFuYWdlckNsaWVudDo6dGl0bGUoY29uc3Qgc3RkOjpzdHJpbmcmIF9uZXdWYWx1 ZSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50 X2Jhc2UqPihfY2FjaGUpLT50aXRsZShfbmV3VmFsdWUpOnN0YXRpY19jYXN0PEFydHM6OkF1ZGlv TWFuYWdlckNsaWVudF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT50aXRsZShfbmV3VmFsdWUpOwp9 CgppbmxpbmUgc3RkOjpzdHJpbmcgQXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50OjphdXRvUmVzdG9y ZUlEKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5h Z2VyQ2xpZW50X2Jhc2UqPihfY2FjaGUpLT5hdXRvUmVzdG9yZUlEKCk6c3RhdGljX2Nhc3Q8QXJ0 czo6QXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9SZXN0b3Jl SUQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50OjphdXRvUmVzdG9y ZUlEKGNvbnN0IHN0ZDo6c3RyaW5nJiBfbmV3VmFsdWUpCnsKICAgICAgICAgX2NhY2hlP3N0YXRp Y19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudF9iYXNlKj4oX2NhY2hlKS0+YXV0b1Jlc3Rv cmVJRChfbmV3VmFsdWUpOnN0YXRpY19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudF9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvUmVzdG9yZUlEKF9uZXdWYWx1ZSk7Cn0KCmlubGluZSBB cnRzOjpBdWRpb01hbmFnZXJDbGllbnQ6OkF1ZGlvTWFuYWdlckNsaWVudChBcnRzOjpBdWRpb01h bmFnZXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyYgdGl0bGUsIGNvbnN0 IHN0ZDo6c3RyaW5nJiBhdXRvUmVzdG9yZUlEKQogICAgICAgICAgICAgICAgOiBBcnRzOjpPYmpl Y3QoQXVkaW9NYW5hZ2VyQ2xpZW50X2Jhc2U6Ol9jcmVhdGUoKSkKewogICAgICAgIHN0YXRpY19j YXN0PEFydHM6OkF1ZGlvTWFuYWdlckNsaWVudF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jb25z dHJ1Y3RvcihkaXJlY3Rpb24sIHRpdGxlLCBhdXRvUmVzdG9yZUlEKTsKfQoKaW5saW5lIHN0ZDo6 dmVjdG9yPHN0ZDo6c3RyaW5nPiAqIEFydHM6OkF1ZGlvTWFuYWdlcjo6ZGVzdGluYXRpb25zKCkK ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5hZ2VyX2Jh c2UqPihfY2FjaGUpLT5kZXN0aW5hdGlvbnMoKTpzdGF0aWNfY2FzdDxBcnRzOjpBdWRpb01hbmFn ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZGVzdGluYXRpb25zKCk7Cn0KCmlubGluZSBzdGQ6 OnZlY3RvcjxBcnRzOjpBdWRpb01hbmFnZXJJbmZvPiAqIEFydHM6OkF1ZGlvTWFuYWdlcjo6Y2xp ZW50cygpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkF1ZGlvTWFu YWdlcl9iYXNlKj4oX2NhY2hlKS0+Y2xpZW50cygpOnN0YXRpY19jYXN0PEFydHM6OkF1ZGlvTWFu YWdlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jbGllbnRzKCk7Cn0KCmlubGluZSBsb25nIEFy dHM6OkF1ZGlvTWFuYWdlcjo6Y2hhbmdlcygpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRp Y19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlcl9iYXNlKj4oX2NhY2hlKS0+Y2hhbmdlcygpOnN0YXRp Y19jYXN0PEFydHM6OkF1ZGlvTWFuYWdlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jaGFuZ2Vz KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkF1ZGlvTWFuYWdlcjo6c2V0RGVzdGluYXRpb24obG9u ZyBJRCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlc3RpbmF0aW9uKQp7CiAgICAgICAgIF9jYWNoZT9z dGF0aWNfY2FzdDxBcnRzOjpBdWRpb01hbmFnZXJfYmFzZSo+KF9jYWNoZSktPnNldERlc3RpbmF0 aW9uKElELCBkZXN0aW5hdGlvbik6c3RhdGljX2Nhc3Q8QXJ0czo6QXVkaW9NYW5hZ2VyX2Jhc2Uq PihfbWV0aG9kX2NhbGwoKSktPnNldERlc3RpbmF0aW9uKElELCBkZXN0aW5hdGlvbik7Cn0KCmlu bGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OlN5bnRoX0FNQU5fUExBWTo6YXV0b1N1 c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v ZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50 aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9CgppbmxpbmUg dm9pZCBBcnRzOjpTeW50aF9BTUFOX1BMQVk6OnN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3Rh dGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0KCk6c3RhdGlj X2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RhcnQoKTsK fQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9QTEFZOjpzdG9wKCkKewogICAgICAgICBf Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3Ao KTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5z dG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0FNQU5fUExBWTo6c3RyZWFtSW5pdCgp CnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf Y2FjaGUpLT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+ KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50 aF9BTUFOX1BMQVk6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nh c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQo KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9QTEFZOjpzdHJlYW1FbmQoKQp7CiAg ICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hl KS0+c3RyZWFtRW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRo b2RfY2FsbCgpKS0+c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBBcnRzOjpTeW50 aF9BTUFOX1BMQVk6OnRpdGxlKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6U3ludGhfQU1BTl9QTEFZX2Jhc2UqPihfY2FjaGUpLT50aXRsZSgpOnN0YXRpY19jYXN0 PEFydHM6OlN5bnRoX0FNQU5fUExBWV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT50aXRsZSgpOwp9 CgppbmxpbmUgdm9pZCBBcnRzOjpTeW50aF9BTUFOX1BMQVk6OnRpdGxlKGNvbnN0IHN0ZDo6c3Ry aW5nJiBfbmV3VmFsdWUpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRo X0FNQU5fUExBWV9iYXNlKj4oX2NhY2hlKS0+dGl0bGUoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxB cnRzOjpTeW50aF9BTUFOX1BMQVlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+dGl0bGUoX25ld1Zh bHVlKTsKfQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6OlN5bnRoX0FNQU5fUExBWTo6YXV0b1Jl c3RvcmVJRCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRo X0FNQU5fUExBWV9iYXNlKj4oX2NhY2hlKS0+YXV0b1Jlc3RvcmVJRCgpOnN0YXRpY19jYXN0PEFy dHM6OlN5bnRoX0FNQU5fUExBWV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvUmVzdG9yZUlE KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0FNQU5fUExBWTo6YXV0b1Jlc3RvcmVJRChj b25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2Fz dDxBcnRzOjpTeW50aF9BTUFOX1BMQVlfYmFzZSo+KF9jYWNoZSktPmF1dG9SZXN0b3JlSUQoX25l d1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aF9BTUFOX1BMQVlfYmFzZSo+KF9tZXRob2Rf Y2FsbCgpKS0+YXV0b1Jlc3RvcmVJRChfbmV3VmFsdWUpOwp9CgppbmxpbmUgQXJ0czo6U3ludGhf QU1BTl9QTEFZOjpTeW50aF9BTUFOX1BMQVkoQXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50IGNsaWVu dCkKICAgICAgICAgICAgICAgIDogQXJ0czo6T2JqZWN0KFN5bnRoX0FNQU5fUExBWV9iYXNlOjpf Y3JlYXRlKCkpCnsKICAgICAgICBzdGF0aWNfY2FzdDxBcnRzOjpTeW50aF9BTUFOX1BMQVlfYmFz ZSo+KF9tZXRob2RfY2FsbCgpKS0+Y29uc3RydWN0b3IoY2xpZW50KTsKfQoKaW5saW5lIEFydHM6 OkF1dG9TdXNwZW5kU3RhdGUgQXJ0czo6U3ludGhfQU1BTl9SRUNPUkQ6OmF1dG9TdXNwZW5kKCkK ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFz ZSo+KF9jYWNoZSktPmF1dG9TdXNwZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YXV0b1N1c3BlbmQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0 czo6U3ludGhfQU1BTl9SRUNPUkQ6OnN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nh c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8 QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5s aW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9SRUNPUkQ6OnN0b3AoKQp7CiAgICAgICAgIF9jYWNo ZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RvcCgpOnN0 YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0b3Ao KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9SRUNPUkQ6OnN0cmVhbUluaXQoKQp7 CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2Nh Y2hlKS0+c3RyZWFtSW5pdCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihf bWV0aG9kX2NhbGwoKSktPnN0cmVhbUluaXQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhf QU1BTl9SRUNPUkQ6OnN0cmVhbVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nh c3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQo KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9SRUNPUkQ6OnN0cmVhbUVuZCgpCnsK ICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2Fj aGUpLT5zdHJlYW1FbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21l dGhvZF9jYWxsKCkpLT5zdHJlYW1FbmQoKTsKfQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6OlN5 bnRoX0FNQU5fUkVDT1JEOjp0aXRsZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19j YXN0PEFydHM6OlN5bnRoX0FNQU5fUkVDT1JEX2Jhc2UqPihfY2FjaGUpLT50aXRsZSgpOnN0YXRp Y19jYXN0PEFydHM6OlN5bnRoX0FNQU5fUkVDT1JEX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnRp dGxlKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN5bnRoX0FNQU5fUkVDT1JEOjp0aXRsZShjb25z dCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxB cnRzOjpTeW50aF9BTUFOX1JFQ09SRF9iYXNlKj4oX2NhY2hlKS0+dGl0bGUoX25ld1ZhbHVlKTpz dGF0aWNfY2FzdDxBcnRzOjpTeW50aF9BTUFOX1JFQ09SRF9iYXNlKj4oX21ldGhvZF9jYWxsKCkp LT50aXRsZShfbmV3VmFsdWUpOwp9CgppbmxpbmUgc3RkOjpzdHJpbmcgQXJ0czo6U3ludGhfQU1B Tl9SRUNPUkQ6OmF1dG9SZXN0b3JlSUQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNf Y2FzdDxBcnRzOjpTeW50aF9BTUFOX1JFQ09SRF9iYXNlKj4oX2NhY2hlKS0+YXV0b1Jlc3RvcmVJ RCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoX0FNQU5fUkVDT1JEX2Jhc2UqPihfbWV0aG9kX2Nh bGwoKSktPmF1dG9SZXN0b3JlSUQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3ludGhfQU1BTl9S RUNPUkQ6OmF1dG9SZXN0b3JlSUQoY29uc3Qgc3RkOjpzdHJpbmcmIF9uZXdWYWx1ZSkKewogICAg ICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhfQU1BTl9SRUNPUkRfYmFzZSo+KF9j YWNoZSktPmF1dG9SZXN0b3JlSUQoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aF9B TUFOX1JFQ09SRF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvUmVzdG9yZUlEKF9uZXdWYWx1 ZSk7Cn0KCmlubGluZSBBcnRzOjpTeW50aF9BTUFOX1JFQ09SRDo6U3ludGhfQU1BTl9SRUNPUkQo QXJ0czo6QXVkaW9NYW5hZ2VyQ2xpZW50IGNsaWVudCkKICAgICAgICAgICAgICAgIDogQXJ0czo6 T2JqZWN0KFN5bnRoX0FNQU5fUkVDT1JEX2Jhc2U6Ol9jcmVhdGUoKSkKewogICAgICAgIHN0YXRp Y19jYXN0PEFydHM6OlN5bnRoX0FNQU5fUkVDT1JEX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNv bnN0cnVjdG9yKGNsaWVudCk7Cn0KCn07CiMgMTAgInNvdW5kc2VydmVyLmgiIDIKIyAxICJrbWVk aWEyLmgiIDEKCgoKCgojIDEgIi4uLy4uL2FydHMvbWNvcC9jb21tb24uaCIgMQojIDcgImttZWRp YTIuaCIgMgoKCiMgMSAiLi4vLi4vYXJ0cy9mbG93L2FydHNmbG93LmgiIDEKIyAxMCAia21lZGlh Mi5oIiAyCgpuYW1lc3BhY2UgQXJ0cyB7CmVudW0gcG9TdGF0ZSB7cG9zSWRsZSA9IDAsIHBvc1Bs YXlpbmcgPSAxLCBwb3NQYXVzZWQgPSAyfTsKZW51bSBwb0NhcGFiaWxpdGllcyB7Y2FwU2VlayA9 IDEsIGNhcFBhdXNlID0gMn07Cn07Cm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgcG9UaW1lIDogcHVi bGljIEFydHM6OlR5cGUgewpwdWJsaWM6CiAgICAgICAgcG9UaW1lKCk7CiAgICAgICAgcG9UaW1l KGxvbmcgX2Ffc2Vjb25kcywgbG9uZyBfYV9tcywgZmxvYXQgX2FfY3VzdG9tLCBjb25zdCBzdGQ6 OnN0cmluZyYgX2FfY3VzdG9tVW5pdCk7CiAgICAgICAgcG9UaW1lKEFydHM6OkJ1ZmZlciYgc3Ry ZWFtKTsKICAgICAgICBwb1RpbWUoY29uc3QgcG9UaW1lJiBjb3B5VHlwZSk7CiAgICAgICAgcG9U aW1lJiBvcGVyYXRvcj0oY29uc3QgcG9UaW1lJiBhc3NpZ25UeXBlKTsKICAgICAgICBsb25nIHNl Y29uZHM7CiAgICAgICAgbG9uZyBtczsKICAgICAgICBmbG9hdCBjdXN0b207CiAgICAgICAgc3Rk OjpzdHJpbmcgY3VzdG9tVW5pdDsKCgogICAgICAgIHZvaWQgcmVhZFR5cGUoQXJ0czo6QnVmZmVy JiBzdHJlYW0pOwogICAgICAgIHZvaWQgd3JpdGVUeXBlKEFydHM6OkJ1ZmZlciYgc3RyZWFtKSBj b25zdDsKfTsKCn07Cm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgUGxheU9iamVjdF9wcml2YXRlOwpj bGFzcyBQbGF5T2JqZWN0OwpjbGFzcyBQbGF5T2JqZWN0RmFjdG9yeTsKY2xhc3MgSW5wdXRTdHJl YW07CmNsYXNzIEZpbGVJbnB1dFN0cmVhbTsKY2xhc3MgU3Rkb3V0V3JpdGVyOwpjbGFzcyBTdHJl YW1QbGF5T2JqZWN0OwpjbGFzcyBQbGF5T2JqZWN0RmFjdG9yeVYyOwoKY2xhc3MgUGxheU9iamVj dF9wcml2YXRlX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3RfYmFzZSB7CnB1Ymxp YzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgUGxh eU9iamVjdF9wcml2YXRlX2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNz ID0gIkFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZSIpOwogICAgICAgIHN0YXRpYyBQbGF5T2JqZWN0 X3ByaXZhdGVfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAg ICBzdGF0aWMgUGxheU9iamVjdF9wcml2YXRlX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9i amVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMgUGxheU9i amVjdF9wcml2YXRlX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBv YmplY3QpOwogICAgICAgIGlubGluZSBQbGF5T2JqZWN0X3ByaXZhdGVfYmFzZSAqX2NvcHkoKSB7 CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwog ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0 ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2 aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7 CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVh bCBib29sIGxvYWRNZWRpYShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpID0gMDsKfTsKCmNs YXNzIFBsYXlPYmplY3RfcHJpdmF0ZV9zdHViIDogdmlydHVhbCBwdWJsaWMgUGxheU9iamVjdF9w cml2YXRlX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9zdHViIHsKcHJvdGVjdGVk OgogICAgICAgIFBsYXlPYmplY3RfcHJpdmF0ZV9zdHViKCk7CgpwdWJsaWM6CiAgICAgICAgUGxh eU9iamVjdF9wcml2YXRlX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBv YmplY3RJRCk7CgogICAgICAgIGJvb2wgbG9hZE1lZGlhKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxl bmFtZSk7Cn07CgpjbGFzcyBQbGF5T2JqZWN0X3ByaXZhdGVfc2tlbCA6IHZpcnR1YWwgcHVibGlj IFBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc2tl bCB7CnB1YmxpYzoKICAgICAgICBQbGF5T2JqZWN0X3ByaXZhdGVfc2tlbCgpOwoKICAgICAgICBz dGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJp bmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0 IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRh YmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6 OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21j b3AvcmVmZXJlbmNlLmgiIDEKIyA5MCAia21lZGlhMi5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xh c3MgUGxheU9iamVjdF9wcml2YXRlIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAg ICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFBsYXlP YmplY3RfcHJpdmF0ZV9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RfcHJp dmF0ZV9iYXNlICpfbWV0aG9kX2NhbGwoKSB7CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tj cmVhdGUoKTsKICAgICAgICAgICAgICAgIGlmKF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIF9jYWNoZT0oUGxheU9iamVjdF9wcml2YXRlX2Jhc2UgKilfcG9vbC0+YmFzZS0+ X2Nhc3QoUGxheU9iamVjdF9wcml2YXRlX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAg ICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJu IF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3Rf cHJpdmF0ZShQbGF5T2JqZWN0X3ByaXZhdGVfYmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9j YWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIFBsYXlPYmplY3RfcHJpdmF0ZV9i YXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgUGxheU9iamVjdF9wcml2YXRlKCkgOiBB cnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgUGxheU9i amVjdF9wcml2YXRlKGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBB cnRzOjpPYmplY3QoUGxheU9iamVjdF9wcml2YXRlX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkp LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgUGxheU9iamVjdF9wcml2YXRlKGNvbnN0IEFy dHM6OlJlZmVyZW5jZSAmcikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJp bmcoKT8oUGxheU9iamVjdF9wcml2YXRlX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKToo UGxheU9iamVjdF9wcml2YXRlX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1 ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RfcHJpdmF0ZShjb25z dCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRzOjpPYmplY3QoUGxheU9iamVjdF9wcml2YXRl X2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAg ICBpbmxpbmUgUGxheU9iamVjdF9wcml2YXRlKGNvbnN0IFBsYXlPYmplY3RfcHJpdmF0ZSYgdGFy Z2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFyZ2V0Ll9jYWNoZSkg e30KICAgICAgICBpbmxpbmUgUGxheU9iamVjdF9wcml2YXRlKEFydHM6Ok9iamVjdDo6UG9vbCYg cCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMg UGxheU9iamVjdF9wcml2YXRlIG51bGwoKSB7cmV0dXJuIFBsYXlPYmplY3RfcHJpdmF0ZSgoUGxh eU9iamVjdF9wcml2YXRlX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIFBsYXlPYmpl Y3RfcHJpdmF0ZSBfZnJvbV9iYXNlKFBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlKiBiKSB7cmV0dXJu IFBsYXlPYmplY3RfcHJpdmF0ZShiKTt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RfcHJpdmF0 ZSYgb3BlcmF0b3I9KGNvbnN0IFBsYXlPYmplY3RfcHJpdmF0ZSYgdGFyZ2V0KSB7CiAgICAgICAg ICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29sKSByZXR1cm4gKnRoaXM7CiAgICAgICAg ICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAgICAgICBfcG9vbCA9IHRhcmdldC5fcG9v bDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdldC5fY2FjaGU7CiAgICAgICAgICAgICAg ICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQog ICAgICAgIGlubGluZSBQbGF5T2JqZWN0X3ByaXZhdGVfYmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9j YWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgYm9vbCBsb2FkTWVk aWEoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKTsKfTsKCmNsYXNzIFBsYXlPYmplY3RfYmFz ZSA6IHZpcnR1YWwgcHVibGljIEFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlIHsKcHVibGlj OgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBQbGF5 T2JqZWN0X2Jhc2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6 OlBsYXlPYmplY3QiKTsKICAgICAgICBzdGF0aWMgUGxheU9iamVjdF9iYXNlICpfZnJvbVN0cmlu ZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBQbGF5T2JqZWN0X2Jhc2Ug Kl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNvcHkp OwoKICAgICAgICBzdGF0aWMgUGxheU9iamVjdF9iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0 IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUgUGxheU9iamVjdF9iYXNlICpf Y29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVm Q250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZp cnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0Owog ICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQo KSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAg ICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGRlc2NyaXB0aW9uKCkgPSAwOwogICAgICAgIHZpcnR1YWwg QXJ0czo6cG9UaW1lIGN1cnJlbnRUaW1lKCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0czo6cG9U aW1lIG92ZXJhbGxUaW1lKCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0czo6cG9DYXBhYmlsaXRp ZXMgY2FwYWJpbGl0aWVzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgbWVkaWFO YW1lKCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0czo6cG9TdGF0ZSBzdGF0ZSgpID0gMDsKICAg ICAgICB2aXJ0dWFsIHZvaWQgcGxheSgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vlayhj b25zdCBBcnRzOjpwb1RpbWUmIG5ld1RpbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcGF1 c2UoKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGhhbHQoKSA9IDA7Cn07CgpjbGFzcyBQbGF5 T2JqZWN0X3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBQbGF5T2JqZWN0X2Jhc2UsIHZpcnR1YWwgcHVi bGljIEFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFBs YXlPYmplY3Rfc3R1YigpOwoKcHVibGljOgogICAgICAgIFBsYXlPYmplY3Rfc3R1YihBcnRzOjpD b25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgc3RkOjpzdHJp bmcgZGVzY3JpcHRpb24oKTsKICAgICAgICBBcnRzOjpwb1RpbWUgY3VycmVudFRpbWUoKTsKICAg ICAgICBBcnRzOjpwb1RpbWUgb3ZlcmFsbFRpbWUoKTsKICAgICAgICBBcnRzOjpwb0NhcGFiaWxp dGllcyBjYXBhYmlsaXRpZXMoKTsKICAgICAgICBzdGQ6OnN0cmluZyBtZWRpYU5hbWUoKTsKICAg ICAgICBBcnRzOjpwb1N0YXRlIHN0YXRlKCk7CiAgICAgICAgdm9pZCBwbGF5KCk7CiAgICAgICAg dm9pZCBzZWVrKGNvbnN0IEFydHM6OnBvVGltZSYgbmV3VGltZSk7CiAgICAgICAgdm9pZCBwYXVz ZSgpOwogICAgICAgIHZvaWQgaGFsdCgpOwp9OwoKY2xhc3MgUGxheU9iamVjdF9za2VsIDogdmly dHVhbCBwdWJsaWMgUGxheU9iamVjdF9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQbGF5T2Jq ZWN0X3ByaXZhdGVfc2tlbCB7CnByb3RlY3RlZDoKCiAgICAgICAgaW5saW5lIHZvaWQgZGVzY3Jp cHRpb25fY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAgICAgICAg ICAgIF9lbWl0X2NoYW5nZWQoImRlc2NyaXB0aW9uX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAg ICB9CiAgICAgICAgaW5saW5lIHZvaWQgbWVkaWFOYW1lX2NoYW5nZWQoY29uc3Qgc3RkOjpzdHJp bmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJtZWRpYU5hbWVf Y2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoKICAgICAgICBQbGF5T2JqZWN0 X3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgp OwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXND b21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAg dm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVm ZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07 CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAxCiMgMjA3ICJrbWVkaWEyLmgiIDIK bmFtZXNwYWNlIEFydHMgewpjbGFzcyBQbGF5T2JqZWN0IDogcHVibGljIEFydHM6Ok9iamVjdCB7 CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwog ICAgICAgIFBsYXlPYmplY3RfYmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBQbGF5T2JqZWN0 X2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0 ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgX2NhY2hlPShQbGF5T2JqZWN0X2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoUGxheU9i amVjdF9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAgfQoK cHJvdGVjdGVkOgogICAgICAgIGlubGluZSBQbGF5T2JqZWN0KFBsYXlPYmplY3RfYmFzZSogYikg OiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVm IFBsYXlPYmplY3RfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFBsYXlPYmplY3Qo KSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBQ bGF5T2JqZWN0KGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRz OjpPYmplY3QoUGxheU9iamVjdF9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkpKSwgX2NhY2hlKDAp IHt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3QoY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6 CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhQbGF5T2JqZWN0X2Jh c2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooUGxheU9iamVjdF9iYXNlOjpfZnJvbVJlZmVy ZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBQ bGF5T2JqZWN0KGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChQbGF5 T2JqZWN0X2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30K ICAgICAgICBpbmxpbmUgUGxheU9iamVjdChjb25zdCBQbGF5T2JqZWN0JiB0YXJnZXQpIDogQXJ0 czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2NhY2hlKSB7fQogICAgICAg IGlubGluZSBQbGF5T2JqZWN0KEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3Qo cCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgUGxheU9iamVjdCBudWxsKCkg e3JldHVybiBQbGF5T2JqZWN0KChQbGF5T2JqZWN0X2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUg c3RhdGljIFBsYXlPYmplY3QgX2Zyb21fYmFzZShQbGF5T2JqZWN0X2Jhc2UqIGIpIHtyZXR1cm4g UGxheU9iamVjdChiKTt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3QmIG9wZXJhdG9yPShjb25z dCBQbGF5T2JqZWN0JiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJn ZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAg ICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2NhY2hl ID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAg ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFy dHM6OlBsYXlPYmplY3RfcHJpdmF0ZSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlBsYXlPYmplY3Rf cHJpdmF0ZSgqX3Bvb2wpOyB9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RfYmFzZSogX2Jhc2Uo KSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUg Ym9vbCBsb2FkTWVkaWEoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKTsKICAgICAgICBpbmxp bmUgc3RkOjpzdHJpbmcgZGVzY3JpcHRpb24oKTsKICAgICAgICBpbmxpbmUgQXJ0czo6cG9UaW1l IGN1cnJlbnRUaW1lKCk7CiAgICAgICAgaW5saW5lIEFydHM6OnBvVGltZSBvdmVyYWxsVGltZSgp OwogICAgICAgIGlubGluZSBBcnRzOjpwb0NhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMoKTsKICAg ICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgbWVkaWFOYW1lKCk7CiAgICAgICAgaW5saW5lIEFydHM6 OnBvU3RhdGUgc3RhdGUoKTsKICAgICAgICBpbmxpbmUgdm9pZCBwbGF5KCk7CiAgICAgICAgaW5s aW5lIHZvaWQgc2Vlayhjb25zdCBBcnRzOjpwb1RpbWUmIG5ld1RpbWUpOwogICAgICAgIGlubGlu ZSB2b2lkIHBhdXNlKCk7CiAgICAgICAgaW5saW5lIHZvaWQgaGFsdCgpOwp9OwoKY2xhc3MgUGxh eU9iamVjdEZhY3RvcnlfYmFzZSA6IHZpcnR1YWwgcHVibGljIEFydHM6Ok9iamVjdF9iYXNlIHsK cHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRp YyBQbGF5T2JqZWN0RmFjdG9yeV9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJD bGFzcyA9ICJBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeSIpOwogICAgICAgIHN0YXRpYyBQbGF5T2Jq ZWN0RmFjdG9yeV9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAg ICAgIHN0YXRpYyBQbGF5T2JqZWN0RmFjdG9yeV9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpP YmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFBsYXlP YmplY3RGYWN0b3J5X2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBv YmplY3QpOwogICAgICAgIGlubGluZSBQbGF5T2JqZWN0RmFjdG9yeV9iYXNlICpfY29weSgpIHsK ICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAg ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3Rk Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZp cnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsK CiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFs IEFydHM6OlBsYXlPYmplY3QgY3JlYXRlUGxheU9iamVjdChjb25zdCBzdGQ6OnN0cmluZyYgZmls ZW5hbWUpID0gMDsKfTsKCmNsYXNzIFBsYXlPYmplY3RGYWN0b3J5X3N0dWIgOiB2aXJ0dWFsIHB1 YmxpYyBQbGF5T2JqZWN0RmFjdG9yeV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rf c3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBQbGF5T2JqZWN0RmFjdG9yeV9zdHViKCk7CgpwdWJs aWM6CiAgICAgICAgUGxheU9iamVjdEZhY3Rvcnlfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25u ZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgQXJ0czo6UGxheU9iamVjdCBjcmVhdGVQ bGF5T2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7Cn07CgpjbGFzcyBQbGF5T2Jq ZWN0RmFjdG9yeV9za2VsIDogdmlydHVhbCBwdWJsaWMgUGxheU9iamVjdEZhY3RvcnlfYmFzZSwg dmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X3NrZWwgewpwdWJsaWM6CiAgICAgICAgUGxheU9i amVjdEZhY3Rvcnlfc2tlbCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFj ZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAg ICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1l KTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRj aChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9k SUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyAzMDggImtt ZWRpYTIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFBsYXlPYmplY3RGYWN0b3J5IDogcHVi bGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9iamVjdF9i YXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFBsYXlPYmplY3RGYWN0b3J5X2Jhc2UgKl9jYWNoZTsK ICAgICAgICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnlfYmFzZSAqX21ldGhvZF9jYWxsKCkgewog ICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihf cG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFBsYXlPYmplY3RG YWN0b3J5X2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoUGxheU9iamVjdEZhY3RvcnlfYmFzZTo6 X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoK ICAgICAgICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnkoUGxheU9iamVjdEZhY3RvcnlfYmFzZSog YikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBl ZGVmIFBsYXlPYmplY3RGYWN0b3J5X2Jhc2UgX2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGluZSBQ bGF5T2JqZWN0RmFjdG9yeSgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9 CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RGYWN0b3J5KGNvbnN0IEFydHM6OlN1YkNsYXNzJiBz KSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoUGxheU9iamVjdEZhY3RvcnlfYmFzZTo6 X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBQbGF5T2Jq ZWN0RmFjdG9yeShjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFy dHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFBsYXlPYmplY3RGYWN0b3J5X2Jhc2U6Ol9mcm9tU3Ry aW5nKHIuc3RyaW5nKCkpKTooUGxheU9iamVjdEZhY3RvcnlfYmFzZTo6X2Zyb21SZWZlcmVuY2Uo ci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgUGxheU9i amVjdEZhY3RvcnkoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KFBs YXlPYmplY3RGYWN0b3J5X2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2Fj aGUoMCkge30KICAgICAgICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnkoY29uc3QgUGxheU9iamVj dEZhY3RvcnkmIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRh cmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RGYWN0b3J5KEFydHM6Ok9i amVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7fQogICAgICAgIGlu bGluZSBzdGF0aWMgUGxheU9iamVjdEZhY3RvcnkgbnVsbCgpIHtyZXR1cm4gUGxheU9iamVjdEZh Y3RvcnkoKFBsYXlPYmplY3RGYWN0b3J5X2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGlj IFBsYXlPYmplY3RGYWN0b3J5IF9mcm9tX2Jhc2UoUGxheU9iamVjdEZhY3RvcnlfYmFzZSogYikg e3JldHVybiBQbGF5T2JqZWN0RmFjdG9yeShiKTt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RG YWN0b3J5JiBvcGVyYXRvcj0oY29uc3QgUGxheU9iamVjdEZhY3RvcnkmIHRhcmdldCkgewogICAg ICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAg ICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQu X3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAg ICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAg IH0KICAgICAgICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnlfYmFzZSogX2Jhc2UoKSB7cmV0dXJu IF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAgICAgICBpbmxpbmUgQXJ0czo6UGxh eU9iamVjdCBjcmVhdGVQbGF5T2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7Cn07 CgpjbGFzcyBJbnB1dFN0cmVhbV9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1 bGVfYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAg ICAgICBzdGF0aWMgSW5wdXRTdHJlYW1fYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYg c3ViQ2xhc3MgPSAiQXJ0czo6SW5wdXRTdHJlYW0iKTsKICAgICAgICBzdGF0aWMgSW5wdXRTdHJl YW1fYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0 aWMgSW5wdXRTdHJlYW1fYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNl IHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBJbnB1dFN0cmVhbV9iYXNlICpf ZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxp bmUgSW5wdXRTdHJlYW1fYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDAp OwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7 CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVm YXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry aW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2ln bmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVhbCBib29sIGVvZigpID0gMDsKICAgICAgICB2 aXJ0dWFsIGxvbmcgc2l6ZSgpID0gMDsKICAgICAgICB2aXJ0dWFsIGJvb2wgc2Vla09rKCkgPSAw OwogICAgICAgIHZpcnR1YWwgbG9uZyBzZWVrKGxvbmcgcG9zaXRpb24pID0gMDsKfTsKCmNsYXNz IElucHV0U3RyZWFtX3N0dWIgOiB2aXJ0dWFsIHB1YmxpYyBJbnB1dFN0cmVhbV9iYXNlLCB2aXJ0 dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIElu cHV0U3RyZWFtX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBJbnB1dFN0cmVhbV9zdHViKEFydHM6 OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICBib29sIGVv ZigpOwogICAgICAgIGxvbmcgc2l6ZSgpOwogICAgICAgIGJvb2wgc2Vla09rKCk7CiAgICAgICAg bG9uZyBzZWVrKGxvbmcgcG9zaXRpb24pOwp9OwoKY2xhc3MgSW5wdXRTdHJlYW1fc2tlbCA6IHZp cnR1YWwgcHVibGljIElucHV0U3RyZWFtX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRo TW9kdWxlX3NrZWwgewpwcm90ZWN0ZWQ6CgogICAgICAgIEFydHM6OkJ5dGVBc3luY1N0cmVhbSBv dXRkYXRhOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3Rfb3V0ZGF0YShBcnRzOjpEYXRh UGFja2V0PEFydHM6Om1jb3BieXRlPiAqKTsKCnByb3RlY3RlZDoKCiAgICAgICAgaW5saW5lIHZv aWQgZW9mX2NoYW5nZWQoYm9vbCBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hh bmdlZCgiZW9mX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZv aWQgc2l6ZV9jaGFuZ2VkKGxvbmcgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2No YW5nZWQoInNpemVfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUg dm9pZCBzZWVrT2tfY2hhbmdlZChib29sIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1p dF9jaGFuZ2VkKCJzZWVrT2tfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1YmxpYzoK ICAgICAgICBJbnB1dFN0cmVhbV9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBf aW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgp OwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVy ZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lk IGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9u ZyBtZXRob2RJRCk7CiAgICAgICAgdm9pZCBub3RpZnkoY29uc3QgQXJ0czo6Tm90aWZpY2F0aW9u JiBub3RpZmljYXRpb24pOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgi IDEKIyA0MjQgImttZWRpYTIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIElucHV0U3RyZWFt IDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIEFydHM6Ok9i amVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIElucHV0U3RyZWFtX2Jhc2UgKl9jYWNoZTsK ICAgICAgICBpbmxpbmUgSW5wdXRTdHJlYW1fYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAg ICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+ YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KElucHV0U3RyZWFtX2Jhc2Ug KilfcG9vbC0+YmFzZS0+X2Nhc3QoSW5wdXRTdHJlYW1fYmFzZTo6X0lJRCk7CiAgICAgICAgICAg ICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgSW5w dXRTdHJlYW0oSW5wdXRTdHJlYW1fYmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgw KSB7fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIElucHV0U3RyZWFtX2Jhc2UgX2Jhc2VfY2xh c3M7CgogICAgICAgIGlubGluZSBJbnB1dFN0cmVhbSgpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9y KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIElucHV0U3RyZWFtKGNvbnN0IEFydHM6OlN1 YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoSW5wdXRTdHJlYW1fYmFz ZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBJbnB1 dFN0cmVhbShjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6 Ok9iamVjdChyLmlzU3RyaW5nKCk/KElucHV0U3RyZWFtX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3Ry aW5nKCkpKTooSW5wdXRTdHJlYW1fYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0 cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgSW5wdXRTdHJlYW0oY29uc3QgQXJ0 czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KElucHV0U3RyZWFtX2Jhc2U6Ol9mcm9t RHluYW1pY0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgSW5w dXRTdHJlYW0oY29uc3QgSW5wdXRTdHJlYW0mIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0 Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIElucHV0U3Ry ZWFtKEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNoZSgwKSB7 fQogICAgICAgIGlubGluZSBzdGF0aWMgSW5wdXRTdHJlYW0gbnVsbCgpIHtyZXR1cm4gSW5wdXRT dHJlYW0oKElucHV0U3RyZWFtX2Jhc2UqKTApO30KICAgICAgICBpbmxpbmUgc3RhdGljIElucHV0 U3RyZWFtIF9mcm9tX2Jhc2UoSW5wdXRTdHJlYW1fYmFzZSogYikge3JldHVybiBJbnB1dFN0cmVh bShiKTt9CiAgICAgICAgaW5saW5lIElucHV0U3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgSW5wdXRT dHJlYW0mIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9v bCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAg ICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJn ZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6U3lu dGhNb2R1bGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgqX3Bvb2wpOyB9CiAg ICAgICAgaW5saW5lIElucHV0U3RyZWFtX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2Nh Y2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3Rh dGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgpOwogICAgICAgIGlu bGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1Jbml0KCk7CiAgICAg ICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1F bmQoKTsKICAgICAgICBpbmxpbmUgYm9vbCBlb2YoKTsKICAgICAgICBpbmxpbmUgbG9uZyBzaXpl KCk7CiAgICAgICAgaW5saW5lIGJvb2wgc2Vla09rKCk7CiAgICAgICAgaW5saW5lIGxvbmcgc2Vl ayhsb25nIHBvc2l0aW9uKTsKfTsKCmNsYXNzIEZpbGVJbnB1dFN0cmVhbV9iYXNlIDogdmlydHVh bCBwdWJsaWMgQXJ0czo6SW5wdXRTdHJlYW1fYmFzZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMg dW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBzdGF0aWMgRmlsZUlucHV0U3RyZWFtX2Jhc2Ug Kl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OkZpbGVJbnB1dFN0 cmVhbSIpOwogICAgICAgIHN0YXRpYyBGaWxlSW5wdXRTdHJlYW1fYmFzZSAqX2Zyb21TdHJpbmco c3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0aWMgRmlsZUlucHV0U3RyZWFtX2Jh c2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSByZWYsIGJvb2wgbmVlZGNv cHkpOwoKICAgICAgICBzdGF0aWMgRmlsZUlucHV0U3RyZWFtX2Jhc2UgKl9mcm9tRHluYW1pY0Nh c3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBGaWxlSW5wdXRT dHJlYW1fYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAg ICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAg fQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRz SW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBfZGVm YXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0KHVuc2lnbmVkIGxvbmcg aWlkKTsKCiAgICAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBmaWxlbmFtZSgpID0gMDsKICAgICAg ICB2aXJ0dWFsIHZvaWQgZmlsZW5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSA9IDA7 CiAgICAgICAgdmlydHVhbCBib29sIG9wZW4oY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKSA9 IDA7Cn07CgpjbGFzcyBGaWxlSW5wdXRTdHJlYW1fc3R1YiA6IHZpcnR1YWwgcHVibGljIEZpbGVJ bnB1dFN0cmVhbV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpJbnB1dFN0cmVhbV9zdHViIHsK cHJvdGVjdGVkOgogICAgICAgIEZpbGVJbnB1dFN0cmVhbV9zdHViKCk7CgpwdWJsaWM6CiAgICAg ICAgRmlsZUlucHV0U3RyZWFtX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9u ZyBvYmplY3RJRCk7CgogICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lKCk7CiAgICAgICAgdm9p ZCBmaWxlbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpOwogICAgICAgIGJvb2wgb3Bl bihjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpOwp9OwoKY2xhc3MgRmlsZUlucHV0U3RyZWFt X3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBGaWxlSW5wdXRTdHJlYW1fYmFzZSwgdmlydHVhbCBwdWJs aWMgQXJ0czo6SW5wdXRTdHJlYW1fc2tlbCB7CnByb3RlY3RlZDoKCiAgICAgICAgaW5saW5lIHZv aWQgZmlsZW5hbWVfY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAg ICAgICAgICAgIF9lbWl0X2NoYW5nZWQoImZpbGVuYW1lX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAg ICAgICB9CgpwdWJsaWM6CiAgICAgICAgRmlsZUlucHV0U3RyZWFtX3NrZWwoKTsKCiAgICAgICAg c3RhdGljIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3Ry aW5nIF9pbnRlcmZhY2VOYW1lKCk7CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25z dCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RU YWJsZSgpOwogICAgICAgIHZvaWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRz OjpCdWZmZXIgKnJlc3VsdCxsb25nIG1ldGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9t Y29wL3JlZmVyZW5jZS5oIiAxCiMgNTM0ICJrbWVkaWEyLmgiIDIKbmFtZXNwYWNlIEFydHMgewpj bGFzcyBGaWxlSW5wdXRTdHJlYW0gOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAg ICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgRmlsZUlu cHV0U3RyZWFtX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgRmlsZUlucHV0U3RyZWFtX2Jh c2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2NyZWF0ZSgp OwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAgICAgICAg ICAgX2NhY2hlPShGaWxlSW5wdXRTdHJlYW1fYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChGaWxl SW5wdXRTdHJlYW1fYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkg MCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAg ICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgRmlsZUlucHV0U3RyZWFtKEZpbGVJbnB1 dFN0cmVhbV9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGlj OgogICAgICAgIHR5cGVkZWYgRmlsZUlucHV0U3RyZWFtX2Jhc2UgX2Jhc2VfY2xhc3M7CgogICAg ICAgIGlubGluZSBGaWxlSW5wdXRTdHJlYW0oKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9j YWNoZSgwKSB7fQogICAgICAgIGlubGluZSBGaWxlSW5wdXRTdHJlYW0oY29uc3QgQXJ0czo6U3Vi Q2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChGaWxlSW5wdXRTdHJlYW1f YmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBG aWxlSW5wdXRTdHJlYW0oY29uc3QgQXJ0czo6UmVmZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAg ICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhGaWxlSW5wdXRTdHJlYW1fYmFzZTo6X2Zyb21T dHJpbmcoci5zdHJpbmcoKSkpOihGaWxlSW5wdXRTdHJlYW1fYmFzZTo6X2Zyb21SZWZlcmVuY2Uo ci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgRmlsZUlu cHV0U3RyZWFtKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFydHM6Ok9iamVjdChGaWxl SW5wdXRTdHJlYW1fYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgpKSksIF9jYWNoZSgw KSB7fQogICAgICAgIGlubGluZSBGaWxlSW5wdXRTdHJlYW0oY29uc3QgRmlsZUlucHV0U3RyZWFt JiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQuX2Nh Y2hlKSB7fQogICAgICAgIGlubGluZSBGaWxlSW5wdXRTdHJlYW0oQXJ0czo6T2JqZWN0OjpQb29s JiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRp YyBGaWxlSW5wdXRTdHJlYW0gbnVsbCgpIHtyZXR1cm4gRmlsZUlucHV0U3RyZWFtKChGaWxlSW5w dXRTdHJlYW1fYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgRmlsZUlucHV0U3RyZWFt IF9mcm9tX2Jhc2UoRmlsZUlucHV0U3RyZWFtX2Jhc2UqIGIpIHtyZXR1cm4gRmlsZUlucHV0U3Ry ZWFtKGIpO30KICAgICAgICBpbmxpbmUgRmlsZUlucHV0U3RyZWFtJiBvcGVyYXRvcj0oY29uc3Qg RmlsZUlucHV0U3RyZWFtJiB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGlmIChfcG9vbCA9PSB0 YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIF9wb29sLT5EZWMoKTsK ICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9wb29sOwogICAgICAgICAgICAgICAgX2Nh Y2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAgICAgIF9wb29sLT5JbmMoKTsKICAgICAg ICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9y IEFydHM6OklucHV0U3RyZWFtKCkgY29uc3QgeyByZXR1cm4gQXJ0czo6SW5wdXRTdHJlYW0oKl9w b29sKTsgfQogICAgICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNvbnN0 IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9kdWxlKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgRmls ZUlucHV0U3RyZWFtX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2Rf Y2FsbCgpO30KCiAgICAgICAgaW5saW5lIGJvb2wgZW9mKCk7CiAgICAgICAgaW5saW5lIGxvbmcg c2l6ZSgpOwogICAgICAgIGlubGluZSBib29sIHNlZWtPaygpOwogICAgICAgIGlubGluZSBsb25n IHNlZWsobG9uZyBwb3NpdGlvbik7CiAgICAgICAgaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3Rh dGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgpOwogICAgICAgIGlu bGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1Jbml0KCk7CiAgICAg ICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1F bmQoKTsKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgZmlsZW5hbWUoKTsKICAgICAgICBpbmxp bmUgdm9pZCBmaWxlbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgX25ld1ZhbHVlKTsKICAgICAgICBp bmxpbmUgYm9vbCBvcGVuKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7Cn07CgpjbGFzcyBT dGRvdXRXcml0ZXJfYmFzZSA6IHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9kdWxlX2Jhc2Ug ewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3Rh dGljIFN0ZG91dFdyaXRlcl9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFz cyA9ICJBcnRzOjpTdGRvdXRXcml0ZXIiKTsKICAgICAgICBzdGF0aWMgU3Rkb3V0V3JpdGVyX2Jh c2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFN0 ZG91dFdyaXRlcl9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVm LCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFN0ZG91dFdyaXRlcl9iYXNlICpfZnJv bUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAgICBpbmxpbmUg U3Rkb3V0V3JpdGVyX2Jhc2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsK ICAgICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwog ICAgICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1 bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu Zz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25l ZCBsb25nIGlpZCk7Cgp9OwoKY2xhc3MgU3Rkb3V0V3JpdGVyX3N0dWIgOiB2aXJ0dWFsIHB1Ymxp YyBTdGRvdXRXcml0ZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfc3R1 YiB7CnByb3RlY3RlZDoKICAgICAgICBTdGRvdXRXcml0ZXJfc3R1YigpOwoKcHVibGljOgogICAg ICAgIFN0ZG91dFdyaXRlcl9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcg b2JqZWN0SUQpOwoKfTsKCmNsYXNzIFN0ZG91dFdyaXRlcl9za2VsIDogdmlydHVhbCBwdWJsaWMg U3Rkb3V0V3JpdGVyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlN5bnRoTW9kdWxlX3NrZWwg ewpwcm90ZWN0ZWQ6CgogICAgICAgIEFydHM6OkJ5dGVBc3luY1N0cmVhbSBpbmRhdGE7CgoKICAg ICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc19pbmRhdGEoQXJ0czo6RGF0YVBhY2tldDxBcnRzOjpt Y29wYnl0ZT4gKikgPSAwOwoKcHVibGljOgogICAgICAgIFN0ZG91dFdyaXRlcl9za2VsKCk7Cgog ICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBz dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdp dGgoY29uc3Qgc3RkOjpzdHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxk TWV0aG9kVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVz dCwgQXJ0czo6QnVmZmVyICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7CiAgICAgICAgdm9pZCBub3Rp ZnkoY29uc3QgQXJ0czo6Tm90aWZpY2F0aW9uJiBub3RpZmljYXRpb24pOwp9OwoKfTsKIyAxICIu Li8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA2NDQgImttZWRpYTIuaCIgMgpuYW1lc3Bh Y2UgQXJ0cyB7CmNsYXNzIFN0ZG91dFdyaXRlciA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2 YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAg ICBTdGRvdXRXcml0ZXJfYmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBTdGRvdXRXcml0ZXJf YmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRl KCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAg ICAgICBfY2FjaGU9KFN0ZG91dFdyaXRlcl9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFN0ZG91 dFdyaXRlcl9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY2FjaGU7CiAgICAgICAg fQoKcHJvdGVjdGVkOgogICAgICAgIGlubGluZSBTdGRvdXRXcml0ZXIoU3Rkb3V0V3JpdGVyX2Jh c2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAg dHlwZWRlZiBTdGRvdXRXcml0ZXJfYmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFN0 ZG91dFdyaXRlcigpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAg ICAgaW5saW5lIFN0ZG91dFdyaXRlcihjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAg ICAgICAgICAgQXJ0czo6T2JqZWN0KFN0ZG91dFdyaXRlcl9iYXNlOjpfY3JlYXRlKHMuc3RyaW5n KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0ZG91dFdyaXRlcihjb25zdCBBcnRz OjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5n KCk/KFN0ZG91dFdyaXRlcl9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFN0ZG91dFdy aXRlcl9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRydWUpKSksIF9jYWNoZSgw KSB7fQogICAgICAgIGlubGluZSBTdGRvdXRXcml0ZXIoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3Qm IGMpIDogQXJ0czo6T2JqZWN0KFN0ZG91dFdyaXRlcl9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMu b2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0ZG91dFdyaXRlcihjb25z dCBTdGRvdXRXcml0ZXImIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2Nh Y2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFN0ZG91dFdyaXRlcihBcnRzOjpP YmplY3Q6OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBp bmxpbmUgc3RhdGljIFN0ZG91dFdyaXRlciBudWxsKCkge3JldHVybiBTdGRvdXRXcml0ZXIoKFN0 ZG91dFdyaXRlcl9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTdGRvdXRXcml0ZXIg X2Zyb21fYmFzZShTdGRvdXRXcml0ZXJfYmFzZSogYikge3JldHVybiBTdGRvdXRXcml0ZXIoYik7 fQogICAgICAgIGlubGluZSBTdGRvdXRXcml0ZXImIG9wZXJhdG9yPShjb25zdCBTdGRvdXRXcml0 ZXImIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkg cmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAg ICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQu X2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0 dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6U3ludGhN b2R1bGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgqX3Bvb2wpOyB9CiAgICAg ICAgaW5saW5lIFN0ZG91dFdyaXRlcl9iYXNlKiBfYmFzZSgpIHtyZXR1cm4gX2NhY2hlP19jYWNo ZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRl IGF1dG9TdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RhcnQoKTsKICAgICAgICBpbmxp bmUgdm9pZCBzdG9wKCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtSW5pdCgpOwogICAgICAg IGlubGluZSB2b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtRW5k KCk7Cn07CgpjbGFzcyBTdHJlYW1QbGF5T2JqZWN0X2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRz OjpQbGF5T2JqZWN0X2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg X0lJRDsKCiAgICAgICAgc3RhdGljIFN0cmVhbVBsYXlPYmplY3RfYmFzZSAqX2NyZWF0ZShjb25z dCBzdGQ6OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U3RyZWFtUGxheU9iamVjdCIpOwogICAg ICAgIHN0YXRpYyBTdHJlYW1QbGF5T2JqZWN0X2Jhc2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5n IG9iamVjdHJlZik7CiAgICAgICAgc3RhdGljIFN0cmVhbVBsYXlPYmplY3RfYmFzZSAqX2Zyb21S ZWZlcmVuY2UoQXJ0czo6T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAg ICAgIHN0YXRpYyBTdHJlYW1QbGF5T2JqZWN0X2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3Qg QXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTdHJlYW1QbGF5T2JqZWN0X2Jh c2UgKl9jb3B5KCkgewogICAgICAgICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAg IF9yZWZDbnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAg ICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29u c3Q7CiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0 c091dCgpIGNvbnN0OwoKICAgICAgICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7Cgog ICAgICAgIHZpcnR1YWwgYm9vbCBzdHJlYW1NZWRpYShBcnRzOjpJbnB1dFN0cmVhbSBpbnN0cmVh bSkgPSAwOwp9OwoKY2xhc3MgU3RyZWFtUGxheU9iamVjdF9zdHViIDogdmlydHVhbCBwdWJsaWMg U3RyZWFtUGxheU9iamVjdF9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQbGF5T2JqZWN0X3N0 dWIgewpwcm90ZWN0ZWQ6CiAgICAgICAgU3RyZWFtUGxheU9iamVjdF9zdHViKCk7CgpwdWJsaWM6 CiAgICAgICAgU3RyZWFtUGxheU9iamVjdF9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rp b24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICBib29sIHN0cmVhbU1lZGlhKEFydHM6OklucHV0 U3RyZWFtIGluc3RyZWFtKTsKfTsKCmNsYXNzIFN0cmVhbVBsYXlPYmplY3Rfc2tlbCA6IHZpcnR1 YWwgcHVibGljIFN0cmVhbVBsYXlPYmplY3RfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6UGxh eU9iamVjdF9za2VsIHsKcHVibGljOgogICAgICAgIFN0cmVhbVBsYXlPYmplY3Rfc2tlbCgpOwoK ICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAg c3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVX aXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWls ZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVl c3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8u Li9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA3NDAgImttZWRpYTIuaCIgMgpuYW1lc3BhY2Ug QXJ0cyB7CmNsYXNzIFN0cmVhbVBsYXlPYmplY3QgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJp dmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAg ICAgU3RyZWFtUGxheU9iamVjdF9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFN0cmVhbVBs YXlPYmplY3RfYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNo ZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAg ICAgICAgICAgICAgICBfY2FjaGU9KFN0cmVhbVBsYXlPYmplY3RfYmFzZSAqKV9wb29sLT5iYXNl LT5fY2FzdChTdHJlYW1QbGF5T2JqZWN0X2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAg ICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJu IF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFN0cmVhbVBsYXlP YmplY3QoU3RyZWFtUGxheU9iamVjdF9iYXNlKiBiKSA6IEFydHM6Ok9iamVjdChiKSwgX2NhY2hl KDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgU3RyZWFtUGxheU9iamVjdF9iYXNlIF9i YXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgU3RyZWFtUGxheU9iamVjdCgpIDogQXJ0czo6T2Jq ZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFN0cmVhbVBsYXlPYmpl Y3QoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVj dChTdHJlYW1QbGF5T2JqZWN0X2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkg e30KICAgICAgICBpbmxpbmUgU3RyZWFtUGxheU9iamVjdChjb25zdCBBcnRzOjpSZWZlcmVuY2Ug JnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFN0cmVhbVBs YXlPYmplY3RfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTdHJlYW1QbGF5T2JqZWN0 X2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9 CiAgICAgICAgaW5saW5lIFN0cmVhbVBsYXlPYmplY3QoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3Qm IGMpIDogQXJ0czo6T2JqZWN0KFN0cmVhbVBsYXlPYmplY3RfYmFzZTo6X2Zyb21EeW5hbWljQ2Fz dChjLm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTdHJlYW1QbGF5T2Jq ZWN0KGNvbnN0IFN0cmVhbVBsYXlPYmplY3QmIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0 Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFN0cmVhbVBs YXlPYmplY3QoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hl KDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTdHJlYW1QbGF5T2JqZWN0IG51bGwoKSB7cmV0 dXJuIFN0cmVhbVBsYXlPYmplY3QoKFN0cmVhbVBsYXlPYmplY3RfYmFzZSopMCk7fQogICAgICAg IGlubGluZSBzdGF0aWMgU3RyZWFtUGxheU9iamVjdCBfZnJvbV9iYXNlKFN0cmVhbVBsYXlPYmpl Y3RfYmFzZSogYikge3JldHVybiBTdHJlYW1QbGF5T2JqZWN0KGIpO30KICAgICAgICBpbmxpbmUg U3RyZWFtUGxheU9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IFN0cmVhbVBsYXlPYmplY3QmIHRhcmdl dCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0 aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAgICAgX3Bvb2wg PSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQuX2NhY2hlOwog ICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz OwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6UGxheU9iamVjdCgpIGNv bnN0IHsgcmV0dXJuIEFydHM6OlBsYXlPYmplY3QoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBv cGVyYXRvciBBcnRzOjpQbGF5T2JqZWN0X3ByaXZhdGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpQ bGF5T2JqZWN0X3ByaXZhdGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTdHJlYW1QbGF5T2Jq ZWN0X2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30K CiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIGRlc2NyaXB0aW9uKCk7CiAgICAgICAgaW5saW5l IEFydHM6OnBvVGltZSBjdXJyZW50VGltZSgpOwogICAgICAgIGlubGluZSBBcnRzOjpwb1RpbWUg b3ZlcmFsbFRpbWUoKTsKICAgICAgICBpbmxpbmUgQXJ0czo6cG9DYXBhYmlsaXRpZXMgY2FwYWJp bGl0aWVzKCk7CiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5nIG1lZGlhTmFtZSgpOwogICAgICAg IGlubGluZSBBcnRzOjpwb1N0YXRlIHN0YXRlKCk7CiAgICAgICAgaW5saW5lIHZvaWQgcGxheSgp OwogICAgICAgIGlubGluZSB2b2lkIHNlZWsoY29uc3QgQXJ0czo6cG9UaW1lJiBuZXdUaW1lKTsK ICAgICAgICBpbmxpbmUgdm9pZCBwYXVzZSgpOwogICAgICAgIGlubGluZSB2b2lkIGhhbHQoKTsK ICAgICAgICBpbmxpbmUgYm9vbCBsb2FkTWVkaWEoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1l KTsKICAgICAgICBpbmxpbmUgYm9vbCBzdHJlYW1NZWRpYShBcnRzOjpJbnB1dFN0cmVhbSBpbnN0 cmVhbSk7Cn07CgpjbGFzcyBQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2UgOiB2aXJ0dWFsIHB1Ymxp YyBBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeV9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1 bnNpZ25lZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBQbGF5T2JqZWN0RmFjdG9yeVYyX2Jh c2UgKl9jcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHN1YkNsYXNzID0gIkFydHM6OlBsYXlPYmpl Y3RGYWN0b3J5VjIiKTsKICAgICAgICBzdGF0aWMgUGxheU9iamVjdEZhY3RvcnlWMl9iYXNlICpf ZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBQbGF5T2Jq ZWN0RmFjdG9yeVYyX2Jhc2UgKl9mcm9tUmVmZXJlbmNlKEFydHM6Ok9iamVjdFJlZmVyZW5jZSBy ZWYsIGJvb2wgbmVlZGNvcHkpOwoKICAgICAgICBzdGF0aWMgUGxheU9iamVjdEZhY3RvcnlWMl9i YXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsKICAgICAg ICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnlWMl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAg ICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAg ICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3Rk OjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2 ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9p ZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIEFydHM6OlBsYXlP YmplY3QgY3JlYXRlUGxheU9iamVjdEZvclVSTChjb25zdCBzdGQ6OnN0cmluZyYgdXJsLCBjb25z dCBzdGQ6OnN0cmluZyYgbWltZXR5cGUsIGJvb2wgY3JlYXRlQlVTKSA9IDA7CiAgICAgICAgdmly dHVhbCBBcnRzOjpQbGF5T2JqZWN0IGNyZWF0ZVBsYXlPYmplY3RGb3JTdHJlYW0oQXJ0czo6SW5w dXRTdHJlYW0gaW5zdHJlYW0sIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1ldHlwZSwgYm9vbCBjcmVh dGVCVVMpID0gMDsKfTsKCmNsYXNzIFBsYXlPYmplY3RGYWN0b3J5VjJfc3R1YiA6IHZpcnR1YWwg cHVibGljIFBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6UGxh eU9iamVjdEZhY3Rvcnlfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBQbGF5T2JqZWN0RmFjdG9y eVYyX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBQbGF5T2JqZWN0RmFjdG9yeVYyX3N0dWIoQXJ0 czo6Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIEFydHM6 OlBsYXlPYmplY3QgY3JlYXRlUGxheU9iamVjdEZvclVSTChjb25zdCBzdGQ6OnN0cmluZyYgdXJs LCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZXR5cGUsIGJvb2wgY3JlYXRlQlVTKTsKICAgICAgICBB cnRzOjpQbGF5T2JqZWN0IGNyZWF0ZVBsYXlPYmplY3RGb3JTdHJlYW0oQXJ0czo6SW5wdXRTdHJl YW0gaW5zdHJlYW0sIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1ldHlwZSwgYm9vbCBjcmVhdGVCVVMp Owp9OwoKY2xhc3MgUGxheU9iamVjdEZhY3RvcnlWMl9za2VsIDogdmlydHVhbCBwdWJsaWMgUGxh eU9iamVjdEZhY3RvcnlWMl9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQbGF5T2JqZWN0RmFj dG9yeV9za2VsIHsKcHVibGljOgogICAgICAgIFBsYXlPYmplY3RGYWN0b3J5VjJfc2tlbCgpOwoK ICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAg c3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVX aXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWls ZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVl c3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8u Li9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA4NDUgImttZWRpYTIuaCIgMgpuYW1lc3BhY2Ug QXJ0cyB7CmNsYXNzIFBsYXlPYmplY3RGYWN0b3J5VjIgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsK cHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAg ICAgICAgUGxheU9iamVjdEZhY3RvcnlWMl9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFBs YXlPYmplY3RGYWN0b3J5VjJfYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAg X3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewog ICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZSAq KV9wb29sLT5iYXNlLT5fY2FzdChQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2U6Ol9JSUQpOwogICAg ICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5s aW5lIFBsYXlPYmplY3RGYWN0b3J5VjIoUGxheU9iamVjdEZhY3RvcnlWMl9iYXNlKiBiKSA6IEFy dHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgUGxh eU9iamVjdEZhY3RvcnlWMl9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgUGxheU9i amVjdEZhY3RvcnlWMigpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAg ICAgICAgaW5saW5lIFBsYXlPYmplY3RGYWN0b3J5VjIoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMp IDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2U6 Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgUGxheU9i amVjdEZhY3RvcnlWMihjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAg IEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZTo6X2Zy b21TdHJpbmcoci5zdHJpbmcoKSkpOihQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2U6Ol9mcm9tUmVm ZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l IFBsYXlPYmplY3RGYWN0b3J5VjIoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6 T2JqZWN0KFBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVj dCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBQbGF5T2JqZWN0RmFjdG9yeVYyKGNv bnN0IFBsYXlPYmplY3RGYWN0b3J5VjImIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9w b29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RG YWN0b3J5VjIoQXJ0czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hl KDApIHt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBQbGF5T2JqZWN0RmFjdG9yeVYyIG51bGwoKSB7 cmV0dXJuIFBsYXlPYmplY3RGYWN0b3J5VjIoKFBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZSopMCk7 fQogICAgICAgIGlubGluZSBzdGF0aWMgUGxheU9iamVjdEZhY3RvcnlWMiBfZnJvbV9iYXNlKFBs YXlPYmplY3RGYWN0b3J5VjJfYmFzZSogYikge3JldHVybiBQbGF5T2JqZWN0RmFjdG9yeVYyKGIp O30KICAgICAgICBpbmxpbmUgUGxheU9iamVjdEZhY3RvcnlWMiYgb3BlcmF0b3I9KGNvbnN0IFBs YXlPYmplY3RGYWN0b3J5VjImIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09 IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygp OwogICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBf Y2FjaGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAg ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0 b3IgQXJ0czo6UGxheU9iamVjdEZhY3RvcnkoKSBjb25zdCB7IHJldHVybiBBcnRzOjpQbGF5T2Jq ZWN0RmFjdG9yeSgqX3Bvb2wpOyB9CiAgICAgICAgaW5saW5lIFBsYXlPYmplY3RGYWN0b3J5VjJf YmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAg ICAgICBpbmxpbmUgQXJ0czo6UGxheU9iamVjdCBjcmVhdGVQbGF5T2JqZWN0KGNvbnN0IHN0ZDo6 c3RyaW5nJiBmaWxlbmFtZSk7CiAgICAgICAgaW5saW5lIEFydHM6OlBsYXlPYmplY3QgY3JlYXRl UGxheU9iamVjdEZvclVSTChjb25zdCBzdGQ6OnN0cmluZyYgdXJsLCBjb25zdCBzdGQ6OnN0cmlu ZyYgbWltZXR5cGUsIGJvb2wgY3JlYXRlQlVTKTsKICAgICAgICBpbmxpbmUgQXJ0czo6UGxheU9i amVjdCBjcmVhdGVQbGF5T2JqZWN0Rm9yU3RyZWFtKEFydHM6OklucHV0U3RyZWFtIGluc3RyZWFt LCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZXR5cGUsIGJvb2wgY3JlYXRlQlVTKTsKfTsKCgoKaW5s aW5lIGJvb2wgQXJ0czo6UGxheU9iamVjdF9wcml2YXRlOjpsb2FkTWVkaWEoY29uc3Qgc3RkOjpz dHJpbmcmIGZpbGVuYW1lKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz OjpQbGF5T2JqZWN0X3ByaXZhdGVfYmFzZSo+KF9jYWNoZSktPmxvYWRNZWRpYShmaWxlbmFtZSk6 c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9wcml2YXRlX2Jhc2UqPihfbWV0aG9kX2NhbGwo KSktPmxvYWRNZWRpYShmaWxlbmFtZSk7Cn0KCmlubGluZSBib29sIEFydHM6OlBsYXlPYmplY3Q6 OmxvYWRNZWRpYShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpCnsKICAgICAgICByZXR1cm4g X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlKj4oX2NhY2hl KS0+bG9hZE1lZGlhKGZpbGVuYW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X3ByaXZh dGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+bG9hZE1lZGlhKGZpbGVuYW1lKTsKfQoKaW5saW5l IHN0ZDo6c3RyaW5nIEFydHM6OlBsYXlPYmplY3Q6OmRlc2NyaXB0aW9uKCkKewogICAgICAgIHJl dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+ ZGVzY3JpcHRpb24oKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9k X2NhbGwoKSktPmRlc2NyaXB0aW9uKCk7Cn0KCmlubGluZSBBcnRzOjpwb1RpbWUgQXJ0czo6UGxh eU9iamVjdDo6Y3VycmVudFRpbWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2Fz dDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5jdXJyZW50VGltZSgpOnN0YXRpY19j YXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3VycmVudFRpbWUo KTsKfQoKaW5saW5lIEFydHM6OnBvVGltZSBBcnRzOjpQbGF5T2JqZWN0OjpvdmVyYWxsVGltZSgp CnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFz ZSo+KF9jYWNoZSktPm92ZXJhbGxUaW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9i YXNlKj4oX21ldGhvZF9jYWxsKCkpLT5vdmVyYWxsVGltZSgpOwp9CgppbmxpbmUgQXJ0czo6cG9D YXBhYmlsaXRpZXMgQXJ0czo6UGxheU9iamVjdDo6Y2FwYWJpbGl0aWVzKCkKewogICAgICAgIHJl dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+ Y2FwYWJpbGl0aWVzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX21ldGhv ZF9jYWxsKCkpLT5jYXBhYmlsaXRpZXMoKTsKfQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6OlBs YXlPYmplY3Q6Om1lZGlhTmFtZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0 PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9jYWNoZSktPm1lZGlhTmFtZSgpOnN0YXRpY19jYXN0 PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+bWVkaWFOYW1lKCk7Cn0K CmlubGluZSBBcnRzOjpwb1N0YXRlIEFydHM6OlBsYXlPYmplY3Q6OnN0YXRlKCkKewogICAgICAg IHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hl KS0+c3RhdGUoKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2Nh bGwoKSktPnN0YXRlKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlBsYXlPYmplY3Q6OnBsYXkoKQp7 CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2Fj aGUpLT5wbGF5KCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX21ldGhvZF9j YWxsKCkpLT5wbGF5KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlBsYXlPYmplY3Q6OnNlZWsoY29u c3QgQXJ0czo6cG9UaW1lJiBuZXdUaW1lKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxB cnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5zZWVrKG5ld1RpbWUpOnN0YXRpY19jYXN0 PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2VlayhuZXdUaW1lKTsK fQoKaW5saW5lIHZvaWQgQXJ0czo6UGxheU9iamVjdDo6cGF1c2UoKQp7CiAgICAgICAgIF9jYWNo ZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5wYXVzZSgpOnN0 YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cGF1c2Uo KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6UGxheU9iamVjdDo6aGFsdCgpCnsKICAgICAgICAgX2Nh Y2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9jYWNoZSktPmhhbHQoKTpz dGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmhhbHQo KTsKfQoKaW5saW5lIEFydHM6OlBsYXlPYmplY3QgQXJ0czo6UGxheU9iamVjdEZhY3Rvcnk6OmNy ZWF0ZVBsYXlPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKQp7CiAgICAgICAgcmV0 dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeV9iYXNlKj4oX2Nh Y2hlKS0+Y3JlYXRlUGxheU9iamVjdChmaWxlbmFtZSk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9i amVjdEZhY3RvcnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlUGxheU9iamVjdChmaWxl bmFtZSk7Cn0KCmlubGluZSBBcnRzOjpBdXRvU3VzcGVuZFN0YXRlIEFydHM6OklucHV0U3RyZWFt OjphdXRvU3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6 OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRvU3VzcGVuZCgpOnN0YXRpY19jYXN0PEFy dHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0K CmlubGluZSB2b2lkIEFydHM6OklucHV0U3RyZWFtOjpzdGFydCgpCnsKICAgICAgICAgX2NhY2hl P3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdGFydCgpOnN0 YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXJ0 KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OklucHV0U3RyZWFtOjpzdG9wKCkKewogICAgICAgICBf Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0b3Ao KTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5z dG9wKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OklucHV0U3RyZWFtOjpzdHJlYW1Jbml0KCkKewog ICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNo ZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21l dGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OklucHV0U3Ry ZWFtOjpzdHJlYW1TdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5 bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6 OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlu bGluZSB2b2lkIEFydHM6OklucHV0U3RyZWFtOjpzdHJlYW1FbmQoKQp7CiAgICAgICAgIF9jYWNo ZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtRW5k KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ c3RyZWFtRW5kKCk7Cn0KCmlubGluZSBib29sIEFydHM6OklucHV0U3RyZWFtOjplb2YoKQp7CiAg ICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnB1dFN0cmVhbV9iYXNlKj4o X2NhY2hlKS0+ZW9mKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW5wdXRTdHJlYW1fYmFzZSo+KF9tZXRo b2RfY2FsbCgpKS0+ZW9mKCk7Cn0KCmlubGluZSBsb25nIEFydHM6OklucHV0U3RyZWFtOjpzaXpl KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6SW5wdXRTdHJlYW1f YmFzZSo+KF9jYWNoZSktPnNpemUoKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnB1dFN0cmVhbV9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5zaXplKCk7Cn0KCmlubGluZSBib29sIEFydHM6OklucHV0U3Ry ZWFtOjpzZWVrT2soKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJ bnB1dFN0cmVhbV9iYXNlKj4oX2NhY2hlKS0+c2Vla09rKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW5w dXRTdHJlYW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2Vla09rKCk7Cn0KCmlubGluZSBsb25n IEFydHM6OklucHV0U3RyZWFtOjpzZWVrKGxvbmcgcG9zaXRpb24pCnsKICAgICAgICByZXR1cm4g X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OklucHV0U3RyZWFtX2Jhc2UqPihfY2FjaGUpLT5zZWVr KHBvc2l0aW9uKTpzdGF0aWNfY2FzdDxBcnRzOjpJbnB1dFN0cmVhbV9iYXNlKj4oX21ldGhvZF9j YWxsKCkpLT5zZWVrKHBvc2l0aW9uKTsKfQoKaW5saW5lIGJvb2wgQXJ0czo6RmlsZUlucHV0U3Ry ZWFtOjplb2YoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpJbnB1 dFN0cmVhbV9iYXNlKj4oX2NhY2hlKS0+ZW9mKCk6c3RhdGljX2Nhc3Q8QXJ0czo6SW5wdXRTdHJl YW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZW9mKCk7Cn0KCmlubGluZSBsb25nIEFydHM6OkZp bGVJbnB1dFN0cmVhbTo6c2l6ZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0 PEFydHM6OklucHV0U3RyZWFtX2Jhc2UqPihfY2FjaGUpLT5zaXplKCk6c3RhdGljX2Nhc3Q8QXJ0 czo6SW5wdXRTdHJlYW1fYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2l6ZSgpOwp9CgppbmxpbmUg Ym9vbCBBcnRzOjpGaWxlSW5wdXRTdHJlYW06OnNlZWtPaygpCnsKICAgICAgICByZXR1cm4gX2Nh Y2hlP3N0YXRpY19jYXN0PEFydHM6OklucHV0U3RyZWFtX2Jhc2UqPihfY2FjaGUpLT5zZWVrT2so KTpzdGF0aWNfY2FzdDxBcnRzOjpJbnB1dFN0cmVhbV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5z ZWVrT2soKTsKfQoKaW5saW5lIGxvbmcgQXJ0czo6RmlsZUlucHV0U3RyZWFtOjpzZWVrKGxvbmcg cG9zaXRpb24pCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OklucHV0 U3RyZWFtX2Jhc2UqPihfY2FjaGUpLT5zZWVrKHBvc2l0aW9uKTpzdGF0aWNfY2FzdDxBcnRzOjpJ bnB1dFN0cmVhbV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zZWVrKHBvc2l0aW9uKTsKfQoKaW5s aW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgQXJ0czo6RmlsZUlucHV0U3RyZWFtOjphdXRvU3Vz cGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9k dWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRvU3VzcGVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRo TW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0KCmlubGluZSB2 b2lkIEFydHM6OkZpbGVJbnB1dFN0cmVhbTo6c3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0 aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RhcnQoKTpzdGF0aWNf Y2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdGFydCgpOwp9 CgppbmxpbmUgdm9pZCBBcnRzOjpGaWxlSW5wdXRTdHJlYW06OnN0b3AoKQp7CiAgICAgICAgIF9j YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RvcCgp OnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0 b3AoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6RmlsZUlucHV0U3RyZWFtOjpzdHJlYW1Jbml0KCkK ewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9j YWNoZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4o X21ldGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkZpbGVJ bnB1dFN0cmVhbTo6c3RyZWFtU3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxB cnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtU3RhcnQoKTpzdGF0aWNfY2Fz dDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1TdGFydCgp Owp9CgppbmxpbmUgdm9pZCBBcnRzOjpGaWxlSW5wdXRTdHJlYW06OnN0cmVhbUVuZCgpCnsKICAg ICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUp LT5zdHJlYW1FbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhv ZF9jYWxsKCkpLT5zdHJlYW1FbmQoKTsKfQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6OkZpbGVJ bnB1dFN0cmVhbTo6ZmlsZW5hbWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2Fz dDxBcnRzOjpGaWxlSW5wdXRTdHJlYW1fYmFzZSo+KF9jYWNoZSktPmZpbGVuYW1lKCk6c3RhdGlj X2Nhc3Q8QXJ0czo6RmlsZUlucHV0U3RyZWFtX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmZpbGVu YW1lKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OkZpbGVJbnB1dFN0cmVhbTo6ZmlsZW5hbWUoY29u c3Qgc3RkOjpzdHJpbmcmIF9uZXdWYWx1ZSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6RmlsZUlucHV0U3RyZWFtX2Jhc2UqPihfY2FjaGUpLT5maWxlbmFtZShfbmV3VmFsdWUp OnN0YXRpY19jYXN0PEFydHM6OkZpbGVJbnB1dFN0cmVhbV9iYXNlKj4oX21ldGhvZF9jYWxsKCkp LT5maWxlbmFtZShfbmV3VmFsdWUpOwp9CgppbmxpbmUgYm9vbCBBcnRzOjpGaWxlSW5wdXRTdHJl YW06Om9wZW4oY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKQp7CiAgICAgICAgcmV0dXJuIF9j YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpGaWxlSW5wdXRTdHJlYW1fYmFzZSo+KF9jYWNoZSktPm9w ZW4oZmlsZW5hbWUpOnN0YXRpY19jYXN0PEFydHM6OkZpbGVJbnB1dFN0cmVhbV9iYXNlKj4oX21l dGhvZF9jYWxsKCkpLT5vcGVuKGZpbGVuYW1lKTsKfQoKaW5saW5lIEFydHM6OkF1dG9TdXNwZW5k U3RhdGUgQXJ0czo6U3Rkb3V0V3JpdGVyOjphdXRvU3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4g X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5hdXRv U3VzcGVuZCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2Nh bGwoKSktPmF1dG9TdXNwZW5kKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlN0ZG91dFdyaXRlcjo6 c3RhcnQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9i YXNlKj4oX2NhY2hlKS0+c3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5zdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGRvdXRX cml0ZXI6OnN0b3AoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v ZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RvcCgpOnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxl X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0b3AoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U3Rk b3V0V3JpdGVyOjpzdHJlYW1Jbml0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0 czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPnN0cmVhbUluaXQoKTpzdGF0aWNfY2FzdDxB cnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1Jbml0KCk7Cn0K CmlubGluZSB2b2lkIEFydHM6OlN0ZG91dFdyaXRlcjo6c3RyZWFtU3RhcnQoKQp7CiAgICAgICAg IF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3Ry ZWFtU3RhcnQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9j YWxsKCkpLT5zdHJlYW1TdGFydCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTdGRvdXRXcml0ZXI6 OnN0cmVhbUVuZCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9k dWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1FbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v ZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJlYW1FbmQoKTsKfQoKaW5saW5lIHN0ZDo6 c3RyaW5nIEFydHM6OlN0cmVhbVBsYXlPYmplY3Q6OmRlc2NyaXB0aW9uKCkKewogICAgICAgIHJl dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+ ZGVzY3JpcHRpb24oKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9k X2NhbGwoKSktPmRlc2NyaXB0aW9uKCk7Cn0KCmlubGluZSBBcnRzOjpwb1RpbWUgQXJ0czo6U3Ry ZWFtUGxheU9iamVjdDo6Y3VycmVudFRpbWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0 aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5jdXJyZW50VGltZSgpOnN0 YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3VycmVu dFRpbWUoKTsKfQoKaW5saW5lIEFydHM6OnBvVGltZSBBcnRzOjpTdHJlYW1QbGF5T2JqZWN0Ojpv dmVyYWxsVGltZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBs YXlPYmplY3RfYmFzZSo+KF9jYWNoZSktPm92ZXJhbGxUaW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6 UGxheU9iamVjdF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5vdmVyYWxsVGltZSgpOwp9Cgppbmxp bmUgQXJ0czo6cG9DYXBhYmlsaXRpZXMgQXJ0czo6U3RyZWFtUGxheU9iamVjdDo6Y2FwYWJpbGl0 aWVzKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVj dF9iYXNlKj4oX2NhY2hlKS0+Y2FwYWJpbGl0aWVzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9i amVjdF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jYXBhYmlsaXRpZXMoKTsKfQoKaW5saW5lIHN0 ZDo6c3RyaW5nIEFydHM6OlN0cmVhbVBsYXlPYmplY3Q6Om1lZGlhTmFtZSgpCnsKICAgICAgICBy ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9jYWNoZSkt Pm1lZGlhTmFtZSgpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2Rf Y2FsbCgpKS0+bWVkaWFOYW1lKCk7Cn0KCmlubGluZSBBcnRzOjpwb1N0YXRlIEFydHM6OlN0cmVh bVBsYXlPYmplY3Q6OnN0YXRlKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+c3RhdGUoKTpzdGF0aWNfY2FzdDxBcnRz OjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXRlKCk7Cn0KCmlubGluZSB2 b2lkIEFydHM6OlN0cmVhbVBsYXlPYmplY3Q6OnBsYXkoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0 aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5wbGF5KCk6c3RhdGljX2Nh c3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5wbGF5KCk7Cn0KCmlu bGluZSB2b2lkIEFydHM6OlN0cmVhbVBsYXlPYmplY3Q6OnNlZWsoY29uc3QgQXJ0czo6cG9UaW1l JiBuZXdUaW1lKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0 X2Jhc2UqPihfY2FjaGUpLT5zZWVrKG5ld1RpbWUpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmpl Y3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2VlayhuZXdUaW1lKTsKfQoKaW5saW5lIHZvaWQg QXJ0czo6U3RyZWFtUGxheU9iamVjdDo6cGF1c2UoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNf Y2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5wYXVzZSgpOnN0YXRpY19jYXN0 PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cGF1c2UoKTsKfQoKaW5s aW5lIHZvaWQgQXJ0czo6U3RyZWFtUGxheU9iamVjdDo6aGFsdCgpCnsKICAgICAgICAgX2NhY2hl P3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9jYWNoZSktPmhhbHQoKTpzdGF0 aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmhhbHQoKTsK fQoKaW5saW5lIGJvb2wgQXJ0czo6U3RyZWFtUGxheU9iamVjdDo6bG9hZE1lZGlhKGNvbnN0IHN0 ZDo6c3RyaW5nJiBmaWxlbmFtZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8 QXJ0czo6UGxheU9iamVjdF9wcml2YXRlX2Jhc2UqPihfY2FjaGUpLT5sb2FkTWVkaWEoZmlsZW5h bWUpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlKj4oX21ldGhvZF9j YWxsKCkpLT5sb2FkTWVkaWEoZmlsZW5hbWUpOwp9CgppbmxpbmUgYm9vbCBBcnRzOjpTdHJlYW1Q bGF5T2JqZWN0OjpzdHJlYW1NZWRpYShBcnRzOjpJbnB1dFN0cmVhbSBpbnN0cmVhbSkKewogICAg ICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3RyZWFtUGxheU9iamVjdF9iYXNl Kj4oX2NhY2hlKS0+c3RyZWFtTWVkaWEoaW5zdHJlYW0pOnN0YXRpY19jYXN0PEFydHM6OlN0cmVh bVBsYXlPYmplY3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtTWVkaWEoaW5zdHJlYW0p Owp9CgppbmxpbmUgQXJ0czo6UGxheU9iamVjdCBBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeVYyOjpj cmVhdGVQbGF5T2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkKewogICAgICAgIHJl dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdEZhY3RvcnlfYmFzZSo+KF9j YWNoZSktPmNyZWF0ZVBsYXlPYmplY3QoZmlsZW5hbWUpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlP YmplY3RGYWN0b3J5X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNyZWF0ZVBsYXlPYmplY3QoZmls ZW5hbWUpOwp9CgppbmxpbmUgQXJ0czo6UGxheU9iamVjdCBBcnRzOjpQbGF5T2JqZWN0RmFjdG9y eVYyOjpjcmVhdGVQbGF5T2JqZWN0Rm9yVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwsIGNvbnN0 IHN0ZDo6c3RyaW5nJiBtaW1ldHlwZSwgYm9vbCBjcmVhdGVCVVMpCnsKICAgICAgICByZXR1cm4g X2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZSo+KF9jYWNo ZSktPmNyZWF0ZVBsYXlPYmplY3RGb3JVUkwodXJsLCBtaW1ldHlwZSwgY3JlYXRlQlVTKTpzdGF0 aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSkt PmNyZWF0ZVBsYXlPYmplY3RGb3JVUkwodXJsLCBtaW1ldHlwZSwgY3JlYXRlQlVTKTsKfQoKaW5s aW5lIEFydHM6OlBsYXlPYmplY3QgQXJ0czo6UGxheU9iamVjdEZhY3RvcnlWMjo6Y3JlYXRlUGxh eU9iamVjdEZvclN0cmVhbShBcnRzOjpJbnB1dFN0cmVhbSBpbnN0cmVhbSwgY29uc3Qgc3RkOjpz dHJpbmcmIG1pbWV0eXBlLCBib29sIGNyZWF0ZUJVUykKewogICAgICAgIHJldHVybiBfY2FjaGU/ c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdEZhY3RvcnlWMl9iYXNlKj4oX2NhY2hlKS0+Y3Jl YXRlUGxheU9iamVjdEZvclN0cmVhbShpbnN0cmVhbSwgbWltZXR5cGUsIGNyZWF0ZUJVUyk6c3Rh dGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdEZhY3RvcnlWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkp LT5jcmVhdGVQbGF5T2JqZWN0Rm9yU3RyZWFtKGluc3RyZWFtLCBtaW1ldHlwZSwgY3JlYXRlQlVT KTsKfQoKfTsKIyAxMSAic291bmRzZXJ2ZXIuaCIgMgoKbmFtZXNwYWNlIEFydHMgewplbnVtIFJl YWx0aW1lU3RhdHVzIHtydFJlYWx0aW1lID0gMCwgcnROb1N1cHBvcnQgPSAxLCBydE5vV3JhcHBl ciA9IDIsIHJ0Tm9SZWFsdGltZSA9IDN9Owp9OwpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFNhbXBs ZVN0b3JhZ2VFbnRyeTsKY2xhc3MgU2FtcGxlU3RvcmFnZTsKY2xhc3MgQnl0ZVNvdW5kUHJvZHVj ZXI7CmNsYXNzIFNpbXBsZVNvdW5kU2VydmVyOwpjbGFzcyBTb3VuZFNlcnZlcjsKY2xhc3MgU291 bmRTZXJ2ZXJWMjsKY2xhc3MgV2F2UGxheU9iamVjdDsKCmNsYXNzIFNhbXBsZVN0b3JhZ2VFbnRy eV9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X2Jhc2UgewpwdWJsaWM6CiAgICAg ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJRDsKCiAgICAgICAgc3RhdGljIFNhbXBsZVN0b3Jh Z2VFbnRyeV9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRz OjpTYW1wbGVTdG9yYWdlRW50cnkiKTsKICAgICAgICBzdGF0aWMgU2FtcGxlU3RvcmFnZUVudHJ5 X2Jhc2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7CiAgICAgICAgc3RhdGlj IFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZl cmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFNhbXBsZVN0b3JhZ2VF bnRyeV9iYXNlICpfZnJvbUR5bmFtaWNDYXN0KGNvbnN0IEFydHM6Ok9iamVjdCYgb2JqZWN0KTsK ICAgICAgICBpbmxpbmUgU2FtcGxlU3RvcmFnZUVudHJ5X2Jhc2UgKl9jb3B5KCkgewogICAgICAg ICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAg ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3Rv cjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBz dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAg ICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgc3RkOjpz dHJpbmcgbmFtZSgpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGZpbGVuYW1lKCkg PSAwOwogICAgICAgIHZpcnR1YWwgYm9vbCBjb21wbGV0ZWQoKSA9IDA7CiAgICAgICAgdmlydHVh bCB2b2lkIHdyaXRlKGNvbnN0IHN0ZDo6dmVjdG9yPEFydHM6Om1jb3BieXRlPiYgZGF0YSkgPSAw OwogICAgICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7Cn07CgpjbGFzcyBTYW1wbGVTdG9y YWdlRW50cnlfc3R1YiA6IHZpcnR1YWwgcHVibGljIFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlLCB2 aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTYW1w bGVTdG9yYWdlRW50cnlfc3R1YigpOwoKcHVibGljOgogICAgICAgIFNhbXBsZVN0b3JhZ2VFbnRy eV9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAg ICAgICBzdGQ6OnN0cmluZyBuYW1lKCk7CiAgICAgICAgc3RkOjpzdHJpbmcgZmlsZW5hbWUoKTsK ICAgICAgICBib29sIGNvbXBsZXRlZCgpOwogICAgICAgIHZvaWQgd3JpdGUoY29uc3Qgc3RkOjp2 ZWN0b3I8QXJ0czo6bWNvcGJ5dGU+JiBkYXRhKTsKICAgICAgICB2b2lkIGZpbmlzaCgpOwp9OwoK Y2xhc3MgU2FtcGxlU3RvcmFnZUVudHJ5X3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTYW1wbGVTdG9y YWdlRW50cnlfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6T2JqZWN0X3NrZWwgewpwcm90ZWN0 ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIG5hbWVfY2hhbmdlZChjb25zdCBzdGQ6OnN0cmluZyYg bmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoIm5hbWVfY2hhbmdlZCIs bmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBmaWxlbmFtZV9jaGFuZ2Vk KGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hh bmdlZCgiZmlsZW5hbWVfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxp bmUgdm9pZCBjb21wbGV0ZWRfY2hhbmdlZChib29sIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAg ICBfZW1pdF9jaGFuZ2VkKCJjb21wbGV0ZWRfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0K CnB1YmxpYzoKICAgICAgICBTYW1wbGVTdG9yYWdlRW50cnlfc2tlbCgpOwoKICAgICAgICBzdGF0 aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAgICAgICAgc3RkOjpzdHJpbmcg X2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBhdGlibGVXaXRoKGNvbnN0IHN0 ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lkIF9idWlsZE1ldGhvZFRhYmxl KCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIgKnJlcXVlc3QsIEFydHM6OkJ1 ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAxICIuLi8uLi9hcnRzL21jb3Av cmVmZXJlbmNlLmgiIDEKIyA5MCAic291bmRzZXJ2ZXIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNs YXNzIFNhbXBsZVN0b3JhZ2VFbnRyeSA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgog ICAgICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTYW1w bGVTdG9yYWdlRW50cnlfYmFzZSAqX2NhY2hlOwogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdl RW50cnlfYmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNr Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAg ICAgICAgICAgICBfY2FjaGU9KFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlICopX3Bvb2wtPmJhc2Ut Pl9jYXN0KFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlOjpfSUlEKTsKICAgICAgICAgICAgICAgICAg ICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVy biBfY2FjaGU7CiAgICAgICAgfQoKcHJvdGVjdGVkOgogICAgICAgIGlubGluZSBTYW1wbGVTdG9y YWdlRW50cnkoU2FtcGxlU3RvcmFnZUVudHJ5X2Jhc2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBf Y2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBTYW1wbGVTdG9yYWdlRW50cnlf YmFzZSBfYmFzZV9jbGFzczsKCiAgICAgICAgaW5saW5lIFNhbXBsZVN0b3JhZ2VFbnRyeSgpIDog QXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFNhbXBs ZVN0b3JhZ2VFbnRyeShjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAgICAgICAg QXJ0czo6T2JqZWN0KFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlOjpfY3JlYXRlKHMuc3RyaW5nKCkp KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFNhbXBsZVN0b3JhZ2VFbnRyeShjb25zdCBB cnRzOjpSZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3Ry aW5nKCk/KFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6 KFNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlOjpfZnJvbVJlZmVyZW5jZShyLnJlZmVyZW5jZSgpLHRy dWUpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlRW50cnkoY29u c3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0czo6T2JqZWN0KFNhbXBsZVN0b3JhZ2VFbnRy eV9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkpKSwgX2NhY2hlKDApIHt9CiAgICAg ICAgaW5saW5lIFNhbXBsZVN0b3JhZ2VFbnRyeShjb25zdCBTYW1wbGVTdG9yYWdlRW50cnkmIHRh cmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUp IHt9CiAgICAgICAgaW5saW5lIFNhbXBsZVN0b3JhZ2VFbnRyeShBcnRzOjpPYmplY3Q6OlBvb2wm IHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGlj IFNhbXBsZVN0b3JhZ2VFbnRyeSBudWxsKCkge3JldHVybiBTYW1wbGVTdG9yYWdlRW50cnkoKFNh bXBsZVN0b3JhZ2VFbnRyeV9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTYW1wbGVT dG9yYWdlRW50cnkgX2Zyb21fYmFzZShTYW1wbGVTdG9yYWdlRW50cnlfYmFzZSogYikge3JldHVy biBTYW1wbGVTdG9yYWdlRW50cnkoYik7fQogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlRW50 cnkmIG9wZXJhdG9yPShjb25zdCBTYW1wbGVTdG9yYWdlRW50cnkmIHRhcmdldCkgewogICAgICAg ICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAg ICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bv b2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAg ICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0K ICAgICAgICBpbmxpbmUgU2FtcGxlU3RvcmFnZUVudHJ5X2Jhc2UqIF9iYXNlKCkge3JldHVybiBf Y2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIHN0ZDo6c3RyaW5n IG5hbWUoKTsKICAgICAgICBpbmxpbmUgc3RkOjpzdHJpbmcgZmlsZW5hbWUoKTsKICAgICAgICBp bmxpbmUgYm9vbCBjb21wbGV0ZWQoKTsKICAgICAgICBpbmxpbmUgdm9pZCB3cml0ZShjb25zdCBz dGQ6OnZlY3RvcjxBcnRzOjptY29wYnl0ZT4mIGRhdGEpOwogICAgICAgIGlubGluZSB2b2lkIGZp bmlzaCgpOwp9OwoKY2xhc3MgU2FtcGxlU3RvcmFnZV9iYXNlIDogdmlydHVhbCBwdWJsaWMgQXJ0 czo6T2JqZWN0X2Jhc2UgewpwdWJsaWM6CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX0lJ RDsKCiAgICAgICAgc3RhdGljIFNhbXBsZVN0b3JhZ2VfYmFzZSAqX2NyZWF0ZShjb25zdCBzdGQ6 OnN0cmluZyYgc3ViQ2xhc3MgPSAiQXJ0czo6U2FtcGxlU3RvcmFnZSIpOwogICAgICAgIHN0YXRp YyBTYW1wbGVTdG9yYWdlX2Jhc2UgKl9mcm9tU3RyaW5nKHN0ZDo6c3RyaW5nIG9iamVjdHJlZik7 CiAgICAgICAgc3RhdGljIFNhbXBsZVN0b3JhZ2VfYmFzZSAqX2Zyb21SZWZlcmVuY2UoQXJ0czo6 T2JqZWN0UmVmZXJlbmNlIHJlZiwgYm9vbCBuZWVkY29weSk7CgogICAgICAgIHN0YXRpYyBTYW1w bGVTdG9yYWdlX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmpl Y3QpOwogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlX2Jhc2UgKl9jb3B5KCkgewogICAgICAg ICAgICAgICAgKCh2b2lkKSAwKTsKICAgICAgICAgICAgICAgIF9yZWZDbnQrKzsKICAgICAgICAg ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3Rv cjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c0luKCkgY29uc3Q7CiAgICAgICAgdmlydHVhbCBz dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gX2RlZmF1bHRQb3J0c091dCgpIGNvbnN0OwoKICAgICAg ICB2b2lkICpfY2FzdCh1bnNpZ25lZCBsb25nIGlpZCk7CgogICAgICAgIHZpcnR1YWwgdm9pZCBj b25zdHJ1Y3Rvcihjb25zdCBzdGQ6OnN0cmluZyYgZGlyZWN0b3J5LCBib29sIGNsZWFyT25Jbml0 KSA9IDA7CiAgICAgICAgdmlydHVhbCBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnkgY3JlYXRlRW50 cnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgYWRk RW50cnkoQXJ0czo6U2FtcGxlU3RvcmFnZUVudHJ5IGVudHJ5KSA9IDA7CiAgICAgICAgdmlydHVh bCB2b2lkIHJlbW92ZUVudHJ5KEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBlbnRyeSkgPSAwOwog ICAgICAgIHZpcnR1YWwgQXJ0czo6U2FtcGxlU3RvcmFnZUVudHJ5IGZpbmRFbnRyeShjb25zdCBz dGQ6OnN0cmluZyYgbmFtZSkgPSAwOwp9OwoKY2xhc3MgU2FtcGxlU3RvcmFnZV9zdHViIDogdmly dHVhbCBwdWJsaWMgU2FtcGxlU3RvcmFnZV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmpl Y3Rfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTYW1wbGVTdG9yYWdlX3N0dWIoKTsKCnB1Ymxp YzoKICAgICAgICBTYW1wbGVTdG9yYWdlX3N0dWIoQXJ0czo6Q29ubmVjdGlvbiAqY29ubmVjdGlv biwgbG9uZyBvYmplY3RJRCk7CgogICAgICAgIHZvaWQgY29uc3RydWN0b3IoY29uc3Qgc3RkOjpz dHJpbmcmIGRpcmVjdG9yeSwgYm9vbCBjbGVhck9uSW5pdCk7CiAgICAgICAgQXJ0czo6U2FtcGxl U3RvcmFnZUVudHJ5IGNyZWF0ZUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKICAgICAg ICB2b2lkIGFkZEVudHJ5KEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBlbnRyeSk7CiAgICAgICAg dm9pZCByZW1vdmVFbnRyeShBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnkgZW50cnkpOwogICAgICAg IEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBmaW5kRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5h bWUpOwp9OwoKY2xhc3MgU2FtcGxlU3RvcmFnZV9za2VsIDogdmlydHVhbCBwdWJsaWMgU2FtcGxl U3RvcmFnZV9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpPYmplY3Rfc2tlbCB7CnB1YmxpYzoK ICAgICAgICBTYW1wbGVTdG9yYWdlX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5n IF9pbnRlcmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1l KCk7CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50 ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZv aWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxs b25nIG1ldGhvZElEKTsKfTsKCn07CiMgMSAiLi4vLi4vYXJ0cy9tY29wL3JlZmVyZW5jZS5oIiAx CiMgMTkyICJzb3VuZHNlcnZlci5oIiAyCm5hbWVzcGFjZSBBcnRzIHsKY2xhc3MgU2FtcGxlU3Rv cmFnZSA6IHB1YmxpYyBBcnRzOjpPYmplY3Qgewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRz OjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsKICAgICAgICBTYW1wbGVTdG9yYWdlX2Jhc2UgKl9j YWNoZTsKICAgICAgICBpbmxpbmUgU2FtcGxlU3RvcmFnZV9iYXNlICpfbWV0aG9kX2NhbGwoKSB7 CiAgICAgICAgICAgICAgICBfcG9vbC0+Y2hlY2tjcmVhdGUoKTsKICAgICAgICAgICAgICAgIGlm KF9wb29sLT5iYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZT0oU2FtcGxlU3Rv cmFnZV9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFNhbXBsZVN0b3JhZ2VfYmFzZTo6X0lJRCk7 CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAg ICBpbmxpbmUgU2FtcGxlU3RvcmFnZShTYW1wbGVTdG9yYWdlX2Jhc2UqIGIpIDogQXJ0czo6T2Jq ZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBTYW1wbGVTdG9y YWdlX2Jhc2UgX2Jhc2VfY2xhc3M7CgogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlKCkgOiBB cnRzOjpPYmplY3QoX0NyZWF0b3IpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU2FtcGxl U3RvcmFnZShjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAgICAgICAgQXJ0czo6 T2JqZWN0KFNhbXBsZVN0b3JhZ2VfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgw KSB7fQogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlKGNvbnN0IEFydHM6OlJlZmVyZW5jZSAm cikgOgogICAgICAgICAgICAgICAgQXJ0czo6T2JqZWN0KHIuaXNTdHJpbmcoKT8oU2FtcGxlU3Rv cmFnZV9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFNhbXBsZVN0b3JhZ2VfYmFzZTo6 X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAgICAg ICBpbmxpbmUgU2FtcGxlU3RvcmFnZShjb25zdCBBcnRzOjpEeW5hbWljQ2FzdCYgYykgOiBBcnRz OjpPYmplY3QoU2FtcGxlU3RvcmFnZV9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkp KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFNhbXBsZVN0b3JhZ2UoY29uc3QgU2FtcGxl U3RvcmFnZSYgdGFyZ2V0KSA6IEFydHM6Ok9iamVjdCh0YXJnZXQuX3Bvb2wpLCBfY2FjaGUodGFy Z2V0Ll9jYWNoZSkge30KICAgICAgICBpbmxpbmUgU2FtcGxlU3RvcmFnZShBcnRzOjpPYmplY3Q6 OlBvb2wmIHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUg c3RhdGljIFNhbXBsZVN0b3JhZ2UgbnVsbCgpIHtyZXR1cm4gU2FtcGxlU3RvcmFnZSgoU2FtcGxl U3RvcmFnZV9iYXNlKikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTYW1wbGVTdG9yYWdlIF9m cm9tX2Jhc2UoU2FtcGxlU3RvcmFnZV9iYXNlKiBiKSB7cmV0dXJuIFNhbXBsZVN0b3JhZ2UoYik7 fQogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlJiBvcGVyYXRvcj0oY29uc3QgU2FtcGxlU3Rv cmFnZSYgdGFyZ2V0KSB7CiAgICAgICAgICAgICAgICBpZiAoX3Bvb2wgPT0gdGFyZ2V0Ll9wb29s KSByZXR1cm4gKnRoaXM7CiAgICAgICAgICAgICAgICBfcG9vbC0+RGVjKCk7CiAgICAgICAgICAg ICAgICBfcG9vbCA9IHRhcmdldC5fcG9vbDsKICAgICAgICAgICAgICAgIF9jYWNoZSA9IHRhcmdl dC5fY2FjaGU7CiAgICAgICAgICAgICAgICBfcG9vbC0+SW5jKCk7CiAgICAgICAgICAgICAgICBy ZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAgICAgIGlubGluZSBTYW1wbGVTdG9yYWdlX2Jhc2Uq IF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAg aW5saW5lIFNhbXBsZVN0b3JhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcmVjdG9yeSwgYm9vbCBj bGVhck9uSW5pdCk7CiAgICAgICAgaW5saW5lIEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBjcmVh dGVFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5saW5lIHZvaWQgYWRk RW50cnkoQXJ0czo6U2FtcGxlU3RvcmFnZUVudHJ5IGVudHJ5KTsKICAgICAgICBpbmxpbmUgdm9p ZCByZW1vdmVFbnRyeShBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnkgZW50cnkpOwogICAgICAgIGlu bGluZSBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnkgZmluZEVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5n JiBuYW1lKTsKfTsKCmNsYXNzIEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UgOiB2aXJ0dWFsIHB1Ymxp YyBBcnRzOjpTeW50aE1vZHVsZV9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25l ZCBsb25nIF9JSUQ7CgogICAgICAgIHN0YXRpYyBCeXRlU291bmRQcm9kdWNlcl9iYXNlICpfY3Jl YXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpCeXRlU291bmRQcm9kdWNl ciIpOwogICAgICAgIHN0YXRpYyBCeXRlU291bmRQcm9kdWNlcl9iYXNlICpfZnJvbVN0cmluZyhz dGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBCeXRlU291bmRQcm9kdWNlcl9i YXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRj b3B5KTsKCiAgICAgICAgc3RhdGljIEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UgKl9mcm9tRHluYW1p Y0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBCeXRlU291 bmRQcm9kdWNlcl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAg ICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAg ICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0 UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQg bG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIGxvbmcgc2FtcGxpbmdSYXRlKCkgPSAwOwogICAg ICAgIHZpcnR1YWwgbG9uZyBjaGFubmVscygpID0gMDsKICAgICAgICB2aXJ0dWFsIGxvbmcgYml0 cygpID0gMDsKfTsKCmNsYXNzIEJ5dGVTb3VuZFByb2R1Y2VyX3N0dWIgOiB2aXJ0dWFsIHB1Ymxp YyBCeXRlU291bmRQcm9kdWNlcl9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVs ZV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIEJ5dGVTb3VuZFByb2R1Y2VyX3N0dWIoKTsKCnB1 YmxpYzoKICAgICAgICBCeXRlU291bmRQcm9kdWNlcl9zdHViKEFydHM6OkNvbm5lY3Rpb24gKmNv bm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICBsb25nIHNhbXBsaW5nUmF0ZSgpOwog ICAgICAgIGxvbmcgY2hhbm5lbHMoKTsKICAgICAgICBsb25nIGJpdHMoKTsKfTsKCmNsYXNzIEJ5 dGVTb3VuZFByb2R1Y2VyX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBCeXRlU291bmRQcm9kdWNlcl9i YXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVjdGVkOgoK ICAgICAgICBBcnRzOjpCeXRlQXN5bmNTdHJlYW0gb3V0ZGF0YTsKCgogICAgICAgIHZpcnR1YWwg dm9pZCByZXF1ZXN0X291dGRhdGEoQXJ0czo6RGF0YVBhY2tldDxBcnRzOjptY29wYnl0ZT4gKik7 Cgpwcm90ZWN0ZWQ6CgogICAgICAgIGlubGluZSB2b2lkIHNhbXBsaW5nUmF0ZV9jaGFuZ2VkKGxv bmcgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoInNhbXBsaW5nUmF0 ZV9jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGNoYW5u ZWxzX2NoYW5nZWQobG9uZyBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRfY2hhbmdl ZCgiY2hhbm5lbHNfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUg dm9pZCBiaXRzX2NoYW5nZWQobG9uZyBuZXdWYWx1ZSkgewogICAgICAgICAgICAgICAgX2VtaXRf Y2hhbmdlZCgiYml0c19jaGFuZ2VkIixuZXdWYWx1ZSk7CiAgICAgICAgfQoKcHVibGljOgogICAg ICAgIEJ5dGVTb3VuZFByb2R1Y2VyX3NrZWwoKTsKCiAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5n IF9pbnRlcmZhY2VOYW1lU2tlbCgpOwogICAgICAgIHN0ZDo6c3RyaW5nIF9pbnRlcmZhY2VOYW1l KCk7CiAgICAgICAgYm9vbCBfaXNDb21wYXRpYmxlV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgaW50 ZXJmYWNlbmFtZSk7CiAgICAgICAgdm9pZCBfYnVpbGRNZXRob2RUYWJsZSgpOwogICAgICAgIHZv aWQgZGlzcGF0Y2goQXJ0czo6QnVmZmVyICpyZXF1ZXN0LCBBcnRzOjpCdWZmZXIgKnJlc3VsdCxs b25nIG1ldGhvZElEKTsKICAgICAgICB2b2lkIG5vdGlmeShjb25zdCBBcnRzOjpOb3RpZmljYXRp b24mIG5vdGlmaWNhdGlvbik7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2Uu aCIgMQojIDMxMCAic291bmRzZXJ2ZXIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIEJ5dGVT b3VuZFByb2R1Y2VyIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAgICAgc3Rh dGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIEJ5dGVTb3VuZFByb2R1 Y2VyX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgQnl0ZVNvdW5kUHJvZHVjZXJfYmFzZSAq X21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAg ICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBf Y2FjaGU9KEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3QoQnl0ZVNv dW5kUHJvZHVjZXJfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCkg MCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hlOwogICAg ICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgQnl0ZVNvdW5kUHJvZHVjZXIoQnl0ZVNv dW5kUHJvZHVjZXJfYmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7fQoKCnB1 YmxpYzoKICAgICAgICB0eXBlZGVmIEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UgX2Jhc2VfY2xhc3M7 CgogICAgICAgIGlubGluZSBCeXRlU291bmRQcm9kdWNlcigpIDogQXJ0czo6T2JqZWN0KF9DcmVh dG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIEJ5dGVTb3VuZFByb2R1Y2VyKGNvbnN0 IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3QoQnl0ZVNv dW5kUHJvZHVjZXJfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7fQogICAg ICAgIGlubGluZSBCeXRlU291bmRQcm9kdWNlcihjb25zdCBBcnRzOjpSZWZlcmVuY2UgJnIpIDoK ICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KEJ5dGVTb3VuZFByb2R1 Y2VyX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooQnl0ZVNvdW5kUHJvZHVjZXJfYmFz ZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkge30KICAg ICAgICBpbmxpbmUgQnl0ZVNvdW5kUHJvZHVjZXIoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMp IDogQXJ0czo6T2JqZWN0KEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2U6Ol9mcm9tRHluYW1pY0Nhc3Qo Yy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgQnl0ZVNvdW5kUHJvZHVj ZXIoY29uc3QgQnl0ZVNvdW5kUHJvZHVjZXImIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0 Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIEJ5dGVTb3Vu ZFByb2R1Y2VyKEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCksIF9jYWNo ZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgQnl0ZVNvdW5kUHJvZHVjZXIgbnVsbCgpIHty ZXR1cm4gQnl0ZVNvdW5kUHJvZHVjZXIoKEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UqKTApO30KICAg ICAgICBpbmxpbmUgc3RhdGljIEJ5dGVTb3VuZFByb2R1Y2VyIF9mcm9tX2Jhc2UoQnl0ZVNvdW5k UHJvZHVjZXJfYmFzZSogYikge3JldHVybiBCeXRlU291bmRQcm9kdWNlcihiKTt9CiAgICAgICAg aW5saW5lIEJ5dGVTb3VuZFByb2R1Y2VyJiBvcGVyYXRvcj0oY29uc3QgQnl0ZVNvdW5kUHJvZHVj ZXImIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9vbCkg cmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAgICAg ICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJnZXQu X2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAgcmV0 dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6U3ludGhN b2R1bGUoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTeW50aE1vZHVsZSgqX3Bvb2wpOyB9CiAgICAg ICAgaW5saW5lIEJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/ X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5lIEFydHM6OkF1dG9TdXNwZW5k U3RhdGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdGFydCgpOwogICAgICAg IGlubGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJlYW1Jbml0KCk7CiAg ICAgICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAgICBpbmxpbmUgdm9pZCBzdHJl YW1FbmQoKTsKICAgICAgICBpbmxpbmUgbG9uZyBzYW1wbGluZ1JhdGUoKTsKICAgICAgICBpbmxp bmUgbG9uZyBjaGFubmVscygpOwogICAgICAgIGlubGluZSBsb25nIGJpdHMoKTsKfTsKCmNsYXNz IFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQbGF5T2JqZWN0 RmFjdG9yeV9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7 CgogICAgICAgIHN0YXRpYyBTaW1wbGVTb3VuZFNlcnZlcl9iYXNlICpfY3JlYXRlKGNvbnN0IHN0 ZDo6c3RyaW5nJiBzdWJDbGFzcyA9ICJBcnRzOjpTaW1wbGVTb3VuZFNlcnZlciIpOwogICAgICAg IHN0YXRpYyBTaW1wbGVTb3VuZFNlcnZlcl9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBv YmplY3RyZWYpOwogICAgICAgIHN0YXRpYyBTaW1wbGVTb3VuZFNlcnZlcl9iYXNlICpfZnJvbVJl ZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAg ICAgc3RhdGljIFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UgKl9mcm9tRHluYW1pY0Nhc3QoY29uc3Qg QXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGluZSBTaW1wbGVTb3VuZFNlcnZlcl9i YXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7CiAgICAgICAgICAgICAg ICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAg ICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9ydHNJbigpIGNv bnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZhdWx0UG9y dHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWduZWQgbG9uZyBpaWQpOwoK ICAgICAgICB2aXJ0dWFsIEFydHM6OlN0ZXJlb0VmZmVjdFN0YWNrIG91dHN0YWNrKCkgPSAwOwog ICAgICAgIHZpcnR1YWwgZmxvYXQgbWluU3RyZWFtQnVmZmVyVGltZSgpID0gMDsKICAgICAgICB2 aXJ0dWFsIGZsb2F0IHNlcnZlckJ1ZmZlclRpbWUoKSA9IDA7CiAgICAgICAgdmlydHVhbCBsb25n IHBsYXkoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCB2 b2lkIGF0dGFjaChBcnRzOjpCeXRlU291bmRQcm9kdWNlciBwcm9kdWNlcikgPSAwOwogICAgICAg IHZpcnR1YWwgdm9pZCBkZXRhY2goQXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXIgcHJvZHVjZXIpID0g MDsKICAgICAgICB2aXJ0dWFsIEFydHM6Ok9iamVjdCBjcmVhdGVPYmplY3QoY29uc3Qgc3RkOjpz dHJpbmcmIG5hbWUpID0gMDsKfTsKCmNsYXNzIFNpbXBsZVNvdW5kU2VydmVyX3N0dWIgOiB2aXJ0 dWFsIHB1YmxpYyBTaW1wbGVTb3VuZFNlcnZlcl9iYXNlLCB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQ bGF5T2JqZWN0RmFjdG9yeV9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFNpbXBsZVNvdW5kU2Vy dmVyX3N0dWIoKTsKCnB1YmxpYzoKICAgICAgICBTaW1wbGVTb3VuZFNlcnZlcl9zdHViKEFydHM6 OkNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGxvbmcgb2JqZWN0SUQpOwoKICAgICAgICBBcnRzOjpT dGVyZW9FZmZlY3RTdGFjayBvdXRzdGFjaygpOwogICAgICAgIGZsb2F0IG1pblN0cmVhbUJ1ZmZl clRpbWUoKTsKICAgICAgICBmbG9hdCBzZXJ2ZXJCdWZmZXJUaW1lKCk7CiAgICAgICAgbG9uZyBw bGF5KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7CiAgICAgICAgdm9pZCBhdHRhY2goQXJ0 czo6Qnl0ZVNvdW5kUHJvZHVjZXIgcHJvZHVjZXIpOwogICAgICAgIHZvaWQgZGV0YWNoKEFydHM6 OkJ5dGVTb3VuZFByb2R1Y2VyIHByb2R1Y2VyKTsKICAgICAgICBBcnRzOjpPYmplY3QgY3JlYXRl T2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKfTsKCmNsYXNzIFNpbXBsZVNvdW5kU2Vy dmVyX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTaW1wbGVTb3VuZFNlcnZlcl9iYXNlLCB2aXJ0dWFs IHB1YmxpYyBBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeV9za2VsIHsKcHJvdGVjdGVkOgoKICAgICAg ICBpbmxpbmUgdm9pZCBtaW5TdHJlYW1CdWZmZXJUaW1lX2NoYW5nZWQoZmxvYXQgbmV3VmFsdWUp IHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoIm1pblN0cmVhbUJ1ZmZlclRpbWVfY2hh bmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBzZXJ2ZXJCdWZm ZXJUaW1lX2NoYW5nZWQoZmxvYXQgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2No YW5nZWQoInNlcnZlckJ1ZmZlclRpbWVfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KCnB1 YmxpYzoKICAgICAgICBTaW1wbGVTb3VuZFNlcnZlcl9za2VsKCk7CgogICAgICAgIHN0YXRpYyBz dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50 ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpz dHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsK ICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVy ICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZl cmVuY2UuaCIgMQojIDQzMCAic291bmRzZXJ2ZXIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNz IFNpbXBsZVNvdW5kU2VydmVyIDogcHVibGljIEFydHM6Ok9iamVjdCB7CnByaXZhdGU6CiAgICAg ICAgc3RhdGljIEFydHM6Ok9iamVjdF9iYXNlKiBfQ3JlYXRvcigpOwogICAgICAgIFNpbXBsZVNv dW5kU2VydmVyX2Jhc2UgKl9jYWNoZTsKICAgICAgICBpbmxpbmUgU2ltcGxlU291bmRTZXJ2ZXJf YmFzZSAqX21ldGhvZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRl KCk7CiAgICAgICAgICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAg ICAgICBfY2FjaGU9KFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UgKilfcG9vbC0+YmFzZS0+X2Nhc3Qo U2ltcGxlU291bmRTZXJ2ZXJfYmFzZTo6X0lJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICgo dm9pZCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NhY2hl OwogICAgICAgIH0KCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgU2ltcGxlU291bmRTZXJ2ZXIo U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSogYikgOiBBcnRzOjpPYmplY3QoYiksIF9jYWNoZSgwKSB7 fQoKCnB1YmxpYzoKICAgICAgICB0eXBlZGVmIFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UgX2Jhc2Vf Y2xhc3M7CgogICAgICAgIGlubGluZSBTaW1wbGVTb3VuZFNlcnZlcigpIDogQXJ0czo6T2JqZWN0 KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFNpbXBsZVNvdW5kU2VydmVy KGNvbnN0IEFydHM6OlN1YkNsYXNzJiBzKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qo U2ltcGxlU291bmRTZXJ2ZXJfYmFzZTo6X2NyZWF0ZShzLnN0cmluZygpKSksIF9jYWNoZSgwKSB7 fQogICAgICAgIGlubGluZSBTaW1wbGVTb3VuZFNlcnZlcihjb25zdCBBcnRzOjpSZWZlcmVuY2Ug JnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFNpbXBsZVNv dW5kU2VydmVyX2Jhc2U6Ol9mcm9tU3RyaW5nKHIuc3RyaW5nKCkpKTooU2ltcGxlU291bmRTZXJ2 ZXJfYmFzZTo6X2Zyb21SZWZlcmVuY2Uoci5yZWZlcmVuY2UoKSx0cnVlKSkpLCBfY2FjaGUoMCkg e30KICAgICAgICBpbmxpbmUgU2ltcGxlU291bmRTZXJ2ZXIoY29uc3QgQXJ0czo6RHluYW1pY0Nh c3QmIGMpIDogQXJ0czo6T2JqZWN0KFNpbXBsZVNvdW5kU2VydmVyX2Jhc2U6Ol9mcm9tRHluYW1p Y0Nhc3QoYy5vYmplY3QoKSkpLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU2ltcGxlU291 bmRTZXJ2ZXIoY29uc3QgU2ltcGxlU291bmRTZXJ2ZXImIHRhcmdldCkgOiBBcnRzOjpPYmplY3Qo dGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFNp bXBsZVNvdW5kU2VydmVyKEFydHM6Ok9iamVjdDo6UG9vbCYgcCkgOiBBcnRzOjpPYmplY3QocCks IF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBzdGF0aWMgU2ltcGxlU291bmRTZXJ2ZXIgbnVs bCgpIHtyZXR1cm4gU2ltcGxlU291bmRTZXJ2ZXIoKFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqKTAp O30KICAgICAgICBpbmxpbmUgc3RhdGljIFNpbXBsZVNvdW5kU2VydmVyIF9mcm9tX2Jhc2UoU2lt cGxlU291bmRTZXJ2ZXJfYmFzZSogYikge3JldHVybiBTaW1wbGVTb3VuZFNlcnZlcihiKTt9CiAg ICAgICAgaW5saW5lIFNpbXBsZVNvdW5kU2VydmVyJiBvcGVyYXRvcj0oY29uc3QgU2ltcGxlU291 bmRTZXJ2ZXImIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5f cG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAg ICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0 YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAg ICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6 UGxheU9iamVjdEZhY3RvcnkoKSBjb25zdCB7IHJldHVybiBBcnRzOjpQbGF5T2JqZWN0RmFjdG9y eSgqX3Bvb2wpOyB9CiAgICAgICAgaW5saW5lIFNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqIF9iYXNl KCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAgICAgaW5saW5l IEFydHM6OlBsYXlPYmplY3QgY3JlYXRlUGxheU9iamVjdChjb25zdCBzdGQ6OnN0cmluZyYgZmls ZW5hbWUpOwogICAgICAgIGlubGluZSBBcnRzOjpTdGVyZW9FZmZlY3RTdGFjayBvdXRzdGFjaygp OwogICAgICAgIGlubGluZSBmbG9hdCBtaW5TdHJlYW1CdWZmZXJUaW1lKCk7CiAgICAgICAgaW5s aW5lIGZsb2F0IHNlcnZlckJ1ZmZlclRpbWUoKTsKICAgICAgICBpbmxpbmUgbG9uZyBwbGF5KGNv bnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7CiAgICAgICAgaW5saW5lIHZvaWQgYXR0YWNoKEFy dHM6OkJ5dGVTb3VuZFByb2R1Y2VyIHByb2R1Y2VyKTsKICAgICAgICBpbmxpbmUgdm9pZCBkZXRh Y2goQXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXIgcHJvZHVjZXIpOwogICAgICAgIGlubGluZSBBcnRz OjpPYmplY3QgY3JlYXRlT2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKfTsKCmNsYXNz IFNvdW5kU2VydmVyX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTaW1wbGVTb3VuZFNlcnZl cl9iYXNlIHsKcHVibGljOgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9JSUQ7CgogICAg ICAgIHN0YXRpYyBTb3VuZFNlcnZlcl9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBz dWJDbGFzcyA9ICJBcnRzOjpTb3VuZFNlcnZlciIpOwogICAgICAgIHN0YXRpYyBTb3VuZFNlcnZl cl9iYXNlICpfZnJvbVN0cmluZyhzdGQ6OnN0cmluZyBvYmplY3RyZWYpOwogICAgICAgIHN0YXRp YyBTb3VuZFNlcnZlcl9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVuY2Ug cmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFNvdW5kU2VydmVyX2Jhc2UgKl9m cm9tRHluYW1pY0Nhc3QoY29uc3QgQXJ0czo6T2JqZWN0JiBvYmplY3QpOwogICAgICAgIGlubGlu ZSBTb3VuZFNlcnZlcl9iYXNlICpfY29weSgpIHsKICAgICAgICAgICAgICAgICgodm9pZCkgMCk7 CiAgICAgICAgICAgICAgICBfcmVmQ250Kys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK ICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IF9kZWZh dWx0UG9ydHNJbigpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp bmc+IF9kZWZhdWx0UG9ydHNPdXQoKSBjb25zdDsKCiAgICAgICAgdm9pZCAqX2Nhc3QodW5zaWdu ZWQgbG9uZyBpaWQpOwoKICAgICAgICB2aXJ0dWFsIEFydHM6OlJlYWx0aW1lU3RhdHVzIHJlYWx0 aW1lU3RhdHVzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgbG9uZyBzZWNvbmRzVW50aWxTdXNwZW5k KCkgPSAwOwogICAgICAgIHZpcnR1YWwgYm9vbCBzdXNwZW5kKCkgPSAwOwogICAgICAgIHZpcnR1 YWwgYm9vbCB0ZXJtaW5hdGUoKSA9IDA7Cn07CgpjbGFzcyBTb3VuZFNlcnZlcl9zdHViIDogdmly dHVhbCBwdWJsaWMgU291bmRTZXJ2ZXJfYmFzZSwgdmlydHVhbCBwdWJsaWMgQXJ0czo6U2ltcGxl U291bmRTZXJ2ZXJfc3R1YiB7CnByb3RlY3RlZDoKICAgICAgICBTb3VuZFNlcnZlcl9zdHViKCk7 CgpwdWJsaWM6CiAgICAgICAgU291bmRTZXJ2ZXJfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25u ZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgQXJ0czo6UmVhbHRpbWVTdGF0dXMgcmVh bHRpbWVTdGF0dXMoKTsKICAgICAgICBsb25nIHNlY29uZHNVbnRpbFN1c3BlbmQoKTsKICAgICAg ICBib29sIHN1c3BlbmQoKTsKICAgICAgICBib29sIHRlcm1pbmF0ZSgpOwp9OwoKY2xhc3MgU291 bmRTZXJ2ZXJfc2tlbCA6IHZpcnR1YWwgcHVibGljIFNvdW5kU2VydmVyX2Jhc2UsIHZpcnR1YWwg cHVibGljIEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX3NrZWwgewpwcm90ZWN0ZWQ6CgogICAgICAg IGlubGluZSB2b2lkIHNlY29uZHNVbnRpbFN1c3BlbmRfY2hhbmdlZChsb25nIG5ld1ZhbHVlKSB7 CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJzZWNvbmRzVW50aWxTdXNwZW5kX2NoYW5n ZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CgpwdWJsaWM6CiAgICAgICAgU291bmRTZXJ2ZXJfc2tl bCgpOwoKICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWVTa2VsKCk7CiAg ICAgICAgc3RkOjpzdHJpbmcgX2ludGVyZmFjZU5hbWUoKTsKICAgICAgICBib29sIF9pc0NvbXBh dGlibGVXaXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcmZhY2VuYW1lKTsKICAgICAgICB2b2lk IF9idWlsZE1ldGhvZFRhYmxlKCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaChBcnRzOjpCdWZmZXIg KnJlcXVlc3QsIEFydHM6OkJ1ZmZlciAqcmVzdWx0LGxvbmcgbWV0aG9kSUQpOwp9OwoKfTsKIyAx ICIuLi8uLi9hcnRzL21jb3AvcmVmZXJlbmNlLmgiIDEKIyA1NDAgInNvdW5kc2VydmVyLmgiIDIK bmFtZXNwYWNlIEFydHMgewpjbGFzcyBTb3VuZFNlcnZlciA6IHB1YmxpYyBBcnRzOjpPYmplY3Qg ewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBBcnRzOjpPYmplY3RfYmFzZSogX0NyZWF0b3IoKTsK ICAgICAgICBTb3VuZFNlcnZlcl9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFNvdW5kU2Vy dmVyX2Jhc2UgKl9tZXRob2RfY2FsbCgpIHsKICAgICAgICAgICAgICAgIF9wb29sLT5jaGVja2Ny ZWF0ZSgpOwogICAgICAgICAgICAgICAgaWYoX3Bvb2wtPmJhc2UpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgX2NhY2hlPShTb3VuZFNlcnZlcl9iYXNlICopX3Bvb2wtPmJhc2UtPl9jYXN0KFNv dW5kU2VydmVyX2Jhc2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDAp OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAg ICB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyKFNvdW5kU2VydmVyX2Jh c2UqIGIpIDogQXJ0czo6T2JqZWN0KGIpLCBfY2FjaGUoMCkge30KCgpwdWJsaWM6CiAgICAgICAg dHlwZWRlZiBTb3VuZFNlcnZlcl9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgU291 bmRTZXJ2ZXIoKSA6IEFydHM6Ok9iamVjdChfQ3JlYXRvciksIF9jYWNoZSgwKSB7fQogICAgICAg IGlubGluZSBTb3VuZFNlcnZlcihjb25zdCBBcnRzOjpTdWJDbGFzcyYgcykgOgogICAgICAgICAg ICAgICAgQXJ0czo6T2JqZWN0KFNvdW5kU2VydmVyX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkp LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU291bmRTZXJ2ZXIoY29uc3QgQXJ0czo6UmVm ZXJlbmNlICZyKSA6CiAgICAgICAgICAgICAgICBBcnRzOjpPYmplY3Qoci5pc1N0cmluZygpPyhT b3VuZFNlcnZlcl9iYXNlOjpfZnJvbVN0cmluZyhyLnN0cmluZygpKSk6KFNvdW5kU2VydmVyX2Jh c2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAg ICAgICAgaW5saW5lIFNvdW5kU2VydmVyKGNvbnN0IEFydHM6OkR5bmFtaWNDYXN0JiBjKSA6IEFy dHM6Ok9iamVjdChTb3VuZFNlcnZlcl9iYXNlOjpfZnJvbUR5bmFtaWNDYXN0KGMub2JqZWN0KCkp KSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyKGNvbnN0IFNvdW5kU2Vy dmVyJiB0YXJnZXQpIDogQXJ0czo6T2JqZWN0KHRhcmdldC5fcG9vbCksIF9jYWNoZSh0YXJnZXQu X2NhY2hlKSB7fQogICAgICAgIGlubGluZSBTb3VuZFNlcnZlcihBcnRzOjpPYmplY3Q6OlBvb2wm IHApIDogQXJ0czo6T2JqZWN0KHApLCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgc3RhdGlj IFNvdW5kU2VydmVyIG51bGwoKSB7cmV0dXJuIFNvdW5kU2VydmVyKChTb3VuZFNlcnZlcl9iYXNl KikwKTt9CiAgICAgICAgaW5saW5lIHN0YXRpYyBTb3VuZFNlcnZlciBfZnJvbV9iYXNlKFNvdW5k U2VydmVyX2Jhc2UqIGIpIHtyZXR1cm4gU291bmRTZXJ2ZXIoYik7fQogICAgICAgIGlubGluZSBT b3VuZFNlcnZlciYgb3BlcmF0b3I9KGNvbnN0IFNvdW5kU2VydmVyJiB0YXJnZXQpIHsKICAgICAg ICAgICAgICAgIGlmIChfcG9vbCA9PSB0YXJnZXQuX3Bvb2wpIHJldHVybiAqdGhpczsKICAgICAg ICAgICAgICAgIF9wb29sLT5EZWMoKTsKICAgICAgICAgICAgICAgIF9wb29sID0gdGFyZ2V0Ll9w b29sOwogICAgICAgICAgICAgICAgX2NhY2hlID0gdGFyZ2V0Ll9jYWNoZTsKICAgICAgICAgICAg ICAgIF9wb29sLT5JbmMoKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9 CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlNpbXBsZVNvdW5kU2VydmVyKCkgY29uc3Qg eyByZXR1cm4gQXJ0czo6U2ltcGxlU291bmRTZXJ2ZXIoKl9wb29sKTsgfQogICAgICAgIGlubGlu ZSBvcGVyYXRvciBBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6 OlBsYXlPYmplY3RGYWN0b3J5KCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgU291bmRTZXJ2ZXJf YmFzZSogX2Jhc2UoKSB7cmV0dXJuIF9jYWNoZT9fY2FjaGU6X21ldGhvZF9jYWxsKCk7fQoKICAg ICAgICBpbmxpbmUgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2sgb3V0c3RhY2soKTsKICAgICAgICBp bmxpbmUgZmxvYXQgbWluU3RyZWFtQnVmZmVyVGltZSgpOwogICAgICAgIGlubGluZSBmbG9hdCBz ZXJ2ZXJCdWZmZXJUaW1lKCk7CiAgICAgICAgaW5saW5lIGxvbmcgcGxheShjb25zdCBzdGQ6OnN0 cmluZyYgZmlsZW5hbWUpOwogICAgICAgIGlubGluZSB2b2lkIGF0dGFjaChBcnRzOjpCeXRlU291 bmRQcm9kdWNlciBwcm9kdWNlcik7CiAgICAgICAgaW5saW5lIHZvaWQgZGV0YWNoKEFydHM6OkJ5 dGVTb3VuZFByb2R1Y2VyIHByb2R1Y2VyKTsKICAgICAgICBpbmxpbmUgQXJ0czo6T2JqZWN0IGNy ZWF0ZU9iamVjdChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5saW5lIEFydHM6 OlBsYXlPYmplY3QgY3JlYXRlUGxheU9iamVjdChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUp OwogICAgICAgIGlubGluZSBBcnRzOjpSZWFsdGltZVN0YXR1cyByZWFsdGltZVN0YXR1cygpOwog ICAgICAgIGlubGluZSBsb25nIHNlY29uZHNVbnRpbFN1c3BlbmQoKTsKICAgICAgICBpbmxpbmUg Ym9vbCBzdXNwZW5kKCk7CiAgICAgICAgaW5saW5lIGJvb2wgdGVybWluYXRlKCk7Cn07CgpjbGFz cyBTb3VuZFNlcnZlclYyX2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTb3VuZFNlcnZlcl9i YXNlLAogICAgICAgIHZpcnR1YWwgcHVibGljIEFydHM6OlBsYXlPYmplY3RGYWN0b3J5VjJfYmFz ZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBz dGF0aWMgU291bmRTZXJ2ZXJWMl9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJD bGFzcyA9ICJBcnRzOjpTb3VuZFNlcnZlclYyIik7CiAgICAgICAgc3RhdGljIFNvdW5kU2VydmVy VjJfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0 aWMgU291bmRTZXJ2ZXJWMl9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVu Y2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFNvdW5kU2VydmVyVjJfYmFz ZSAqX2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAg aW5saW5lIFNvdW5kU2VydmVyVjJfYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZv aWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJu IHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n PiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0 ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0 KHVuc2lnbmVkIGxvbmcgaWlkKTsKCiAgICAgICAgdmlydHVhbCBsb25nIGF1dG9TdXNwZW5kU2Vj b25kcygpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgYXV0b1N1c3BlbmRTZWNvbmRzKGxvbmcg bmV3VmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIGxvbmcgYnVmZmVyU2l6ZU11bHRpcGxpZXIo KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGJ1ZmZlclNpemVNdWx0aXBsaWVyKGxvbmcgbmV3 VmFsdWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGF1ZGlvTWV0aG9kKCkgPSAw OwogICAgICAgIHZpcnR1YWwgbG9uZyBzYW1wbGluZ1JhdGUoKSA9IDA7CiAgICAgICAgdmlydHVh bCBsb25nIGNoYW5uZWxzKCkgPSAwOwogICAgICAgIHZpcnR1YWwgbG9uZyBiaXRzKCkgPSAwOwog ICAgICAgIHZpcnR1YWwgYm9vbCBmdWxsRHVwbGV4KCkgPSAwOwogICAgICAgIHZpcnR1YWwgc3Rk OjpzdHJpbmcgYXVkaW9EZXZpY2UoKSA9IDA7CiAgICAgICAgdmlydHVhbCBsb25nIGZyYWdtZW50 cygpID0gMDsKICAgICAgICB2aXJ0dWFsIGxvbmcgZnJhZ21lbnRTaXplKCkgPSAwOwogICAgICAg IHZpcnR1YWwgc3RkOjpzdHJpbmcgdmVyc2lvbigpID0gMDsKICAgICAgICB2aXJ0dWFsIEFydHM6 OlN0ZXJlb1ZvbHVtZUNvbnRyb2wgb3V0Vm9sdW1lKCkgPSAwOwogICAgICAgIHZpcnR1YWwgQXJ0 czo6U2FtcGxlU3RvcmFnZSBzYW1wbGVTdG9yYWdlKCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p ZCBjaGVja05ld09iamVjdHMoKSA9IDA7Cn07CgpjbGFzcyBTb3VuZFNlcnZlclYyX3N0dWIgOiB2 aXJ0dWFsIHB1YmxpYyBTb3VuZFNlcnZlclYyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlNv dW5kU2VydmVyX3N0dWIsCiAgICAgICAgdmlydHVhbCBwdWJsaWMgQXJ0czo6UGxheU9iamVjdEZh Y3RvcnlWMl9zdHViIHsKcHJvdGVjdGVkOgogICAgICAgIFNvdW5kU2VydmVyVjJfc3R1YigpOwoK cHVibGljOgogICAgICAgIFNvdW5kU2VydmVyVjJfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25u ZWN0aW9uLCBsb25nIG9iamVjdElEKTsKCiAgICAgICAgbG9uZyBhdXRvU3VzcGVuZFNlY29uZHMo KTsKICAgICAgICB2b2lkIGF1dG9TdXNwZW5kU2Vjb25kcyhsb25nIG5ld1ZhbHVlKTsKICAgICAg ICBsb25nIGJ1ZmZlclNpemVNdWx0aXBsaWVyKCk7CiAgICAgICAgdm9pZCBidWZmZXJTaXplTXVs dGlwbGllcihsb25nIG5ld1ZhbHVlKTsKICAgICAgICBzdGQ6OnN0cmluZyBhdWRpb01ldGhvZCgp OwogICAgICAgIGxvbmcgc2FtcGxpbmdSYXRlKCk7CiAgICAgICAgbG9uZyBjaGFubmVscygpOwog ICAgICAgIGxvbmcgYml0cygpOwogICAgICAgIGJvb2wgZnVsbER1cGxleCgpOwogICAgICAgIHN0 ZDo6c3RyaW5nIGF1ZGlvRGV2aWNlKCk7CiAgICAgICAgbG9uZyBmcmFnbWVudHMoKTsKICAgICAg ICBsb25nIGZyYWdtZW50U2l6ZSgpOwogICAgICAgIHN0ZDo6c3RyaW5nIHZlcnNpb24oKTsKICAg ICAgICBBcnRzOjpTdGVyZW9Wb2x1bWVDb250cm9sIG91dFZvbHVtZSgpOwogICAgICAgIEFydHM6 OlNhbXBsZVN0b3JhZ2Ugc2FtcGxlU3RvcmFnZSgpOwogICAgICAgIHZvaWQgY2hlY2tOZXdPYmpl Y3RzKCk7Cn07CgpjbGFzcyBTb3VuZFNlcnZlclYyX3NrZWwgOiB2aXJ0dWFsIHB1YmxpYyBTb3Vu ZFNlcnZlclYyX2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlNvdW5kU2VydmVyX3NrZWwsCiAg ICAgICAgdmlydHVhbCBwdWJsaWMgQXJ0czo6UGxheU9iamVjdEZhY3RvcnlWMl9za2VsIHsKcHJv dGVjdGVkOgoKICAgICAgICBpbmxpbmUgdm9pZCBhdXRvU3VzcGVuZFNlY29uZHNfY2hhbmdlZChs b25nIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJhdXRvU3VzcGVu ZFNlY29uZHNfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9p ZCBidWZmZXJTaXplTXVsdGlwbGllcl9jaGFuZ2VkKGxvbmcgbmV3VmFsdWUpIHsKICAgICAgICAg ICAgICAgIF9lbWl0X2NoYW5nZWQoImJ1ZmZlclNpemVNdWx0aXBsaWVyX2NoYW5nZWQiLG5ld1Zh bHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgYXVkaW9NZXRob2RfY2hhbmdlZChj b25zdCBzdGQ6OnN0cmluZyYgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5n ZWQoImF1ZGlvTWV0aG9kX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaW5s aW5lIHZvaWQgc2FtcGxpbmdSYXRlX2NoYW5nZWQobG9uZyBuZXdWYWx1ZSkgewogICAgICAgICAg ICAgICAgX2VtaXRfY2hhbmdlZCgic2FtcGxpbmdSYXRlX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAg ICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgY2hhbm5lbHNfY2hhbmdlZChsb25nIG5ld1ZhbHVl KSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJjaGFubmVsc19jaGFuZ2VkIixuZXdW YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlubGluZSB2b2lkIGJpdHNfY2hhbmdlZChsb25nIG5l d1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJiaXRzX2NoYW5nZWQiLG5l d1ZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaW5saW5lIHZvaWQgZnVsbER1cGxleF9jaGFuZ2Vk KGJvb2wgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgIF9lbWl0X2NoYW5nZWQoImZ1bGxEdXBs ZXhfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBhdWRp b0RldmljZV9jaGFuZ2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdWYWx1ZSkgewogICAgICAgICAg ICAgICAgX2VtaXRfY2hhbmdlZCgiYXVkaW9EZXZpY2VfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAg ICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBmcmFnbWVudHNfY2hhbmdlZChsb25nIG5ld1ZhbHVl KSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJmcmFnbWVudHNfY2hhbmdlZCIsbmV3 VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBmcmFnbWVudFNpemVfY2hhbmdl ZChsb25nIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBfZW1pdF9jaGFuZ2VkKCJmcmFnbWVu dFNpemVfY2hhbmdlZCIsbmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCB2 ZXJzaW9uX2NoYW5nZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5ld1ZhbHVlKSB7CiAgICAgICAgICAg ICAgICBfZW1pdF9jaGFuZ2VkKCJ2ZXJzaW9uX2NoYW5nZWQiLG5ld1ZhbHVlKTsKICAgICAgICB9 CgpwdWJsaWM6CiAgICAgICAgU291bmRTZXJ2ZXJWMl9za2VsKCk7CgogICAgICAgIHN0YXRpYyBz dGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50 ZXJmYWNlTmFtZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpz dHJpbmcmIGludGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsK ICAgICAgICB2b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVy ICpyZXN1bHQsbG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZl cmVuY2UuaCIgMQojIDcxMiAic291bmRzZXJ2ZXIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNz IFNvdW5kU2VydmVyVjIgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBz dGF0aWMgQXJ0czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgU291bmRTZXJ2ZXJW Ml9iYXNlICpfY2FjaGU7CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyVjJfYmFzZSAqX21ldGhv ZF9jYWxsKCkgewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAg ICAgICAgICBpZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9 KFNvdW5kU2VydmVyVjJfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChTb3VuZFNlcnZlclYyX2Jh c2U6Ol9JSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0 ZWQ6CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyVjIoU291bmRTZXJ2ZXJWMl9iYXNlKiBiKSA6 IEFydHM6Ok9iamVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYg U291bmRTZXJ2ZXJWMl9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgU291bmRTZXJ2 ZXJWMigpIDogQXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5s aW5lIFNvdW5kU2VydmVyVjIoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAg ICAgIEFydHM6Ok9iamVjdChTb3VuZFNlcnZlclYyX2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkp LCBfY2FjaGUoMCkge30KICAgICAgICBpbmxpbmUgU291bmRTZXJ2ZXJWMihjb25zdCBBcnRzOjpS ZWZlcmVuY2UgJnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/ KFNvdW5kU2VydmVyVjJfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihTb3VuZFNlcnZl clYyX2Jhc2U6Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDAp IHt9CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyVjIoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3Qm IGMpIDogQXJ0czo6T2JqZWN0KFNvdW5kU2VydmVyVjJfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChj Lm9iamVjdCgpKSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBTb3VuZFNlcnZlclYyKGNv bnN0IFNvdW5kU2VydmVyVjImIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwg X2NhY2hlKHRhcmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFNvdW5kU2VydmVyVjIoQXJ0 czo6T2JqZWN0OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAg ICAgaW5saW5lIHN0YXRpYyBTb3VuZFNlcnZlclYyIG51bGwoKSB7cmV0dXJuIFNvdW5kU2VydmVy VjIoKFNvdW5kU2VydmVyVjJfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgU291bmRT ZXJ2ZXJWMiBfZnJvbV9iYXNlKFNvdW5kU2VydmVyVjJfYmFzZSogYikge3JldHVybiBTb3VuZFNl cnZlclYyKGIpO30KICAgICAgICBpbmxpbmUgU291bmRTZXJ2ZXJWMiYgb3BlcmF0b3I9KGNvbnN0 IFNvdW5kU2VydmVyVjImIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRh cmdldC5fcG9vbCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwog ICAgICAgICAgICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2Fj aGUgPSB0YXJnZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAg ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3Ig QXJ0czo6U291bmRTZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBBcnRzOjpTb3VuZFNlcnZlcigqX3Bv b2wpOyB9CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIEFydHM6OlNpbXBsZVNvdW5kU2VydmVyKCkg Y29uc3QgeyByZXR1cm4gQXJ0czo6U2ltcGxlU291bmRTZXJ2ZXIoKl9wb29sKTsgfQogICAgICAg IGlubGluZSBvcGVyYXRvciBBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeSgpIGNvbnN0IHsgcmV0dXJu IEFydHM6OlBsYXlPYmplY3RGYWN0b3J5KCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgb3BlcmF0 b3IgQXJ0czo6UGxheU9iamVjdEZhY3RvcnlWMigpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlBsYXlP YmplY3RGYWN0b3J5VjIoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBTb3VuZFNlcnZlclYyX2Jh c2UqIF9iYXNlKCkge3JldHVybiBfY2FjaGU/X2NhY2hlOl9tZXRob2RfY2FsbCgpO30KCiAgICAg ICAgaW5saW5lIEFydHM6OlJlYWx0aW1lU3RhdHVzIHJlYWx0aW1lU3RhdHVzKCk7CiAgICAgICAg aW5saW5lIGxvbmcgc2Vjb25kc1VudGlsU3VzcGVuZCgpOwogICAgICAgIGlubGluZSBib29sIHN1 c3BlbmQoKTsKICAgICAgICBpbmxpbmUgYm9vbCB0ZXJtaW5hdGUoKTsKICAgICAgICBpbmxpbmUg QXJ0czo6U3RlcmVvRWZmZWN0U3RhY2sgb3V0c3RhY2soKTsKICAgICAgICBpbmxpbmUgZmxvYXQg bWluU3RyZWFtQnVmZmVyVGltZSgpOwogICAgICAgIGlubGluZSBmbG9hdCBzZXJ2ZXJCdWZmZXJU aW1lKCk7CiAgICAgICAgaW5saW5lIGxvbmcgcGxheShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5h bWUpOwogICAgICAgIGlubGluZSB2b2lkIGF0dGFjaChBcnRzOjpCeXRlU291bmRQcm9kdWNlciBw cm9kdWNlcik7CiAgICAgICAgaW5saW5lIHZvaWQgZGV0YWNoKEFydHM6OkJ5dGVTb3VuZFByb2R1 Y2VyIHByb2R1Y2VyKTsKICAgICAgICBpbmxpbmUgQXJ0czo6T2JqZWN0IGNyZWF0ZU9iamVjdChj b25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgICAgICAgaW5saW5lIEFydHM6OlBsYXlPYmplY3Qg Y3JlYXRlUGxheU9iamVjdChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpOwogICAgICAgIGlu bGluZSBBcnRzOjpQbGF5T2JqZWN0IGNyZWF0ZVBsYXlPYmplY3RGb3JVUkwoY29uc3Qgc3RkOjpz dHJpbmcmIHVybCwgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWV0eXBlLCBib29sIGNyZWF0ZUJVUyk7 CiAgICAgICAgaW5saW5lIEFydHM6OlBsYXlPYmplY3QgY3JlYXRlUGxheU9iamVjdEZvclN0cmVh bShBcnRzOjpJbnB1dFN0cmVhbSBpbnN0cmVhbSwgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWV0eXBl LCBib29sIGNyZWF0ZUJVUyk7CiAgICAgICAgaW5saW5lIGxvbmcgYXV0b1N1c3BlbmRTZWNvbmRz KCk7CiAgICAgICAgaW5saW5lIHZvaWQgYXV0b1N1c3BlbmRTZWNvbmRzKGxvbmcgX25ld1ZhbHVl KTsKICAgICAgICBpbmxpbmUgbG9uZyBidWZmZXJTaXplTXVsdGlwbGllcigpOwogICAgICAgIGlu bGluZSB2b2lkIGJ1ZmZlclNpemVNdWx0aXBsaWVyKGxvbmcgX25ld1ZhbHVlKTsKICAgICAgICBp bmxpbmUgc3RkOjpzdHJpbmcgYXVkaW9NZXRob2QoKTsKICAgICAgICBpbmxpbmUgbG9uZyBzYW1w bGluZ1JhdGUoKTsKICAgICAgICBpbmxpbmUgbG9uZyBjaGFubmVscygpOwogICAgICAgIGlubGlu ZSBsb25nIGJpdHMoKTsKICAgICAgICBpbmxpbmUgYm9vbCBmdWxsRHVwbGV4KCk7CiAgICAgICAg aW5saW5lIHN0ZDo6c3RyaW5nIGF1ZGlvRGV2aWNlKCk7CiAgICAgICAgaW5saW5lIGxvbmcgZnJh Z21lbnRzKCk7CiAgICAgICAgaW5saW5lIGxvbmcgZnJhZ21lbnRTaXplKCk7CiAgICAgICAgaW5s aW5lIHN0ZDo6c3RyaW5nIHZlcnNpb24oKTsKICAgICAgICBpbmxpbmUgQXJ0czo6U3RlcmVvVm9s dW1lQ29udHJvbCBvdXRWb2x1bWUoKTsKICAgICAgICBpbmxpbmUgQXJ0czo6U2FtcGxlU3RvcmFn ZSBzYW1wbGVTdG9yYWdlKCk7CiAgICAgICAgaW5saW5lIHZvaWQgY2hlY2tOZXdPYmplY3RzKCk7 Cn07CgpjbGFzcyBXYXZQbGF5T2JqZWN0X2Jhc2UgOiB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpQbGF5 T2JqZWN0X2Jhc2UsCiAgICAgICAgdmlydHVhbCBwdWJsaWMgQXJ0czo6U3ludGhNb2R1bGVfYmFz ZSB7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfSUlEOwoKICAgICAgICBz dGF0aWMgV2F2UGxheU9iamVjdF9iYXNlICpfY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWJD bGFzcyA9ICJBcnRzOjpXYXZQbGF5T2JqZWN0Iik7CiAgICAgICAgc3RhdGljIFdhdlBsYXlPYmpl Y3RfYmFzZSAqX2Zyb21TdHJpbmcoc3RkOjpzdHJpbmcgb2JqZWN0cmVmKTsKICAgICAgICBzdGF0 aWMgV2F2UGxheU9iamVjdF9iYXNlICpfZnJvbVJlZmVyZW5jZShBcnRzOjpPYmplY3RSZWZlcmVu Y2UgcmVmLCBib29sIG5lZWRjb3B5KTsKCiAgICAgICAgc3RhdGljIFdhdlBsYXlPYmplY3RfYmFz ZSAqX2Zyb21EeW5hbWljQ2FzdChjb25zdCBBcnRzOjpPYmplY3QmIG9iamVjdCk7CiAgICAgICAg aW5saW5lIFdhdlBsYXlPYmplY3RfYmFzZSAqX2NvcHkoKSB7CiAgICAgICAgICAgICAgICAoKHZv aWQpIDApOwogICAgICAgICAgICAgICAgX3JlZkNudCsrOwogICAgICAgICAgICAgICAgcmV0dXJu IHRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n PiBfZGVmYXVsdFBvcnRzSW4oKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0 ZDo6c3RyaW5nPiBfZGVmYXVsdFBvcnRzT3V0KCkgY29uc3Q7CgogICAgICAgIHZvaWQgKl9jYXN0 KHVuc2lnbmVkIGxvbmcgaWlkKTsKCn07CgpjbGFzcyBXYXZQbGF5T2JqZWN0X3N0dWIgOiB2aXJ0 dWFsIHB1YmxpYyBXYXZQbGF5T2JqZWN0X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlBsYXlP YmplY3Rfc3R1YiwKICAgICAgICB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9zdHVi IHsKcHJvdGVjdGVkOgogICAgICAgIFdhdlBsYXlPYmplY3Rfc3R1YigpOwoKcHVibGljOgogICAg ICAgIFdhdlBsYXlPYmplY3Rfc3R1YihBcnRzOjpDb25uZWN0aW9uICpjb25uZWN0aW9uLCBsb25n IG9iamVjdElEKTsKCn07CgpjbGFzcyBXYXZQbGF5T2JqZWN0X3NrZWwgOiB2aXJ0dWFsIHB1Ymxp YyBXYXZQbGF5T2JqZWN0X2Jhc2UsIHZpcnR1YWwgcHVibGljIEFydHM6OlBsYXlPYmplY3Rfc2tl bCwKICAgICAgICB2aXJ0dWFsIHB1YmxpYyBBcnRzOjpTeW50aE1vZHVsZV9za2VsIHsKcHJvdGVj dGVkOgoKICAgICAgICBmbG9hdCAqbGVmdDsKICAgICAgICBmbG9hdCAqcmlnaHQ7CgpwdWJsaWM6 CiAgICAgICAgV2F2UGxheU9iamVjdF9za2VsKCk7CgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmlu ZyBfaW50ZXJmYWNlTmFtZVNrZWwoKTsKICAgICAgICBzdGQ6OnN0cmluZyBfaW50ZXJmYWNlTmFt ZSgpOwogICAgICAgIGJvb2wgX2lzQ29tcGF0aWJsZVdpdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGlu dGVyZmFjZW5hbWUpOwogICAgICAgIHZvaWQgX2J1aWxkTWV0aG9kVGFibGUoKTsKICAgICAgICB2 b2lkIGRpc3BhdGNoKEFydHM6OkJ1ZmZlciAqcmVxdWVzdCwgQXJ0czo6QnVmZmVyICpyZXN1bHQs bG9uZyBtZXRob2RJRCk7Cn07Cgp9OwojIDEgIi4uLy4uL2FydHMvbWNvcC9yZWZlcmVuY2UuaCIg MQojIDg0MSAic291bmRzZXJ2ZXIuaCIgMgpuYW1lc3BhY2UgQXJ0cyB7CmNsYXNzIFdhdlBsYXlP YmplY3QgOiBwdWJsaWMgQXJ0czo6T2JqZWN0IHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgQXJ0 czo6T2JqZWN0X2Jhc2UqIF9DcmVhdG9yKCk7CiAgICAgICAgV2F2UGxheU9iamVjdF9iYXNlICpf Y2FjaGU7CiAgICAgICAgaW5saW5lIFdhdlBsYXlPYmplY3RfYmFzZSAqX21ldGhvZF9jYWxsKCkg ewogICAgICAgICAgICAgICAgX3Bvb2wtPmNoZWNrY3JlYXRlKCk7CiAgICAgICAgICAgICAgICBp ZihfcG9vbC0+YmFzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGU9KFdhdlBsYXlP YmplY3RfYmFzZSAqKV9wb29sLT5iYXNlLT5fY2FzdChXYXZQbGF5T2JqZWN0X2Jhc2U6Ol9JSUQp OwogICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQpIDApOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZTsKICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICAg ICAgaW5saW5lIFdhdlBsYXlPYmplY3QoV2F2UGxheU9iamVjdF9iYXNlKiBiKSA6IEFydHM6Ok9i amVjdChiKSwgX2NhY2hlKDApIHt9CgoKcHVibGljOgogICAgICAgIHR5cGVkZWYgV2F2UGxheU9i amVjdF9iYXNlIF9iYXNlX2NsYXNzOwoKICAgICAgICBpbmxpbmUgV2F2UGxheU9iamVjdCgpIDog QXJ0czo6T2JqZWN0KF9DcmVhdG9yKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5lIFdhdlBs YXlPYmplY3QoY29uc3QgQXJ0czo6U3ViQ2xhc3MmIHMpIDoKICAgICAgICAgICAgICAgIEFydHM6 Ok9iamVjdChXYXZQbGF5T2JqZWN0X2Jhc2U6Ol9jcmVhdGUocy5zdHJpbmcoKSkpLCBfY2FjaGUo MCkge30KICAgICAgICBpbmxpbmUgV2F2UGxheU9iamVjdChjb25zdCBBcnRzOjpSZWZlcmVuY2Ug JnIpIDoKICAgICAgICAgICAgICAgIEFydHM6Ok9iamVjdChyLmlzU3RyaW5nKCk/KFdhdlBsYXlP YmplY3RfYmFzZTo6X2Zyb21TdHJpbmcoci5zdHJpbmcoKSkpOihXYXZQbGF5T2JqZWN0X2Jhc2U6 Ol9mcm9tUmVmZXJlbmNlKHIucmVmZXJlbmNlKCksdHJ1ZSkpKSwgX2NhY2hlKDApIHt9CiAgICAg ICAgaW5saW5lIFdhdlBsYXlPYmplY3QoY29uc3QgQXJ0czo6RHluYW1pY0Nhc3QmIGMpIDogQXJ0 czo6T2JqZWN0KFdhdlBsYXlPYmplY3RfYmFzZTo6X2Zyb21EeW5hbWljQ2FzdChjLm9iamVjdCgp KSksIF9jYWNoZSgwKSB7fQogICAgICAgIGlubGluZSBXYXZQbGF5T2JqZWN0KGNvbnN0IFdhdlBs YXlPYmplY3QmIHRhcmdldCkgOiBBcnRzOjpPYmplY3QodGFyZ2V0Ll9wb29sKSwgX2NhY2hlKHRh cmdldC5fY2FjaGUpIHt9CiAgICAgICAgaW5saW5lIFdhdlBsYXlPYmplY3QoQXJ0czo6T2JqZWN0 OjpQb29sJiBwKSA6IEFydHM6Ok9iamVjdChwKSwgX2NhY2hlKDApIHt9CiAgICAgICAgaW5saW5l IHN0YXRpYyBXYXZQbGF5T2JqZWN0IG51bGwoKSB7cmV0dXJuIFdhdlBsYXlPYmplY3QoKFdhdlBs YXlPYmplY3RfYmFzZSopMCk7fQogICAgICAgIGlubGluZSBzdGF0aWMgV2F2UGxheU9iamVjdCBf ZnJvbV9iYXNlKFdhdlBsYXlPYmplY3RfYmFzZSogYikge3JldHVybiBXYXZQbGF5T2JqZWN0KGIp O30KICAgICAgICBpbmxpbmUgV2F2UGxheU9iamVjdCYgb3BlcmF0b3I9KGNvbnN0IFdhdlBsYXlP YmplY3QmIHRhcmdldCkgewogICAgICAgICAgICAgICAgaWYgKF9wb29sID09IHRhcmdldC5fcG9v bCkgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgX3Bvb2wtPkRlYygpOwogICAgICAgICAg ICAgICAgX3Bvb2wgPSB0YXJnZXQuX3Bvb2w7CiAgICAgICAgICAgICAgICBfY2FjaGUgPSB0YXJn ZXQuX2NhY2hlOwogICAgICAgICAgICAgICAgX3Bvb2wtPkluYygpOwogICAgICAgICAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICBpbmxpbmUgb3BlcmF0b3IgQXJ0czo6UGxh eU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlBsYXlPYmplY3QoKl9wb29sKTsgfQogICAg ICAgIGlubGluZSBvcGVyYXRvciBBcnRzOjpQbGF5T2JqZWN0X3ByaXZhdGUoKSBjb25zdCB7IHJl dHVybiBBcnRzOjpQbGF5T2JqZWN0X3ByaXZhdGUoKl9wb29sKTsgfQogICAgICAgIGlubGluZSBv cGVyYXRvciBBcnRzOjpTeW50aE1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIEFydHM6OlN5bnRoTW9k dWxlKCpfcG9vbCk7IH0KICAgICAgICBpbmxpbmUgV2F2UGxheU9iamVjdF9iYXNlKiBfYmFzZSgp IHtyZXR1cm4gX2NhY2hlP19jYWNoZTpfbWV0aG9kX2NhbGwoKTt9CgogICAgICAgIGlubGluZSBz dGQ6OnN0cmluZyBkZXNjcmlwdGlvbigpOwogICAgICAgIGlubGluZSBBcnRzOjpwb1RpbWUgY3Vy cmVudFRpbWUoKTsKICAgICAgICBpbmxpbmUgQXJ0czo6cG9UaW1lIG92ZXJhbGxUaW1lKCk7CiAg ICAgICAgaW5saW5lIEFydHM6OnBvQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllcygpOwogICAgICAg IGlubGluZSBzdGQ6OnN0cmluZyBtZWRpYU5hbWUoKTsKICAgICAgICBpbmxpbmUgQXJ0czo6cG9T dGF0ZSBzdGF0ZSgpOwogICAgICAgIGlubGluZSB2b2lkIHBsYXkoKTsKICAgICAgICBpbmxpbmUg dm9pZCBzZWVrKGNvbnN0IEFydHM6OnBvVGltZSYgbmV3VGltZSk7CiAgICAgICAgaW5saW5lIHZv aWQgcGF1c2UoKTsKICAgICAgICBpbmxpbmUgdm9pZCBoYWx0KCk7CiAgICAgICAgaW5saW5lIGJv b2wgbG9hZE1lZGlhKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7CiAgICAgICAgaW5saW5l IEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgYXV0b1N1c3BlbmQoKTsKICAgICAgICBpbmxpbmUgdm9p ZCBzdGFydCgpOwogICAgICAgIGlubGluZSB2b2lkIHN0b3AoKTsKICAgICAgICBpbmxpbmUgdm9p ZCBzdHJlYW1Jbml0KCk7CiAgICAgICAgaW5saW5lIHZvaWQgc3RyZWFtU3RhcnQoKTsKICAgICAg ICBpbmxpbmUgdm9pZCBzdHJlYW1FbmQoKTsKfTsKCgoKaW5saW5lIHN0ZDo6c3RyaW5nIEFydHM6 OlNhbXBsZVN0b3JhZ2VFbnRyeTo6bmFtZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRp Y19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlKj4oX2NhY2hlKS0+bmFtZSgpOnN0 YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlKj4oX21ldGhvZF9jYWxsKCkp LT5uYW1lKCk7Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnk6 OmZpbGVuYW1lKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2Ft cGxlU3RvcmFnZUVudHJ5X2Jhc2UqPihfY2FjaGUpLT5maWxlbmFtZSgpOnN0YXRpY19jYXN0PEFy dHM6OlNhbXBsZVN0b3JhZ2VFbnRyeV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5maWxlbmFtZSgp Owp9CgppbmxpbmUgYm9vbCBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnk6OmNvbXBsZXRlZCgpCnsK ICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRy eV9iYXNlKj4oX2NhY2hlKS0+Y29tcGxldGVkKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U2FtcGxlU3Rv cmFnZUVudHJ5X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNvbXBsZXRlZCgpOwp9CgppbmxpbmUg dm9pZCBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnk6OndyaXRlKGNvbnN0IHN0ZDo6dmVjdG9yPEFy dHM6Om1jb3BieXRlPiYgZGF0YSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6 U2FtcGxlU3RvcmFnZUVudHJ5X2Jhc2UqPihfY2FjaGUpLT53cml0ZShkYXRhKTpzdGF0aWNfY2Fz dDxBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+d3JpdGUo ZGF0YSk7Cn0KCmlubGluZSB2b2lkIEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeTo6ZmluaXNoKCkK ewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2FtcGxlU3RvcmFnZUVudHJ5X2Jh c2UqPihfY2FjaGUpLT5maW5pc2goKTpzdGF0aWNfY2FzdDxBcnRzOjpTYW1wbGVTdG9yYWdlRW50 cnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZmluaXNoKCk7Cn0KCmlubGluZSBBcnRzOjpTYW1w bGVTdG9yYWdlOjpTYW1wbGVTdG9yYWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXJlY3RvcnksIGJv b2wgY2xlYXJPbkluaXQpCiAgICAgICAgICAgICAgICA6IEFydHM6Ok9iamVjdChTYW1wbGVTdG9y YWdlX2Jhc2U6Ol9jcmVhdGUoKSkKewogICAgICAgIHN0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0 b3JhZ2VfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y29uc3RydWN0b3IoZGlyZWN0b3J5LCBjbGVh ck9uSW5pdCk7Cn0KCmlubGluZSBBcnRzOjpTYW1wbGVTdG9yYWdlRW50cnkgQXJ0czo6U2FtcGxl U3RvcmFnZTo6Y3JlYXRlRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICBy ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VfYmFzZSo+KF9jYWNo ZSktPmNyZWF0ZUVudHJ5KG5hbWUpOnN0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VfYmFz ZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlRW50cnkobmFtZSk7Cn0KCmlubGluZSB2b2lkIEFy dHM6OlNhbXBsZVN0b3JhZ2U6OmFkZEVudHJ5KEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBlbnRy eSkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2FtcGxlU3RvcmFnZV9iYXNl Kj4oX2NhY2hlKS0+YWRkRW50cnkoZW50cnkpOnN0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3Jh Z2VfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+YWRkRW50cnkoZW50cnkpOwp9CgppbmxpbmUgdm9p ZCBBcnRzOjpTYW1wbGVTdG9yYWdlOjpyZW1vdmVFbnRyeShBcnRzOjpTYW1wbGVTdG9yYWdlRW50 cnkgZW50cnkpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3Jh Z2VfYmFzZSo+KF9jYWNoZSktPnJlbW92ZUVudHJ5KGVudHJ5KTpzdGF0aWNfY2FzdDxBcnRzOjpT YW1wbGVTdG9yYWdlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnJlbW92ZUVudHJ5KGVudHJ5KTsK fQoKaW5saW5lIEFydHM6OlNhbXBsZVN0b3JhZ2VFbnRyeSBBcnRzOjpTYW1wbGVTdG9yYWdlOjpm aW5kRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hl P3N0YXRpY19jYXN0PEFydHM6OlNhbXBsZVN0b3JhZ2VfYmFzZSo+KF9jYWNoZSktPmZpbmRFbnRy eShuYW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpTYW1wbGVTdG9yYWdlX2Jhc2UqPihfbWV0aG9kX2Nh bGwoKSktPmZpbmRFbnRyeShuYW1lKTsKfQoKaW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUg QXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OmF1dG9TdXNwZW5kKCkKewogICAgICAgIHJldHVybiBf Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9jYWNoZSktPmF1dG9T dXNwZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRob2RfY2Fs bCgpKS0+YXV0b1N1c3BlbmQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6Qnl0ZVNvdW5kUHJvZHVj ZXI6OnN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1 bGVfYmFzZSo+KF9jYWNoZSktPnN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RhcnQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6Qnl0 ZVNvdW5kUHJvZHVjZXI6OnN0b3AoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRz OjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RvcCgpOnN0YXRpY19jYXN0PEFydHM6OlN5 bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0b3AoKTsKfQoKaW5saW5lIHZvaWQg QXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OnN0cmVhbUluaXQoKQp7CiAgICAgICAgIF9jYWNoZT9z dGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RyZWFtSW5pdCgp OnN0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0 cmVhbUluaXQoKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OnN0cmVh bVN0YXJ0KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVf YmFzZSo+KF9jYWNoZSktPnN0cmVhbVN0YXJ0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1 bGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c3RyZWFtU3RhcnQoKTsKfQoKaW5saW5lIHZvaWQg QXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OnN0cmVhbUVuZCgpCnsKICAgICAgICAgX2NhY2hlP3N0 YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1FbmQoKTpz dGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zdHJl YW1FbmQoKTsKfQoKaW5saW5lIGxvbmcgQXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OnNhbXBsaW5n UmF0ZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OkJ5dGVTb3Vu ZFByb2R1Y2VyX2Jhc2UqPihfY2FjaGUpLT5zYW1wbGluZ1JhdGUoKTpzdGF0aWNfY2FzdDxBcnRz OjpCeXRlU291bmRQcm9kdWNlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zYW1wbGluZ1JhdGUo KTsKfQoKaW5saW5lIGxvbmcgQXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OmNoYW5uZWxzKCkKewog ICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXJf YmFzZSo+KF9jYWNoZSktPmNoYW5uZWxzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6Qnl0ZVNvdW5kUHJv ZHVjZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y2hhbm5lbHMoKTsKfQoKaW5saW5lIGxvbmcg QXJ0czo6Qnl0ZVNvdW5kUHJvZHVjZXI6OmJpdHMoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9z dGF0aWNfY2FzdDxBcnRzOjpCeXRlU291bmRQcm9kdWNlcl9iYXNlKj4oX2NhY2hlKS0+Yml0cygp OnN0YXRpY19jYXN0PEFydHM6OkJ5dGVTb3VuZFByb2R1Y2VyX2Jhc2UqPihfbWV0aG9kX2NhbGwo KSktPmJpdHMoKTsKfQoKaW5saW5lIEFydHM6OlBsYXlPYmplY3QgQXJ0czo6U2ltcGxlU291bmRT ZXJ2ZXI6OmNyZWF0ZVBsYXlPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKQp7CiAg ICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeV9i YXNlKj4oX2NhY2hlKS0+Y3JlYXRlUGxheU9iamVjdChmaWxlbmFtZSk6c3RhdGljX2Nhc3Q8QXJ0 czo6UGxheU9iamVjdEZhY3RvcnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlUGxheU9i amVjdChmaWxlbmFtZSk7Cn0KCmlubGluZSBBcnRzOjpTdGVyZW9FZmZlY3RTdGFjayBBcnRzOjpT aW1wbGVTb3VuZFNlcnZlcjo6b3V0c3RhY2soKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0 aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+b3V0c3RhY2so KTpzdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxs KCkpLT5vdXRzdGFjaygpOwp9CgppbmxpbmUgZmxvYXQgQXJ0czo6U2ltcGxlU291bmRTZXJ2ZXI6 Om1pblN0cmVhbUJ1ZmZlclRpbWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2Fz dDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+bWluU3RyZWFtQnVmZmVy VGltZSgpOnN0YXRpY19jYXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9k X2NhbGwoKSktPm1pblN0cmVhbUJ1ZmZlclRpbWUoKTsKfQoKaW5saW5lIGZsb2F0IEFydHM6OlNp bXBsZVNvdW5kU2VydmVyOjpzZXJ2ZXJCdWZmZXJUaW1lKCkKewogICAgICAgIHJldHVybiBfY2Fj aGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPnNl cnZlckJ1ZmZlclRpbWUoKTpzdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5zZXJ2ZXJCdWZmZXJUaW1lKCk7Cn0KCmlubGluZSBsb25nIEFy dHM6OlNpbXBsZVNvdW5kU2VydmVyOjpwbGF5KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkK ewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2 ZXJfYmFzZSo+KF9jYWNoZSktPnBsYXkoZmlsZW5hbWUpOnN0YXRpY19jYXN0PEFydHM6OlNpbXBs ZVNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnBsYXkoZmlsZW5hbWUpOwp9Cgpp bmxpbmUgdm9pZCBBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcjo6YXR0YWNoKEFydHM6OkJ5dGVTb3Vu ZFByb2R1Y2VyIHByb2R1Y2VyKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpT aW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+YXR0YWNoKHByb2R1Y2VyKTpzdGF0aWNf Y2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdHRh Y2gocHJvZHVjZXIpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcjo6ZGV0 YWNoKEFydHM6OkJ5dGVTb3VuZFByb2R1Y2VyIHByb2R1Y2VyKQp7CiAgICAgICAgIF9jYWNoZT9z dGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+ZGV0YWNo KHByb2R1Y2VyKTpzdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX21l dGhvZF9jYWxsKCkpLT5kZXRhY2gocHJvZHVjZXIpOwp9CgppbmxpbmUgQXJ0czo6T2JqZWN0IEFy dHM6OlNpbXBsZVNvdW5kU2VydmVyOjpjcmVhdGVPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIG5h bWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNpbXBsZVNvdW5k U2VydmVyX2Jhc2UqPihfY2FjaGUpLT5jcmVhdGVPYmplY3QobmFtZSk6c3RhdGljX2Nhc3Q8QXJ0 czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlT2JqZWN0 KG5hbWUpOwp9CgppbmxpbmUgQXJ0czo6U3RlcmVvRWZmZWN0U3RhY2sgQXJ0czo6U291bmRTZXJ2 ZXI6Om91dHN0YWNrKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6 U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPm91dHN0YWNrKCk6c3RhdGljX2Nhc3Q8 QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+b3V0c3RhY2so KTsKfQoKaW5saW5lIGZsb2F0IEFydHM6OlNvdW5kU2VydmVyOjptaW5TdHJlYW1CdWZmZXJUaW1l KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRT ZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPm1pblN0cmVhbUJ1ZmZlclRpbWUoKTpzdGF0aWNfY2FzdDxB cnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5taW5TdHJlYW1C dWZmZXJUaW1lKCk7Cn0KCmlubGluZSBmbG9hdCBBcnRzOjpTb3VuZFNlcnZlcjo6c2VydmVyQnVm ZmVyVGltZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNpbXBs ZVNvdW5kU2VydmVyX2Jhc2UqPihfY2FjaGUpLT5zZXJ2ZXJCdWZmZXJUaW1lKCk6c3RhdGljX2Nh c3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2VydmVy QnVmZmVyVGltZSgpOwp9CgppbmxpbmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlcjo6cGxheShjb25z dCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19j YXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfY2FjaGUpLT5wbGF5KGZpbGVuYW1l KTpzdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxs KCkpLT5wbGF5KGZpbGVuYW1lKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U291bmRTZXJ2ZXI6OmF0 dGFjaChBcnRzOjpCeXRlU291bmRQcm9kdWNlciBwcm9kdWNlcikKewogICAgICAgICBfY2FjaGU/ c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPmF0dGFj aChwcm9kdWNlcik6c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9t ZXRob2RfY2FsbCgpKS0+YXR0YWNoKHByb2R1Y2VyKTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6U291 bmRTZXJ2ZXI6OmRldGFjaChBcnRzOjpCeXRlU291bmRQcm9kdWNlciBwcm9kdWNlcikKewogICAg ICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9j YWNoZSktPmRldGFjaChwcm9kdWNlcik6c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2 ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+ZGV0YWNoKHByb2R1Y2VyKTsKfQoKaW5saW5lIEFy dHM6Ok9iamVjdCBBcnRzOjpTb3VuZFNlcnZlcjo6Y3JlYXRlT2JqZWN0KGNvbnN0IHN0ZDo6c3Ry aW5nJiBuYW1lKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTaW1w bGVTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+Y3JlYXRlT2JqZWN0KG5hbWUpOnN0YXRpY19j YXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNyZWF0 ZU9iamVjdChuYW1lKTsKfQoKaW5saW5lIEFydHM6OlBsYXlPYmplY3QgQXJ0czo6U291bmRTZXJ2 ZXI6OmNyZWF0ZVBsYXlPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKQp7CiAgICAg ICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0RmFjdG9yeV9iYXNl Kj4oX2NhY2hlKS0+Y3JlYXRlUGxheU9iamVjdChmaWxlbmFtZSk6c3RhdGljX2Nhc3Q8QXJ0czo6 UGxheU9iamVjdEZhY3RvcnlfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlUGxheU9iamVj dChmaWxlbmFtZSk7Cn0KCmlubGluZSBBcnRzOjpSZWFsdGltZVN0YXR1cyBBcnRzOjpTb3VuZFNl cnZlcjo6cmVhbHRpbWVTdGF0dXMoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2Fz dDxBcnRzOjpTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+cmVhbHRpbWVTdGF0dXMoKTpzdGF0 aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5yZWFsdGlt ZVN0YXR1cygpOwp9CgppbmxpbmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlcjo6c2Vjb25kc1VudGls U3VzcGVuZCgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNvdW5k U2VydmVyX2Jhc2UqPihfY2FjaGUpLT5zZWNvbmRzVW50aWxTdXNwZW5kKCk6c3RhdGljX2Nhc3Q8 QXJ0czo6U291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2Vjb25kc1VudGlsU3Vz cGVuZCgpOwp9CgppbmxpbmUgYm9vbCBBcnRzOjpTb3VuZFNlcnZlcjo6c3VzcGVuZCgpCnsKICAg ICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyX2Jhc2UqPihf Y2FjaGUpLT5zdXNwZW5kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJfYmFzZSo+KF9t ZXRob2RfY2FsbCgpKS0+c3VzcGVuZCgpOwp9CgppbmxpbmUgYm9vbCBBcnRzOjpTb3VuZFNlcnZl cjo6dGVybWluYXRlKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6 U291bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPnRlcm1pbmF0ZSgpOnN0YXRpY19jYXN0PEFydHM6 OlNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnRlcm1pbmF0ZSgpOwp9Cgppbmxp bmUgQXJ0czo6UmVhbHRpbWVTdGF0dXMgQXJ0czo6U291bmRTZXJ2ZXJWMjo6cmVhbHRpbWVTdGF0 dXMoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZl cl9iYXNlKj4oX2NhY2hlKS0+cmVhbHRpbWVTdGF0dXMoKTpzdGF0aWNfY2FzdDxBcnRzOjpTb3Vu ZFNlcnZlcl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5yZWFsdGltZVN0YXR1cygpOwp9Cgppbmxp bmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlclYyOjpzZWNvbmRzVW50aWxTdXNwZW5kKCkKewogICAg ICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJfYmFzZSo+KF9j YWNoZSktPnNlY29uZHNVbnRpbFN1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZl cl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zZWNvbmRzVW50aWxTdXNwZW5kKCk7Cn0KCmlubGlu ZSBib29sIEFydHM6OlNvdW5kU2VydmVyVjI6OnN1c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9j YWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlcl9iYXNlKj4oX2NhY2hlKS0+c3VzcGVu ZCgpOnN0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSkt PnN1c3BlbmQoKTsKfQoKaW5saW5lIGJvb2wgQXJ0czo6U291bmRTZXJ2ZXJWMjo6dGVybWluYXRl KCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJf YmFzZSo+KF9jYWNoZSktPnRlcm1pbmF0ZSgpOnN0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVy X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnRlcm1pbmF0ZSgpOwp9CgppbmxpbmUgQXJ0czo6U3Rl cmVvRWZmZWN0U3RhY2sgQXJ0czo6U291bmRTZXJ2ZXJWMjo6b3V0c3RhY2soKQp7CiAgICAgICAg cmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9iYXNlKj4o X2NhY2hlKS0+b3V0c3RhY2soKTpzdGF0aWNfY2FzdDxBcnRzOjpTaW1wbGVTb3VuZFNlcnZlcl9i YXNlKj4oX21ldGhvZF9jYWxsKCkpLT5vdXRzdGFjaygpOwp9CgppbmxpbmUgZmxvYXQgQXJ0czo6 U291bmRTZXJ2ZXJWMjo6bWluU3RyZWFtQnVmZmVyVGltZSgpCnsKICAgICAgICByZXR1cm4gX2Nh Y2hlP3N0YXRpY19jYXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfY2FjaGUpLT5t aW5TdHJlYW1CdWZmZXJUaW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJf YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+bWluU3RyZWFtQnVmZmVyVGltZSgpOwp9CgppbmxpbmUg ZmxvYXQgQXJ0czo6U291bmRTZXJ2ZXJWMjo6c2VydmVyQnVmZmVyVGltZSgpCnsKICAgICAgICBy ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihf Y2FjaGUpLT5zZXJ2ZXJCdWZmZXJUaW1lKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRT ZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+c2VydmVyQnVmZmVyVGltZSgpOwp9Cgppbmxp bmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlclYyOjpwbGF5KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxl bmFtZSkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291 bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPnBsYXkoZmlsZW5hbWUpOnN0YXRpY19jYXN0PEFydHM6 OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnBsYXkoZmlsZW5hbWUp Owp9CgppbmxpbmUgdm9pZCBBcnRzOjpTb3VuZFNlcnZlclYyOjphdHRhY2goQXJ0czo6Qnl0ZVNv dW5kUHJvZHVjZXIgcHJvZHVjZXIpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6 OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfY2FjaGUpLT5hdHRhY2gocHJvZHVjZXIpOnN0YXRp Y19jYXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF0 dGFjaChwcm9kdWNlcik7Cn0KCmlubGluZSB2b2lkIEFydHM6OlNvdW5kU2VydmVyVjI6OmRldGFj aChBcnRzOjpCeXRlU291bmRQcm9kdWNlciBwcm9kdWNlcikKewogICAgICAgICBfY2FjaGU/c3Rh dGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9jYWNoZSktPmRldGFjaChw cm9kdWNlcik6c3RhdGljX2Nhc3Q8QXJ0czo6U2ltcGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRo b2RfY2FsbCgpKS0+ZGV0YWNoKHByb2R1Y2VyKTsKfQoKaW5saW5lIEFydHM6Ok9iamVjdCBBcnRz OjpTb3VuZFNlcnZlclYyOjpjcmVhdGVPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsK ICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNpbXBsZVNvdW5kU2VydmVy X2Jhc2UqPihfY2FjaGUpLT5jcmVhdGVPYmplY3QobmFtZSk6c3RhdGljX2Nhc3Q8QXJ0czo6U2lt cGxlU291bmRTZXJ2ZXJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y3JlYXRlT2JqZWN0KG5hbWUp Owp9CgppbmxpbmUgQXJ0czo6UGxheU9iamVjdCBBcnRzOjpTb3VuZFNlcnZlclYyOjpjcmVhdGVQ bGF5T2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkKewogICAgICAgIHJldHVybiBf Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdEZhY3RvcnlfYmFzZSo+KF9jYWNoZSkt PmNyZWF0ZVBsYXlPYmplY3QoZmlsZW5hbWUpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RG YWN0b3J5X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNyZWF0ZVBsYXlPYmplY3QoZmlsZW5hbWUp Owp9CgppbmxpbmUgQXJ0czo6UGxheU9iamVjdCBBcnRzOjpTb3VuZFNlcnZlclYyOjpjcmVhdGVQ bGF5T2JqZWN0Rm9yVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwsIGNvbnN0IHN0ZDo6c3RyaW5n JiBtaW1ldHlwZSwgYm9vbCBjcmVhdGVCVVMpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRp Y19jYXN0PEFydHM6OlBsYXlPYmplY3RGYWN0b3J5VjJfYmFzZSo+KF9jYWNoZSktPmNyZWF0ZVBs YXlPYmplY3RGb3JVUkwodXJsLCBtaW1ldHlwZSwgY3JlYXRlQlVTKTpzdGF0aWNfY2FzdDxBcnRz OjpQbGF5T2JqZWN0RmFjdG9yeVYyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmNyZWF0ZVBsYXlP YmplY3RGb3JVUkwodXJsLCBtaW1ldHlwZSwgY3JlYXRlQlVTKTsKfQoKaW5saW5lIEFydHM6OlBs YXlPYmplY3QgQXJ0czo6U291bmRTZXJ2ZXJWMjo6Y3JlYXRlUGxheU9iamVjdEZvclN0cmVhbShB cnRzOjpJbnB1dFN0cmVhbSBpbnN0cmVhbSwgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWV0eXBlLCBi b29sIGNyZWF0ZUJVUykKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6 UGxheU9iamVjdEZhY3RvcnlWMl9iYXNlKj4oX2NhY2hlKS0+Y3JlYXRlUGxheU9iamVjdEZvclN0 cmVhbShpbnN0cmVhbSwgbWltZXR5cGUsIGNyZWF0ZUJVUyk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxh eU9iamVjdEZhY3RvcnlWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jcmVhdGVQbGF5T2JqZWN0 Rm9yU3RyZWFtKGluc3RyZWFtLCBtaW1ldHlwZSwgY3JlYXRlQlVTKTsKfQoKaW5saW5lIGxvbmcg QXJ0czo6U291bmRTZXJ2ZXJWMjo6YXV0b1N1c3BlbmRTZWNvbmRzKCkKewogICAgICAgIHJldHVy biBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX2NhY2hlKS0+ YXV0b1N1c3BlbmRTZWNvbmRzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZFNlY29uZHMoKTsKfQoKaW5saW5lIHZvaWQg QXJ0czo6U291bmRTZXJ2ZXJWMjo6YXV0b1N1c3BlbmRTZWNvbmRzKGxvbmcgX25ld1ZhbHVlKQp7 CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihf Y2FjaGUpLT5hdXRvU3VzcGVuZFNlY29uZHMoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpT b3VuZFNlcnZlclYyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmF1dG9TdXNwZW5kU2Vjb25kcyhf bmV3VmFsdWUpOwp9CgppbmxpbmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlclYyOjpidWZmZXJTaXpl TXVsdGlwbGllcigpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNv dW5kU2VydmVyVjJfYmFzZSo+KF9jYWNoZSktPmJ1ZmZlclNpemVNdWx0aXBsaWVyKCk6c3RhdGlj X2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5idWZmZXJT aXplTXVsdGlwbGllcigpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpTb3VuZFNlcnZlclYyOjpidWZm ZXJTaXplTXVsdGlwbGllcihsb25nIF9uZXdWYWx1ZSkKewogICAgICAgICBfY2FjaGU/c3RhdGlj X2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX2NhY2hlKS0+YnVmZmVyU2l6ZU11bHRp cGxpZXIoX25ld1ZhbHVlKTpzdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihf bWV0aG9kX2NhbGwoKSktPmJ1ZmZlclNpemVNdWx0aXBsaWVyKF9uZXdWYWx1ZSk7Cn0KCmlubGlu ZSBzdGQ6OnN0cmluZyBBcnRzOjpTb3VuZFNlcnZlclYyOjphdWRpb01ldGhvZCgpCnsKICAgICAg ICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9j YWNoZSktPmF1ZGlvTWV0aG9kKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5hdWRpb01ldGhvZCgpOwp9CgppbmxpbmUgbG9uZyBBcnRzOjpT b3VuZFNlcnZlclYyOjpzYW1wbGluZ1JhdGUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0 aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihfY2FjaGUpLT5zYW1wbGluZ1JhdGUo KTpzdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSkt PnNhbXBsaW5nUmF0ZSgpOwp9CgppbmxpbmUgbG9uZyBBcnRzOjpTb3VuZFNlcnZlclYyOjpjaGFu bmVscygpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNvdW5kU2Vy dmVyVjJfYmFzZSo+KF9jYWNoZSktPmNoYW5uZWxzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRT ZXJ2ZXJWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5jaGFubmVscygpOwp9CgppbmxpbmUgbG9u ZyBBcnRzOjpTb3VuZFNlcnZlclYyOjpiaXRzKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3Rh dGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX2NhY2hlKS0+Yml0cygpOnN0YXRp Y19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Yml0cygp Owp9CgppbmxpbmUgYm9vbCBBcnRzOjpTb3VuZFNlcnZlclYyOjpmdWxsRHVwbGV4KCkKewogICAg ICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4o X2NhY2hlKS0+ZnVsbER1cGxleCgpOnN0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJfYmFz ZSo+KF9tZXRob2RfY2FsbCgpKS0+ZnVsbER1cGxleCgpOwp9CgppbmxpbmUgc3RkOjpzdHJpbmcg QXJ0czo6U291bmRTZXJ2ZXJWMjo6YXVkaW9EZXZpY2UoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNo ZT9zdGF0aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihfY2FjaGUpLT5hdWRpb0Rl dmljZSgpOnN0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9tZXRob2RfY2Fs bCgpKS0+YXVkaW9EZXZpY2UoKTsKfQoKaW5saW5lIGxvbmcgQXJ0czo6U291bmRTZXJ2ZXJWMjo6 ZnJhZ21lbnRzKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291 bmRTZXJ2ZXJWMl9iYXNlKj4oX2NhY2hlKS0+ZnJhZ21lbnRzKCk6c3RhdGljX2Nhc3Q8QXJ0czo6 U291bmRTZXJ2ZXJWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5mcmFnbWVudHMoKTsKfQoKaW5s aW5lIGxvbmcgQXJ0czo6U291bmRTZXJ2ZXJWMjo6ZnJhZ21lbnRTaXplKCkKewogICAgICAgIHJl dHVybiBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX2NhY2hl KS0+ZnJhZ21lbnRTaXplKCk6c3RhdGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4o X21ldGhvZF9jYWxsKCkpLT5mcmFnbWVudFNpemUoKTsKfQoKaW5saW5lIHN0ZDo6c3RyaW5nIEFy dHM6OlNvdW5kU2VydmVyVjI6OnZlcnNpb24oKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0 aWNfY2FzdDxBcnRzOjpTb3VuZFNlcnZlclYyX2Jhc2UqPihfY2FjaGUpLT52ZXJzaW9uKCk6c3Rh dGljX2Nhc3Q8QXJ0czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT52ZXJz aW9uKCk7Cn0KCmlubGluZSBBcnRzOjpTdGVyZW9Wb2x1bWVDb250cm9sIEFydHM6OlNvdW5kU2Vy dmVyVjI6Om91dFZvbHVtZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFy dHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9jYWNoZSktPm91dFZvbHVtZSgpOnN0YXRpY19jYXN0 PEFydHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+b3V0Vm9sdW1lKCk7 Cn0KCmlubGluZSBBcnRzOjpTYW1wbGVTdG9yYWdlIEFydHM6OlNvdW5kU2VydmVyVjI6OnNhbXBs ZVN0b3JhZ2UoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTb3Vu ZFNlcnZlclYyX2Jhc2UqPihfY2FjaGUpLT5zYW1wbGVTdG9yYWdlKCk6c3RhdGljX2Nhc3Q8QXJ0 czo6U291bmRTZXJ2ZXJWMl9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5zYW1wbGVTdG9yYWdlKCk7 Cn0KCmlubGluZSB2b2lkIEFydHM6OlNvdW5kU2VydmVyVjI6OmNoZWNrTmV3T2JqZWN0cygpCnsK ICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJfYmFzZSo+KF9j YWNoZSktPmNoZWNrTmV3T2JqZWN0cygpOnN0YXRpY19jYXN0PEFydHM6OlNvdW5kU2VydmVyVjJf YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+Y2hlY2tOZXdPYmplY3RzKCk7Cn0KCmlubGluZSBzdGQ6 OnN0cmluZyBBcnRzOjpXYXZQbGF5T2JqZWN0OjpkZXNjcmlwdGlvbigpCnsKICAgICAgICByZXR1 cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9jYWNoZSktPmRl c2NyaXB0aW9uKCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX21ldGhvZF9j YWxsKCkpLT5kZXNjcmlwdGlvbigpOwp9CgppbmxpbmUgQXJ0czo6cG9UaW1lIEFydHM6OldhdlBs YXlPYmplY3Q6OmN1cnJlbnRUaW1lKCkKewogICAgICAgIHJldHVybiBfY2FjaGU/c3RhdGljX2Nh c3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+Y3VycmVudFRpbWUoKTpzdGF0aWNf Y2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPmN1cnJlbnRUaW1l KCk7Cn0KCmlubGluZSBBcnRzOjpwb1RpbWUgQXJ0czo6V2F2UGxheU9iamVjdDo6b3ZlcmFsbFRp bWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0 X2Jhc2UqPihfY2FjaGUpLT5vdmVyYWxsVGltZSgpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmpl Y3RfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+b3ZlcmFsbFRpbWUoKTsKfQoKaW5saW5lIEFydHM6 OnBvQ2FwYWJpbGl0aWVzIEFydHM6OldhdlBsYXlPYmplY3Q6OmNhcGFiaWxpdGllcygpCnsKICAg ICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+KF9j YWNoZSktPmNhcGFiaWxpdGllcygpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfYmFzZSo+ KF9tZXRob2RfY2FsbCgpKS0+Y2FwYWJpbGl0aWVzKCk7Cn0KCmlubGluZSBzdGQ6OnN0cmluZyBB cnRzOjpXYXZQbGF5T2JqZWN0OjptZWRpYU5hbWUoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9z dGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfY2FjaGUpLT5tZWRpYU5hbWUoKTpz dGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPm1lZGlh TmFtZSgpOwp9CgppbmxpbmUgQXJ0czo6cG9TdGF0ZSBBcnRzOjpXYXZQbGF5T2JqZWN0OjpzdGF0 ZSgpCnsKICAgICAgICByZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3Rf YmFzZSo+KF9jYWNoZSktPnN0YXRlKCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5zdGF0ZSgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpXYXZQbGF5 T2JqZWN0OjpwbGF5KCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9i amVjdF9iYXNlKj4oX2NhY2hlKS0+cGxheSgpOnN0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3Rf YmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+cGxheSgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpXYXZQ bGF5T2JqZWN0OjpzZWVrKGNvbnN0IEFydHM6OnBvVGltZSYgbmV3VGltZSkKewogICAgICAgICBf Y2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNlKj4oX2NhY2hlKS0+c2Vlayhu ZXdUaW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihfbWV0aG9kX2NhbGwo KSktPnNlZWsobmV3VGltZSk7Cn0KCmlubGluZSB2b2lkIEFydHM6OldhdlBsYXlPYmplY3Q6OnBh dXNlKCkKewogICAgICAgICBfY2FjaGU/c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNl Kj4oX2NhY2hlKS0+cGF1c2UoKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0X2Jhc2UqPihf bWV0aG9kX2NhbGwoKSktPnBhdXNlKCk7Cn0KCmlubGluZSB2b2lkIEFydHM6OldhdlBsYXlPYmpl Y3Q6OmhhbHQoKQp7CiAgICAgICAgIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0 X2Jhc2UqPihfY2FjaGUpLT5oYWx0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6UGxheU9iamVjdF9iYXNl Kj4oX21ldGhvZF9jYWxsKCkpLT5oYWx0KCk7Cn0KCmlubGluZSBib29sIEFydHM6OldhdlBsYXlP YmplY3Q6OmxvYWRNZWRpYShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpCnsKICAgICAgICBy ZXR1cm4gX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlBsYXlPYmplY3RfcHJpdmF0ZV9iYXNlKj4o X2NhY2hlKS0+bG9hZE1lZGlhKGZpbGVuYW1lKTpzdGF0aWNfY2FzdDxBcnRzOjpQbGF5T2JqZWN0 X3ByaXZhdGVfYmFzZSo+KF9tZXRob2RfY2FsbCgpKS0+bG9hZE1lZGlhKGZpbGVuYW1lKTsKfQoK aW5saW5lIEFydHM6OkF1dG9TdXNwZW5kU3RhdGUgQXJ0czo6V2F2UGxheU9iamVjdDo6YXV0b1N1 c3BlbmQoKQp7CiAgICAgICAgcmV0dXJuIF9jYWNoZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1v ZHVsZV9iYXNlKj4oX2NhY2hlKS0+YXV0b1N1c3BlbmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50 aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkpLT5hdXRvU3VzcGVuZCgpOwp9CgppbmxpbmUg dm9pZCBBcnRzOjpXYXZQbGF5T2JqZWN0OjpzdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRp Y19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdGFydCgpOnN0YXRpY19j YXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0YXJ0KCk7Cn0K CmlubGluZSB2b2lkIEFydHM6OldhdlBsYXlPYmplY3Q6OnN0b3AoKQp7CiAgICAgICAgIF9jYWNo ZT9zdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX2NhY2hlKS0+c3RvcCgpOnN0 YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0b3Ao KTsKfQoKaW5saW5lIHZvaWQgQXJ0czo6V2F2UGxheU9iamVjdDo6c3RyZWFtSW5pdCgpCnsKICAg ICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUp LT5zdHJlYW1Jbml0KCk6c3RhdGljX2Nhc3Q8QXJ0czo6U3ludGhNb2R1bGVfYmFzZSo+KF9tZXRo b2RfY2FsbCgpKS0+c3RyZWFtSW5pdCgpOwp9CgppbmxpbmUgdm9pZCBBcnRzOjpXYXZQbGF5T2Jq ZWN0OjpzdHJlYW1TdGFydCgpCnsKICAgICAgICAgX2NhY2hlP3N0YXRpY19jYXN0PEFydHM6OlN5 bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1TdGFydCgpOnN0YXRpY19jYXN0PEFydHM6 OlN5bnRoTW9kdWxlX2Jhc2UqPihfbWV0aG9kX2NhbGwoKSktPnN0cmVhbVN0YXJ0KCk7Cn0KCmlu bGluZSB2b2lkIEFydHM6OldhdlBsYXlPYmplY3Q6OnN0cmVhbUVuZCgpCnsKICAgICAgICAgX2Nh Y2hlP3N0YXRpY19jYXN0PEFydHM6OlN5bnRoTW9kdWxlX2Jhc2UqPihfY2FjaGUpLT5zdHJlYW1F bmQoKTpzdGF0aWNfY2FzdDxBcnRzOjpTeW50aE1vZHVsZV9iYXNlKj4oX21ldGhvZF9jYWxsKCkp LT5zdHJlYW1FbmQoKTsKfQoKfTsKIyA2ICJ3YXZwbGF5b2JqZWN0X2ltcGwuY2MiIDIKIyAxICIu Li8uLi9hcnRzL2Zsb3cvY2FjaGVkd2F2LmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9mbG93L2NhY2hl ZHdhdi5oIgojIDEgIi4uLy4uL2NvbmZpZy5oIiAxCiMgNjAyICIuLi8uLi9jb25maWcuaCIKIyAx ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDYwMyAiLi4vLi4vY29uZmlnLmgiIDIK IyA3NTYgIi4uLy4uL2NvbmZpZy5oIgpleHRlcm4gIkMiCgppbnQgbWtzdGVtcHMgKGNoYXIqIF90 ZW1wbGF0ZSwgaW50IHN1ZmZpeF9sZW4pOwojIDI3ICIuLi8uLi9hcnRzL2Zsb3cvY2FjaGVkd2F2 LmgiIDIKCiMgMSAiLi4vLi4vYXJ0cy9mbG93L2NhY2hlLmgiIDEKIyAyNiAiLi4vLi4vYXJ0cy9m bG93L2NhY2hlLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMjcgIi4uLy4uL2Fy dHMvZmxvdy9jYWNoZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9saXN0IiAx IDMKIyAyOCAiLi4vLi4vYXJ0cy9mbG93L2NhY2hlLmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL3N0cmluZyIgMSAzCiMgMjkgIi4uLy4uL2FydHMvZmxvdy9jYWNoZS5oIiAyCiMg MSAiLi4vLi4vYXJ0cy9tY29wL3N0YXJ0dXBtYW5hZ2VyLmgiIDEKIyAzMCAiLi4vLi4vYXJ0cy9m bG93L2NhY2hlLmgiIDIKIyAzOSAiLi4vLi4vYXJ0cy9mbG93L2NhY2hlLmgiCm5hbWVzcGFjZSBB cnRzIHsKY2xhc3MgQ2FjaGU7CgpjbGFzcyBDYWNoZWRPYmplY3QKewpwcml2YXRlOgogICAgICAg IHN0ZDo6c3RyaW5nIF9vYmplY3Rfa2V5OwogICAgICAgIGludCBfcmVmX2NudDsKICAgICAgICB0 aW1lX3QgX2xhc3RBY2Nlc3M7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgdm9pZCBzZXRLZXkoc3RkOjpz dHJpbmcga2V5KTsKCnB1YmxpYzoKICAgICAgICBzdGQ6OnN0cmluZyBnZXRLZXkoKTsKCiAgICAg ICAgdGltZV90IGxhc3RBY2Nlc3MoKTsKCiAgICAgICAgdm9pZCBkZWNSZWYoKTsKICAgICAgICB2 b2lkIGluY1JlZigpOwogICAgICAgIGludCByZWZDbnQoKTsKCiAgICAgICAgdmlydHVhbCBib29s IGlzVmFsaWQoKTsKICAgICAgICB2aXJ0dWFsIGludCBtZW1vcnlVc2FnZSgpID0gMDsKCiAgICAg ICAgQ2FjaGVkT2JqZWN0KENhY2hlICpjYWNoZSk7CiAgICAgICAgdmlydHVhbCB+Q2FjaGVkT2Jq ZWN0KCk7Cn07CgpjbGFzcyBDYWNoZQp7CnByb3RlY3RlZDoKICAgICAgICBzdGQ6Omxpc3Q8Q2Fj aGVkT2JqZWN0ICo+IG9iamVjdHM7CiAgICAgICAgQ2FjaGUoKTsKICAgICAgICB+Q2FjaGUoKTsK CiAgICAgICAgc3RhdGljIENhY2hlICpfaW5zdGFuY2U7CgpwdWJsaWM6CiAgICAgICAgc3RhdGlj IENhY2hlICp0aGUoKTsKICAgICAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOwoKICAgICAgICBz dGF0aWMgbG9uZyBtZW11c2VkOwoKICAgICAgICBDYWNoZWRPYmplY3QgKmdldChzdGQ6OnN0cmlu ZyBrZXkpOwogICAgICAgIHZvaWQgYWRkKENhY2hlZE9iamVjdCAqb2JqZWN0KTsKCgogICAgICAg IGxvbmcgY2xlYW5VcChsb25nIGNhY2hlTGltaXQpOwp9OwoKfTsKIyAyOSAiLi4vLi4vYXJ0cy9m bG93L2NhY2hlZHdhdi5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDEgMwojIDI2 ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwoK CgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3lzL3N0 YXQuaCIgMiAzCiMgODcgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiAiQyIgewoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGF0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0 cy9zdGF0LmgiIDMKc3RydWN0IHN0YXQKICB7CiAgICBfX2Rldl90IHN0X2RldjsKICAgIHVuc2ln bmVkIHNob3J0IGludCBfX3BhZDE7CgogICAgX19pbm9fdCBzdF9pbm87CgoKCiAgICBfX21vZGVf dCBzdF9tb2RlOwogICAgX19ubGlua190IHN0X25saW5rOwogICAgX191aWRfdCBzdF91aWQ7CiAg ICBfX2dpZF90IHN0X2dpZDsKICAgIF9fZGV2X3Qgc3RfcmRldjsKICAgIHVuc2lnbmVkIHNob3J0 IGludCBfX3BhZDI7CgogICAgX19vZmZfdCBzdF9zaXplOwoKCgogICAgdW5zaWduZWQgbG9uZyBp bnQgc3RfYmxrc2l6ZTsKCgogICAgX19ibGtjbnRfdCBzdF9ibG9ja3M7CgoKCiAgICBfX3RpbWVf dCBzdF9hdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMTsKICAgIF9fdGltZV90 IHN0X210aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQyOwogICAgX190aW1lX3Qg c3RfY3RpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDM7CiAgICB1bnNpZ25lZCBs b25nIGludCBfX3VudXNlZDQ7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDU7CiAgfTsK CgpzdHJ1Y3Qgc3RhdDY0CiAgewogICAgX19kZXZfdCBzdF9kZXY7CiAgICB1bnNpZ25lZCBzaG9y dCBpbnQgX19wYWQxOwoKICAgIF9faW5vNjRfdCBzdF9pbm87CiAgICBfX21vZGVfdCBzdF9tb2Rl OwogICAgX19ubGlua190IHN0X25saW5rOwogICAgX191aWRfdCBzdF91aWQ7CiAgICBfX2dpZF90 IHN0X2dpZDsKICAgIF9fZGV2X3Qgc3RfcmRldjsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3Bh ZDI7CiAgICBfX29mZjY0X3Qgc3Rfc2l6ZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IHN0X2Jsa3Np emU7CgogICAgX19ibGtjbnQ2NF90IHN0X2Jsb2NrczsKICAgIF9fdGltZV90IHN0X2F0aW1lOwog ICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwogICAgX190aW1lX3Qgc3RfbXRpbWU7CiAg ICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDI7CiAgICBfX3RpbWVfdCBzdF9jdGltZTsKICAg IHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMzsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51 c2VkNDsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNTsKICB9OwojIDkwICIvdXNyL2lu Y2x1ZGUvc3lzL3N0YXQuaCIgMiAzCiMgMTgxICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpl eHRlcm4gaW50IHN0YXQgKF9fY29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3Qgc3RhdCAqX19idWYp IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZzdGF0IChpbnQgX19mZCwgc3RydWN0IHN0YXQgKl9f YnVmKSB0aHJvdyAoKTsKIyAxOTcgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBp bnQgc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgc3RydWN0IHN0YXQ2NCAqX19idWYpIHRo cm93ICgpOwpleHRlcm4gaW50IGZzdGF0NjQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdDY0ICpfX2J1 ZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19maWxl LCBzdHJ1Y3Qgc3RhdCAqX19idWYpIHRocm93ICgpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N5cy9z dGF0LmgiIDMKZXh0ZXJuIGludCBsc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgc3RydWN0 IHN0YXQ2NCAqX19idWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNobW9kIChfX2NvbnN0 IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBm Y2htb2QgKGludCBfX2ZkLCBfX21vZGVfdCBfX21vZGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBf X21vZGVfdCB1bWFzayAoX19tb2RlX3QgX19tYXNrKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX21v ZGVfdCBnZXR1bWFzayAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWtkaXIgKF9fY29u c3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgbWtub2QgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUsIF9fZGV2X3Qg X19kZXYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgbWtmaWZvIChfX2NvbnN0IGNoYXIgKl9f cGF0aCwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAoKTsKIyAyNzkgIi91c3IvaW5jbHVkZS9zeXMv c3RhdC5oIiAzCmV4dGVybiBpbnQgX19meHN0YXQgKGludCBfX3ZlciwgaW50IF9fZmlsZGVzLCBz dHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9feHN0YXQgKGlu dCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1 ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fbHhzdGF0IChpbnQgX192ZXIsIF9fY29uc3QgY2hh ciAqX19maWxlbmFtZSwgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYpIHRocm93ICgpOwojIDMwMiAi L3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBfX2Z4c3RhdDY0IChpbnQgX192 ZXIsIGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXQ2NCAqX19zdGF0X2J1ZikgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IF9feHN0YXQ2NCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUs IHN0cnVjdCBzdGF0NjQgKl9fc3RhdF9idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2x4c3Rh dDY0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwgc3RydWN0IHN0YXQ2NCAq X19zdGF0X2J1ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3hta25vZCAoaW50IF9fdmVyLCBf X2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLCBfX2Rldl90ICpfX2RldikgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIF9faW5saW5lX18gaW50IHN0YXQgKF9fY29uc3QgY2hhciAqX19w YXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdGJ1Zikg dGhyb3cgKCkKewogIHJldHVybiBfX3hzdGF0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0KCgpl eHRlcm4gX19pbmxpbmVfXyBpbnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19wYXRoLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpIHRocm93ICgpCnsK ICByZXR1cm4gX19seHN0YXQgKDMsIF9fcGF0aCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lu bGluZV9fIGludCBmc3RhdCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpIHRocm93 ICgpCnsKICByZXR1cm4gX19meHN0YXQgKDMsIF9fZmQsIF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4g X19pbmxpbmVfXyBpbnQgbWtub2QgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21v ZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXZfdCBfX2RldikgdGhyb3cgKCkK ewogIHJldHVybiBfX3hta25vZCAoMSwgX19wYXRoLCBfX21vZGUsICZfX2Rldik7Cn0KCgoKZXh0 ZXJuIF9faW5saW5lX18gaW50IHN0YXQ2NCAoX19jb25zdCBjaGFyICpfX3BhdGgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkK ewogIHJldHVybiBfX3hzdGF0NjQgKDMsIF9fcGF0aCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBf X2lubGluZV9fIGludCBsc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkKewog IHJldHVybiBfX2x4c3RhdDY0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19p bmxpbmVfXyBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1Zikg dGhyb3cgKCkKewogIHJldHVybiBfX2Z4c3RhdDY0ICgzLCBfX2ZkLCBfX3N0YXRidWYpOwp9CgoK Cgp9CiMgMzAgIi4uLy4uL2FydHMvZmxvdy9jYWNoZWR3YXYuaCIgMgojIDEgIi91c3IvaW5jbHVk ZS91bmlzdGQuaCIgMSAzCiMgMzEgIi4uLy4uL2FydHMvZmxvdy9jYWNoZWR3YXYuaCIgMgojIDQx ICIuLi8uLi9hcnRzL2Zsb3cvY2FjaGVkd2F2LmgiCm5hbWVzcGFjZSBBcnRzIHsKCmNsYXNzIENh Y2hlZFdhdiA6IHB1YmxpYyBDYWNoZWRPYmplY3QKewpwcm90ZWN0ZWQ6CiAgICAgICAgc3RydWN0 IHN0YXQgb2xkc3RhdDsKICAgICAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZTsKICAgICAgICBib29s IGluaXRPazsKCiAgICAgICAgQ2FjaGVkV2F2KENhY2hlICpjYWNoZSwgc3RkOjpzdHJpbmcgZmls ZW5hbWUpOwogICAgICAgIH5DYWNoZWRXYXYoKTsKCiAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBj aGFyIHVjaGFyOwpwdWJsaWM6CiAgICAgICAgZG91YmxlIHNhbXBsaW5nUmF0ZTsKICAgICAgICBs b25nIGJ1ZmZlclNpemU7CiAgICAgICAgaW50IGNoYW5uZWxDb3VudDsKICAgICAgICBpbnQgc2Ft cGxlV2lkdGg7CiAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyOwoKICAgICAgICBzdGF0aWMg Q2FjaGVkV2F2ICpsb2FkKENhY2hlICpjYWNoZSwgc3RkOjpzdHJpbmcgZmlsZW5hbWUpOwoKCgoK CgogICAgICAgIGJvb2wgaXNWYWxpZCgpOwoKCgogICAgICAgIGludCBtZW1vcnlVc2FnZSgpOwp9 OwoKfTsKIyA3ICJ3YXZwbGF5b2JqZWN0X2ltcGwuY2MiIDIKIyAxICIuLi8uLi9hcnRzL2Zsb3cv c3Rkc3ludGhtb2R1bGUuaCIgMQojIDI2ICIuLi8uLi9hcnRzL2Zsb3cvc3Rkc3ludGhtb2R1bGUu aCIKIyAxICIuLi8uLi9hcnRzL2Zsb3cvYXJ0c2Zsb3cuaCIgMQojIDI3ICIuLi8uLi9hcnRzL2Zs b3cvc3Rkc3ludGhtb2R1bGUuaCIgMgojIDM1ICIuLi8uLi9hcnRzL2Zsb3cvc3Rkc3ludGhtb2R1 bGUuaCIKbmFtZXNwYWNlIEFydHMgewoKY2xhc3MgU3RkU3ludGhNb2R1bGVQcml2YXRlOwoKY2xh c3MgU3RkU3ludGhNb2R1bGUgOiB2aXJ0dWFsIHB1YmxpYyBTeW50aE1vZHVsZV9iYXNlIHsKcHJp dmF0ZToKICAgICAgICBTdGRTeW50aE1vZHVsZVByaXZhdGUgKmQ7Cgpwcm90ZWN0ZWQ6CiAgICAg ICAgbG9uZyBzYW1wbGluZ1JhdGU7CiAgICAgICAgZmxvYXQgc2FtcGxpbmdSYXRlRmxvYXQ7Cgpw dWJsaWM6CiAgICAgICAgU3RkU3ludGhNb2R1bGUoKTsKCiAgICAgICAgdm9pZCBzdGFydCgpOwog ICAgICAgIHZvaWQgc3RvcCgpOwoKICAgICAgICB2b2lkIHN0cmVhbUluaXQoKTsKICAgICAgICB2 b2lkIHN0cmVhbVN0YXJ0KCk7CiAgICAgICAgdm9pZCBzdHJlYW1FbmQoKTsKCiAgICAgICAgQXV0 b1N1c3BlbmRTdGF0ZSBhdXRvU3VzcGVuZCgpOwp9Owp9OwojIDggIndhdnBsYXlvYmplY3RfaW1w bC5jYyIgMgojIDEgIi4uLy4uL2FydHMvZmxvdy9jb252ZXJ0LmgiIDEKIyAzNCAiLi4vLi4vYXJ0 cy9mbG93L2NvbnZlcnQuaCIKbmFtZXNwYWNlIEFydHMgewojIDU3ICIuLi8uLi9hcnRzL2Zsb3cv Y29udmVydC5oIgp2b2lkIGNvbnZlcnRfbW9ub184X2Zsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxl cywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZnJvbSwgZmxvYXQgKnRv KTsKCnZvaWQgaW50ZXJwb2xhdGVfbW9ub184X2Zsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxlcywK ICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRvdWJsZSBzcGVlZCwKICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZnJvbSwgZmxvYXQgKnRvKTsKCnZvaWQg Y29udmVydF9tb25vXzE2bGVfZmxvYXQodW5zaWduZWQgbG9uZyBzYW1wbGVzLAogICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpmcm9tLCBmbG9hdCAqdG8pOwoKdm9pZCBpbnRl cnBvbGF0ZV9tb25vXzE2bGVfZmxvYXQodW5zaWduZWQgbG9uZyBzYW1wbGVzLAogICAgICAgICAg ICAgICAgICAgIGRvdWJsZSBzdGFydHBvcywgZG91YmxlIHNwZWVkLAogICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyICpmcm9tLCBmbG9hdCAqdG8pOwoKdm9pZCBjb252ZXJ0X21v bm9fMTZiZV9mbG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgKmZyb20sIGZsb2F0ICp0byk7Cgp2b2lkIGludGVycG9sYXRlX21v bm9fMTZiZV9mbG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAg ZG91YmxlIHN0YXJ0cG9zLCBkb3VibGUgc3BlZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgKmZyb20sIGZsb2F0ICp0byk7Cgp2b2lkIGNvbnZlcnRfc3RlcmVvX2k4XzJm bG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKmZyb20sIGZsb2F0ICpsZWZ0LCBmbG9hdCAqcmlnaHQpOwoKdm9pZCBpbnRlcnBv bGF0ZV9zdGVyZW9faThfMmZsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxlcywKICAgICAgICAgICAg ICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRvdWJsZSBzcGVlZCwKICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgY2hhciAqZnJvbSwgZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCk7Cgp2 b2lkIGNvbnZlcnRfc3RlcmVvX2kxNmxlXzJmbG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmZyb20sIGZsb2F0ICpsZWZ0LCBm bG9hdCAqcmlnaHQpOwoKdm9pZCBpbnRlcnBvbGF0ZV9zdGVyZW9faTE2bGVfMmZsb2F0KHVuc2ln bmVkIGxvbmcgc2FtcGxlcywKICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRv dWJsZSBzcGVlZCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZnJvbSwg ZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCk7Cgp2b2lkIGNvbnZlcnRfc3RlcmVvX2kxNmJlXzJm bG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKmZyb20sIGZsb2F0ICpsZWZ0LCBmbG9hdCAqcmlnaHQpOwoKdm9pZCBpbnRlcnBv bGF0ZV9zdGVyZW9faTE2YmVfMmZsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxlcywKICAgICAgICAg ICAgICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRvdWJsZSBzcGVlZCwKICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgY2hhciAqZnJvbSwgZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCk7 Cgp2b2lkIGNvbnZlcnRfbW9ub19mbG9hdF9mbG9hdCh1bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAg ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpmcm9tLCBmbG9hdCAqdG8pOwoKdm9pZCBpbnRl cnBvbGF0ZV9tb25vX2Zsb2F0X2Zsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxlcywKICAgICAgICAg ICAgICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRvdWJsZSBzcGVlZCwKICAgICAgICAgICAgICAg ICAgICAgICAgZmxvYXQgKmZyb20sIGZsb2F0ICp0byk7Cgp2b2lkIGNvbnZlcnRfc3RlcmVvX2lm bG9hdF8yZmxvYXQodW5zaWduZWQgbG9uZyBzYW1wbGVzLAogICAgICAgICAgICAgICAgICAgICAg ICBmbG9hdCAqZnJvbSwgZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCk7Cgp2b2lkIGludGVycG9s YXRlX3N0ZXJlb19pZmxvYXRfMmZsb2F0KHVuc2lnbmVkIGxvbmcgc2FtcGxlcywKICAgICAgICAg ICAgICAgICAgICBkb3VibGUgc3RhcnRwb3MsIGRvdWJsZSBzcGVlZCwKICAgICAgICAgICAgICAg ICAgICAgICAgZmxvYXQgKmZyb20sIGZsb2F0ICpsZWZ0LCBmbG9hdCAqcmlnaHQpOwoKCnZvaWQg Y29udmVydF9tb25vX2Zsb2F0XzE2bGUodW5zaWduZWQgbG9uZyBzYW1wbGVzLAogICAgICAgICAg ICAgICAgICAgICAgICBmbG9hdCAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8pOwoKdm9pZCBjb252 ZXJ0X3N0ZXJlb18yZmxvYXRfaTE2bGUodW5zaWduZWQgbG9uZyBzYW1wbGVzLAogICAgICAgICAg ICAgICAgICAgICAgICBmbG9hdCAqbGVmdCwgZmxvYXQgKnJpZ2h0LCB1bnNpZ25lZCBjaGFyICp0 byk7Cgp2b2lkIGNvbnZlcnRfbW9ub19mbG9hdF8xNmJlKHVuc2lnbmVkIGxvbmcgc2FtcGxlcywK ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvKTsK CnZvaWQgY29udmVydF9zdGVyZW9fMmZsb2F0X2kxNmJlKHVuc2lnbmVkIGxvbmcgc2FtcGxlcywK ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCwgdW5zaWdu ZWQgY2hhciAqdG8pOwoKdm9pZCBjb252ZXJ0X21vbm9fZmxvYXRfOCh1bnNpZ25lZCBsb25nIHNh bXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpmcm9tLCB1bnNpZ25lZCBjaGFy ICp0byk7Cgp2b2lkIGNvbnZlcnRfc3RlcmVvXzJmbG9hdF9pOCh1bnNpZ25lZCBsb25nIHNhbXBs ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpsZWZ0LCBmbG9hdCAqcmlnaHQsIHVu c2lnbmVkIGNoYXIgKnRvKTsKIyAxNDEgIi4uLy4uL2FydHMvZmxvdy9jb252ZXJ0LmgiCmVudW0g ewogIHVuaV9jb252ZXJ0X3U4ID0gOCwKICB1bmlfY29udmVydF9zMTZfbGUgPSAxNiwKICB1bmlf Y29udmVydF9zMTZfYmUgPSAxNywKICB1bmlfY29udmVydF9mbG9hdF9uZSA9IDB4MTAwCn07Cgp1 bnNpZ25lZCBsb25nIHVuaV9jb252ZXJ0X3N0ZXJlb18yZmxvYXQoCiAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nIHNhbXBsZXMsCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpmcm9t LAogICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmcm9tTGVuLAogICAgICAgICAgICB1bnNp Z25lZCBpbnQgZnJvbUNoYW5uZWxzLAogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZyb21C aXRzLAoKICAgICAgICAgICAgZmxvYXQgKmxlZnQsIGZsb2F0ICpyaWdodCwKICAgICAgICAgICAg ICAgIGRvdWJsZSBzcGVlZCwKICAgICAgICAgICAgICAgIGRvdWJsZSBzdGFydHBvc2l0aW9uCiAg ICAgICAgKTsKCn07CiMgOSAid2F2cGxheW9iamVjdF9pbXBsLmNjIiAyCiMgMSAiLi4vLi4vYXJ0 cy9tY29wL2RlYnVnLmgiIDEKIyA5NSAiLi4vLi4vYXJ0cy9tY29wL2RlYnVnLmgiCm5hbWVzcGFj ZSBBcnRzIHsKICAgICAgICBjbGFzcyBEZWJ1ZyB7CiAgICAgICAgcHVibGljOgogICAgICAgICAg ICAgICAgZW51bSBMZXZlbCB7IGxGYXRhbCA9IDMsIGxXYXJuaW5nID0gMiwgbEluZm8gPSAxLCBs RGVidWcgPSAwIH07CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgaW5pdChjb25zdCBjaGFy ICpwcmVmaXgsIExldmVsIGxldmVsKTsKCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBmYXRh bChjb25zdCBjaGFyICpmbXQsLi4uKTsKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHdhcm5p bmcoY29uc3QgY2hhciAqZm10LC4uLik7CiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBpbmZv KGNvbnN0IGNoYXIgKmZtdCwuLi4pOwogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgZGVidWco Y29uc3QgY2hhciAqZm10LC4uLik7CgoKCgoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIG1l c3NhZ2VBcHAoY29uc3QgY2hhciAqYXBwTmFtZSk7CiAgICAgICAgfTsKfTsKIyAxMCAid2F2cGxh eW9iamVjdF9pbXBsLmNjIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pb3N0cmVh bSIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDMKIyAxICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDEgMwojIDM4ICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDMKCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5o IiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5o IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIg MSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAz CgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEgMwojIDM4 ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAzCgojIDEgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDQwICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j c3RkaW8uaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9z LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIg MSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMwoK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysr Y29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl ZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n bnUvYml0cy9jKytsb2NhbGUuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0 eXBlZGVmIGludCogX19jX2xvY2FsZTsKfQojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X3N0cmluZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs ZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlw ZS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5j bHVkZS9jdHlwZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAy OCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgNDAgIi91c3IvaW5j bHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA0MSAiL3Vz ci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4 ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAo KDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2Fs cGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwK ICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+ PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8 PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkg OiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikp IDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEg PDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4 ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAo KDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1 bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgp KSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAo MTEpKSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29u c3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJf dCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91 cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtIChp bnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzYWxwaGEgKGludCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgaXNjbnRybCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIHRocm93 ICgpOwpleHRlcm4gaW50IGlzbG93ZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFw aCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIHRocm93ICgpOwpleHRl cm4gaW50IGlzcHVuY3QgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz eGRpZ2l0IChpbnQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXNibGFuayAoaW50KSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCB0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChp bnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf dG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAyMTMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjE0ICIvdXNyL2luY2x1ZGUvY3R5cGUu aCIgMiAzCiMgMjI5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IF9faXNhbG51 bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChp bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9f bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxl X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRo cm93ICgpOwpleHRlcm4gaW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp OwpleHRlcm4gaW50IF9faXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl cm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50 IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1 cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRf bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGlu dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBf X2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChp bnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc1ICIvdXNyL2luY2x1ZGUvY3R5 cGUuaCIgMwp9CiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBl LmgiIDIgMwojIDU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5o IiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7 CiAgdXNpbmcgOjppc2NudHJsOwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7 CiAgdXNpbmcgOjppc2xvd2VyOwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7 CiAgdXNpbmcgOjppc3NwYWNlOwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0 OwogIHVzaW5nIDo6dG9sb3dlcjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0NCAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQK ICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxs b2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9f dGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2 b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y YW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3Io Y29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNo YXIqIF9fcyk7Cn0KIyA0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3 ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDU2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvbG9jYWxlZndkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGNsYXNzIHZlY3RvcjsKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0IGxv Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg aXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihf Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp bmxpbmUgYm9vbAogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQsIGNv bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v bAogICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2Fs ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4 ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0No YXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s aW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCwg Y29uc3QgbG9jYWxlJik7CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+ OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZTsK CgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0OwogIHRl bXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRl VD4KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNs YXNzIG51bV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl ciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fcHV0OwogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xh c3MKICAgIGNvbGxhdGVfYnluYW1lOwoKCiAgY2xhc3MgdGltZV9iYXNlOwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0No YXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3Mg dGltZV9nZXRfYnluYW1lOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091 dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXQ7 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWU7CgoKICBjbGFz cyBtb25leV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl ciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9nZXQ7CiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZf aXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0OwogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9u ZXlwdW5jdF9ieW5hbWU7CgoKICBjbGFzcyBtZXNzYWdlc19iYXNlOwogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTsKCgogIGNsYXNzIGxvY2FsZQogIHsKICBwdWJs aWM6CgogICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNzIGZhY2V0 OwogICAgY2xhc3MgaWQ7CiAgICBjbGFzcyBfSW1wbDsKCiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7 CiAgICBmcmllbmQgY2xhc3MgX0ltcGw7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog ICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7 CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBo YXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCgoKICAgIHN0YXRpYyBjb25zdCBjYXRl Z29yeSBub25lID0gMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8IDA7 CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9IDFMIDw8IDE7CiAgICBzdGF0aWMg Y29uc3QgY2F0ZWdvcnkgY29sbGF0ZSA9IDFMIDw8IDI7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdv cnkgdGltZSA9IDFMIDw8IDM7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkgPSAx TCA8PCA0OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1lc3NhZ2VzID0gMUwgPDwgNTsKICAg IHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwgPSAoY29sbGF0ZSB8IGN0eXBlIHwgbW9uZXRhcnkg fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyB8IHRp bWUgfCBtZXNzYWdlcyk7CgoKICAgIGxvY2FsZSgpIHRocm93KCk7CgogICAgbG9jYWxlKGNvbnN0 IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKGNvbnN0 IGNoYXIqIF9fc3RkX25hbWUpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29u c3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYg X19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBf RmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9jYWxlJgog ICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2Fs ZSYgX19vdGhlcik7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wKICAg IG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRo cm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CgogICAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwg X1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp bmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBzdGF0aWMgbG9j YWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0IGxvY2FsZSYK ICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsKCgogICAgc3Rh dGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsKCiAg ICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX251bV9jYXRlZ29yaWVzID0gNjsKICAgIHN0YXRpYyBj b25zdCBzaXplX3QgX1NfbnVtX2ZhY2V0cyA9IDEzOwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUo X0ltcGwqKSB0aHJvdygpOwoKICAgIHN0YXRpYyBpbmxpbmUgdm9pZAogICAgX1NfaW5pdGlhbGl6 ZSgpCiAgICB7IGlmICghX1NfY2xhc3NpYykgY2xhc3NpYygpOyB9CgogICAgc3RhdGljIGNhdGVn b3J5CiAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9N X2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRl Z29yeSBfX2NhdCk7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6Ol9JbXBsCiAgewogIHB1YmxpYzoK CiAgICB0eXBlZGVmIHZlY3RvcjxmYWNldCosIGFsbG9jYXRvcjxmYWNldCo+ID4gX192ZWNfZmFj ZXQ7CgoKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpm YWNldDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBf RmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2Nh bGUmKSB0aHJvdygpOwoKICBwcml2YXRlOgoKICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOwogICAg X192ZWNfZmFjZXQqIF9NX2ZhY2V0czsKICAgIHN0cmluZyBfTV9uYW1lc1tfU19udW1fY2F0ZWdv cmllc107CiAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlOwogICAgc3RhdGljIGNvbnN0IGxvY2Fs ZTo6aWQqIGNvbnN0IF9TX2lkX2N0eXBlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCog Y29uc3QgX1NfaWRfbnVtZXJpY1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0 IF9TX2lkX2NvbGxhdGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19p ZF90aW1lW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbW9uZXRh cnlbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tZXNzYWdlc1td OwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBfU19mYWNldF9jYXRl Z29yaWVzW107CgogICAgaW5saW5lIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygp CiAgICB7ICsrX01fcmVmZXJlbmNlczsgfQoKICAgIGlubGluZSB2b2lkCiAgICBfTV9yZW1vdmVf cmVmZXJlbmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX01fcmVmZXJlbmNlcy0tID09IDAp CiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsgZGVsZXRlIHRoaXM7 IH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgeyB9CiAgICAgICAgfQogICAgfQoK ICAgIF9JbXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9JbXBsKHN0cmluZyBfX25hbWUs IHNpemVfdCk7CiAgIH5fSW1wbCgpIHRocm93KCk7CgogICAgYm9vbAogICAgX01fY2hlY2tfc2Ft ZV9uYW1lKCkKICAgIHsKICAgICAgYm9vbCBfX3JldCA9IHRydWU7CiAgICAgIGZvciAoc2l6ZV90 IGkgPSAwOyBpIDwgX1NfbnVtX2NhdGVnb3JpZXMgLSAxOyArK2kpCiAgICAgICAgX19yZXQgJj0g X01fbmFtZXNbaV0gPT0gX01fbmFtZXNbaSArIDFdOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9 CiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29y eSk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShjb25zdCBfSW1wbCosIGNvbnN0 IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9mYWNldChjb25z dCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lkCiAgICBfTV9pbnN0YWxsX2Zh Y2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9G YWNldD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFj ZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KICB9 OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBs b2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9J bXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0 KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19u dW1fY2F0ZWdvcmllczsgKytfX2kpCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9ICIq IjsKICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAgICBmcmllbmQgY2xhc3MgbG9j YWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogIHByb3RlY3RlZDoKICAgIGV4 cGxpY2l0CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsKCiAgICB2aXJ0dWFs CiAgICB+ZmFjZXQoKSB7IH07CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2NyZWF0ZV9jX2xvY2Fs ZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcyk7CgogICAgc3RhdGljIHZvaWQK ICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgcHJpdmF0ZToK ICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOwoKICAgIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2Uo KSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOwoK ICAgIGZhY2V0KGNvbnN0IGZhY2V0Jik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGZh Y2V0Jik7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6OmlkCiAgewogIHByaXZhdGU6CiAgICBmcmll bmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CiAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVz ZV9mYWNldChjb25zdCBsb2NhbGUmKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg ICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93ICgpOwoK CgoKICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4OwoKCiAgICBzdGF0aWMgc2l6ZV90IF9TX2hp Z2h3YXRlcjsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgaWQmKTsKCiAgICBpZChjb25z dCBpZCYpOwoKICBwdWJsaWM6CgoKCiAgICBpZCgpIHsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUm IF9fbG9jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2Zh Y2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7Cn0KIyA0NCAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvaW9zX2Jhc2UuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIGVudW0gX0lvc19GbXRm bGFncyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19G bXRmbGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2Ip CiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNf Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9J b3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZs YWdzKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAg aW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3Nf Rm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50Pihf X2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwog IG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJl dHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRv ciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19h ID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JePShfSW9z X0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBe IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdz IF9fYSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9 CgoKICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwgMTYg fTsKCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVubW9kZSBfX2Es IF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8 aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVu bW9kZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAg eyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2Fz dDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3Nf T3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2Rl KHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s aW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19P cGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9z X09wZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUg X19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9k ZQogIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7 IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVy YXRvcn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGlj X2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0 ZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9J b3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRl KHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s aW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3Rh dGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBz dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRv cl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lv c3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoK ICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lv c19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9J b3NfSW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBf X2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUK ICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0 dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+ KF9Jb3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxp bnQ+KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01faW9zX3NlZWtkaXJfZW5kID0g MUwgPDwgMTYgfTsKCgogIGNsYXNzIGlvc19iYXNlCiAgewogIHB1YmxpYzoKCgogICAgY2xhc3Mg ZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBleHBs aWNpdAogICAgICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7CgogICAgICB2 aXJ0dWFsCiAgICAgIH5mYWlsdXJlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cioKICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7CgogICAgcHJpdmF0ZToKICAgICAgZW51bSB7 IF9NX2J1ZnNpemUgPSAyNTYgfTsKICAgICAgY2hhciBfTV9uYW1lW19NX2J1ZnNpemVdOwoKICAg IH07CgoKICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRmbGFnczsKCiAgICBzdGF0aWMgY29u c3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBo YSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX2RlYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBmbXRmbGFncyhfX2lv c19mbGFnczo6X1NfZml4ZWQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGhleCA9IGZtdGZs YWdzKF9faW9zX2ZsYWdzOjpfU19oZXgpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVy bmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsKICAgIHN0YXRpYyBjb25z dCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xlZnQpOwogICAgc3Rh dGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOwog ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T X3JpZ2h0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmljID0gZm10ZmxhZ3Mo X19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNo b3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsKICAgIHN0YXRpYyBj b25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bv aW50KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0gZm10ZmxhZ3MoX19pb3Nf ZmxhZ3M6Ol9TX3Nob3dwb3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19za2lwd3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz IHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1Zik7CiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VwcGVy Y2FzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhf X2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJh c2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19iYXNlZmllbGQpOwogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZmxv YXRmaWVsZCk7CgoKICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3RhdGU7CiAgICBzdGF0aWMg Y29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19iYWRiaXQpOwog ICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1Nf ZW9mYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9z X2ZsYWdzOjpfU19mYWlsYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGdvb2RiaXQgPSBp b3N0YXRlKDApOwoKCiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1vZGUgb3Blbm1vZGU7CiAgICBzdGF0 aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7CiAg ICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXRlID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0 ZSk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Blbm1vZGUoX19pb3NfZmxh Z3M6Ol9TX2Jpbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lv c19mbGFnczo6X1NfaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIG91dCA9IG9wZW5tb2Rl KF9faW9zX2ZsYWdzOjpfU19vdXQpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIHRydW5jID0g b3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsKCgogICAgdHlwZWRlZiBfSW9zX1NlZWtk aXIgc2Vla2RpcjsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7CiAg ICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIgPSBzZWVrZGlyKDEpOwogICAgc3RhdGljIGNvbnN0 IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsKIyAyMTYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBlbnVtIGV2ZW50CiAgICB7CiAgICAgIGVyYXNlX2V2 ZW50LAogICAgICBpbWJ1ZV9ldmVudCwKICAgICAgY29weWZtdF9ldmVudAogICAgfTsKCiAgICB0 eXBlZGVmIHZvaWQgKCpldmVudF9jYWxsYmFjaykgKGV2ZW50LCBpb3NfYmFzZSYsIGludCk7Cgog ICAgdm9pZAogICAgcmVnaXN0ZXJfY2FsbGJhY2soZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9f aW5kZXgpOwoKICBwcm90ZWN0ZWQ6CgogICAgc3RyZWFtc2l6ZSBfTV9wcmVjaXNpb247CiAgICBz dHJlYW1zaXplIF9NX3dpZHRoOwogICAgZm10ZmxhZ3MgX01fZmxhZ3M7CgoKCiAgICBzdHJ1Y3Qg X0NhbGxiYWNrX2xpc3QKICAgIHsKCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0OwogICAg ICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsKICAg ICAgaW50IF9NX3JlZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9zX2Jhc2U6OmV2ZW50 X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4LAogICAgICAgICAgICAgICAgICAgICBfQ2FsbGJh Y2tfbGlzdCogX19jYikKICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2ZuKSwgX01faW5k ZXgoX19pbmRleCksIF9NX3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAogICAgICBfTV9hZGRf cmVmZXJlbmNlKCkgeyArK19NX3JlZmNvdW50OyB9CgogICAgICBpbnQKICAgICAgX01fcmVtb3Zl X3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9NX3JlZmNvdW50LS07IH0KICAgIH07CgogICAgIF9DYWxs YmFja19saXN0KiBfTV9jYWxsYmFja3M7CgogICAgdm9pZAogICAgX01fY2FsbF9jYWxsYmFja3Mo ZXZlbnQgX19ldikgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2 b2lkKTsKCgogICAgc3RydWN0IF9Xb3JkcwogICAgewogICAgICB2b2lkKiBfTV9wd29yZDsKICAg ICAgbG9uZyBfTV9pd29yZDsKICAgIH07CgogICAgc3RhdGljIGNvbnN0IGludCBfU19sb2NhbF93 b3JkcyA9IDg7CiAgICBfV29yZHMgX01fd29yZF9hcnJheVtfU19sb2NhbF93b3Jkc107CiAgICBf V29yZHMgX01fZHVtbXk7CiAgICBfV29yZHMqIF9NX3dvcmRzOwogICAgaW50IF9NX3dvcmRfbGlt aXQ7CgogICAgX1dvcmRzJgogICAgX01fZ3Jvd193b3JkcyhpbnQgX19pbmRleCk7CgoKICAgIGxv Y2FsZSBfTV9pb3NfbG9jYWxlOwoKICAgIHZvaWQKICAgIF9NX2luaXQoKTsKCiAgcHVibGljOgoK CgoKCiAgICBjbGFzcyBJbml0CiAgICB7CiAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFzZTsKICAg IHB1YmxpYzoKICAgICAgSW5pdCgpOwogICAgICB+SW5pdCgpOwoKICAgICAgc3RhdGljIHZvaWQK ICAgICAgX1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7CgogICAgICBzdGF0aWMgdm9pZAogICAg ICBfU19pb3NfZGVzdHJveSgpOwoKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9z X2Jhc2VfaW5pdDsKICAgICAgc3RhdGljIGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87CiAgICB9 OwoKCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxh Z3M7IH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKGZtdGZsYWdzIF9fZm10ZmwpCiAg ICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzID0gX19m bXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAg c2V0ZihmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2Zs YWdzOwogICAgICBfTV9mbGFncyB8PSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9 CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwsIGZtdGZsYWdz IF9fbWFzaykKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01f ZmxhZ3MgJj0gfl9fbWFzazsKICAgICAgX01fZmxhZ3MgfD0gKF9fZm10ZmwgJiBfX21hc2spOwog ICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQKICAgIHVuc2V0ZihmbXRm bGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsgfQoKICAgIGlubGluZSBzdHJlYW1z aXplCiAgICBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfTV9wcmVjaXNpb247IH0KCiAgICBp bmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKHN0cmVhbXNpemUgX19wcmVjKQogICAgewog ICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9uOwogICAgICBfTV9wcmVjaXNpb24g PSBfX3ByZWM7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6 ZQogICAgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0aDsgfQoKICAgIGlubGluZSBzdHJl YW1zaXplCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkKICAgIHsKICAgICAgc3RyZWFtc2l6 ZSBfX29sZCA9IF9NX3dpZHRoOwogICAgICBfTV93aWR0aCA9IF9fd2lkZTsKICAgICAgcmV0dXJu IF9fb2xkOwogICAgfQoKICAgIHN0YXRpYyBib29sCiAgICBzeW5jX3dpdGhfc3RkaW8oYm9vbCBf X3N5bmMgPSB0cnVlKTsKCgogICAgbG9jYWxlCiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9j KTsKCiAgICBpbmxpbmUgbG9jYWxlCiAgICBnZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3Nf bG9jYWxlOyB9CgoKICAgIHN0YXRpYyBpbnQKICAgIHhhbGxvYygpIHRocm93KCk7CgogICAgaW5s aW5lIGxvbmcmCiAgICBpd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQg PSAoX19peCA8IF9NX3dvcmRfbGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29y ZHNbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3 b3JkOwogICAgfQoKICAgIGlubGluZSB2b2lkKiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewog ICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9saW1pdCkKICAgICAgICAgICAg ICAgICAgICAgICAgPyBfTV93b3Jkc1tfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAg IHJldHVybiBfX3dvcmQuX01fcHdvcmQ7CiAgICB9CgoKICAgIH5pb3NfYmFzZSgpOwoKICBwcm90 ZWN0ZWQ6CiAgICBpb3NfYmFzZSgpOwoKCiAgcHJpdmF0ZToKICAgIGlvc19iYXNlKGNvbnN0IGlv c19iYXNlJik7CgogICAgaW9zX2Jhc2UmCiAgICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jhc2UmKTsK CiAgfTsKCgogIGlubGluZSBpb3NfYmFzZSYKICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkK ICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jh c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9ib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFz ZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJu IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93YmFzZShpb3NfYmFzZSYgX19i YXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4g X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9f YmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1 cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb2ludChpb3NfYmFzZSYg X19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0 dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb2ludChpb3NfYmFz ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAg ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb3MoaW9zX2Jh c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICBy ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3Bvcyhpb3NfYmFz ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAg cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBza2lwd3MoaW9zX2Jhc2Um IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVy biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9f YmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJu IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1cHBlcmNhc2UoaW9zX2Jhc2UmIF9f YmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVy biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91cHBlcmNhc2UoaW9zX2Jhc2Um IF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAg cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1bml0YnVmKGlvc19iYXNl JiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICBy ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdW5pdGJ1Zihpb3NfYmFz ZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAg ICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBpbnRlcm5hbChpb3Nf YmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJuYWwsIGlv c19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp b3NfYmFzZSYKICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z X2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwog IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHJpZ2h0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg X19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAg cmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZGVjKGlvc19iYXNlJiBf X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2Vm aWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGhleChp b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19i YXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFz ZSYKICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6 b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5s aW5lIGlvc19iYXNlJgogIGZpeGVkKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl dGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19i YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFz ZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZs b2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgp9CiMgNDUgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDQxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyA0MiAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUK ICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfaW9zLAog ICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f c2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgogICAgewogICAgcHVibGljOgoKICAgICAg dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoK ICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl ZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19zdHJlYW1idWZfdHlw ZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47 CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+ OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBl PjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFp dHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlw ZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0cmVhbXNpemUKICAgICAgX19jb3B5X3N0 cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4mIF9faW9zLAogICAg ICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1 Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6CgoKCgoKCiAgICAgIGNoYXJfdHlwZSog X01fYnVmOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplOwoKCiAgICAgIGludF90eXBlIF9N X2J1Zl9zaXplX29wdDsKCgoKICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsKCgoKCgoKICAgICAg Y2hhcl90eXBlKiBfTV9pbl9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01faW5fY3VyOwogICAgICBj aGFyX3R5cGUqIF9NX2luX2VuZDsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOwogICAgICBj aGFyX3R5cGUqIF9NX291dF9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsKCgogICAg ICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsKCgogICAgICBsb2NhbGUgX01fYnVmX2xvY2Fs ZTsKCgogICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5pdDsKCgoKCgoKICAgICAgaW50X3R5cGUg X01fcGJhY2tfc2l6ZTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFjazsKICAgICAgY2hhcl90eXBl KiBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsK ICAgICAgYm9vbCBfTV9wYmFja19pbml0OwoKCgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19j cmVhdGUoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9wYmFja19pbml0KQogICAgICAgICAgewog ICAgICAgICAgICBpbnRfdHlwZSBfX2Rpc3QgPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAg ICAgICAgIGludF90eXBlIF9fbGVuID0gbWluKF9NX3BiYWNrX3NpemUsIF9fZGlzdCk7CiAgICAg ICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX3BiYWNrLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAg ICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7CiAgICAgICAgICAgIF9NX3Bi YWNrX2VuZF9zYXZlID0gX01faW5fZW5kOwogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX3BiYWNr LCBfTV9wYmFjaywgX01fcGJhY2sgKyBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQg PSB0cnVlOwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNr X2Rlc3Ryb3koKQogICAgICB7CiAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7 CgogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9jdXIgPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsK CgogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9lbmQgPSAwOwogICAgICAgICAgICBpbnRfdHlw ZSBfX3BiYWNrX2xlbiA9IF9NX2luX2VuZCAtIF9NX3BiYWNrOwogICAgICAgICAgICBpbnRfdHlw ZSBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9idWY7CiAgICAgICAgICAgIGlm IChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAgICAgICAgICAgX19vZmZfZW5kID0gX19w YmFja19sZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9N X3BiYWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICAgICAgICAgICAgICAgIF9NX3Bi YWNrX2VuZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUg PSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX19udWxsOwogICAgICAg ICAgICBfTV9wYmFja19pbml0ID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgIH0KCgoKICAgICAg dm9pZAogICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBi b29sIF9fdGVzdG91dCA9IF9NX291dF9jdXI7CiAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAg ICAgICBpZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01fb3V0X2N1 ciArPSBfX247CiAgICAgIH0KIyAxOTMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfc3RyZWFtYnVmLmgiIDMKICAgICAgdm9pZAogICAgICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5 cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsKCiAgICAg ICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdGluICYmIF9NX2J1Zl91bmlm aWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX01fb3V0X2N1ciA+ IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRf Y3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICAgIF9NX2luX2VuZCAr PSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBlCiAgICAgIF9NX291 dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7CiAgICAgICAg aWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9 PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUg LSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gX01f b3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0Owog ICAgICB9CiMgMjM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1 Zi5oIiAzCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAg ewogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQogICAgICAgICAgdGhpcy0+c2V0 ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVmKTsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNl OjpvdXQpCiAgICAgICAgICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmKTsKICAgICAgfQoKICAg ICAgdm9pZAogICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUob2ZmX3R5cGUgX19vZmYpCiAgICAgIHsK ICAgICAgICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgICBi b29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICAgIGlmIChfX3Rl c3RpbikKICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1ZiArIF9fb2Zm KTsKICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9idWYsIF9N X2J1ZiArIF9fb2ZmKTsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBfTV9pc19pbmRldGVybWlu YXRlKHZvaWQpCiAgICAgIHsKICAgICAgICBib29sIF9fcmV0ID0gZmFsc2U7CgogICAgICAgIGlm IChfTV9idWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6 OmluKQogICAgICAgICAgICAgIF9fcmV0ID0gX01faW5fYmVnID09IF9NX2luX2N1ciAmJiBfTV9p bl9jdXIgPT0gX01faW5fZW5kOwogICAgICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpv dXQpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnID09IF9NX291dF9jdXIgJiYgX01f b3V0X2N1ciA9PSBfTV9vdXRfZW5kOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsK ICAgICAgfQoKICBwdWJsaWM6CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1Zigp CiAgICAgIHsKICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNlOwogICAgICAgIF9NX2J1Zl9z aXplID0gMDsKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICAgIF9NX21vZGUgPSBp b3NfYmFzZTo6b3Blbm1vZGUoMCk7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gZmFsc2U7 CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgcHViaW1idWUoY29uc3QgbG9jYWxlICZfX2xv YykKICAgICAgewogICAgICAgIGxvY2FsZSBfX3RtcCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgICAg dGhpcy0+aW1idWUoX19sb2MpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAg bG9jYWxlCiAgICAgIGdldGxvYygpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX01fYnVmX2xv Y2FsZV9pbml0KQogICAgICAgICAgcmV0dXJuIF9NX2J1Zl9sb2NhbGU7CiAgICAgICAgZWxzZQog ICAgICAgICAgcmV0dXJuIGxvY2FsZSgpOwogICAgICB9CgoKICAgICAgX19zdHJlYW1idWZfdHlw ZSoKICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAg eyByZXR1cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAg cHVic2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAg ICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlv c19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtvZmYoX19vZmYsIF9fd2F5LCBf X21vZGUpOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrcG9zKHBvc190eXBlIF9fc3As CiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpp biB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtwb3MoX19zcCwgX19t b2RlKTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMoKSB7IHJldHVybiB0aGlzLT5zeW5jKCk7 IH0KCgoKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9hdmFpbCgpCiAgICAgIHsKICAgICAgICBz dHJlYW1zaXplIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01f aW5fZW5kKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0gX01fcGJhY2tf ZW5kX3NhdmUgLSBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgICAgICAgICAgIGludF90eXBlIF9f cGJhY2tfbGVuID0gX01faW5fY3VyIC0gX01fcGJhY2s7CiAgICAgICAgICAgICAgICBfX3JldCA9 IF9fc2F2ZV9sZW4gLSBfX3BiYWNrX2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRyKCk7CiAg ICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT5zaG93bWFueWMo KTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIGludF90eXBlCiAgICAgIHNu ZXh0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2Yo KTsKICAgICAgICByZXR1cm4gKHRoaXMtPnNidW1wYygpID09IF9fZW9mID8gX19lb2YgOiB0aGlz LT5zZ2V0YygpKTsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc2J1bXBjKCk7CgogICAg ICBpbnRfdHlwZQogICAgICBzZ2V0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldDsK ICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAg IF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCoodGhpcy0+Z3B0cigpKSk7CiAgICAg ICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT51bmRlcmZsb3coKTsKICAgICAgICByZXR1 cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90eXBl KiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBf X24pOyB9CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpOwoK ICAgICAgaW50X3R5cGUKICAgICAgc3VuZ2V0YygpOwoKCiAgICAgIGludF90eXBlCiAgICAgIHNw dXRjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0 bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAg ICAgIDogX01fYnVmKF9fbnVsbCksIF9NX2J1Zl9zaXplKDApLAogICAgICBfTV9idWZfc2l6ZV9v cHQoc3RhdGljX2Nhc3Q8aW50X3R5cGU+KDgxOTIpKSwgX01fYnVmX3VuaWZpZWQoZmFsc2UpLAog ICAgICBfTV9pbl9iZWcoMCksIF9NX2luX2N1cigwKSwgX01faW5fZW5kKDApLCBfTV9vdXRfYmVn KDApLCBfTV9vdXRfY3VyKDApLAogICAgICBfTV9vdXRfZW5kKDApLCBfTV9tb2RlKGlvc19iYXNl OjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9jYWxlKCkpLAogICAgICBfTV9idWZfbG9j YWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19zaXplKDEpLCBfTV9wYmFjayhfX251bGwpLAogICAg ICBfTV9wYmFja19jdXJfc2F2ZShfX251bGwpLCBfTV9wYmFja19lbmRfc2F2ZShfX251bGwpLCBf TV9wYmFja19pbml0KGZhbHNlKQogICAgICB7IH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVi YWNrKCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAg IGdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAg ICAgZWdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAg Z2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNl dGcoY2hhcl90eXBlKiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dl bmQpCiAgICAgIHsKICAgICAgICBfTV9pbl9iZWcgPSBfX2diZWc7CiAgICAgICAgX01faW5fY3Vy ID0gX19nbmV4dDsKICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7CiAgICAgICAgaWYgKCEoX01f bW9kZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYgX19nZW5kKQogICAg ICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47CiAgICAgIH0KCgogICAgICBj aGFyX3R5cGUqCiAgICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsgfQoKICAg ICAgY2hhcl90eXBlKgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1cjsgfQoK ICAgICAgY2hhcl90eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7 IH0KCiAgICAgIHZvaWQKICAgICAgcGJ1bXAoaW50IF9fbikgeyBfTV9vdXRfY3VyICs9IF9fbjsg fQoKICAgICAgdm9pZAogICAgICBzZXRwKGNoYXJfdHlwZSogX19wYmVnLCBjaGFyX3R5cGUqIF9f cGVuZCkKICAgICAgewogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19wYmVnOwog ICAgICAgIF9NX291dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19i YXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9k ZSB8IGlvc19iYXNlOjpvdXQ7CiAgICAgIH0KCgoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGlt YnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICAgIHsKICAgICAgICBfTV9idWZfbG9jYWxlX2lu aXQgPSB0cnVlOwogICAgICAgIGlmIChfTV9idWZfbG9jYWxlICE9IF9fbG9jKQogICAgICAgICAg X01fYnVmX2xvY2FsZSA9IF9fbG9jOwogICAgICB9CgoKICAgICAgdmlydHVhbCBiYXNpY19zdHJl YW1idWY8Y2hhcl90eXBlLF9UcmFpdHM+KgogICAgICBzZXRidWYoY2hhcl90eXBlKiwgc3RyZWFt c2l6ZSkKICAgICAgeyByZXR1cm4gdGhpczsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAg ICBzZWVrb2ZmKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAgICAgICAgICAgICBpb3Nf YmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJl dHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAg ICAgIHNlZWtwb3MocG9zX3R5cGUsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0g aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2Zm X3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpIHsgcmV0dXJuIDA7 IH0KCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4g MDsgfQoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9f cywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZs b3coKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAgICAgIHZpcnR1YWwg aW50X3R5cGUKICAgICAgdWZsb3coKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0 cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0aGlzLT51bmRlcmZs b3coKSA9PSBfX3JldDsKICAgICAgICBib29sIF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYg X01faW5fY3VyIDwgX01faW5fZW5kOwogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVzdHBl bmRpbmcpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2lu dF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAg aWYgKF9NX2J1Zl91bmlmaWVkICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAg ICAgICsrX01fb3V0X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAg IH0KCgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9IHRy YWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgoK ICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9f cywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVyZmxv dyhpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5 cGU6OmVvZigpOyB9CiMgNTE2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0 cmVhbWJ1Zi5oIiAzCiAgICBwcml2YXRlOgogICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19z dHJlYW1idWZfdHlwZSYpOwoKICAgICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0b3I9 KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKTsKCiAgICB9OwoKfQoKCgoKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzcgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdHJlYW1idWYudGNjIiAzCm5hbWVzcGFjZSBzdGQgewoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIHNidW1wYygpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0Owog ICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICB7CiAg ICAgICAgICBjaGFyX3R5cGUgX19jID0gKmdwdHIoKTsKICAgICAgICAgIF9NX2luX2N1cl9tb3Zl KDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAg ICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAg ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YmFja2MoY2hhcl90 eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGJvb2wgX190ZXN0cG9z ID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgYm9vbCBfX3Rlc3Ru ZSA9IF9NX2luX2N1ciAmJiAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0xXSk7 CiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQogICAgICAgIF9fcmV0ID0gcGJhY2tm YWlsKHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5 cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9f cmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2lj X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN1bmdldGMoKQogICAgewogICAgICBp bnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9j dXIpCiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19y ZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgfQogICAg ICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsKICAgICAgcmV0dXJuIF9f cmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGMoY2hhcl90eXBlIF9f YykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9vdXRfYnVmX3NpemUo KSkKICAgICAgICB7CiAgICAgICAgICAqX01fb3V0X2N1ciA9IF9fYzsKICAgICAgICAgIF9NX291 dF9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl KF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxv dyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAgICAgIHJldHVybiBfX3JldDsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry ZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNnZXRu KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBf X3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBz aXplX3QgX19idWZfbGVuID0gX01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgaWYgKF9f YnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19yZW1haW5p bmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZf bGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBf TV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAg ICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01faW5fY3VyX21vdmUoX19sZW4pOwog ICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsKICAgICAgICAgICAgICBp ZiAoX19jICE9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19zKyssIHRyYWl0c190eXBlOjp0b19jaGFy X3R5cGUoX19jKSk7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19z dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBf X3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAg ICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAgICAgIG9mZl90eXBlIF9fYnVm X2xlbiA9IF9NX291dF9idWZfc2l6ZSgpOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9f cmV0OwogICAgICAgICAgICAgIG9mZl90eXBlIF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1h aW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX291dF9jdXIsIF9fcywg X19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9fcyAr PSBfX2xlbjsKICAgICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19sZW4pOwogICAgICAgICAg ICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaW50X3R5cGUgX19jID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBl KCpfX3MpKTsKICAgICAgICAgICAgICBpZiAoX19jICE9IHRyYWl0c190eXBlOjplb2YoKSkKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAgICAgICAg ICAgKytfX3M7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsK ICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9U cmFpdHM+JiBfX2lvcywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCkKICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsK ICAgICAgc3RyZWFtc2l6ZSBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgIHN0 cmVhbXNpemUgX194dHJjdDsKICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfX3Nib3V0LT5fTV9tb2Rl ICYgaW9zX2Jhc2U6Om91dDsKICAgICAgaWYgKHRydWUpIHsKICAgICAgICB3aGlsZSAoX190ZXN0 cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgIHsKICAgICAgICAgICAgX194dHJjdCA9 IF9fc2JvdXQtPnNwdXRuKF9fc2Jpbi0+Z3B0cigpLCBfX2J1ZnNpemUpOwogICAgICAgICAgICBf X3JldCArPSBfX3h0cmN0OwogICAgICAgICAgICBfX3NiaW4tPl9NX2luX2N1cl9tb3ZlKF9feHRy Y3QpOwogICAgICAgICAgICBpZiAoX194dHJjdCA9PSBfX2J1ZnNpemUpCiAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYmluLT5zZ2V0YygpOwogICAgICAg ICAgICAgICAgaWYgKF9fYyA9PSBfVHJhaXRzOjplb2YoKSkKICAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgIF9faW9zLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAg ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgfQogICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAg aWYgKGZhbHNlKSB7CiAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICB9 CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDUzMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9iYXNpY19pb3MuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9iYXNpY19pb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1 Zl9pdGVyLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9p dGVyLmgiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGlj IGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0 cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6 CiAgICAgIGlubGluZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19z KSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3Ni dWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0 aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAg ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAg ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAg eyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJh dG9yKysoaW50KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFt YnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAq dGhpczsgfQoKICAgICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsg cmV0dXJuIF9NX2ZhaWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf VHJhaXRzPiYKICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0 b3I9KF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBf VHJhaXRzOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLF9UcmFpdHM6OmVvZigpKSkK ICAgICAgX01fZmFpbGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJl YW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg IF9DaGFyVCosIF9DaGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBi YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlw ZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgICAg dHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVm aXRlcl90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBzdHJlYW1idWZfdHlwZSogX01f c2J1ZjsKICAgICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1idWZf aXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX251bGwpLCBfTV9jKC0yKSB7IH0K CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkKICAg ICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFtYnVm X2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9f cyksIF9NX2MoLTIpIHsgfQoKCgoKICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNv bnN0CiAgICAgIHsKCiAgICAgICAgY2hhcl90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9zYnVm ICYmIF9NX2MgIT0gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0yKSkKICAgICAgICAgIF9fcmV0ID0g X01fYzsKICAgICAgICBlbHNlIGlmIChfTV9zYnVmKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNf dHlwZTo6dG9fY2hhcl90eXBlKF9NX3NidWYtPnNnZXRjKCkpOwogICAgICAgIGVsc2UKICAgICAg ICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPih0cmFpdHNfdHlwZTo6ZW9mKCkpOwog ICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBl JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGlmIChfTV9zYnVmKQogICAgICAg ICAgX01fc2J1Zi0+c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiAq dGhpczsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlCiAgICAgIG9wZXJhdG9y KysoaW50KQogICAgICB7CiAgICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlIF9fb2xkID0gKnRo aXM7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICBfX29sZC5fTV9jID0gX01fc2J1Zi0+ c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAg fQoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9f YikKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog ICAgICAgIGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBf X2VvZjsKICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAgICAgICAg ICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJuIChf X3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoK CgoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9f YikgY29uc3QKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv ZigpOwogICAgICAgIGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMo KSA9PSBfX2VvZjsKICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAg ICAgICAgICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0 dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAg ICAgfQoKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0 b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVm X2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVhbChf X2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0No YXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJh dG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsg fQp9CiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMiAz CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAz CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMK CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAxIDMKIyAz NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4ICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDIgMwojIDQwICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv dGltZS5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGlt ZS5oIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5o IiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsK ICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNp bmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2luZyA6 OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6 c3RyZnRpbWU7Cn0KIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m YWNldHMuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Mu aCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRz LmgiIDIgMwoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNlLmgiIDEgMwojIDUwICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5o IiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBjb25zdCBpbnQqIF9fdG9f dHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWFzazsKICAgIHN0YXRpYyBjb25z dCBtYXNrIHVwcGVyID0gX0lTdXBwZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciA9IF9J U2xvd2VyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSBfSVNhbHBoYTsKICAgIHN0YXRp YyBjb25zdCBtYXNrIGRpZ2l0ID0gX0lTZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGln aXQgPSBfSVN4ZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IF9JU3NwYWNlOwog ICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSBfSVNwcmludDsKICAgIHN0YXRpYyBjb25zdCBt YXNrIGdyYXBoID0gX0lTZ3JhcGg7CiAgICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9IF9JU2Nu dHJsOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSBfSVNwdW5jdDsKICAgIHN0YXRpYyBj b25zdCBtYXNrIGFsbnVtID0gX0lTYWxudW07CiAgfTsKIyA1NCAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpm YWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlw ZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAg ICAgY29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0 IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAg ICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8s IF9faGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19t LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAg Y2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAg IHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJf dHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xv d2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUK ICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVu KF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8s IGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFy cm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgog ICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGks CiAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAg IHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNp emVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVh bAogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wK ICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s IGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0g MDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sg X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg ICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs IGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xv LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90 eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg ICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgog ICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAg ICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFy CiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90 eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBf X2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9i YXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgZXhw bGljaXQKICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApIDogX19jdHlwZV9hYnN0cmFjdF9i YXNlPF9DaGFyVD4oX19yZWZzKSB7IH0KCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAg cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpIHsgfQoKICAgICAgdmlydHVh bCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7 IHJldHVybiBmYWxzZTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv X2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBf X3ZlYykgY29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9Cgog ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20s IGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBl KiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNoYXJf dHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJu IF9fYzsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIo Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hh cl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gX19jOyB9CgogICAgICB2aXJ0dWFsIGNv bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo YXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVh bCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJu IGNoYXJfdHlwZSgpOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVu KGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBj b25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9f bmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19k ZmF1bHQ7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3co Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAg ICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9f aGk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQg Y3R5cGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTxjaGFyPiA6 IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8Y2hhcj4KICAgIHsKICAgIHB1YmxpYzoKCiAg ICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogICAgcHJpdmF0ZToKCiAgICAgIGJvb2wgX01f ZGVsOwogICAgICBfX3RvX3R5cGUgY29uc3QmIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlwZSBj b25zdCYgX01fdG9sb3dlcjsKICAgICAgY29uc3QgbWFzayogY29uc3QmIF9NX2N0YWJsZTsKICAg ICAgY29uc3QgbWFzayogX01fdGFibGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxl OjppZCBpZDsKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRp Y19jYXN0PHVuc2lnbmVkIGNoYXI+KC0xKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKGNv bnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsIHNpemVfdCBfX3JlZnMg PSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29u c3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sbywg Y29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0 IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo YXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90 KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAg ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICBjb25zdCBt YXNrKgogICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fdGFibGU7 IH0KCiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIF9NX2N0YWJsZTsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1h c2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog X19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq CiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg Y2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog ICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj aGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVh bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25z dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg ZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNo YXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0 KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3co Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAg ICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBs YXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4o Y29uc3QgbG9jYWxlJiBfX2xvYyk7CiMgMzkyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2 LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5oIiAzCiAg Ym9vbAogIGN0eXBlPGNoYXI+OjoKICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0CiAgeyBy ZXR1cm4gX01fdGFibGVbX19jXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+ OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3Zl YykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAgICpfX3ZlYysrID0g X01fdGFibGVbKl9fbG93KytdOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNoYXIq CiAgY3R5cGU8Y2hhcj46OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBj b25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoICYm ICEoX01fdGFibGVbKl9fbG93XSAmIF9fbSkpCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19s b3c7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2FuX25vdChtYXNrIF9f bSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3 aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAoX01fdGFibGVbKl9fbG93XSAmIF9f bSkgIT0gMCkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CiMgMzkzICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlw ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90 IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGVf YnluYW1lKCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+ OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCgoKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwojIDE3MyAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwogIGNsYXNzIGNvZGVjdnRfYmFzZQogIHsKICBwdWJs aWM6CiAgICBlbnVtIHJlc3VsdAogICAgewogICAgICBvaywKICAgICAgcGFydGlhbCwKICAgICAg ZXJyb3IsCiAgICAgIG5vY29udgogICAgfTsKICB9OwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3Mg X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UKICAgIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1Ymxp YyBjb2RlY3Z0X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9i YXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwog ICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQg c3RhdGVfdHlwZTsKCgogICAgICByZXN1bHQKICAgICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSog X19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgIGV4 dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICBleHRlcm5f dHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19v dXQoX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAg ICByZXN1bHQKICAgICAgdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSog X190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgIGV4dGVybl90eXBlKiYg X190b19uZXh0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb191bnNoaWZ0KF9fc3RhdGUs IF9fdG8sX190b19lbmQsX190b19uZXh0KTsgfQoKICAgICAgcmVzdWx0CiAgICAgIGluKHN0YXRl X3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgIGNvbnN0 IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0 LAogICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg ICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVy biB0aGlzLT5kb19pbihfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAg ICAgfQoKICAgICAgaW50CiAgICAgIGVuY29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJl dHVybiB0aGlzLT5kb19lbmNvZGluZygpOyB9CgogICAgICBib29sCiAgICAgIGFsd2F5c19ub2Nv bnYoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Fsd2F5c19ub2NvbnYo KTsgfQoKICAgICAgaW50CiAgICAgIGxlbmd0aChjb25zdCBzdGF0ZV90eXBlJiBfX3N0YXRlLCBj b25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2xlbmd0 aChfX3N0YXRlLCBfX2Zyb20sIF9fZW5kLCBfX21heCk7IH0KCiAgICAgIGludAogICAgICBtYXhf bGVuZ3RoKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3Ro KCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fY29kZWN2dF9hYnN0 cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0K CiAgICAgIHZpcnR1YWwKICAgICAgfl9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAg ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3Qg aW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zy b21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0 ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVy bl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAg ICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAg ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25l eHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5 cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0 IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0 LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAog ICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmly dHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZp cnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7Cgog ICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0 IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSog X19lbmQsIHNpemVfdCBfX21heCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAg ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkgPSAwOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAg ICBjbGFzcyBjb2RlY3Z0CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50 ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm IGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRl cm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRl ZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg ICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29k ZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULF9FeHRlcm5ULF9TdGF0ZVQ+IChfX3JlZnMpIHsg fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBl bmFtZSBfU3RhdGVUPgogICAgbG9jYWxlOjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg X1N0YXRlVD46OmlkOwojIDU5NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVj dnQuaCIgMwogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0 ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJz dGF0ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGludGVybl90eXBl OwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90 IHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp dAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAg IHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRv X291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAg ICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBl KiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5 cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0 OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0 YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190 b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVz dWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBf X2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBl eHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywg aW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4 dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRo cm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0 IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVf dHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBl eHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGlu dAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICB9OwojIDcwMCAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNz IGNvZGVjdnRfYnluYW1lIDogcHVibGljIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3Rh dGVUPgogICAgewogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0X2J5bmFt ZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29kZWN2dDxfSW50ZXJu VCwgX0V4dGVyblQsIF9TdGF0ZVQ+KF9fcmVmcykgeyB9CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZp cnR1YWwKICAgICAgfmNvZGVjdnRfYnluYW1lKCkgeyB9CiAgICB9OwojIDQxNiAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIF9OdW1lcmljX2dldDsK CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfRm9ybWF0X2NhY2hl CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBi YXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBz dHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCgogICAgICBmcmllbmQgY2xhc3MgbG9j YWxlOwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlcj4KICAg ICAgICBmcmllbmQgY2xhc3MgX051bWVyaWNfZ2V0OwogICAgICBmcmllbmQgY2xhc3MgbnVtX2dl dDxfQ2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgbnVtX3B1dDxfQ2hhclQ+OwogICAgICBmcmll bmQgY2xhc3MgdGltZV9nZXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5X2dldDxf Q2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgdGltZV9wdXQ8X0NoYXJUPjsKICAgICAgZnJpZW5k IGNsYXNzIG1vbmV5X3B1dDxfQ2hhclQ+OwoKCgoKICAgICAgc3RhdGljIGludCBfU19wd29yZF9p eDsKCgoKICAgICAgYm9vbCBfTV92YWxpZDsKCgoKICAgICAgc3RhdGljIGNvbnN0IGNoYXIgX1Nf bGl0ZXJhbHNbXTsKCgoKCiAgICAgIGVudW0KICAgICAgewogICAgICAgIF9TX21pbnVzLAogICAg ICAgIF9TX3BsdXMsCiAgICAgICAgX1NfeCwKICAgICAgICBfU19YLAogICAgICAgIF9TX2RpZ2l0 cywKICAgICAgICBfU19kaWdpdHNfZW5kID0gX1NfZGlnaXRzICsgMTYsCiAgICAgICAgX1NfdWRp Z2l0cyA9IF9TX2RpZ2l0c19lbmQsCiAgICAgICAgX1NfdWRpZ2l0c19lbmQgPSBfU191ZGlnaXRz ICsgMTYsCiAgICAgICAgX1NfZWUgPSBfU19kaWdpdHMgKyAxNCwKICAgICAgICBfU19FZSA9IF9T X3VkaWdpdHMgKyAxNAogICAgICB9OwoKCgoKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9p bnQ7CgoKCgoKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CgoKCiAgICAgIHN0cmlu Z190eXBlIF9NX3RydWVuYW1lOwogICAgICBzdHJpbmdfdHlwZSBfTV9mYWxzZW5hbWU7CgoKCiAg ICAgIGJvb2wgX01fdXNlX2dyb3VwaW5nOwoKCgogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7Cgog ICAgICBfRm9ybWF0X2NhY2hlKCk7CgogICAgICB+X0Zvcm1hdF9jYWNoZSgpIHRocm93KCkgeyB9 CgoKCgogICAgICBzdGF0aWMgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KgogICAgICBfU19nZXQoaW9z X2Jhc2UmIF9faW9zKTsKCiAgICAgIHZvaWQKICAgICAgX01fcG9wdWxhdGUoaW9zX2Jhc2UmKTsK CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NhbGxiYWNrKGlvc19iYXNlOjpldmVudCBfX2V2 ZW50LCBpb3NfYmFzZSYgX19pb3MsIGludCBfX2l4KSB0aHJvdygpOwogICAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW50IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfcHdv cmRfaXg7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNvbnN0IGNoYXIgX0Zvcm1h dF9jYWNoZTxfQ2hhclQ+OjoKICAgIF9TX2xpdGVyYWxzW10gPSAiLSt4WDAxMjM0NTY3ODlhYmNk ZWYwMTIzNDU2Nzg5QUJDREVGIjsKCiAgIHRlbXBsYXRlPD4gX0Zvcm1hdF9jYWNoZTxjaGFyPjo6 X0Zvcm1hdF9jYWNoZSgpOwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX0luSXRlcj4KICAgIGNsYXNzIF9OdW1lcmljX2dldAogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90 eXBlOwoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4K ICAgICAgZnJpZW5kIGNsYXNzIG51bV9nZXQ7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy LCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfZ2V0OwogICAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBj bGFzcyBtb25leV9nZXQ7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBf SW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIG51bV9wdXQ7CiAgICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfcHV0 OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAg IGZyaWVuZCBjbGFzcyBtb25leV9wdXQ7CgogICAgcHJpdmF0ZToKICAgICAgZXhwbGljaXQKICAg ICAgX051bWVyaWNfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fTnVtZXJpY19nZXQo KSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9nZXRfZGlnaXRzKGl0ZXJfdHlwZSBfX2lu LCBpdGVyX3R5cGUgX19lbmQpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6 OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFp dHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog ICAgICBleHBsaWNpdAogICAgICBudW1fZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6 ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9f aW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9f aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsg cmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0 ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGludCYgX192KSBj b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp OyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9f aW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv X2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUK ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv LAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192 KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBf X3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5 cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4s IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChp dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAg ICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAg ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu ZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBk b19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUK ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv LAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QK ICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9u ZyBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBf X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0 KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAg dmlydHVhbCB+bnVtX2dldCgpIHsgfQoKCgoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdChp dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsCiAgICAgICAg ICAgICAgICAgaW50JiBfX2Jhc2UsIGJvb2wgX19mcCA9IHRydWUpIGNvbnN0OwoKICAgICAgdmly dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz ZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRl cl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3Nf YmFzZTo6aW9zdGF0ZSYsIHNob3J0JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg ICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9z dGF0ZSYsIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0 IChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGxv bmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5 cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAg ICAgICAgICBsb25nIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsCiAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKICAgICAgdmly dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz ZSYsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQm KSBjb25zdDsKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwg aXRlcl90eXBlLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB1bnNpZ25lZCBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg ICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwKICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZmxvYXQmKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAg ICBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChp dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHZvaWQqJikgY29uc3Q7CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6Omlk IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAg ICBudW1fZ2V0PGNoYXIsIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPjo6CiAgICBfTV9leHRy YWN0KGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gX19iZWcsCiAgICAgICAgICAgICAgIGlzdHJl YW1idWZfaXRlcmF0b3I8Y2hhcj4gX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGNoYXIqIF9feHRyYywKICAgICAgICAgICAgICAg aW50JiBfX2Jhc2UsIGJvb2wgX19mcCkgY29uc3Q7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIF9OdW1lcmljX3B1dAogICAgewogICAg cHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091 dEl0ZXIgaXRlcl90eXBlOwogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfTnVt ZXJpY19wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9OdW1lcmljX3B1dCgpIHsgfQog ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg IGNsYXNzIG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0 ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAg ICAgbnVtX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2Ys IGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQo X19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29u c3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAg IGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90 eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAogICAgICB7IHJl dHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQog ICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwg bG9uZyBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2Zp bGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9z X2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9u ZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp OyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg X19mLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiBk b19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg ICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2Ys IF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19z LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3Qgdm9pZCog X192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg Y2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBs b25nIF9fdikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25z dDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90 eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0 ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2Zp bGwsIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBf X3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0Owog ICAgfTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg ICBsb2NhbGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0 CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMg bG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9w b2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIHN0cmluZyBfTV9n cm91cGluZzsKICAgICAgc3RyaW5nX3R5cGUgX01fdHJ1ZW5hbWU7CiAgICAgIHN0cmluZ190eXBl IF9NX2ZhbHNlbmFtZTsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0 KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2lu aXRpYWxpemVfbnVtcHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3QoX19j X2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz KQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hhcl90 eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBkb19kZWNpbWFs X3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QK ICAgICAgeyByZXR1cm4gZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAg Z3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBkb19ncm91cGluZygpOyB9CgogICAgICBz dHJpbmdfdHlwZQogICAgICB0cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3RydWVu YW1lKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGZhbHNlbmFtZSgpIGNvbnN0CiAgICAg IHsgcmV0dXJuIGRvX2ZhbHNlbmFtZSgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs CiAgICAgIH5udW1wdW5jdCgpIHsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f ZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0K CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAog ICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwog ICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9Cgog ICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QKICAgICAg eyByZXR1cm4gX01fdHJ1ZW5hbWU7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAg ZG9fZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmFsc2VuYW1lOyB9CgoKICAg ICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0g X19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6 aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IHZvaWQKICAgIG51bXB1bmN0PF9DaGFyVD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xv Y2FsZSApCiAgICB7CgogICAgfQoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1wdW5jdDxj aGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1 YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVf bnVtcHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxp Y2l0CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMg PSAwKQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1Nf Y3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2lu aXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAgICB9CgogICAgcHJv dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUoKQogICAgICB7IF9T X2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9OwoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6 OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBz dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90 IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaW50CiAgICAg IGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAg ICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGky KTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19s bywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFu c2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQq IF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f aGFzaChfX2xvLCBfX2hpKTsgfQoKICBwcm90ZWN0ZWQ6CiAgICAgIH5jb2xsYXRlKCkgeyB9Cgog ICAgICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv bnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwg Y29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAg ICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9f bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0 ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46OmRvX2NvbXBhcmUoY29uc3QgY2hhciogX19s bzEsIGNvbnN0IGNoYXIqIF9faGkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyKiBfX2xvMiwgY29uc3QgY2hhciogX19oaTIpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAg ICBzdHJpbmcKICAgIGNvbGxhdGU8Y2hhcj46OmRvX3RyYW5zZm9ybShjb25zdCBjaGFyKiBfX2xv LCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgbG9uZwogICAgY29s bGF0ZTxjaGFyPjo6ZG9faGFzaChjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBj b25zdDsKIyAxMDE0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0 cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZV9ieW5h bWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g c3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlX2J5bmFtZShjb25zdCBj aGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog ICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbGxh dGVfYnluYW1lPGNoYXI+Ojpjb2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVm cyk7CgoKCgoKICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3Jk ZXIgeyBub19vcmRlciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9nZXQgOiBwdWJs aWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90 eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0 aW1lX2dldChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMp LCBfTV9kYXluYW1lcygwKSwgX01fbW9udGhuYW1lcygwKSB7IH0KCiAgICAgIGRhdGVvcmRlcgog ICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZGF0ZV9vcmRlcigpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF90aW1lKF9fcywgX19l bmQsIF9fZiwgX19lcnIsIF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfZGF0ZShp dGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAgeyByZXR1 cm4gZG9fZ2V0X2RhdGUoX19zLCBfX2VuZCwgX19mLCBfX2VyciwgX190KTsgfQoKICAgICAgaXRl cl90eXBlCiAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwg aW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfd2Vla2RheShfX3MsX19lbmQs X19mLF9fZXJyLF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1lKGl0 ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsg cmV0dXJuIGRvX2dldF9tb250aG5hbWUoX19zLF9fZW5kLF9fZixfX2VycixfX3QpOyB9CgogICAg ICBpdGVyX3R5cGUKICAgICAgZ2V0X3llYXIoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF95ZWFyKF9fcyxfX2VuZCxfX2Ys X19lcnIsX190KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9n ZXQoKQogICAgICB7CiAgICAgICAgZGVsZXRlIFtdIF9NX21vbnRobmFtZXM7CiAgICAgICAgZGVs ZXRlIFtdIF9NX2RheW5hbWVzOwogICAgICB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRlcgogICAg ICBkb19kYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGltZV9iYXNlOjp5bWQ7IH0K CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX3Ms IGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmICwgdG0qICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0 ZXJfdHlwZQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3Nf YmFzZSYsCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0 CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f Z2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAg ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29u c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJf dHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg LCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSog KSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIG11dGFibGUgYmFzaWNfc3RyaW5n PF9DaGFyVD4qIF9NX2RheW5hbWVzOwogICAgICBtdXRhYmxlIGJhc2ljX3N0cmluZzxfQ2hhclQ+ KiBfTV9tb250aG5hbWVzOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpp ZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xh c3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4KICAg IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnlu YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hh clQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg ICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2Fs ZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAg ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXQo c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCgogICAgICBp dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiAsIGNoYXJfdHlwZSAs CiAgICAgICAgICBjb25zdCB0bSogLCBjb25zdCBfQ2hhclQqICwKICAgICAgICAgIGNvbnN0IF9D aGFyVCogKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAg ICAgICAgIGNvbnN0IHRtKiBfX3RtYiwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZGlmaWVyID0g MCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdG1iLCBf X2Zvcm1hdCwgX19tb2RpZmllcik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg ICAgfnRpbWVfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQo aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiAsCiAgICAgICAg ICAgICBjaGFyICwgY2hhciApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6 aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDogcHVi bGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7 CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVf dCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+IChfX3JlZnMp IHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9wdXRfYnluYW1l KCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyPgogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAg IHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9J bkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu Z190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAg ICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l bmQsIGJvb2wgX19pbnRsLAogICAgICAgICAgaW9zX2Jhc2UmIF9fZiwgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9f Z2V0KF9fcywgX19lbmQsIF9faW50bCwgX19mLCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0 ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9f aW50bCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywg X19lbmQsIF9faW50bCwgX19mLCBfX2VyciwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgog ICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90 eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBib29sICwKICAgICAg ICAgICAgIGlvc19iYXNlJiAsIGlvc19iYXNlOjppb3N0YXRlJiAsCiAgICAgICAgICAgICBsb25n IGRvdWJsZSYgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRl cl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBib29sICwKICAg ICAgICAgICAgIGlvc19iYXNlJiAsIGlvc19iYXNlOjppb3N0YXRlJiAsCiAgICAgICAgICAgICBz dHJpbmdfdHlwZSYgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbW9u ZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6 ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog ICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp bmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAg ICAgZXhwbGljaXQKICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6 ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f cywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxs LCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBf X2ludGwsIF9fZiwgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1 dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgIGNo YXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAg eyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2YsIF9fZmlsbCwgX19kaWdpdHMpOyB9Cgog ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9wdXQoKSB7IH0KCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sLCBpb3Nf YmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgICAgbG9uZyBkb3VibGUgKSBjb25zdAogICAg ICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp dGVyX3R5cGUgX19zLCBib29sLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgICAg Y29uc3Qgc3RyaW5nX3R5cGUmICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxl OjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICBzdHJ1Y3QgbW9uZXlfYmFz ZQogIHsKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07 CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0 IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9T X2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWVkcywgY2hhciBfX3NwYWNlLCBjaGFyIF9f cG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAg Y2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFz ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg ICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90 eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsKICAgICAgc3Ry aW5nX3R5cGUgX01fY3Vycl9zeW1ib2w7CiAgICAgIHN0cmluZ190eXBlIF9NX3Bvc2l0aXZlX3Np Z247CiAgICAgIHN0cmluZ190eXBlIF9NX25lZ2F0aXZlX3NpZ247CiAgICAgIGludCBfTV9mcmFj X2RpZ2l0czsKICAgICAgcGF0dGVybiBfTV9wb3NfZm9ybWF0OwogICAgICBwYXR0ZXJuIF9NX25l Z19mb3JtYXQ7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KHNp emVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRp YWxpemVfbW9uZXlwdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KF9f Y19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm cykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hh cl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2Vw KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAg ICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n cm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190 eXBlCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19w b3NpdGl2ZV9zaWduKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24o KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAg IGludAogICAgICBmcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Zy YWNfZGlnaXRzKCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAg ICBuZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgp OyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCkgeyB9 CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QK ICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5 cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3Vz YW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29u c3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5 cGUKICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5 bWJvbDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWdu KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVh bCBzdHJpbmdfdHlwZQogICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fbmVnYXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19k aWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmly dHVhbCBwYXR0ZXJuCiAgICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBf TV9wb3NfZm9ybWF0OyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1h dCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICB2b2lkCiAg ICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7 CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBsb2Nh bGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJULCBf SW50bD46OmludGw7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAg IHZvaWQKICAgIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46Ol9NX2luaXRpYWxpemVfbW9uZXlw dW5jdChfX2NfbG9jYWxlICkKICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAg IG1vbmV5cHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9f Y2xvYyk7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAg Y2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRs PgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7CiAgICBwdWJs aWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19z dHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwg PSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNo YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9J bnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2Nh bGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01f Y19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxl KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFy VCwgX0ludGw+OjppbnRsOwoKCiAgc3RydWN0IG1lc3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVm IGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz IG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAg ICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2Nh bGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9 IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgY2F0YWxvZwogICAgICBvcGVu KGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25z dAogICAgICB7IHJldHVybiBkb19vcGVuKF9fcywgX19sb2MpOyB9CgogICAgICBzdHJpbmdfdHlw ZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0 cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2MsX19zZXQsX19t c2dpZCxfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAog ICAgICB7IHJldHVybiBkb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0 dWFsCiAgICAgIH5tZXNzYWdlcygpIHsgfQoKCgogICAgICB2aXJ0dWFsIGNhdGFsb2cKICAgICAg ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdAog ICAgICB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2dl dChjYXRhbG9nLCBpbnQsIGludCAsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QK ICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0KCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBkb19j bG9zZShjYXRhbG9nKSBjb25zdCB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxf Q2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4 cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9 IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXNfYnluYW1l KCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBtZXNzYWdlc19ieW5hbWU8Y2hhcj46Om1l c3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CiMgMTUzMiAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCBfX2MsIGNv bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+ KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQgX19jLCBjb25zdCBs b2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv YykuaXMoY3R5cGVfYmFzZTo6cHJpbnQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxl JiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz KGN0eXBlX2Jhc2U6OmNudHJsLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K ICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw ZV9iYXNlOjp1cHBlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp bmxpbmUgYm9vbCBpc2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7 IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjps b3dlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v bAogICAgaXNhbHBoYShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1 cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxwaGEs IF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg IGlzZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2Mp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3B1 bmN0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwdW5jdCwgX19jKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGlnaXQo X0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxj dHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnhkaWdpdCwgX19jKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbG51bShfQ2hh clQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBl PF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxudW0sIF9fYyk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJUIF9f YywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hh clQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmdyYXBoLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJUIF9fYywg Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ ID4oX19sb2MpLnRvdXBwZXIoX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b2xvd2Vy KF9fYyk7IH0KfQojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9z LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz X3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAg dHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVm X2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBf X251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf VHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwg X19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByaXZhdGU6CiAgICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBjaGFyX3R5cGUgX01f ZmlsbDsKICAgICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CgogICAgcHJvdGVjdGVkOgogICAgICBi YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwogICAgICBpb3N0 YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2lv c19mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAgICAg Y29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIGlubGlu ZSBjb25zdCBfX2N0eXBlX3R5cGUqCiAgICAgIF9NX2dldF9mY3R5cGVfaW9zKHZvaWQpCiAgICAg IHsgcmV0dXJuIF9NX2lvc19mY3R5cGU7IH0KCiAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4o dGhpcyk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsgfQoKICAgICAgaW5saW5lIGlvc3RhdGUKICAgICAgcmRz dGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsgfQoKICAgICAg aW5saW5lIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCkKICAgICAg ewogICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRl ID0gX19zdGF0ZTsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBf X3N0YXRlIHwgYmFkYml0OwogICAgICAgIGlmICgodGhpcy0+cmRzdGF0ZSgpICYgdGhpcy0+ZXhj ZXB0aW9ucygpKSkKICAgICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6Y2xl YXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICB9CgogICAgICBpbmxpbmUgdm9p ZAogICAgICBzZXRzdGF0ZShpb3N0YXRlIF9fc3RhdGUpCiAgICAgIHsgdGhpcy0+Y2xlYXIodGhp cy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGdvb2Qo KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQoKICAgICAgaW5s aW5lIGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUo KSAmIGVvZmJpdCkgIT0gMDsgfQoKICAgICAgaW5saW5lIGJvb2wKICAgICAgZmFpbCgpIGNvbnN0 CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJpdCkpICE9 IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGJhZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu ICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KCiAgICAgIGlubGluZSBpb3N0YXRl CiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRpb247IH0K CiAgICAgIGlubGluZSB2b2lkCiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkKICAg ICAgewogICAgICAgIF9NX2V4Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAgIHRoaXMtPmNsZWFy KF9NX3N0cmVhbWJ1Zl9zdGF0ZSk7CiAgICAgIH0KCgogICAgICBleHBsaWNpdAogICAgICBiYXNp Y19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpIDogaW9zX2Jhc2Uo KQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2lj X2lvcygpIHsgfQoKCiAgICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4q CiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoKICAgICAgaW5saW5l IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9IF9fdGll c3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgaW5saW5lIGJhc2ljX3N0 cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIF9NX3N0cmVhbWJ1ZjsgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0 cz4qCiAgICAgIHJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsK CiAgICAgIGJhc2ljX2lvcyYKICAgICAgY29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKTsK CiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu IF9NX2ZpbGw7IH0KCiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5cGUg X19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IF9NX2ZpbGw7CiAgICAgICAg X01fZmlsbCA9IF9fY2g7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKICAgICAgbG9j YWxlCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgY2hhcgogICAgICBu YXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICBjaGFyX3R5 cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCiAgICAgIGJh c2ljX2lvcygpIDogaW9zX2Jhc2UoKQogICAgICB7IH0KCiAgICAgIHZvaWQKICAgICAgaW5pdChi YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBib29sCiAgICAg IF9NX2NoZWNrX2ZhY2V0KGNvbnN0IGxvY2FsZTo6ZmFjZXQqIF9fZikKICAgICAgewogICAgICAg IGJvb2wgX19yZXQgPSBmYWxzZTsKICAgICAgICBpZiAoX19mKQogICAgICAgICAgX19yZXQgPSB0 cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgICBy ZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFjZXRzKGNv bnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9iYXNpY19pb3MudGNjIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy VCwgX1RyYWl0cz4qCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6cmRidWYoYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CiAgICAgIGJhc2ljX3N0cmVh bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3N0cmVhbWJ1ZjsKICAgICAgX01fc3Ry ZWFtYnVmID0gX19zYjsKICAgICAgdGhpcy0+Y2xlYXIoKTsKICAgICAgcmV0dXJuIF9fb2xkOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+ Ojpjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpCiAgICB7CgoKCgogICAgICBfV29yZHMq IF9fd29yZHMgPSAoX19yaHMuX01fd29yZF9saW1pdCA8PSBfU19sb2NhbF93b3JkcykgPwogICAg ICAgIF9NX3dvcmRfYXJyYXkgOiBuZXcgX1dvcmRzW19fcmhzLl9NX3dvcmRfbGltaXRdOwojIDYz ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBf Q2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhzLl9NX2NhbGxiYWNrczsKICAgICAgaWYgKF9fY2Ip CiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVyZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNr cyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93b3JkcyAhPSBfTV93b3JkX2FycmF5KQogICAg ICAgIGRlbGV0ZSBbXSBfTV93b3JkczsKICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAg ICAgIF9NX2NhbGxiYWNrcyA9IF9fY2I7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9f cmhzLl9NX3dvcmRfbGltaXQ7ICsrX19pKQogICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhzLl9N X3dvcmRzW19faV07CiAgICAgIGlmIChfTV93b3JkcyAhPSBfTV93b3JkX2FycmF5KQogICAgICAg IGRlbGV0ZSBbXSBfTV93b3JkczsKICAgICAgX01fd29yZHMgPSBfX3dvcmRzOwogICAgICBfTV93 b3JkX2xpbWl0ID0gX19yaHMuX01fd29yZF9saW1pdDsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhz LmZsYWdzKCkpOwogICAgICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+ cHJlY2lzaW9uKF9fcmhzLnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgp KTsKICAgICAgdGhpcy0+ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9u cyhfX3Jocy5leGNlcHRpb25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9l dmVudCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1Ry YWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgeyBy ZXR1cm4gX01faW9zX2ZjdHlwZS0+bmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIF9DaGFyVAogICAgYmFzaWNf aW9zPF9DaGFyVCwgX1RyYWl0cz46OndpZGVuKGNoYXIgX19jKSBjb25zdAogICAgeyByZXR1cm4g X01faW9zX2ZjdHlwZS0+d2lkZW4oX19jKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9jYWxlCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJh aXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgbG9jYWxlIF9fb2xk KHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9zX2Jhc2U6OmltYnVlKF9fbG9jKTsKICAgICAgX01f Y2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgIT0gMCkKICAgICAg ICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShfX2xvYyk7CiAgICAgIHJldHVybiBfX29sZDsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9p ZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmluaXQoYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CgogICAgICBpb3NfYmFzZTo6X01faW5pdCgpOwog ICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2FsZSk7CiAgICAgIF9NX3RpZSA9IDA7CiAg ICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcpOwogICAgICBfTV9leGNlcHRpb24gPSBnb29k Yml0OwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICBfTV9zdHJlYW1idWZfc3RhdGUg PSBfX3NiID8gZ29vZGJpdCA6IGJhZGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1Ry YWl0cz46Ol9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBp ZiAoaGFzX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2lvc19mY3R5cGUg PSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpOwoKICAgICAgaWYgKGhhc19mYWNldDxf X251bXB1dF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bXB1dCA9ICZ1c2VfZmFjZXQ8X19u dW1wdXRfdHlwZT4oX19sb2MpOwogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9f bG9jKSkKICAgICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9mYWNldDxfX251bWdldF90eXBlPihfX2xv Yyk7CiAgICB9Cn0KIyAyMTQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19p b3MuaCIgMiAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgi IDIgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2lj X2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBf Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBl IGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwog ICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19z dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVm IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVm IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsK ICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0 X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAg ZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAg ICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJl YW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7 CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBl JiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg IG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNl JikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsK CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19u KTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAg ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewog ICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFz ZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQg JiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj X2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAg IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9 CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBf X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQg bG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGlu dCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5m bGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFz ZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5v cGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAg ZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4o X19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVu c2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv cGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg ICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8 KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg ICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAg ICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg ICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFt X3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog ICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAg X19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVs bHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAg ICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGly KTsKCiAgICBwcml2YXRlOgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj0o Y29uc3QgX19vc3RyZWFtX3R5cGUmKTsKCiAgICAgIGJhc2ljX29zdHJlYW0oY29uc3QgX19vc3Ry ZWFtX3R5cGUmKTsKCiAgICB9OwoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vu dHJ5CiAgICB7CgogICAgICBib29sIF9NX29rOwogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxf VHJhaXRzPiYgX01fb3M7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBzZW50cnko YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpOwoKICAgICAgfnNlbnRyeSgpCiAg ICAgIHsKCiAgICAgICAgaWYgKF9NX29zLmZsYWdzKCkgJiBpb3NfYmFzZTo6dW5pdGJ1ZiAmJiAh dW5jYXVnaHRfZXhjZXB0aW9uKCkpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3Mu cmRidWYoKSAmJiBfTV9vcy5yZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgICAg X01fb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICB9CiAgICAgIH0KCiAg ICAgIG9wZXJhdG9yIGJvb2woKQogICAgICB7IHJldHVybiBfTV9vazsgfQogICAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjaGFy IF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBfX291dC53aWRlbihfX2MpKTsgfQoKCiAgdGVt cGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBf X2MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwg X1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9f b3V0LCBzaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8 Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBz dGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9D aGFyVCogX19zKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKCgog IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29u c3QgY2hhciogX19zKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry ZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9U cmFpdHM+JiBfX291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291 dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxj bGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiAmCiAgICBvcGVy YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCB1bnNpZ25l ZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25z dCBjaGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGVuZGwoYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gZmx1c2goX19v cy5wdXQoX19vcy53aWRlbignXG4nKSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IGVuZHMoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4g X19vcy5wdXQoX0NoYXJUKCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGZsdXNo KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3Mu Zmx1c2goKTsgfQoKfQoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0 cmVhbS50Y2MiIDEgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVh bS50Y2MiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5o IiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIg MwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwoj IDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0 MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMiAzCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAxIDMKIyAz NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8uaCIgMSAzCiMgMzgg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvZXJybm8uaCIg MiAzCgoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMSAz CiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGlu dXgvZXJybm8uaCIgMSAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oIiAxIDMKIyA1 ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRz L2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCmV4dGVybiBp bnQgZXJybm87CgoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIg MiAzCiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9ncmFtX2lu dm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgp9CiMgNjkg Ii91c3IvaW5jbHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgMzkgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAxIDMKIyAzOCAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvbG9jYWxlLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAz CgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVy biAiQyIgewojIDQ1ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKc3RydWN0IGxjb252CnsKCgog IGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgogIGNoYXIg Kmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5 X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFyICptb25fdGhvdXNhbmRz X3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICBjaGFy ICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJhY19kaWdp dHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hh ciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9z aWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKfTsKCgoKZXh0ZXJuIGNoYXIgKnNldGxvY2Fs ZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2NhbGUpIHRocm93ICgpOwoKCmV4 dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRocm93ICgpOwojIDEwOSAiL3Vz ci9pbmNsdWRlL2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMg MTEwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIF9fbG9jYWxlX3Qg X19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hhciAqX19sb2NhbGUs IF9fbG9jYWxlX3QgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gX19sb2NhbGVfdCBfX2R1 cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBf X2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgp9CiMgMzkgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAyIDMKCgoKCgpuYW1l c3BhY2Ugc3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5n IDo6bG9jYWxlY29udjsKfQojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j YWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfY3N0ZGxpYi5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xv Y2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYt cGMtbGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL3N0ZF9saW1pdHMuaCIgMwojIDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcu aCIgMSAzCiMgNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9zdGRfbGltaXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY2Zsb2F0LmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2NmbG9hdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMiAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9zdGRfbGltaXRzLmgiIDIgMwoKbmFtZXNwYWNlIHN0 ZCB7CgogICAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZSB7CiAgICAgICAgcm91bmRfaW5kZXRlcm1p bmF0ZSA9IC0xLAogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICAgICAgICByb3VuZF90 b19uZWFyZXN0ID0gMSwKICAgICAgICByb3VuZF90b3dhcmRfaW5maW5pdHkgPSAyLAogICAgICAg IHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAzCiAgICB9OwoKICAgIGVudW0gZmxvYXRfZGVu b3JtX3N0eWxlIHsKICAgICAgICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgICAgIGRl bm9ybV9hYnNlbnQgPSAwLAogICAgICAgIGRlbm9ybV9wcmVzZW50ID0gMQogICAgfTsKCiAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBudW1lcmljX2xpbWl0cyB7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIF9U cCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBz dGF0aWMgX1RwIG1heCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoK ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNv bnN0IGludCByYWRpeCA9IDA7CgogICAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkg eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgcm91bmRf ZXJyb3IoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIF9U cCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAg ICAgIHN0YXRpYyBfVHAgcXVpZXRfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxf VHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJl dHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCBkZW5vcm1fbWlu KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2JvdW5kZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g PSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy bzsKICAgIH07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfaW5maW5p dHkoKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX3F1aWV0X05hTigp OwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfc2lnbmFsaW5nX05hTigp OwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfZGVub3JtX21pbigpOwoK ICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGJvb2w+IHsKICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBib29s IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICAgIHN0YXRpYyBi b29sIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw ID0gMjsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9 IDI7CiAgICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVy biAwOyB9CiAgICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAg eyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7 CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v cm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh bHNlOwoKICAgICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQogICAgICAgIHN0YXRpYyBib29sIHF1aWV0X05h TigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQogICAg ICAgIHN0YXRpYyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KICAgICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkg dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CgogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96 ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyPiB7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg ICBzdGF0aWMgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0xMjgpOyB9CiAg ICAgICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEyNzsgfQoK ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMxMCA9IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0 IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAg ICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJv dygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7 CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVp ZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v cm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY2hhciBpbmZpbml0eSgpIHRocm93KCkK ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBj aGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFy PigwKTsgfQogICAgICAgIHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgY2hhciBk ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDAp OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw cyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNf bGltaXRzPHNpZ25lZCBjaGFyPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh bGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuICgtMTI4KTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgo KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzID0gNzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAg ICBzdGF0aWMgc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAw OyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg ICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg PSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu ZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9 IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g ZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg PSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0 YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNp Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVk IGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJv dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CgogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93 YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVu c2lnbmVkIGNoYXI+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9 IHRydWU7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAgICAg ICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3co KQogICAgICAgIHsgcmV0dXJuIDI1NTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 cyA9IDg7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRp YyB1bnNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQog ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAg IHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50 IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu aXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7 CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu b3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm YWxzZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAg ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBz dGF0aWMgdW5zaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQg Y2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVub3Jt X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0 cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVy aWNfbGltaXRzPHNob3J0PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6 ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuICgtMzI3NjctMSk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIDMyNzY3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gMTU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9 IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGlj IHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0 YXRpYyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9Cgog ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9 IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0 YXRpYyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDxzaG9ydD4oMCk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyBz aG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQoKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBm YWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog ICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9y dD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAg ICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVy biAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkKICAgICAg ICB7IHJldHVybiA2NTUzNTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE2 OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1 ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgdW5z aWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAg ICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5 ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt X2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxz ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0 YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVk IHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGRl bm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg c2hvcnQ+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv cmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg bnVtZXJpY19saW1pdHM8aW50PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh bGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgaW50IG1pbigpIHRocm93KCkKICAgICAgICB7 IHJldHVybiAoLTIxNDc0ODM2NDctMSk7IH0KICAgICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93 KCkKICAgICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzID0gMzE7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg ICAgc3RhdGljIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAg ICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7 IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3Rh dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg ICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDxpbnQ+KDApOyB9CiAgICAgICAgc3RhdGljIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAg ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQg c2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+ KDApOyB9CiAgICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0 ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyB1 bnNpZ25lZCBpbnQgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBz dGF0aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAoMjE0NzQ4 MzY0NyAqIDJVICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsK ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p bnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7 CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVuc2ln bmVkIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBz dGF0aWMgdW5zaWduZWQgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu IDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAg c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu dDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2ln bmVkIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 dW5zaWduZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lnbmFsaW5n X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+ KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KCiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1 bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3Rh dGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3pl cm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmc+IHsK ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAg IHN0YXRpYyBsb25nIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDdM LTEpOyB9CiAgICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu IDIxNDc0ODM2NDdMOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7CiAg ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl Z2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGxvbmcgZXBz aWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGxvbmcg cm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt aW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg PSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRf ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgbG9uZyBp bmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsg fQogICAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGluZ19O YU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAg ICAgICBzdGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PGxvbmc+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1 OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRp YyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55 bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5 bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8 PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4gewogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMg dW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKDIxNDc0ODM2NDdM ICogMlVMICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsKICAg ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl Z2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3Rh dGljIHVuc2lnbmVkIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g MDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBz dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50 OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAg ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNp Z25lZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNpZ25h bGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg bG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhy b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9Cgog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv d2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxs b25nIGxvbmc+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy dWU7CgogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0 dXJuICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMLTEpOyB9CiAgICAgICAgc3RhdGljIGxvbmcgbG9u ZyBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gOTIyMzM3MjAzNjg1NDc3NTgwN0xMOyB9 CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjM7CiAgICAgICAgc3RhdGljIGNv bnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l ZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBj b25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgZXBzaWxvbigpIHRo cm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGxvbmcgbG9uZyByb3Vu ZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7 CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBsb25nIGxvbmcg aW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25n PigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMg bG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVub3JtX21p bigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9 CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu ZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1p dHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1pbigp IHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxv bmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4 MDdMTCAqIDJVTEwgKyAxKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0 OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy dWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVu c2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0K ICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l bnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt ID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv c3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbmZpbml0eSgp IHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+ KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJv dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsg fQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93 KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9 CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KCiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93 YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGZs b2F0PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK ICAgICAgICBzdGF0aWMgZmxvYXQgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMTc1 NDk0MzVlLTM4RjsgfQogICAgICAgIHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJvdygpCiAgICAgICAg eyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln aXRzID0gMjQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDc7CiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh Y3QgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBz dGF0aWMgZmxvYXQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjE5MjA5Mjkw ZS0wN0Y7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg ICAgeyByZXR1cm4gMS4wZjsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu dCA9IC0xMjU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zNzsK ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsKICAgICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzg7CgogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x dWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93 KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KICAgICAgICBzdGF0 aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PGZsb2F0PigwKTsgfQogICAgICAgIHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3co KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigwKTsgfQogICAgICAgIHN0YXRp YyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PGZsb2F0PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19i ZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91 bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1 Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkK ICAgICAgICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAgICAgIHN0YXRp YyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1 N2UrMzA4OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE1OwogICAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9 IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAg ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGRvdWJsZSBlcHNp bG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5MjUwMzEzMWUtMTY7IH0K ICAgICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0 dXJuIDEuMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMDIx OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3OwogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAgICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudDEwID0gMzA4OwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf TmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f bG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMg ZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxk b3VibGU+KDApOyB9CiAgICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3co KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0 aWMgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8ZG91YmxlPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBm YWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz c19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBz dHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+IHsKICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBt aW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMy4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkz Mkw7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMOyB9CgogICAgICAgIHN0YXRpYyBj b25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9 IDE5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9 IDI7CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAg eyByZXR1cm4gMS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlMOyB9CiAgICAgICAgc3RhdGljIGxv bmcgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMEw7IH0K CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTYzODE7CiAgICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC00OTMxOwogICAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQxMCA9IDQ5MzI7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp bml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm YWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNl OwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl bm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g ZmFsc2U7CgogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAg ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0 aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBzaWdu YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91 YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3co KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQoKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t b2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsK ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh cmRfemVybzsKICAgIH07Cgp9CiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9s b2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9tZW1vcnkuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9s b2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3NidWZfaXRlci5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xv Y2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2NjdHlwZS5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xv Y2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3R5cGVp bmZvIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMwojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyAzNCAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNl IF9fY3h4YWJpdjEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTAgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CiAgY2xhc3MgdHlw ZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJp dmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5 cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAq X19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAq X19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCiAgICBjb25zdCBjaGFyKiBuYW1lKCkg Y29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZTsgfQojIDg2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL3R5cGVpbmZvIiAzCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBj b25zdAogICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJh dG9yPT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9 PSBfX2FyZy5fX25hbWU7IH0KCiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBf X2FyZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGlj OgoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwg Ym9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19k b19jYXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAg dmlydHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9p bmZvICpfX3RhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpf cHRyKSBjb25zdDsKICB9OwoKICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24KICB7 CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2Nh c3QoKSB0aHJvdygpOwogIH07CgogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0aW9u CiAgewogIHB1YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwg fmJhZF90eXBlaWQgKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDMgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlCiAgICBsb2NhbGU6OmNvbWJpbmUo Y29uc3QgbG9jYWxlJiBfX290aGVyKQogICAgewogICAgICBsb2NhbGUgX19jb3B5KCp0aGlzKTsK ICAgICAgX19jb3B5Ll9NX2ltcGwtPl9NX3JlcGxhY2VfZmFjZXQoX19vdGhlci5fTV9pbXBsLCAm X0ZhY2V0OjppZCk7CiAgICAgIHJldHVybiBfX2NvcHk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAog ICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKICAgIHsKICAgICAgdHlwZWRl ZiBzdGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsKICAgICAgY29uc3QgX19jb2xs YXRlX3R5cGUqIF9fZmNvbGwgPSAmdXNlX2ZhY2V0PF9fY29sbGF0ZV90eXBlPigqdGhpcyk7CiAg ICAgIHJldHVybiAoX19mY29sbC0+Y29tcGFyZShfX3MxLmRhdGEoKSwgX19zMS5kYXRhKCkgKyBf X3MxLmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCks IF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs ZSYgX19sb2MpCiAgICB7CiAgICAgIHR5cGVkZWYgbG9jYWxlOjpfSW1wbDo6X192ZWNfZmFjZXQg X192ZWNfZmFjZXQ7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2luZGV4OwogICAg ICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAg Y29uc3QgbG9jYWxlOjpmYWNldCogX19mcCA9ICgqX19mYWNldClbX19pXTsKICAgICAgaWYgKF9f ZnAgPT0gMCB8fCBfX2kgPj0gX19mYWNldC0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfYmFkX2Nh c3QoKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9GYWNldCY+KCpfX2ZwKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNv bnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkKICAgIHsKICAgICAgdHlwZWRlZiBsb2NhbGU6Ol9J bXBsOjpfX3ZlY19mYWNldCBfX3ZlY19mYWNldDsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6 aWQuX01faW5kZXg7CiAgICAgIF9fdmVjX2ZhY2V0KiBfX2ZhY2V0ID0gX19sb2MuX01faW1wbC0+ X01fZmFjZXRzOwogICAgICByZXR1cm4gKF9faSA8IF9fZmFjZXQtPnNpemUoKSAmJiAoKl9fZmFj ZXQpW19faV0gIT0gMCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXIs IHR5cGVuYW1lIF9DaGFyVD4KICAgIF9Jbkl0ZXIKICAgIF9fbWF0Y2hfcGFyYWxsZWwoX0luSXRl ciBfX3MsIF9Jbkl0ZXIgX19lbmQsIGludCBfX250YXJncywKICAgICAgICAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9fdGFyZ2V0cywKICAgICAgICAgICAgICAgICAg ICAgaW50KiBfX21hdGNoZXMsIGludCYgX19yZW1haW4sIGJvb2wmIF9fZW9mKQogICAgewogICAg ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CiAgICAgIF9fZW9m ID0gZmFsc2U7CiAgICAgIGZvciAoaW50IF9fdGkgPSAwOyBfX3RpIDwgX19udGFyZ3M7ICsrX190 aSkKICAgICAgICBfX21hdGNoZXNbX190aV0gPSBfX3RpOwogICAgICBfX3JlbWFpbiA9IF9fbnRh cmdzOwogICAgICBzaXplX3QgX19wb3MgPSAwOwogICAgICBkbwogICAgICAgIHsKICAgICAgICAg IGludCBfX3RpID0gMDsKICAgICAgICAgIHdoaWxlIChfX3RpIDwgX19yZW1haW4gJiYgX19wb3Mg PT0gX190YXJnZXRzW19fbWF0Y2hlc1tfX3RpXV0uc2l6ZSgpKQogICAgICAgICAgICArK19fdGk7 CiAgICAgICAgICBpZiAoX190aSA9PSBfX3JlbWFpbikKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGlmIChfX3BvcyA9PSAwKSBfX3JlbWFpbiA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIF9f czsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fcyA9PSBfX2VuZCkKICAgICAgICAgICAg X19lb2YgPSB0cnVlOwogICAgICAgICAgYm9vbCBfX21hdGNoZWQgPSBmYWxzZTsKICAgICAgICAg IGZvciAoaW50IF9fdGkyID0gMDsgX190aTIgPCBfX3JlbWFpbjsgKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSYgX190YXJnZXQgPSBfX3RhcmdldHNbX19t YXRjaGVzW19fdGkyXV07CiAgICAgICAgICAgICAgaWYgKF9fcG9zIDwgX190YXJnZXQuc2l6ZSgp KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX19lb2YgfHwgX190YXJn ZXRbX19wb3NdICE9ICpfX3MpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgX19tYXRjaGVzW19fdGkyXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsKICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgX19tYXRjaGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAr K19fdGkyOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19tYXRjaGVkKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAg ICAgfQogICAgICAgICAgZm9yIChpbnQgX190aTMgPSAwOyBfX3RpMyA8IF9fcmVtYWluOykKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX3BvcyA+IF9fdGFyZ2V0c1tfX21hdGNoZXNb X190aTNdXS5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbWF0 Y2hlc1tfX3RpM10gPSBfX21hdGNoZXNbLS1fX3JlbWFpbl07CiAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICsrX190aTM7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIHdoaWxlIChfX3JlbWFpbik7CiAgICAgIHJldHVybiBfX3M7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9Gb3JtYXRfY2FjaGU8X0No YXJUPjo6X0Zvcm1hdF9jYWNoZSgpCiAgICA6IF9NX3ZhbGlkKHRydWUpLCBfTV91c2VfZ3JvdXBp bmcoZmFsc2UpCiAgICB7IH0KCiAgdGVtcGxhdGU8PgogICAgX0Zvcm1hdF9jYWNoZTxjaGFyPjo6 X0Zvcm1hdF9jYWNoZSgpOwoKICB0ZW1wbGF0ZTw+CiAgICBfRm9ybWF0X2NhY2hlPHdjaGFyX3Q+ OjpfRm9ybWF0X2NhY2hlKCk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZvaWQK ICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X01fcG9wdWxhdGUoaW9zX2Jhc2UmIF9faW8pCiAg ICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jICgpOwogICAgICBudW1wdW5jdDxf Q2hhclQ+IGNvbnN0JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7 CiAgICAgIF9NX3RydWVuYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICBfTV9mYWxzZW5hbWUg PSBfX25wLmZhbHNlbmFtZSgpOwogICAgICBfTV90aG91c2FuZHNfc2VwID0gX19ucC50aG91c2Fu ZHNfc2VwKCk7CiAgICAgIF9NX2RlY2ltYWxfcG9pbnQgPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsK ICAgICAgX01fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIF9NX3VzZV9ncm91cGlu ZyA9IF9NX2dyb3VwaW5nLnNpemUoKSAhPSAwICYmIF9NX2dyb3VwaW5nLmRhdGEoKVswXSAhPSAw OwogICAgICBfTV92YWxpZCA9IHRydWU7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgdm9pZAogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjoKICAgIF9TX2NhbGxiYWNr KGlvc19iYXNlOjpldmVudCBfX2V2LCBpb3NfYmFzZSYgX19pb3MsIGludCBfX2l4KSB0aHJvdygp CiAgICB7CiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfX2l4KTsKICAgICAgc3dpdGNo IChfX2V2KQogICAgICAgIHsKICAgICAgICBjYXNlIGlvc19iYXNlOjplcmFzZV9ldmVudDoKICAg ICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFyVD4qPihfX3ApOwog ICAgICAgICAgX19wID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgaW9zX2Jhc2U6 OmNvcHlmbXRfZXZlbnQ6CgogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsgX19wID0g bmV3IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjsgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAg ICAgICB7IH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgaW9zX2Jhc2U6OmltYnVlX2V2 ZW50OgogICAgICAgICAgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKS0+ X01fdmFsaWQgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KgogICAgX0Zv cm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19nZXQoaW9zX2Jhc2UmIF9faW9zKQogICAgewogICAgICBp ZiAoIV9TX3B3b3JkX2l4KQogICAgICAgIF9TX3B3b3JkX2l4ID0gaW9zX2Jhc2U6OnhhbGxvYygp OwogICAgICB2b2lkKiYgX19wID0gX19pb3MucHdvcmQoX1NfcHdvcmRfaXgpOwoKCiAgICAgIGlm IChfX3AgPT0gMCkKICAgICAgICB7CiAgICAgICAgICBhdXRvX3B0cjxfRm9ybWF0X2NhY2hlPF9D aGFyVD4gPiBfX2FwKG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4pOwogICAgICAgICAgX19pb3Mu cmVnaXN0ZXJfY2FsbGJhY2soJl9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfY2FsbGJhY2ssCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19wd29yZF9peCk7CiAgICAgICAgICBf X3AgPSBfX2FwLnJlbGVhc2UoKTsKICAgICAgICB9CiAgICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJU PiogX19uY3AgPSBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFyVD4qPihfX3ApOwogICAg ICBpZiAoIV9fbmNwLT5fTV92YWxpZCkKICAgICAgICBfX25jcC0+X01fcG9wdWxhdGUoX19pb3Mp OwoKICAgICAgcmV0dXJuIF9fbmNwOwogICAgfQojIDI1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjoKICAgIF9NX2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBpb3NfYmFzZSYgLAogICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCBjaGFyKiAsCiAgICAgICAgICAgICAgIGludCYg LCBib29sICkgY29uc3QKICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51 bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoKICAgIF9NX2V4dHJhY3Qo aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2JlZywKICAgICAgICAgICAgICAgaXN0cmVhbWJ1 Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9fYmFzZSwKICAgICAg ICAgICAgICAgYm9vbCBfX2ZwKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikg Y29uc3QKICAgIHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxw aGEpKQogICAgICAgIHsKCgoKCgoKICAgICAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsK ICAgICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwg X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgICAgIGNoYXIqIF9f c2FuaXR5OwogICAgICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgICAgICBs b25nIF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgICAgIGlm ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgJiYgX19sIDw9IDEK ICAgICAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcg JiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgICAgICBfX3YgPSBfX2w7CiAg ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg ICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBfRm9ybWF0X2Nh Y2hlPGNoYXJfdHlwZT4gX19mY2FjaGVfdHlwZTsKICAgICAgICAgIF9fZmNhY2hlX3R5cGUqIF9f Zm10ID0gX19mY2FjaGVfdHlwZTo6X1NfZ2V0KF9faW8pOwogICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0 IGNoYXJfdHlwZSogX19mYWxzZSA9IF9fZm10LT5fTV9mYWxzZW5hbWUuY19zdHIoKTsKICAgICAg ICAgIGNvbnN0IHNpemVfdCBfX3RydWVsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX190cnVl KSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZWxlbiA9IF9fdHJhaXRzX3R5cGU6 Omxlbmd0aChfX2ZhbHNlKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19wb3MgPSAwOyBf X2JlZyAhPSBfX2VuZDsgKytfX3BvcykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJf dHlwZSBfX2MgPSAqX19iZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX2MgPT0g X19mYWxzZVtfX3Bvc107CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1 ZVtfX3Bvc107CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg IGVsc2UgaWYgKF9fdGVzdGYgJiYgX19wb3MgPT0gX19mYWxzZWxlbikKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX3BvcyA9 PSBfX3RydWVsZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9 CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19i YXNlOjplb2ZiaXQ7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2Vyciwgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNb MzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBf X3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgX19s ID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAm IGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpf X3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAg JiYgX19sID49ICgtMzI3NjctMSkgJiYgX19sIDw9IDMyNzY3KQogICAgICAgIF9fdiA9IHN0YXRp Y19jYXN0PHNob3J0PihfX2wpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6 OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJU LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgaW50 JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsKICAg ICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy LCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAo Kl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJj LCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi aXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcg JiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwCiAgICAgICAgICAmJiBfX2wgPj0gKC0yMTQ3 NDgzNjQ3IC0xKSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICBfX3YgPSBzdGF0aWNfY2Fz dDxpbnQ+KF9fbCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192 KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50 IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0 cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19z YW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAg ICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpf X2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fbDsKICAgICAgZWxzZQog ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5 cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAg ICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4 dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsK CgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7 CiAgICAgIGxvbmcgbG9uZyBfX2xsID0gc3RydG9sbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNl KTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9f c2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRp b24gKCkpID09IDApCiAgICAgICAgX192ID0gX19sbDsKICAgICAgZWxzZQogICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0 ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFy IF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChf X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAg IGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAg dW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsK ICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2Fu aXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24g KCkpID09IDAKICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUpCiAgICAgICAgX192ID0gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0g aW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5 cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJj WzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciog X19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25l ZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBp ZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0g X194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0g MAogICAgICAgICAgJiYgX191bCA8PSAoMjE0NzQ4MzY0NyAqIDJVICsgMSkpCiAgICAgICAgX192 ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAg ICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywg aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hh ciBfX3h0cmNbMzJdID0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0 KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAg ICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAg ICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2Up OwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19z YW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlv biAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX3VsOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRl cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewoKCgogICAgICBj aGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAg ICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAg ICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdWxsID0gc3RydG91bGwoX194dHJjLCAmX19zYW5pdHks IF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg ICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5v X2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdWxsOwogICAgICBlbHNlCiAgICAg ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIg X194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9f YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBj aGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CgogICAgICBm bG9hdCBfX2YgPSBzdHJ0b2YoX194dHJjLCAmX19zYW5pdHkpOwoKCgogICAgICBpZiAoIShfX2Vy ciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYm ICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAg ICBfX3YgPSBfX2Y7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0 ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9f dikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGlu dCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194 dHJjLCBfX2Jhc2UsIHRydWUpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgZG91YmxlIF9fZCA9IHN0cnRvZChfX3h0cmMsICZf X3Nhbml0eSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg ICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5v X2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fZDsKICAgICAgZWxzZQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewoKCgogICAgICBj aGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1ZSk7CgoKICAg ICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAg ICBsb25nIGRvdWJsZSBfX2xkID0gc3RydG9sZChfX3h0cmMsICZfX3Nhbml0eSk7CiAgICAgIGlm ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBf X3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAw KQogICAgICAgIF9fdiA9IF9fbGQ7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFz ZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KIyA2NzggIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg dm9pZComIF9fdikgY29uc3QKICAgIHsKCiAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdz IGZtdGZsYWdzOwogICAgICBmbXRmbGFncyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsKICAgICAgZm10 ZmxhZ3MgX19mbXRtYXNrID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlvc19iYXNlOjpiYXNlZmll bGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBp b3NfYmFzZTo6aW50ZXJuYWwpOwogICAgICBfX2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwg KGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKCgoKCiAgICAgIGNoYXIgX194 dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVn LCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hh ciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB2b2lk KiBfX3ZwID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RydG91bChfX3h0cmMsICZfX3Nhbml0 eSwgX19iYXNlKSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAg ICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vy cm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdnA7CiAgICAgIGVsc2UKICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCgogICAgICBfX2lvLmZsYWdzKF9fZm10 KTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9fcGFkKF9PdXRJ dGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZyk7CgogIHRlbXBsYXRlIDx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+CiAgICBfUmFJdGVyCiAgICBfX3BhZChfUmFJ dGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywKICAgICAgICAgIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmaWxsX24oX19zLCBfX2ZpbGwpOwogICAg ICByZXR1cm4gX19zICsgX19wYWRkaW5nOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlciwgdHlwZW5hbWUgX1RhZz4KICAgIF9PdXRJdGVyCiAgICBf X3BhZChfT3V0SXRlciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcsIF9UYWcpCiAg ICB7CiAgICAgIHdoaWxlICgtLV9fcGFkZGluZyA+PSAwKSB7ICpfX3MgPSBfX2ZpbGw7ICsrX19z OyB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgaW5saW5lIF9PdXRJdGVyCiAgICBfX3BhZChfT3V0SXRl ciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcpCiAgICB7CiAgICAgIHJldHVybiBf X3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nLAogICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9PdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7CiAgICB9Cgog IHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0 ZXIKICAgIF9fcGFkX251bWVyaWMoX091dEl0ZXIgX19zLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgLAog ICAgICAgICAgICAgICAgICBfQ2hhclQgLCBpbnQgLAogICAgICAgICAgICAgICAgICBfQ2hhclQg Y29uc3QqICwgX0NoYXJUIGNvbnN0KiAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCog KQogIHsKCiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No YXJUPgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+CiAgICBfX3BhZF9udW1lcmljKG9z dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX3MsIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdz LAogICAgICAgICAgICAgICAgICBfQ2hhclQgX19maWxsLCBpbnQgX193aWR0aCwgX0NoYXJUIGNv bnN0KiBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQ2hhclQgY29uc3QqIF9fbWlkZGxlLCBf Q2hhclQgY29uc3QqIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJh dG9yPF9DaGFyVD4gX19vdXRfaXRlcjsKICAgICAgaW50IF9fcGFkZGluZyA9IF9fd2lkdGggLSAo X19sYXN0IC0gX19maXJzdCk7CiAgICAgIGlmIChfX3BhZGRpbmcgPCAwKQogICAgICAgIF9fcGFk ZGluZyA9IDA7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FmbGFncyA9IF9fZmxhZ3MgJiBp b3NfYmFzZTo6YWRqdXN0ZmllbGQ7CiAgICAgIGJvb2wgX190ZXN0ZmllbGQgPSBfX3BhZGRpbmcg PT0gMCB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6bGVmdAogICAgICAgICAgICAgICAgICAgICAg ICAgfHwgX19hZmxhZ3MgPT0gaW9zX2Jhc2U6OmludGVybmFsOwoKCiAgICAgIGlmIChfX2ZpcnN0 ICE9IF9fbWlkZGxlKQogICAgICAgIHsKICAgICAgICAgIGlmICghX190ZXN0ZmllbGQpCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAg ICAgICAgICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICBjb3B5KF9f Zmlyc3QsIF9fbWlkZGxlLCBfX3MpOwogICAgICAgIH0KICAgICAgX19vdXRfaXRlciBfX3MyID0g X19zOwoKICAgICAgaWYgKF9fcGFkZGluZyAmJiBfX2FmbGFncyAhPSBpb3NfYmFzZTo6bGVmdCkK ICAgICAgICB7CiAgICAgICAgICBfX3BhZChfX3MyLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAg ICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgIH0KICAgICAgX19vdXRfaXRlciBfX3MzID0gY29w eShfX21pZGRsZSwgX19sYXN0LCBfX3MyKTsKICAgICAgaWYgKF9fcGFkZGluZykKICAgICAgICBf X3BhZChfX3MzLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAgIHJldHVybiBfX3MzOwogICAgfQoK ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJ dGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAg ICB7CiAgICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2Nh Y2hlPF9DaGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxh Z3MgPSBfX2lvLmZsYWdzKCk7CgogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFs cGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsK ICAgICAgICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxsLCBmYWxz ZSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfX2ZpcnN0OwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2xhc3Q7CiAg ICAgICAgICBpZiAoX192KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19maXJzdCA9IF9f Zm10LT5fTV90cnVlbmFtZS5kYXRhKCk7CiAgICAgICAgICAgICAgX19sYXN0ID0gX19maXJzdCAr IF9fZm10LT5fTV90cnVlbmFtZS5zaXplKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZmlyc3QgPSBfX2ZtdC0+X01fZmFsc2VuYW1l LmRhdGEoKTsKICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsgX19mbXQtPl9NX2ZhbHNl bmFtZS5zaXplKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0 LCBfX3MpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCgogIHRlbXBsYXRl IDx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAgICBfX2dyb3VwX2RpZ2l0cyhfQ2hhclQq IF9fcywgX0NoYXJUIF9fZ3JzZXAsIGNoYXIgY29uc3QqIF9fZ3JvdXBpbmcsCiAgICAgICAgICAg ICAgICAgICAgY2hhciBjb25zdCogX19ncmVuZCwgX0NoYXJUIGNvbnN0KiBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19sYXN0KQogICAgewogICAgICBpZiAoX19s YXN0IC0gX19maXJzdCA+ICpfX2dyb3VwaW5nKQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9f Z3JvdXBfZGlnaXRzKF9fcywgX19ncnNlcCwKICAgICAgICAgICAgICAoX19ncm91cGluZyArIDEg PT0gX19ncmVuZCA/IF9fZ3JvdXBpbmcgOiBfX2dyb3VwaW5nICsgMSksCiAgICAgICAgICAgICAg X19ncmVuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ3JvdXBpbmcpOwogICAgICAgICAgX19maXJz dCA9IF9fbGFzdCAtICpfX2dyb3VwaW5nOwogICAgICAgICAgKl9fcysrID0gX19ncnNlcDsKICAg ICAgICB9CiAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsK ICAgICAgICB9CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBf X3M7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy LCB0eXBlbmFtZSBfVmFsdWVUPgogICAgX091dEl0ZXIKICAgIF9fb3V0cHV0X2ludGVnZXIoX091 dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgYm9vbCBfX25lZywKICAg ICAgICAgICAgICBfVmFsdWVUIF9fdikKICAgIHsKCiAgICAgIGNvbnN0IGxvbmcgX01fcm9vbSA9 IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCAqIDIgKyA0OwogICAgICBfQ2hhclQg X19kaWdpdHNbX01fcm9vbV07CiAgICAgIF9DaGFyVCogX19mcm9udCA9IF9fZGlnaXRzICsgX01f cm9vbTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAg ICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hlPF9D aGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgY2hhciBjb25zdCogX190YWJsZSA9IF9fZm10LT5f U19saXRlcmFscyArIF9fZm10LT5fU19kaWdpdHM7CgogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg X19iYXNlZmllbGQgPSAoX19mbGFncyAmIF9faW8uYmFzZWZpZWxkKTsKICAgICAgX0NoYXJUKiBf X3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpo ZXgpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6dXBwZXJjYXNl KQogICAgICAgICAgICBfX3RhYmxlICs9IDE2OwogICAgICAgICAgZG8KICAgICAgICAgICAgKi0t X19mcm9udCA9IF9fdGFibGVbX192ICYgMTVdOwogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDQp ICE9IDApOwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAgICAgICAgICBpZiAoX19m bGFncyAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICot LV9fZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQtPl9TX3ggKwogICAgICAgICAgICAg ICAgICAgICAgICgoX19mbGFncyAmIGlvc19iYXNlOjp1cHBlcmNhc2UpID8gMSA6IDApXTsKICAg ICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICB7 CiAgICAgICAgICBkbwogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiA3XTsK ICAgICAgICAgIHdoaWxlICgoX192ID4+PSAzKSAhPSAwKTsKICAgICAgICAgIGlmIChfX2ZsYWdz ICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8Y2hhcj4o Kl9fZnJvbnQpICE9IF9fdGFibGVbMF0pCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxl WzBdOwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAgICAgICAgfQogICAgICBlbHNl CiAgICAgICAgewoKICAgICAgICAgIGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxl W19fdiAlIDEwXTsKICAgICAgICAgIHdoaWxlICgoX192IC89IDEwKSAhPSAwKTsKICAgICAgICAg IF9fc2lnbl9lbmQgPSBfX2Zyb250OwoKICAgICAgICAgIGlmIChfX25lZyB8fCAoX19mbGFncyAm IGlvc19iYXNlOjpzaG93cG9zKSkKICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fZm10LT5fU19s aXRlcmFsc1tfX2ZtdC0+X1NfcGx1cyAtIF9fbmVnXTsKICAgICAgICB9CgoKICAgICAgaWYgKCFf X2ZtdC0+X01fdXNlX2dyb3VwaW5nICYmICFfX2lvLndpZHRoKCkpCiAgICAgICAgcmV0dXJuIGNv cHkoX19mcm9udCwgX19kaWdpdHMgKyBfTV9yb29tLCBfX3MpOwoKICAgICAgaWYgKCFfX2ZtdC0+ X01fdXNlX2dyb3VwaW5nKQogICAgICAgIHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFn cywgX19maWxsLCBfX2lvLndpZHRoKDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f ZnJvbnQsIF9fc2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CgogICAgICBfQ2hhclQqIF9f cCA9IF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19mcm9udCA8IF9fc2lnbl9lbmQpCiAgICAgICAg Kl9fcCsrID0gKl9fZnJvbnQrKzsKICAgICAgY29uc3QgY2hhciogX19nciA9IF9fZm10LT5fTV9n cm91cGluZy5kYXRhKCk7CiAgICAgIF9fZnJvbnQgPSBfX2dyb3VwX2RpZ2l0cyhfX3AsIF9fZm10 LT5fTV90aG91c2FuZHNfc2VwLCBfX2dyLAogICAgICAgIF9fZ3IgKyBfX2ZtdC0+X01fZ3JvdXBp bmcuc2l6ZSgpLCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jvb20pOwogICAgICByZXR1cm4g X19wYWRfbnVtZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0aCgwKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19kaWdpdHMsIF9fcCwgX19mcm9udCk7CiAgICB9CgogIHRl bXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIK ICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3Ms IGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsK ICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192OwogICAgICBib29sIF9fbmVnID0gZmFsc2U7 CiAgICAgIGlmIChfX3YgPCAwKQogICAgICAgIHsKICAgICAgICAgIF9fbmVnID0gdHJ1ZTsKICAg ICAgICAgIF9fdXYgPSAtX191djsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291dHB1dF9pbnRl Z2VyKF9fcywgX19pbywgX19maWxsLCBfX25lZywgX191dik7CiAgICB9CgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9w dXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNl JiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBj b25zdAogICAgeyByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFs c2UsIF9fdik7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9f cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcg bG9uZyBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3V2ID0gX192 OwogICAgICBib29sIF9fbmVnID0gZmFsc2U7CiAgICAgIGlmIChfX3YgPCAwKQogICAgICAgIHsK ICAgICAgICAgIF9fbmVnID0gdHJ1ZTsKICAgICAgICAgIF9fdXYgPSAtX191djsKICAgICAgICB9 CiAgICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19iLCBfX2ZpbGwsIF9fbmVnLCBf X3V2KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0 ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19w dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9fb3V0cHV0 X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIGZhbHNlLCBfX3YpOyB9CgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg IF9PdXRJdGVyCiAgICBfX291dHB1dF9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lv LCBfQ2hhclQgX19maWxsLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fc3B0ciwg c2l6ZV90IF9fc2xlbikKICAgIHsKCiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBvc3RyZWFtYnVmX2l0ZXJh dG9yPF9DaGFyVCwgX1RyYWl0cz4KICAgIF9fb3V0cHV0X2Zsb2F0KG9zdHJlYW1idWZfaXRlcmF0 b3I8X0NoYXJULCBfVHJhaXRzPiBfX3MsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAg ICAgX0NoYXJUIF9fZmlsbCwgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3QgX19zbGVuKQogICAg ewogICAgICBzaXplX3QgX19wYWRkaW5nID0gX19pby53aWR0aCgpID4gc3RyZWFtc2l6ZShfX3Ns ZW4pID8KICAgICAgICAgICAgICAgICAgICAgICAgIF9faW8ud2lkdGgoKSAtX19zbGVuIDogMDsK ICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBj b25zdCYgX19jdCA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBpb3Nf YmFzZTo6Zm10ZmxhZ3MgX19hZGpmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1 c3RmaWVsZDsKICAgICAgY29uc3QgY2hhciogY29uc3QgX19lcHRyID0gX19zcHRyICsgX19zbGVu OwoKICAgICAgaWYgKF9fYWRqZmllbGQgPT0gaW9zX2Jhc2U6OmludGVybmFsKQogICAgICAgewoK ICAgICAgICAgaWYgKF9fc3B0ciA8IF9fZXB0ciAmJiAoKl9fc3B0ciA9PSAnKycgfHwgKl9fc3B0 ciA9PSAnLScpKQogICAgICAgICAgIHsKICAgICAgICAgICAgIF9fcyA9IF9fY3Qud2lkZW4oKl9f c3B0cik7CiAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICsrX19zcHRyOwogICAgICAg ICAgIH0KICAgICAgICAgX19zID0gX19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAg ICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYWRqZmllbGQgIT0g aW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewogICAgICAgICAgX19zID0gX19wYWQoX19zLCBfX2Zp bGwsIF9fcGFkZGluZyk7CiAgICAgICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgIH0KCiAgICAg IGNoYXIgX19kZWNpbWFsX3BvaW50ID0gKihsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQpOwog ICAgICBjb25zdCBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxf Q2hhclQ+OjpfU19nZXQoX19pbyk7CiAgICAgIGZvciAoOyBfX3NwdHIgIT0gX19lcHRyOyArK19f cywgKytfX3NwdHIpCiAgICAgICB7CgogICAgICAgICBpZiAoKl9fc3B0ciA9PSBfX2RlY2ltYWxf cG9pbnQpCiAgICAgICAgICAgX19zID0gX19mbXQtPl9NX2RlY2ltYWxfcG9pbnQ7CgogICAgICAg ICBlbHNlCiAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19zcHRyKTsKICAgICAgIH0KCiAg ICAgIGlmIChfX3BhZGRpbmcpCiAgICAgICAgX19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZyk7 CiAgICAgIF9faW8ud2lkdGgoMCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIGJvb2wKICBf X2J1aWxkX2Zsb2F0X2Zvcm1hdChpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9f bW9kaWZpZXIsCiAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMpOwoKICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19z LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAg IHsKICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX21heF9wcmVjID0gbnVtZXJpY19saW1pdHM8ZG91 YmxlPjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lz aW9uKCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhfcHJlYykKICAgICAgICBfX3ByZWMgPSBf X21heF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOwogICAgICBzaXpl X3QgX19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZdOwogICAgICBpZiAoX19idWlsZF9mbG9h dF9mb3JtYXQoX19pbywgX19mYnVmLCAwLCBfX3ByZWMpKQogICAgICAgIF9fc2xlbiA9IHNwcmlu dGYoX19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fc2xl biA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7CgogICAgICByZXR1cm4gX19vdXRwdXRf ZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1ZiwgX19zbGVuKTsKICAgIH0KCiAgdGVtcGxh dGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9z X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgbG9uZyBkb3VibGUgX192 KSBjb25zdAogICAgewogICAgICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmlj X2xpbWl0czxsb25nIGRvdWJsZT46OmRpZ2l0czEwICsgMzsKICAgICAgc3RyZWFtc2l6ZSBfX3By ZWMgPSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgaWYgKF9fcHJlYyA+IF9fbWF4X3ByZWMpCiAg ICAgICAgX19wcmVjID0gX19tYXhfcHJlYzsKCiAgICAgIGNoYXIgX19zYnVmW19fbWF4X3ByZWMg KiAyXTsKICAgICAgc2l6ZV90IF9fc2xlbjsKCiAgICAgIGNoYXIgX19mYnVmWzE2XTsKCiAgICAg IGlmIChfX2J1aWxkX2Zsb2F0X2Zvcm1hdChfX2lvLCBfX2ZidWYsICdMJywgX19wcmVjKSkKICAg ICAgICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3ByZWMsIF9fdik7CiAgICAg IGVsc2UKICAgICAgICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOwoKICAg ICAgcmV0dXJuIF9fb3V0cHV0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBfX3NidWYsIF9fc2xl bik7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg ICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6 Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwog ICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6 OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVy Y2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2Zt dG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAgICBpZiAo dHJ1ZSkgewogICAgICAgIF9PdXRJdGVyIF9fczIgPSBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19p bywgX19maWxsLCBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50 ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX192KSk7CiAgICAgICAgX19pby5mbGFncyhfX2Zt dCk7CiAgICAgICAgcmV0dXJuIF9fczI7CiAgICAgIH0KICAgICAgaWYgKGZhbHNlKSB7CiAgICAg ICAgX19pby5mbGFncyhfX2ZtdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgIH0KICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0R1 bW15ID0gaW50PgogICAgc3RydWN0IF9XZWVrZGF5bmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9EdW1teT4KICAgIHN0cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4KICAgIHsgc3Rh dGljIGNvbnN0IGNoYXIqIGNvbnN0IF9TX25hbWVzWzE0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0R1bW15PgogICAgY29uc3QgY2hhciogY29uc3QKICAgIF9XZWVrZGF5bmFtZXM8Y2hhciwg X0R1bW15Pjo6X1NfbmFtZXNbMTRdID0KICAgIHsKICAgICAgIlN1biIsICJTdW5kYXkiLAogICAg ICAiTW9uIiwgIk1vbmRheSIsICJUdWUiLCAiVHVlc2RheSIsICJXZWQiLCAiV2VkbmVzZGF5IiwK ICAgICAgIlRodSIsICJUaHVyc2RheSIsICJGcmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRh eSIKICAgIH07CiMgMTEzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m YWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfRHVtbXkg PSBpbnQ+CiAgICBzdHJ1Y3QgX01vbnRobmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1t eT4KICAgIHN0cnVjdCBfTW9udGhuYW1lczxjaGFyLF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0 IGNoYXIqIGNvbnN0IF9TX25hbWVzWzI0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15 PgogICAgY29uc3QgY2hhciogY29uc3QKICAgIF9Nb250aG5hbWVzPGNoYXIsX0R1bW15Pjo6X1Nf bmFtZXNbMjRdID0KICAgIHsKICAgICAgIkphbiIsICJKYW51YXJ5IiwgIkZlYiIsICJGZWJydWFy eSIsICJNYXIiLCAiTWFyY2giLAogICAgICAiQXByIiwgIkFwcmlsIiwgIk1heSIsICJNYXkiLCAi SnVuIiwgIkp1bmUiLAogICAgICAiSnVsIiwgIkp1bHkiLCAiQXVnIiwgIkF1Z3VzdCIsICJTZXAi LCAiU2VwdGVtYmVyIiwKICAgICAgIk9jdCIsICJPY3RvYmVyIiwgIk5vdiIsICJOb3ZlbWJlciIs ICJEZWMiLCAiRGVjZW1iZXIiCiAgICB9OwojIDExNjggIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRl cj46OgogICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLAog ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgdG0qIF9fdCkgY29uc3QKICAgIHsKICAgICAgaWYgKCFfTV9kYXluYW1lcykKICAgICAgICB7 CiAgICAgICAgICBfTV9kYXluYW1lcyA9IG5ldyBiYXNpY19zdHJpbmc8X0NoYXJUPlsxNF07CiAg ICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAxNDsgKytfX2kpCiAgICAgICAgICAgIF9N X2RheW5hbWVzW19faV0gPSBfV2Vla2RheW5hbWVzPF9DaGFyVD46Ol9TX25hbWVzW19faV07CiAg ICAgICAgfQogICAgICBib29sIF9fYXRfZW9mID0gZmFsc2U7CiAgICAgIGludCBfX3JlbWFpbiA9 IDA7CiAgICAgIGludCBfX21hdGNoZXNbMTRdOwogICAgICBpdGVyX3R5cGUgX19vdXQgPSBfX21h dGNoX3BhcmFsbGVsKF9fcywgX19lbmQsIDE0LCBfTV9kYXluYW1lcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXMsIF9fcmVtYWluLCBfX2F0X2VvZik7 CiAgICAgIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoMCk7CiAgICAgIGlmIChfX2F0X2VvZikg X19lcnIgfD0gX19pby5lb2ZiaXQ7CiAgICAgIGlmIChfX3JlbWFpbiA9PSAxIHx8CiAgICAgICAg ICBfX3JlbWFpbiA9PSAyICYmIChfX21hdGNoZXNbMF0+PjEpID09IChfX21hdGNoZXNbMV0+PjEp KQogICAgICAgIF9fdC0+dG1fd2RheSA9IChfX21hdGNoZXNbMF0+PjEpOwogICAgICBlbHNlCiAg ICAgICAgX19lcnIgfD0gX19pby5mYWlsYml0OwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK ICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVy X3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNl JiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICB7CiAg ICAgIGlmICghX01fbW9udGhuYW1lcykKICAgICAgICB7CiAgICAgICAgICBfTV9tb250aG5hbWVz ID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hhclQ+WzI0XTsKICAgICAgICAgIGZvciAoaW50IF9faSA9 IDA7IF9faSA8IDI0OyArK19faSkKICAgICAgICAgICAgX01fbW9udGhuYW1lc1tfX2ldID0gX01v bnRobmFtZXM8X0NoYXJUPjo6X1NfbmFtZXNbX19pXTsKICAgICAgICB9CiAgICAgIGJvb2wgX19h dF9lb2YgPSBmYWxzZTsKICAgICAgaW50IF9fcmVtYWluID0gMDsKICAgICAgaW50IF9fbWF0Y2hl c1syNF07CiAgICAgIGl0ZXJfdHlwZSBfX291dCA9IF9fbWF0Y2hfcGFyYWxsZWwoIF9fcywgX19l bmQsIDI0LCBfTV9tb250aG5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX21hdGNoZXMsIF9fcmVtYWluLCBfX2F0X2VvZik7CiAgICAgIF9fZXJyID0gaW9z X2Jhc2U6Omlvc3RhdGUoMCk7CiAgICAgIGlmIChfX2F0X2VvZikgX19lcnIgfD0gX19pby5lb2Zi aXQ7CiAgICAgIGlmIChfX3JlbWFpbiA9PSAxIHx8CiAgICAgICAgICBfX3JlbWFpbiA9PSAyICYm IChfX21hdGNoZXNbMF0+PjEpID09IChfX21hdGNoZXNbMV0+PjEpKQogICAgICAgIF9fdC0+dG1f bW9uID0gKF9fbWF0Y2hlc1swXT4+MSk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBfX2lv LmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KfQojIDQyICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFy VCxfVHJhaXRzPiYgX19vcykKICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQog ICAgewoKICAgICAgaWYgKF9NX29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+ Zmx1c2goKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19w ZikoX19vc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAg IHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19pb3Nf dHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAg ICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8 KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQog ICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChi b29sIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAo X01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgp KQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg ICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBfX24pCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9f YyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQg PSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAo X01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmIChfX2ZtdCAmIGlv c19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX19sID0gc3RhdGljX2Nhc3Q8 dW5zaWduZWQgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1w dXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2IgPSBf TV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAgICAg ICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAg IGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAo dHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m bnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlz LCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFs c2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 Om9wZXJhdG9yPDwobG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAg ICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3Nf YmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt cHV0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxz ZTsKICAgICAgICAgICAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAm IGlvc19iYXNlOjpoZXgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0 YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAg IF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFp bGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24p CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1w dXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg ICBpZiAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMs ICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBp ZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVl KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1w dXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRo aXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy YXRvcjw8KGNvbnN0IHZvaWQqIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7 CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAg ICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgp LCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAg ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9 IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19z dHJlYW1idWZfdHlwZSogX19zYmluKQogICAgewogICAgICBzdHJlYW1zaXplIF9feHRyY3QgPSAw OwogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX3NiaW4gJiYgX19jZXJiKQogICAgICAg IF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAg ICAgaWYgKCFfX3NiaW4gfHwgIV9feHRyY3QpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlw ZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19j KTsKICAgICAgICAgIGlmIChfX3B1dCAhPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSkK ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0 cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0ID0gdGhpcy0+cmRi dWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pCiAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRoaXMt PnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBv c190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ ZmFpbCgpICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0b2spCiAgICAgICAgX19yZXQgPSB0aGlz LT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwog ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAg ewogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAgICBpZiAo X190ZXN0b2spCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJk YnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAo X19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog ICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAg ICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYgKF9fdGVz dG9rKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1Zigp LT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2Vy ciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShm YWlsYml0KTsKICAgICAgICB9CgogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgNDU3ICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBfX3BhZF9jaGFyKGJh c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywKICAgICAgICAgICAgICAgX0NoYXJUKiBf X25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAgICAgICAgICBjb25zdCBzdHJlYW1z aXplIF9fbmV3bGVuLCBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuKQogICAgewogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7Cgog ICAgICBpbnRfdHlwZSBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19v bGRsZW4pOwogICAgICBjaGFyX3R5cGUqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+ KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXJfdHlwZSkgKiBfX3BsZW4pKTsKICAgICAgdHJh aXRzX3R5cGU6OmFzc2lnbihfX3BhZHMsIF9fcGxlbiwgX19pb3MuZmlsbCgpKTsKCiAgICAgIGNo YXJfdHlwZSogX19iZWc7CiAgICAgIGNoYXJfdHlwZSogX19lbmQ7CiAgICAgIHNpemVfdCBfX21v ZCA9IDA7CiAgICAgIHNpemVfdCBfX2JlZ2xlbjsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9f Zm10ID0gX19pb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlmIChf X2ZtdCA9PSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBjb25z dF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVu OwogICAgICAgICAgX19lbmQgPSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2Zt dCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwpCiAgICAgICAgewoKCgogICAgICAgICAgdHlwZWRlZiBf Rm9ybWF0X2NhY2hlPF9DaGFyVD4gX19jYWNoZV90eXBlOwogICAgICAgICAgX19jYWNoZV90eXBl IGNvbnN0KiBfX2ZtdCA9IF9fY2FjaGVfdHlwZTo6X1NfZ2V0KF9faW9zKTsKICAgICAgICAgIGNv bnN0IGNoYXJfdHlwZSogX19taW51cyA9IHRyYWl0c190eXBlOjpmaW5kKF9fb2xkcywgX19vbGRs ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2ZtdC0+X1NfbWludXMpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3BsdXMgPSB0 cmFpdHNfdHlwZTo6ZmluZChfX29sZHMsIF9fb2xkbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZtdC0+X1NfcGx1cyk7CiAgICAgICAg ICBib29sIF9fdGVzdHNpZ24gPSBfX21pbnVzIHx8IF9fcGx1czsKICAgICAgICAgIGJvb2wgX190 ZXN0aGV4ID0gX19vbGRzWzBdID09ICcwJwogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAo X19vbGRzWzFdID09ICd4JyB8fCBfX29sZHNbMV0gPT0gJ1gnKTsKCiAgICAgICAgICBpZiAoX190 ZXN0aGV4KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdzWzBdID0gX19vbGRzWzBd OwogICAgICAgICAgICAgIF9fbmV3c1sxXSA9IF9fb2xkc1sxXTsKICAgICAgICAgICAgICBfX21v ZCArPSAyOwogICAgICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29s ZHMgKyBfX21vZCk7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX29sZGxlbiAtIF9fbW9kOwog ICAgICAgICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl IGlmIChfX3Rlc3RzaWduKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19tb2QgKz0gX19w bGVuOwogICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19zaWduID0gX19taW51cyA/IF9f bWludXMgKyAxOiBfX3BsdXMgKyAxOwogICAgICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxj aGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19zaWduIC0gX19v bGRzOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX3NpZ24g KyBfX3BsZW4pOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fbmV3cyArIF9fYmVn bGVuLCBfX3BhZHMsIF9fcGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgewoKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2Jl Z2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBl Kj4oX19vbGRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsK CiAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwog ICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAg fQoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAg ICB0cmFpdHNfdHlwZTo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsIF9fbmV3bGVuIC0g X19iZWdsZW4gLSBfX21vZCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9f YykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19v c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJi KF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAodHJ1ZSkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgo KTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgICAgICBfX3Bh ZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAg ICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsICZfX2MsIF9fdywgX19sZW4pOwogICAgICAgICAg ICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291 dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg ICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt PGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUg X19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg c3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFk cyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fdyArIDEpKTsKICAgICAg ICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9 IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsICZfX2MsIF9fdywgX19sZW4p OwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53 aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0 LCBjb25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90 eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICBpZiAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUg X193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRp Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsK ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4o X1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRz LCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAg ICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg IF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwog ICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hh ciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiBfX29zdHJlYW1fdHlwZTsKCgogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+IF9fY3Ry YWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo X19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2Ns ZW4gPSBfX2N0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgICAgICBfQ2hhclQqIF9fd3Mg PSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog KF9fY2xlbiArIDEpKSk7CiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPD0gX19j bGVuOyArK19faSkKICAgICAgICAgICAgX193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19faV0p OwogICAgICAgICAgX0NoYXJUKiBfX3N0ciA9IF9fd3M7CgogICAgICAgICAgaWYgKHRydWUpCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8 c3RyZWFtc2l6ZT4oX19jbGVuKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0 LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hh clQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CgogICAgICAgICAg ICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg X19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3dzLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAg ICAgICAgX19zdHIgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fc3RyLCBfX2xlbik7CiAg ICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChm YWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgog IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29u c3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50 cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBp ZiAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19v dXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFy Kj4oX19idWlsdGluX2FsbG9jYShfX3cpKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVu ID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAg ICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAg ICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAg ICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFs c2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAg IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwog ICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0 ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAg ICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxv Y2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBz dGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9f dyA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwg X19wYWRzLCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAg ICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgfQogICAgICAgICAgc3RyZWFtc2l6 ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19sZW4pOwogICAgICAgICAgX19v dXQud2lkdGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMgIT0gX19sZW4pCiAgICAgICAgICAgIF9f b3V0LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiBf X291dDsKICAgIH0KfQojIDI3OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9v c3RyZWFtLmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv c3RyZWFtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0 cmVhbS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3Ry ZWFtLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIg MSAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAy IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMv c3RkX2xpbWl0cy5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9pc3RyZWFtLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFs IHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp dHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBv c190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBl IG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlw ZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwog ICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAg IHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwog ICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0 ZXI+IF9fbnVtZ2V0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5 cGU7CgogICAgcHJvdGVjdGVkOgoKICAgICAgc3RyZWFtc2l6ZSBfTV9nY291bnQ7CgogICAgcHVi bGljOgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBl KiBfX3NiKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdChfX3NiKTsKICAgICAgICBfTV9nY291 bnQgPSBzdHJlYW1zaXplKDApOwogICAgICB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19p c3RyZWFtKCkKICAgICAgeyBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOyB9CgoKICAgICAgY2xh c3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwoKCgogICAgICBfX2lzdHJlYW1f dHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1f dHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faW9zX3R5 cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBv cGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpOwoKCiAgICAgIF9faXN0cmVh bV90eXBlJgogICAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlw ZSYKICAgICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog ICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPj4oaW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg ICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0 cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX2YpOwoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1f dHlwZSYKICAgICAgb3BlcmF0b3I+Pih2b2lkKiYgX19wKTsKCiAgICAgIF9faXN0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIGlubGlu ZSBzdHJlYW1zaXplCiAgICAgIGdjb3VudCh2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBfTV9n Y291bnQ7IH0KCiAgICAgIGludF90eXBlCiAgICAgIGdldCh2b2lkKTsKCiAgICAgIF9faXN0cmVh bV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2Rl bGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gZ2V0KF9fcywgX19uLCB0aGlzLT53 aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1i dWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVh bV90eXBlJgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYikKICAgICAgeyByZXR1cm4g Z2V0KF9fc2IsIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg ICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19k ZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90 eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiBnZXRsaW5lKF9fcywgX19u LCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBpZ25v cmUoc3RyZWFtc2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6OmVv ZigpKTsKCiAgICAgIGludF90eXBlCiAgICAgIHBlZWsodm9pZCk7CgogICAgICBfX2lzdHJlYW1f dHlwZSYKICAgICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAg c3RyZWFtc2l6ZQogICAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYyk7Cgog ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgdW5nZXQodm9pZCk7CgogICAgICBpbnQKICAgICAg c3luYyh2b2lkKTsKCiAgICAgIHBvc190eXBlCiAgICAgIHRlbGxnKHZvaWQpOwoKICAgICAgX19p c3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKHBvc190eXBlKTsKCiAgICAgIF9faXN0cmVhbV90eXBl JgogICAgICBzZWVrZyhvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwoKICAgIHByaXZhdGU6 CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX2lzdHJlYW1f dHlwZSYpOwoKICAgICAgYmFzaWNfaXN0cmVhbShjb25zdCBfX2lzdHJlYW1fdHlwZSYpOwoKICAg IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNs YXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJs aWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBl ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg dHlwZWRlZiBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhw bGljaXQKICAgICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywg Ym9vbCBfX25vc2tpcHdzID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJu IF9NX29rOyB9CgogICAgcHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0 cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1 cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8 Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVy YXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBf X2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBf VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+Pihi YXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAg IHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRl bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAg ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNo YXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9f cykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBjbGFzcyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0 cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lz dHJlYW1fdHlwZShfX3NiKSwgX19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2 aXJ0dWFsCiAgICAgIH5iYXNpY19pb3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7 Cn0KCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAx IDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAzCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzCiMgMzMg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9pc3RyZWFtLnRjYyIgMiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDEgMwojIDM0ICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0 ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcHdzKQogICAgewogICAg ICBpZiAoX19pbi5nb29kKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9faW4udGllKCkpCiAg ICAgICAgICAgIF9faW4udGllKCktPmZsdXNoKCk7CiAgICAgICAgICBpZiAoIV9fbm9za2lwd3Mg JiYgKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNlOjpza2lwd3MpKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAg ICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dldF9mY3R5 cGVfaW9zKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRi dWYoKTsKICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg ICAgICAgICAgIHdoaWxlIChfX2MgIT0gX19lb2YgJiYgX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6 c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKCgoKICAg ICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0 ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAo X19pbi5nb29kKCkpCiAgICAgICAgX01fb2sgPSB0cnVlOwogICAgICBlbHNlCiAgICAgICAgewog ICAgICAgICAgX01fb2sgPSBmYWxzZTsKICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pc3RyZWFt X3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pb3NfdHlw ZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYp KGlvc19iYXNlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01f Zm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2Up CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBvcGVyYXRvcj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAodHJ1ZSkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1 bnNpZ25lZCBzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNl Ojppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf ZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMs IDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy cik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW50JiBf X24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jh c2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0 KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJy LCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAg fQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAg IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAg ICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7 CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAg ICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01f Zm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2Up CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlm ICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl cmF0b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2No ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0 aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo X19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgIHsK CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNp Z25lZCBsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs c2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihmbG9h dCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51 bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX24pCiAgICB7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAg ICAgICB7CiAgICAgICAgICBpZiAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri aXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAg ICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg ICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQogICAgewogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChm YWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoKICAgIG9wZXJhdG9yPj4odm9pZComIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0 cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+ Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv cj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX194 dHJjdCA9IDA7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fc2JvdXQgJiYg X19jZXJiKQogICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmlu LCBfX3Nib3V0KTsKICAgICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgZ2V0KHZvaWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9f ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAg ICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAg ICAgaWYgKF9fYyAhPSBfX2VvZikKICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVv ZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZh bHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIGdldChjaGFyX3R5cGUmIF9fYykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRf dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBf X2J1ZnZhbCA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAgICBpZiAoX19i dWZ2YWwgIT0gX19lb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2dj b3VudCA9IDE7CiAgICAgICAgICAgICAgICAgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5 cGUoX19idWZ2YWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFp bGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUq IF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9n Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f Y2VyYiAmJiBfX24gPiAxKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6 dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2Yg PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19z YiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1 bXBjKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsK ICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICAg ICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVs aW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190 eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAg ICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICBf X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGRlbGltID0g X19jID09IF9faWRlbGltOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfX3Rl c3RkZWxpbSB8fCBfTV9nY291bnQgPT0gX19uIC0gMSkKICAgICAgICAgICAgICAgIF9fc2ItPnNw dXRiYWNrYyhfX2MpOwogICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAg ICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlw ZShfX251bGwpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdl dChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAg X01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19jOwogICAgICAgICAgX19z dHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgIGlmICh0 cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0g PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3Qg aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19jID0g X190aGlzX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19j ID09IF9faWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9m OwogICAgICAgICAgICAgIGJvb2wgX190ZXN0cHV0ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgd2hp bGUgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltCiAgICAgICAgICAgICAgICAgICAgJiYgKF9f dGVzdHB1dCA9IF9fc2Iuc3B1dGModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKQogICAg ICAgICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0gX190aGlzX3Ni LT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwog ICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVsaW0gfHwgIV9fdGVzdHB1dCkKICAg ICAgICAgICAgICAgIF9fdGhpc19zYi0+c3B1dGJhY2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5 cGUoX19jKSk7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBp ZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX190aGlzX3NiLT5zcHV0YmFj a2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXRsaW5lKGNo YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAg ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAg ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAg KytfTV9nY291bnQ7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5 cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rk ZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9f YyA9PSBfX2VvZjsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAmJiAhX190 ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAg ICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7 CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAg ICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIC0tX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmICgh X190ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC0tX01fZ2Nv dW50OwogICAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2No YXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBpZiAo ZmFsc2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKF9fbnVs bCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgaWdub3JlKHN0 cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAw OwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYiAmJiBf X24gPiAwKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5 cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf dHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMt PnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAg ICAgICAgICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAg ICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICAgICAgX19uID0g bWluKF9fbiwgbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpKTsKICAgICAgICAgICAg ICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0gMSAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxp bSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAg ICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICBfX3Rl c3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX19j ID09IF9faWRlbGltOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICgoX01fZ2Nv dW50ID09IF9fbiAtIDEgJiYgIV9fdGVzdGVvZikgfHwgX190ZXN0ZGVsaW0pCiAgICAgICAgICAg ICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAgICAgaW50X3R5 cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICBpZiAodHJ1ZSkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0 YygpOyB9CiAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy ZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6 ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24g PiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6 OmVvZigpOwogICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+ cmRidWYoKTsKICAgICAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7 CiAgICAgICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAg ICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZikKICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNf dHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3Vu dDsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAg ICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg ICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAg ICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1z aXplCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZHNvbWUoY2hh cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBf X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg ICAgICAgaWYgKF9fbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJ1ZSkK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IHRo aXMtPnJkYnVmKCktPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX251bSAhPSBz dGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2VvZikpCiAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7CiAgICAgICAgICAgICAg ICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsKICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0 c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhp cy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19zYi0+c3B1dGJhY2tjKF9f YykgPT0gX19lb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9pZCkKICAgIHsK ICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2Yo KTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsK ICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19lb2YgPT0gX19zYi0+c3VuZ2V0YygpKQogICAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgaW50CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2 b2lkKQogICAgewogICAgICBpbnQgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9N X2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAg ICAgICAgaWYgKCFfX3NiIHx8IF9fcmV0ID09IF9fc2ItPnB1YnN5bmMoKSkKICAgICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKGZh bHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgdGVsbGcodm9pZCkKICAgIHsKICAgICAgcG9zX3R5cGUg X19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IGlmICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVm KCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsKICAgICAgICAg ICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0 dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKHBvc190eXBlIF9fcG9zKQogICAgewog ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAodHJ1ZSkKICAgICAgICAgICAg ewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVr cG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBv c190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWls Yml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKG9mZl90eXBl IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKICAgIHsKICAgICAgX01fZ2NvdW50ID0g MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kaXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2Zm X3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxiaXQpOwoKICAg ICAgICAgICAgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3Bl cmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19j KQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lz dHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo X19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0 cnVlKQogICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgICAgICAgIGlmIChmYWxzZSkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg X19pbiwgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0 cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgX0No YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsK ICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJl YW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg c3RyZWFtc2l6ZSBfX251bSA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgICAgICBpZiAoX19udW0g PT0gMCkKICAgICAgICAgICAgICAgIF9fbnVtID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46 Om1heCgpOwoKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1 ZigpOwogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9IF9faW4uX01f Z2V0X2ZjdHlwZV9pb3MoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVt cGMoKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigp OwogICAgICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpz cGFjZSwgX19jKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsK CiAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAxICYmICFfX3Rlc3Rl b2YgJiYgIV9fdGVzdHNwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19z KysgPSBfX2M7CiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAg ICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBf X2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5 cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlm ICghX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m Yml0KTsKCgoKICAgICAgICAgICAgICAqX19zID0gY2hhcl90eXBlKCk7CgogICAgICAgICAgICAg IF9faW4ud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3Rh dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9f aW4pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f aXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0 cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p c3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmNoYXJfdHlwZSBfX2NoYXJfdHlwZTsKCiAgICAgIF9f c3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgIGNvbnN0IF9fY3R5cGVf dHlwZSogX19jdHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsKICAgICAgY29uc3QgX19p bnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICBfX2ludF90eXBlIF9fYzsKICAg ICAgYm9vbCBfX3Rlc3Rlb2Y7CiAgICAgIGJvb2wgX190ZXN0c3A7CgogICAgICBkbwogICAgICAg IHsKICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgX190ZXN0ZW9mID0g X19jID09IF9fZW9mOwogICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNl OjpzcGFjZSwgX19jKTsKICAgICAgICB9CiAgICAgIHdoaWxlICghX190ZXN0ZW9mICYmIF9fdGVz dHNwKTsKCiAgICAgIGlmICghX190ZXN0ZW9mICYmICFfX3Rlc3RzcCkKICAgICAgICBfX3NiLT5z cHV0YmFja2MoX19jKTsKICAgICAgZWxzZQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6 OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf X2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4g X19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXpl X3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAg ICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAg ICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlw ZSBfX247CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+ KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f c2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUg PSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9f c2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6 OmVvZigpOwogICAgICAgICAgYm9vbCBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6 OnNwYWNlLCBfX2MpOwogICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7Cgog ICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz dHNwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hh cl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICBf X2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19l b2Y7CiAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFj ZSwgX19jKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAg ICAgIF9fc2ItPnNwdXRiYWNrYyhfX2MpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2lu LnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgX19pbi53aWR0aCgwKTsKICAg ICAgICB9CgoKICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlIChp b3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQogICAgewogICAgICB0eXBl ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0 cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0 eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CgogICAgICBfX3NpemVfdHlwZSBf X2V4dHJhY3RlZCA9IDA7CiAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlw ZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIF9f c2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgX19pbnRfdHlwZSBf X2lkZWxpbSA9IF9UcmFpdHM6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgX19zdHJl YW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19j ID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1Ry YWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAg ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgIHdoaWxlIChf X2V4dHJhY3RlZCA8PSBfX24gJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsK ICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNi dW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAg ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgfQogICAgICAg ICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m Yml0KTsKICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRlbGltKQog ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19p bjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBf QWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRs aW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFz aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fc3RyKQogICAgeyByZXR1cm4gZ2V0 bGluZShfX2luLCBfX3N0ciwgX19pbi53aWRlbignXG4nKSk7IH0KfQojIDI5MSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIgMwojIDQyICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7 CiAgZXh0ZXJuIGlzdHJlYW0gY2luOwogIGV4dGVybiBvc3RyZWFtIGNvdXQ7CiAgZXh0ZXJuIG9z dHJlYW0gY2VycjsKICBleHRlcm4gb3N0cmVhbSBjbG9nOwojIDU3ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDMKICBzdGF0aWMgaW9zX2Jhc2U6OkluaXQg X19pb2luaXQ7Cn0KIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pb3N0cmVhbSIgMiAz CiMgMTEgIndhdnBsYXlvYmplY3RfaW1wbC5jYyIgMgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgi IDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1 cmVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCmV4dGVybiAiQyIgewoK CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1 ZGUvYml0cy9odWdlX3ZhbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj IDI2ICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAyIDMKIyAzNCAiL3Vzci9pbmNsdWRl L21hdGguaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMwojIDM4ICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYu aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0eXBlZGVmIGxvbmcg ZG91YmxlIGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90OwojIDQxICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KTsgZXh0ZXJuIGRv dWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBhc2luIChkb3VibGUgX194 KTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBhdGFu IChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpOwoKZXh0ZXJu IGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19h dGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJs ZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUg c2luIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCk7CgpleHRl cm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBf X3gpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBk b3VibGUgKl9fY29zeCk7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUg Kl9fc2lueCwgZG91YmxlICpfX2Nvc3gpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJs ZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91Ymxl IHNpbmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCk7Cgpl eHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoZG91 YmxlIF9feCk7CgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91 YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAoZG91YmxlIF9f eCk7IGV4dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0 YW5oIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUgX194KTsKCgoK CgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19leHAgKGRv dWJsZSBfX3gpOwoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KTsgZXh0ZXJuIGRv dWJsZSBfX2V4cDEwIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgcG93MTAgKGRvdWJsZSBf X3gpOyBleHRlcm4gZG91YmxlIF9fcG93MTAgKGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gZG91Ymxl IGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpOyBleHRlcm4gZG91YmxlIF9fZnJl eHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCk7CgoKZXh0ZXJuIGRvdWJsZSBsZGV4cCAo ZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpOyBleHRlcm4gZG91YmxlIF9fbGRleHAgKGRvdWJs ZSBfX3gsIGludCBfX2V4cG9uZW50KTsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCk7 IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpOwoKCmV4dGVybiBkb3VibGUgbG9nMTAg KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpOwoKCmV4dGVy biBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpOyBleHRlcm4gZG91Ymxl IF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpOwoKCgpleHRlcm4gZG91YmxlIGV4 cG0xIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChkb3VibGUgX194KTsKCgpl eHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChk b3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91 YmxlIF9fbG9nYiAoZG91YmxlIF9feCk7CgoKCgpleHRlcm4gZG91YmxlIGV4cDIgKGRvdWJsZSBf X3gpOyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBs b2cyIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpOwoKCgoK CgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3Vi bGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBkb3VibGUgc3FydCAo ZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KTsKCgoKZXh0ZXJu IGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19o eXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKGRv dWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9feCk7CgoKCgoKCmV4dGVy biBkb3VibGUgY2VpbCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19jZWlsIChkb3VibGUg X194KTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZsb29yIChkb3VibGUgX194KTsgZXh0 ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGZtb2QgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoZG91YmxlIF9feCwg ZG91YmxlIF9feSk7CgoKCgpleHRlcm4gaW50IF9faXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91YmxlIF9f dmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmYg KGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu dCBmaW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CgoKCgpleHRlcm4gZG91YmxlIGluZm5hbiAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2luZm5hbiAoaW50IF9fZXJyb3IpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9fZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7 CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl IF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAo ZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl cm4gZG91YmxlIF9fY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgbmFuIChfX2NvbnN0IGNoYXIgKl9f dGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmFuIChf X2NvbnN0IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0 ZXJuIGludCBfX2lzbmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgpleHRlcm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgajAgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUg X19qMCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBf X2oxIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSk7IGV4dGVybiBkb3Vi bGUgX19qbiAoaW50LCBkb3VibGUpOwpleHRlcm4gZG91YmxlIHkwIChkb3VibGUpOyBleHRlcm4g ZG91YmxlIF9feTAgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgeTEgKGRvdWJsZSk7IGV4dGVybiBk b3VibGUgX195MSAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpOyBleHRl cm4gZG91YmxlIF9feW4gKGludCwgZG91YmxlKTsKCgoKCgpleHRlcm4gZG91YmxlIGVyZiAoZG91 YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBlcmZjIChk b3VibGUpOyBleHRlcm4gZG91YmxlIF9fZXJmYyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBsZ2Ft bWEgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSk7CmV4dGVybiBkb3Vi bGUgdGdhbW1hIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fdGdhbW1hIChkb3VibGUpOwoKCgoK ZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3Vi bGUpOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2Ft cCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOwoK CgoKCgpleHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fcmlu dCAoZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25l eHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKZXh0ZXJuIGRvdWJsZSBuZXh0dG93YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHR0b3dh cmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7 IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCgpl eHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKTsgZXh0ZXJuIGRvdWJs ZSBfX3NjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2Fs Ym4gKGRvdWJsZSBfX3gsIGludCBfX24pOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUg X194LCBpbnQgX19uKTsKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KTsgZXh0ZXJuIGlu dCBfX2lsb2diIChkb3VibGUgX194KTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJsbiAoZG91Ymxl IF9feCwgbG9uZyBpbnQgX19uKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibG4gKGRvdWJsZSBfX3gs IGxvbmcgaW50IF9fbik7CgoKCmV4dGVybiBkb3VibGUgbmVhcmJ5aW50IChkb3VibGUgX194KTsg ZXh0ZXJuIGRvdWJsZSBfX25lYXJieWludCAoZG91YmxlIF9feCk7CgoKCmV4dGVybiBkb3VibGUg cm91bmQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fcm91bmQgKGRvdWJsZSBfX3gpOwoK CgpleHRlcm4gZG91YmxlIHRydW5jIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBkb3VibGUgX190cnVuYyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSByZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3ksIGludCAqX19xdW8pOyBleHRlcm4gZG91YmxlIF9fcmVtcXVvIChkb3VibGUgX194LCBk b3VibGUgX195LCBpbnQgKl9fcXVvKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50IChkb3Vi bGUgX194KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnQgKGRvdWJsZSBfX3gpOwpleHRlcm4gbG9u ZyBsb25nIGludCBsbHJpbnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xs cmludCAoZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmQgKGRvdWJsZSBfX3gp OyBleHRlcm4gbG9uZyBpbnQgX19scm91bmQgKGRvdWJsZSBfX3gpOwpleHRlcm4gbG9uZyBsb25n IGludCBsbHJvdW5kIChkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5k IChkb3VibGUgX194KTsKCgoKZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3VibGUg X195KTsgZXh0ZXJuIGRvdWJsZSBfX2ZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCmV4 dGVybiBkb3VibGUgZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUg X19mbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KTsKCgpleHRlcm4gZG91YmxlIGZtaW4gKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9fZm1pbiAoZG91YmxlIF9feCwg ZG91YmxlIF9feSk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXQg KGRvdWJsZSBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0 ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opOyBleHRl cm4gZG91YmxlIF9fZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KTsKIyA2 NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KTsgZXh0 ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZsb2F0 IF9feCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGF0 YW5mIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KTsKCmV4dGVy biBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYXRh bjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0IF9f eCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgc2luZiAo ZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9h dCB0YW5mIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpOwoKCgpl eHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nv c3gpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxv YXQgKl9fY29zeCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194KTsgZXh0ZXJu IGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9f eCk7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IHRhbmhm IChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KTsKCgoKZXh0ZXJu IGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9hdCBf X3gpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYXNp bmhmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KTsgZXh0ZXJu IGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gpOwoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9h dCBfX3gpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4gZmxvYXQg ZXhwMTBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCk7Cgpl eHRlcm4gZmxvYXQgcG93MTBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19wb3cxMGYgKGZs b2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9u ZW50KTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCk7 CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCk7IGV4dGVy biBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCk7CgoKZXh0ZXJuIGZs b2F0IGxvZ2YgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCk7CgoK ZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBmIChm bG9hdCBfX3gpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRy KTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cik7CgoKCmV4 dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoZmxv YXQgX194KTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQg X19sb2cxcGYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpOyBl eHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KTsKCgoKCmV4dGVybiBmbG9hdCBleHAyZiAo ZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZs b2F0IGxvZzJmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KTsK CgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZs b2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAo ZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fc3FydGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBm bG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0IF9faHlwb3Rm IChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZsb2F0IF9f eCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpOwoKCgoKCgpleHRlcm4gZmxvYXQg Y2VpbGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpOwoKCmV4 dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19m bG9vcmYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0 IF9feSk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKCgpl eHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCBf X3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZmxvYXQg aW5mbmFuZiAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu IGZsb2F0IF9faW5mbmFuZiAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZs b2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25p ZmljYW5kZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fc2lnbmlmaWNhbmRmIChmbG9hdCBf X3gpOwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJu IGZsb2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3Zh bHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChm bG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0 IGowZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IGox ZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IGpuZiAo aW50LCBmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCk7CmV4dGVybiBmbG9h dCB5MGYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9hdCk7CmV4dGVybiBmbG9hdCB5 MWYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCk7CmV4dGVybiBmbG9hdCB5bmYg KGludCwgZmxvYXQpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpOwoKCgoKCmV4dGVy biBmbG9hdCBlcmZmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZsb2F0KTsKZXh0ZXJu IGZsb2F0IGVyZmNmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCk7CmV4dGVy biBmbG9hdCBsZ2FtbWFmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKGZsb2F0KTsK ZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fdGdhbW1hZiAoZmxv YXQpOwoKCgoKZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX19nYW1t YWYgKGZsb2F0KTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQsIGludCAqX19z aWduZ2FtcCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2Ft cCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9f cmludGYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwg ZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25l eHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195 KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0b3dhcmRm IChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRl cm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKCmV4dGVybiBm bG9hdCBzY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJm IChmbG9hdCBfX3gsIGZsb2F0IF9fbik7CgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBf X3gsIGludCBfX24pOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24p OwoKCmV4dGVybiBpbnQgaWxvZ2JmIChmbG9hdCBfX3gpOyBleHRlcm4gaW50IF9faWxvZ2JmIChm bG9hdCBfX3gpOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50 IF9fbik7IGV4dGVybiBmbG9hdCBfX3NjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbik7 CgoKCmV4dGVybiBmbG9hdCBuZWFyYnlpbnRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19u ZWFyYnlpbnRmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChmbG9hdCBfX3gp OyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCB0cnVu Y2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQg X190cnVuY2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0 ZXJuIGZsb2F0IHJlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKTsgZXh0 ZXJuIGZsb2F0IF9fcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pOwoK CgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gpOyBleHRlcm4gbG9uZyBpbnQg X19scmludGYgKGZsb2F0IF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGYgKGZsb2F0 IF9feCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50ZiAoZmxvYXQgX194KTsKCgoKZXh0 ZXJuIGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25nIGludCBfX2xyb3Vu ZGYgKGZsb2F0IF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9hdCBfX3gp OyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4g ZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0IF9fZmRpbWYg KGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgpleHRlcm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwg ZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsK CgpleHRlcm4gZmxvYXQgZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0 IF9fZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3Np ZnlmIChmbG9hdCBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gaW50IF9fc2lnbmJpdGYgKGZsb2F0IF9fdmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ks IGZsb2F0IF9feik7IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBm bG9hdCBfX3opOwojIDgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAiL3Vzci9pbmNs dWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1 NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGFj b3NsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zbCAobG9uZyBk b3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9u ZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0 YW5sIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBk b3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuMmwg KGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUg Y29zbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBk b3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcg ZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Rhbmwg KGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiB2b2lkIHNpbmNvc2wgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCk7IGV4dGVybiB2b2lk IF9fc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRv dWJsZSAqX19jb3N4KTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJs ZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBkb3VibGUgX194KTsKCmV4 dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFuaGwg KGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsIChsb25nIGRvdWJs ZSBfX3gpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19hY29zaGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9u ZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19h c2luaGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmhsIChsb25n IGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKGxvbmcgZG91YmxlIF9f eCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGRv dWJsZSBleHAxMGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDEw bCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBwb3cxMGwgKGxvbmcgZG91 YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3BvdzEwbCAobG9uZyBkb3VibGUgX194KTsK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhw b25lbnQpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50 ICpfX2V4cG9uZW50KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSBf X3gsIGludCBfX2V4cG9uZW50KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25nIGRv dWJsZSBfX3gsIGludCBfX2V4cG9uZW50KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nbCAobG9u ZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9uZyBkb3VibGUgX194 KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4g bG9uZyBkb3VibGUgX19sb2cxMGwgKGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGxvbmcgZG91 YmxlIG1vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpOyBleHRlcm4g bG9uZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRy KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRv dWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFw bCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91 YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJsZSBfX3gpOwoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUg bG9nMmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzJsIChsb25n IGRvdWJsZSBfX3gpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3dsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNxcnRsIChs b25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUg X194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgX195KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBk b3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCk7 CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGZhYnNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91Ymxl IF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zsb29ybCAobG9uZyBkb3VibGUgX194KTsKCgpl eHRlcm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi bGUgX195KTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlbCAobG9uZyBk b3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGlu dCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBpbmZuYW5sIChpbnQg X19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUg X19pbmZuYW5sIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp OyBleHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX3kpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBf X3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCk7 CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19jb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFubCAoX19jb25z dCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91 YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBk b3VibGUgajBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBk b3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgam5sIChpbnQs IGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91Ymxl KTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkwbCAobG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX195MGwgKGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3Vi bGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcg ZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAo aW50LCBsb25nIGRvdWJsZSk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwgKGxvbmcgZG91 YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9u ZyBkb3VibGUgZXJmY2wgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wg KGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBk b3VibGUgdGdhbW1hbCAobG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFs IChsb25nIGRvdWJsZSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJs ZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUpOwoKCgoKCgpleHRl cm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25n YW1wKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9u ZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dGFmdGVy bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1h aW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRv dWJsZSBfX3JlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X24pOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX19uKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9f eCwgaW50IF9fbik7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9f eCwgaW50IF9fbik7CgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy biBpbnQgX19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUg c2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKTsKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGRvdWJs ZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAo bG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3Vi bGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBf X3RydW5jbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CgpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX3ksIGludCAqX19xdW8pOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1xdW9sIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1byk7CgoKCgoKCmV4dGVybiBsb25n IGludCBscmludGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50bCAo bG9uZyBkb3VibGUgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3Vi bGUgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJsZSBfX3gp OwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxv bmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQg bGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3Vu ZGwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGltbCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBm bWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBs b25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRl cm4gbG9uZyBkb3VibGUgX19mbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp OwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9u ZyBkb3VibGUgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4 dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwg bG9uZyBkb3VibGUgX196KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feik7CiMgMTAwICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBz aWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAgewogICAgRlBfTkFO LAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9STUFMLAoKICAg IEZQX05PUk1BTAoKICB9OwojIDIzNiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVmIGVu dW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAgX0lT T0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJ Ql9WRVJTSU9OOwojIDI1OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgX19leGNlcHRp b24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsK ICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0 aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgMjg5ICIvdXNyL2lu Y2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAyOTAgIi91c3IvaW5jbHVkZS9tYXRoLmgi IDIgMwojIDM0OCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L21hdGhpbmxpbmUuaCIgMSAzCiMgMTE3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi IDMKX19pbmxpbmUgaW50Cl9fc2lnbmJpdGYgKGZsb2F0IF9feCkKewogIF9fZXh0ZW5zaW9uX18g dW5pb24geyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJldHVy biBfX3UuX19pIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0IChkb3VibGUgX194KQp7CiAg X19leHRlbnNpb25fXyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0gX191ID0geyBf X2Q6IF9feCB9OwogIHJldHVybiBfX3UuX19pWzFdIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWdu Yml0bCAobG9uZyBkb3VibGUgX194KQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcgZG91 YmxlIF9fbDsgaW50IF9faVszXTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAgcmV0dXJuIChfX3Uu X19pWzJdICYgMHg4MDAwKSAhPSAwOwp9CiMgMjM0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s aW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUpOyBfX2lubGluZSBkb3VibGUg X19zZ24gKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4w ID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgZmxvYXQgX19zZ25mIChmbG9hdCk7IF9faW5saW5l IGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9f eCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9u ZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkg eyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQoK Cl9faW5saW5lIGRvdWJsZSBfX3BvdzIgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBfX3BvdzIg KGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChs b25nIGxvbmcgaW50KSBfX3g7IGlmIChfX3ggPT0gKGxvbmcgZG91YmxlKSBfX3ApIHsgX19hc20g X192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiICgxLjApLCAidSIg KF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQJJSVzdCgw KVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeClcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJ CSMgZnJhY3QoeClcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFcblx0IiA6ICI9dCIg KF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4w OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f dmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxv YXQgX19wb3cyZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBfX3BvdzJmIChmbG9hdCBfX3gpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBv bmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBf X3g7IGlmIChfX3ggPT0gKGxvbmcgZG91YmxlKSBfX3ApIHsgX19hc20gX192b2xhdGlsZV9fICgi ZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiICgxLjApLCAidSIgKF9feCkpOyByZXR1cm4g X192YWx1ZTsgfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQJJSVzdCgwKVxuXHQiICJmcm5kaW50 CQkJIyBpbnQoeClcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeClcblx0 IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUi IChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9f ZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19wb3cy bCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3BvdzJsIChsb25nIGRvdWJs ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxv bmcgaW50KSBfX3g7IGlmIChfX3ggPT0gKGxvbmcgZG91YmxlKSBfX3ApIHsgX19hc20gX192b2xh dGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiICgxLjApLCAidSIgKF9feCkp OyByZXR1cm4gX192YWx1ZTsgfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQJJSVzdCgwKVxuXHQi ICJmcm5kaW50CQkJIyBpbnQoeClcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJh Y3QoeClcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFs dWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUp LCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyAyODMgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSB2b2lkIF9fc2luY29zIChkb3VibGUgX194 LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpOwpfX2lubGluZSB2b2lkCl9fc2luY29z IChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpCnsKICByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX2Nvc3I7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fc2lucjsgX19hc20g X192b2xhdGlsZV9fICgiZnNpbmNvc1xuXHQiICJmbnN0c3cJJSVheFxuXHQiICJ0ZXN0bAkkMHg0 MDAsICUlZWF4XG5cdCIgImp6CTFmXG5cdCIgImZsZHBpXG5cdCIgImZhZGQJJSVzdCgwKVxuXHQi ICJmeGNoCSUlc3QoMSlcblx0IiAiMjogZnByZW0xXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInRl c3RsCSQweDQwMCwgJSVlYXhcblx0IiAiam56CTJiXG5cdCIgImZzdHAJJSVzdCgxKVxuXHQiICJm c2luY29zXG5cdCIgIjE6IiA6ICI9dCIgKF9fY29zciksICI9dSIgKF9fc2lucikgOiAiMCIgKF9f eCkpOyAqX19zaW54ID0gX19zaW5yOyAqX19jb3N4ID0gX19jb3NyOwp9CgpfX2lubGluZSB2b2lk IF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KTsKX19p bmxpbmUgdm9pZApfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9f Y29zeCkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fY29zcjsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19zaW5yOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2luY29zXG5cdCIgImZuc3RzdwklJWF4 XG5cdCIgInRlc3RsCSQweDQwMCwgJSVlYXhcblx0IiAianoJMWZcblx0IiAiZmxkcGlcblx0IiAi ZmFkZAklJXN0KDApXG5cdCIgImZ4Y2gJJSVzdCgxKVxuXHQiICIyOiBmcHJlbTFcblx0IiAiZm5z dHN3CSUlYXhcblx0IiAidGVzdGwJJDB4NDAwLCAlJWVheFxuXHQiICJqbnoJMmJcblx0IiAiZnN0 cAklJXN0KDEpXG5cdCIgImZzaW5jb3Ncblx0IiAiMToiIDogIj10IiAoX19jb3NyKSwgIj11IiAo X19zaW5yKSA6ICIwIiAoX194KSk7ICpfX3NpbnggPSBfX3NpbnI7ICpfX2Nvc3ggPSBfX2Nvc3I7 Cn0KCl9faW5saW5lIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl ICpfX3NpbngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlICpfX2Nv c3gpOwpfX2lubGluZSB2b2lkCl9fc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X19jb3NyOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3NpbnI7IF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZzaW5jb3Ncblx0IiAiZm5zdHN3CSUlYXhcblx0IiAidGVzdGwJJDB4NDAwLCAlJWVheFxuXHQi ICJqegkxZlxuXHQiICJmbGRwaVxuXHQiICJmYWRkCSUlc3QoMClcblx0IiAiZnhjaAklJXN0KDEp XG5cdCIgIjI6IGZwcmVtMVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJ0ZXN0bAkkMHg0MDAsICUl ZWF4XG5cdCIgImpuegkyYlxuXHQiICJmc3RwCSUlc3QoMSlcblx0IiAiZnNpbmNvc1xuXHQiICIx OiIgOiAiPXQiIChfX2Nvc3IpLCAiPXUiIChfX3NpbnIpIDogIjAiIChfX3gpKTsgKl9fc2lueCA9 IF9fc2lucjsgKl9fY29zeCA9IF9fY29zcjsKfQojIDMyOCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0 aGlubGluZS5oIiAzCl9faW5saW5lIGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSk7 IF9faW5saW5lIGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJ CQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4 ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxv ZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUp KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxl CQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10IiAo X192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls ZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlcblx0IiA6ICI9dCIgKF9fdGVtcCkg OiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3RlbXAgLT0gMS4wOyByZXR1cm4gX190 ZW1wICsgX192YWx1ZTsgfQojIDM0OCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAz Cl9faW5saW5lIGRvdWJsZSBleHAgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBleHAgKGRvdWJs ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXnggPSAyXih4 ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIgImZzdAkl JXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhjaFxuXHQi ICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAyXihm cmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhw b25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVu dCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBleHBmIChmbG9hdCk7IF9faW5s aW5lIGZsb2F0IGV4cGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm bGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAq IGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cy KGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlc blx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgOiAiPXQiIChf X3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsg X19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3Zh bHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcg ZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgZXhwbCAobG9u ZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54 ID0gMl4oeCAqIGxvZzIoZSkpXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQi ICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4 Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJ CSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUi IChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9f ZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19leHBs IChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUg X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fZXhwb25lbnQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54ID0gMl4oeCAq IGxvZzIoZSkpXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVz dCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAi ZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJh Y3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9u ZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm c2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQp KTsgcmV0dXJuIF9fdmFsdWU7IH0KCgpfX2lubGluZSBkb3VibGUgdGFuIChkb3VibGUpOyBfX2lu bGluZSBkb3VibGUgdGFuIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmlidXRlX18gKChfX3VudXNl ZF9fKSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFuIiA6ICI9dCIgKF9fdmFsdWUyKSwgIj11 IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9h dCB0YW5mIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlMiBfX2F0 dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcHRhbiIgOiAi PXQiIChfX3ZhbHVlMiksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFs dWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBs b25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTIgX19hdHRyaWJ1dGVfXyAoKF9f dW51c2VkX18pKTsgX19hc20gX192b2xhdGlsZV9fICgiZnB0YW4iIDogIj10IiAoX192YWx1ZTIp LCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgMzY3ICIv dXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIGF0YW4yIChk b3VibGUsIGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91Ymxl IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgx KSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0LCBmbG9h dCk7IF9faW5saW5lIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9 dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9f dmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSwgbG9uZyBk b3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9u ZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kp IDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fYXRh bjJsIChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX2F0 YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFs dWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0K CgpfX2lubGluZSBkb3VibGUgZm1vZCAoZG91YmxlLCBkb3VibGUpOyBfX2lubGluZSBkb3VibGUg Zm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQi ICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9f eSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgZm1vZGYg KGZsb2F0LCBmbG9hdCk7IF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIx OglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIg KF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9f dmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlLCBsb25nIGRv dWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0 aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFi IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsg cmV0dXJuIF9fdmFsdWU7IH0KIyAzODIgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg MwpfX2lubGluZSBkb3VibGUgcG93IChkb3VibGUsIGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBw b3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1 ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxv bmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3k7IGlmIChfX3ggPT0gMC4wICYmIF9feSA+ IDAuMCkgcmV0dXJuIDAuMDsgaWYgKF9feSA9PSAoZG91YmxlKSBfX3ApIHsgbG9uZyBkb3VibGUg X19yID0gMS4wOyBpZiAoX19wID09IDApIHJldHVybiAxLjA7IGlmIChfX3AgPCAwKSB7IF9fcCA9 IC1fX3A7IF9feCA9IDEuMCAvIF9feDsgfSB3aGlsZSAoMSkgeyBpZiAoX19wICYgMSkgX19yICo9 IF9feDsgX19wID4+PSAxOyBpZiAoX19wID09IDApIHJldHVybiBfX3I7IF9feCAqPSBfX3g7IH0g fSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeWwyeCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194 KSwgInUiICgxLjApIDogInN0KDEpIik7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZtdWwJJSVzdCgx KQkJIyB5ICogbG9nMih4KVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQo eSAqIGxvZzIoeCkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHkgKiBs b2cyKHgpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeSAqIGxvZzIoeCkpKSAtIDFcblx0IiA6 ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX195KSwgIjEiIChfX3Zh bHVlKSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10 IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9f dmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgcG93ZiAoZmxvYXQsIGZsb2F0KTsgX19pbmxpbmUgZmxv YXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25n IGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3k7IGlmIChfX3ggPT0gMC4wICYmIF9f eSA+IDAuMCkgcmV0dXJuIDAuMDsgaWYgKF9feSA9PSAoZG91YmxlKSBfX3ApIHsgbG9uZyBkb3Vi bGUgX19yID0gMS4wOyBpZiAoX19wID09IDApIHJldHVybiAxLjA7IGlmIChfX3AgPCAwKSB7IF9f cCA9IC1fX3A7IF9feCA9IDEuMCAvIF9feDsgfSB3aGlsZSAoMSkgeyBpZiAoX19wICYgMSkgX19y ICo9IF9feDsgX19wID4+PSAxOyBpZiAoX19wID09IDApIHJldHVybiBfX3I7IF9feCAqPSBfX3g7 IH0gfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeWwyeCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo X194KSwgInUiICgxLjApIDogInN0KDEpIik7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZtdWwJJSVz dCgxKQkJIyB5ICogbG9nMih4KVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBp bnQoeSAqIGxvZzIoeCkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHkg KiBsb2cyKHgpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeSAqIGxvZzIoeCkpKSAtIDFcblx0 IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX195KSwgIjEiIChf X3ZhbHVlKSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDog Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJu IF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUsIGxvbmcg ZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChs b25nIGxvbmcgaW50KSBfX3k7IGlmIChfX3ggPT0gMC4wICYmIF9feSA+IDAuMCkgcmV0dXJuIDAu MDsgaWYgKF9feSA9PSAoZG91YmxlKSBfX3ApIHsgbG9uZyBkb3VibGUgX19yID0gMS4wOyBpZiAo X19wID09IDApIHJldHVybiAxLjA7IGlmIChfX3AgPCAwKSB7IF9fcCA9IC1fX3A7IF9feCA9IDEu MCAvIF9feDsgfSB3aGlsZSAoMSkgeyBpZiAoX19wICYgMSkgX19yICo9IF9feDsgX19wID4+PSAx OyBpZiAoX19wID09IDApIHJldHVybiBfX3I7IF9feCAqPSBfX3g7IH0gfSBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmeWwyeCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgxLjApIDog InN0KDEpIik7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZtdWwJJSVzdCgxKQkJIyB5ICogbG9nMih4 KVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeSAqIGxvZzIoeCkpXG5c dCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHkgKiBsb2cyKHgpKVxuXHQiICJm MnhtMQkJCSMgMl4oZnJhY3QoeSAqIGxvZzIoeCkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUp LCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX195KSwgIjEiIChfX3ZhbHVlKSk7IF9fdmFsdWUg Kz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA0MjYg Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgc3FydCAo ZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91 YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3Vs dCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgc3FydGYg KGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBmbG9h dCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQp IDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHNx cnRsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIHNxcnRsIChsb25nIGRvdWJs ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVf XyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3Vs dDsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSk7IF9faW5saW5l IGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1 bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgoKX19pbmxpbmUgZG91YmxlIGZh YnMgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB7IHJldHVybiBf X2J1aWx0aW5fZmFicyAoX194KTsgfQpfX2lubGluZSBmbG9hdCBmYWJzZiAoZmxvYXQpOyBfX2lu bGluZSBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YgKF9f eCk7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUg bG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2Zh YnNsIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlKTsg X19pbmxpbmUgbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBf X2J1aWx0aW5fZmFic2wgKF9feCk7IH0KCgoKCgoKX19pbmxpbmUgZG91YmxlIHNpbiAoZG91Ymxl KTsgX19pbmxpbmUgZG91YmxlIHNpbiAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19y ZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAi IChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IHNpbmYgKGZsb2F0KTsg X19pbmxpbmUgZmxvYXQgc2luZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0 OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2luIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194 KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRv dWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdp c3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNpbiIgOiAi PXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5l IGRvdWJsZSBjb3MgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHsg cmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmY29zIiA6ICI9 dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBm bG9hdCBjb3NmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGNvc2YgKGZsb2F0IF9feCkgeyByZWdp c3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmNvcyIgOiAiPXQiIChf X3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBk b3VibGUgY29zbCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBjb3NsIChsb25n IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZjb3MiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9f cmVzdWx0OyB9CgpfX2lubGluZSBkb3VibGUgYXRhbiAoZG91YmxlKTsgX19pbmxpbmUgZG91Ymxl IGF0YW4gKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3Zv bGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDog InN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQp OyBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVz dWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQp IDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25n IGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFubCAo bG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gp IDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfQpfX2lubGluZSBkb3VibGUgbG9nIChkb3Vi bGUpOyBfX2lubGluZSBkb3VibGUgbG9nIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGRvdWJsZSBf X3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yOyBmeGNoOyBmeWwyeCIgOiAiPXQi IChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9f aW5saW5lIGZsb2F0IGxvZ2YgKGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgbG9nZiAoZmxvYXQgX194 KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjI7 IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyBy ZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nbCAobG9uZyBkb3VibGUp OyBfX2lubGluZSBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMjsgZnhjaDsg ZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBf X3Jlc3VsdDsgfQpfX2lubGluZSBkb3VibGUgbG9nMTAgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJs ZSBsb2cxMCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZsZGxnMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAi IChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBsb2cx MGYgKGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIg ZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxnMjsgZnhjaDsgZnlsMngi IDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3Vs dDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUg bG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxnMjsgZnhjaDsgZnlsMngiIDog Ij10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsg fQoKX19pbmxpbmUgZG91YmxlIGFzaW4gKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBhc2luIChk b3VibGUgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX194LCBfX3NxcnRsICgxLjAgLSBfX3ggKiBf X3gpKTsgfSBfX2lubGluZSBmbG9hdCBhc2luZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBhc2lu ZiAoZmxvYXQgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX194LCBfX3NxcnRsICgxLjAgLSBfX3gg KiBfX3gpKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUpOyBfX2lu bGluZSBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX2F0YW4y bCAoX194LCBfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpKTsgfQpfX2lubGluZSBkb3VibGUgYWNv cyAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9f YXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBfX3gpOyB9IF9faW5saW5lIGZsb2F0 IGFjb3NmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIHsgcmV0dXJu IF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBfX3gpOyB9IF9faW5saW5lIGxv bmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3Ns IChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3gg KiBfX3gpLCBfX3gpOyB9CgpfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbjFsIChsb25nIGRvdWJs ZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1 cm4gX194ID49IDAuMCA/IDEuMCA6IC0xLjA7IH0KCgoKX19pbmxpbmUgZG91YmxlIHNpbmggKGRv dWJsZSk7IF9faW5saW5lIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChf X2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXhtMSkgKiBfX3NnbjFsIChfX3gpOyB9IF9faW5s aW5lIGZsb2F0IHNpbmhmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkp OyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApICsgX19leG0xKSAqIF9fc2du MWwgKF9feCk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlKTsgX19p bmxpbmUgbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVybiAwLjUgKiAo X19leG0xIC8gKF9fZXhtMSArIDEuMCkgKyBfX2V4bTEpICogX19zZ24xbCAoX194KTsgfQoKCgpf X2lubGluZSBkb3VibGUgY29zaCAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGNvc2ggKGRvdWJs ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leCA9IF9fZXhwbCAoX194KTsgcmV0dXJu IDAuNSAqIChfX2V4ICsgMS4wIC8gX19leCk7IH0gX19pbmxpbmUgZmxvYXQgY29zaGYgKGZsb2F0 KTsgX19pbmxpbmUgZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX2V4ID0gX19leHBsIChfX3gpOyByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KTsg fSBfX2lubGluZSBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25n IGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f ZXggPSBfX2V4cGwgKF9feCk7IHJldHVybiAwLjUgKiAoX19leCArIDEuMCAvIF9fZXgpOyB9CgoK Cl9faW5saW5lIGRvdWJsZSB0YW5oIChkb3VibGUpOyBfX2lubGluZSBkb3VibGUgdGFuaCAoZG91 YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoLV9fZmFi c2wgKF9feCArIF9feCkpOyByZXR1cm4gX19leG0xIC8gKF9fZXhtMSArIDIuMCkgKiBfX3NnbjFs ICgtX194KTsgfSBfX2lubGluZSBmbG9hdCB0YW5oZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCB0 YW5oZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFs ICgtX19mYWJzbCAoX194ICsgX194KSk7IHJldHVybiBfX2V4bTEgLyAoX19leG0xICsgMi4wKSAq IF9fc2duMWwgKC1fX3gpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJs ZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBfX3gpKTsg cmV0dXJuIF9fZXhtMSAvIChfX2V4bTEgKyAyLjApICogX19zZ24xbCAoLV9feCk7IH0KCgoKCl9f aW5saW5lIGRvdWJsZSBmbG9vciAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGZsb29yIChkb3Vi bGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7 IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0g KF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDog OiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192 YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIg KF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgZmxvb3JmIChmbG9hdCk7 IF9faW5saW5lIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19p bmxpbmUgbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91 YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1t IiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3Zv bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAo ImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxl ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA0NzkgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgY2VpbCAoZG91 YmxlKTsgX19pbmxpbmUgZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xh dGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3Rj dyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7 IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBf X3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNt IF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsg fSBfX2lubGluZSBmbG9hdCBjZWlsZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBjZWlsZiAoZmxv YXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7 IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0g KF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDog OiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192 YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIg KF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgY2VpbGwgKGxv bmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0 IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBf X3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYg MHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChf X2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDog IjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7 IHJldHVybiBfX3ZhbHVlOyB9CiMgNDk3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi IDMKX19pbmxpbmUgZG91YmxlIGxkZXhwIChkb3VibGUgX194LCBpbnQgX195KTsKX19pbmxpbmUg ZG91YmxlCmxkZXhwIChkb3VibGUgX194LCBpbnQgX195KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9 CgoKCgoKX19pbmxpbmUgZG91YmxlIGV4cG0xIChkb3VibGUpOyBfX2lubGluZSBkb3VibGUgZXhw bTEgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAx XG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQi ICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0 KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxv ZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAq IGxvZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAi IChfX3gpKTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihl KSlcblx0IiA6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBf X3RlbXAgLT0gMS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBl eHBtMWYgKGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJ CQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4 ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxv ZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUp KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxl CQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10IiAo X192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls ZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlcblx0IiA6ICI9dCIgKF9fdGVtcCkg OiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3RlbXAgLT0gMS4wOyByZXR1cm4gX190 ZW1wICsgX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91Ymxl KTsgX19pbmxpbmUgbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJ CQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4 ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxv ZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUp KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxl CQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10IiAo X192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls ZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlcblx0IiA6ICI9dCIgKF9fdGVtcCkg OiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3RlbXAgLT0gMS4wOyByZXR1cm4gX190 ZW1wICsgX192YWx1ZTsgfQoKCgoKCl9faW5saW5lIGRvdWJsZSBsb2cxcCAoZG91YmxlKTsgX19p bmxpbmUgZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1 MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9dCIgKF9fdmFsdWUpIDog IjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGxv ZzFwZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAx LjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2Ug X19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAi PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBf X2lubGluZSBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBk b3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUw NDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVf XyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MjggIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXNpbmggKGRvdWJsZSk7IF9f aW5saW5lIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf X3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwg KF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5s aW5lIGZsb2F0IGFzaW5oZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0IF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxv ZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195 KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBk b3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAo X195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9f c2duMWwgKF9feCkpOyB9CgoKCgpfX2lubGluZSBkb3VibGUgYWNvc2ggKGRvdWJsZSk7IF9faW5s aW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0 bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IF9faW5saW5lIGZsb2F0IGFj b3NoZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgeyByZXR1cm4g bG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9 IF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25n IGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19z cXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9CgoKX19pbmxpbmUgZG91 YmxlIGF0YW5oIChkb3VibGUpOyBfX2lubGluZSBkb3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBs b2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0gX19p bmxpbmUgZmxvYXQgYXRhbmhmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGF0YW5oZiAoZmxvYXQg X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAt MC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gp OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBs b25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kp IC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGh5 cG90IChkb3VibGUsIGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwg ZG91YmxlIF9feSkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfSBf X2lubGluZSBmbG9hdCBoeXBvdGYgKGZsb2F0LCBmbG9hdCk7IF9faW5saW5lIGZsb2F0IGh5cG90 ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9f eSAqIF9feSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSwgbG9u ZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kp OyB9CgpfX2lubGluZSBkb3VibGUgbG9nYiAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGxvZ2Ig KGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQi IChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9 IF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9h dCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1 bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5s aW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91Ymxl IGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0 XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVy biBfX3ZhbHVlOyB9CiMgNTU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19p bmxpbmUgZG91YmxlIGxvZzIgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBsb2cyIChkb3VibGUg X194KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxk MTsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7 IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBsb2cyZiAoZmxvYXQpOyBfX2lubGlu ZSBmbG9hdCBsb2cyZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmeGNoOyBmeWwyeCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAi MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91 YmxlIGxvZzJsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZzJsIChsb25n IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZsZDE7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194 KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5lIGZsb2F0IGxkZXhwZiAo ZmxvYXQgX194LCBpbnQgX195KTsKX19pbmxpbmUgZmxvYXQKbGRleHBmIChmbG9hdCBfX3gsIGlu dCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91 YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5saW5lIGxvbmcgZG91YmxlIGxkZXhw bCAobG9uZyBkb3VibGUgX194LCBpbnQgX195KTsKX19pbmxpbmUgbG9uZyBkb3VibGUKbGRleHBs IChsb25nIGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg KF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5s aW5lIGRvdWJsZSBmbWEgKGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOyBfX2lubGluZSBkb3VibGUg Zm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB7IHJldHVybiAoX194ICog X195KSArIF9fejsgfSBfX2lubGluZSBmbG9hdCBmbWFmIChmbG9hdCwgZmxvYXQsIGZsb2F0KTsg X19pbmxpbmUgZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgeyBy ZXR1cm4gKF9feCAqIF9feSkgKyBfX3o7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1hbCAobG9u ZyBkb3VibGUsIGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91Ymxl IGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3op IHsgcmV0dXJuIChfX3ggKiBfX3kpICsgX196OyB9CgpfX2lubGluZSBkb3VibGUgcmludCAoZG91 YmxlKTsgX19pbmxpbmUgZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91Ymxl IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcm5kaW50IiA6ICI9dCIgKF9fcmVzdWx0 KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCByaW50ZiAo ZmxvYXQpOyBfX2lubGluZSBmbG9hdCByaW50ZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0 IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcm5kaW50IiA6ICI9dCIgKF9fcmVzdWx0 KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBy aW50bCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSByaW50bCAobG9uZyBkb3Vi bGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmcm5kaW50IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jl c3VsdDsgfQoKCgoKCgoKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gpCnsKICBs b25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIgOiAi PW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJlczsK fQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkKewogIGxvbmcgaW50IF9fbHJp bnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRy ZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9Cl9faW5saW5lIGxv bmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KQp7CiAgbG9uZyBpbnQgX19scmludHJlczsg X19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAi dCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7Cn0KIyA2MDMgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGYgKGZs b2F0IF9feCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGls ZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3Qi KTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChk b3VibGUgX194KQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0 aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJz dCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRs IChsb25nIGRvdWJsZSBfX3gpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9f IF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChf X3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKX19pbmxpbmUgZG91Ymxl IGRyZW0gKGRvdWJsZSwgZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Ns b2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhc blx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJl cmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9f aW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCwgZmxvYXQpOyBfX2lubGluZSBmbG9hdCBkcmVtZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVy IGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZz dHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIg KF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3Zh bHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSwgbG9uZyBkb3Vi bGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2Ji ZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0 IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVk KSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9CiMgNjM4 ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgaW50IF9fZmluaXRl IChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7Cl9faW5saW5lIGludApf X2Zpbml0ZSAoZG91YmxlIF9feCkKewogIHJldHVybiAoX19leHRlbnNpb25fXwogICAgICAgICAg KCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtfX2Q6IF9feH0pLl9faVsx XQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkpOwp9CgoKCl9faW5saW5l IGRvdWJsZSBfX2Nvc2htMSAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIF9fY29zaG0xIChkb3Vi bGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNs IChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSkgKiBfX2V4bTE7 IH0gX19pbmxpbmUgZmxvYXQgX19jb3NobTFmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IF9fY29z aG0xZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFs IChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSkg KiBfX2V4bTE7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19jb3NobTFsIChsb25nIGRvdWJsZSk7 IF9faW5saW5lIGxvbmcgZG91YmxlIF9fY29zaG0xbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJu IDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSkgKiBfX2V4bTE7IH0KCgoKX19pbmxpbmUg ZG91YmxlIF9fYWNvc2gxcCAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIF9fYWNvc2gxcCAoZG91 YmxlIF9feCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0bCAo X194ICsgMi4wKSk7IH0gX19pbmxpbmUgZmxvYXQgX19hY29zaDFwZiAoZmxvYXQpOyBfX2lubGlu ZSBmbG9hdCBfX2Fjb3NoMXBmIChmbG9hdCBfX3gpIHsgcmV0dXJuIGxvZzFwbCAoX194ICsgX19z cXJ0bCAoX194KSAqIF9fc3FydGwgKF9feCArIDIuMCkpOyB9IF9faW5saW5lIGxvbmcgZG91Ymxl IF9fYWNvc2gxcGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19hY29zaDFw bCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBsb2cxcGwgKF9feCArIF9fc3FydGwgKF9feCkg KiBfX3NxcnRsIChfX3ggKyAyLjApKTsgfQojIDM0OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAz CiMgNDA5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCn0KIyAxMiAid2F2cGxheW9iamVjdF9pbXBs LmNjIiAyCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgQXJ0czsKCmNsYXNz IFdhdlBsYXlPYmplY3RfaW1wbCA6cHVibGljIFdhdlBsYXlPYmplY3Rfc2tlbCwgcHVibGljIFN0 ZFN5bnRoTW9kdWxlIHsKcHJvdGVjdGVkOgogICAgICAgIENhY2hlZFdhdiAqd2F2OwogICAgICAg IGRvdWJsZSBmbHBvczsKICAgICAgICBwb1N0YXRlIF9zdGF0ZTsKCiAgICAgICAgaW50IHNhbXBs ZUNvdW50KCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZighd2F2KSByZXR1cm4gMDsKICAg ICAgICAgICAgICAgIHJldHVybiB3YXYtPmJ1ZmZlclNpemUgLyB3YXYtPmNoYW5uZWxDb3VudCAv ICh3YXYtPnNhbXBsZVdpZHRoLzgpOwogICAgICAgIH0KcHVibGljOgoKCgogICAgICAgIFdhdlBs YXlPYmplY3RfaW1wbCgpIDp3YXYoMCksIGZscG9zKDAuMCksIF9zdGF0ZShwb3NJZGxlKQogICAg ICAgIHsKICAgICAgICAgICAgICAgIDo6QXJ0czo6RGVidWc6OmRlYnVnKCJXYXZQbGF5T2JqZWN0 X2ltcGwiKTsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgfldhdlBsYXlPYmplY3RfaW1wbCgp CiAgICAgICAgewogICAgICAgICAgICAgICAgOjpBcnRzOjpEZWJ1Zzo6ZGVidWcoIn5XYXZQbGF5 T2JqZWN0X2ltcGwiKTsKICAgICAgICAgICAgICAgIGlmKHdhdikgd2F2LT5kZWNSZWYoKTsKICAg ICAgICB9CgoKCgoKICAgICAgICBib29sIGxvYWRNZWRpYShjb25zdCBzdHJpbmcgJmZpbGVuYW1l KSB7CiAgICAgICAgICAgICAgICA6OkFydHM6OkRlYnVnOjpkZWJ1ZygiV2F2OiBsb2FkTWVkaWEg JXMiLCBmaWxlbmFtZS5jX3N0cigpKTsKICAgICAgICAgICAgICAgIHdhdiA9IENhY2hlZFdhdjo6 bG9hZChDYWNoZTo6dGhlKCksIGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiAod2F2 ICE9IDApOwogICAgICAgIH0KCgoKCiAgICAgICAgc3RyaW5nIGRlc2NyaXB0aW9uKCkgewogICAg ICAgICAgICAgICAgcmV0dXJuICJubyBkZXNjcmlwdGlvbiAoc2VlIHdhdnBsYXlvYmplY3RfaW1w bC5jYykiOwogICAgICAgIH0KCiAgICAgICAgcG9UaW1lIGN1cnJlbnRUaW1lKCkgewogICAgICAg ICAgICAgICAgaWYoIXdhdikgcmV0dXJuIHBvVGltZSgwLDAsMCwic2FtcGxlcyIpOwoKICAgICAg ICAgICAgICAgIGZsb2F0IHRpbWVzZWMgPSBmbHBvcyAvIChmbG9hdCl3YXYtPnNhbXBsaW5nUmF0 ZTsKICAgICAgICAgICAgICAgIGZsb2F0IHRpbWVtcyA9ICh0aW1lc2VjIC0gZmxvb3IodGltZXNl YykpICogMTAwMC4wOwoKICAgICAgICAgICAgICAgIHJldHVybiBwb1RpbWUodGltZXNlYywgdGlt ZW1zLCAoaW50KWZscG9zLCAic2FtcGxlcyIpOwogICAgICAgIH0KCiAgICBwb1RpbWUgb3ZlcmFs bFRpbWUoKSB7CiAgICAgICAgICAgICAgICBmbG9hdCB0aW1lc2VjID0gKGZsb2F0KXNhbXBsZUNv dW50KCkgLyAoZmxvYXQpd2F2LT5zYW1wbGluZ1JhdGU7CiAgICAgICAgICAgICAgICBmbG9hdCB0 aW1lbXMgPSAodGltZXNlYyAtIGZsb29yKHRpbWVzZWMpKSAqIDEwMDAuMDsKCiAgICAgICAgICAg ICAgICByZXR1cm4gcG9UaW1lKHRpbWVzZWMsIHRpbWVtcywgKGludClmbHBvcywgInNhbXBsZXMi KTsKICAgICAgICB9CgogICAgICAgIHBvQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllcygpIHsKICAg ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxwb0NhcGFiaWxpdGllcz4oY2FwUGF1c2Ur Y2FwU2Vlayk7CiAgICAgICAgfQoKICAgICAgICBzdHJpbmcgbWVkaWFOYW1lKCkgewogICAgICAg ICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KCiAgICAgICAgcG9TdGF0ZSBzdGF0ZSgpIHsK ICAgICAgICAgICAgICAgIHJldHVybiBfc3RhdGU7CiAgICAgICAgfQoKICAgICAgICB2b2lkIHBs YXkoKSB7CiAgICAgICAgICAgICAgICA6OkFydHM6OkRlYnVnOjpkZWJ1ZygicGxheSIpOwogICAg ICAgICAgICAgICAgX3N0YXRlID0gcG9zUGxheWluZzsKICAgICAgICB9CgogICAgICAgIHZvaWQg aGFsdCgpIHsKICAgICAgICAgICAgICAgIDo6QXJ0czo6RGVidWc6OmRlYnVnKCJzdG9wIik7CiAg ICAgICAgICAgICAgICBfc3RhdGUgPSBwb3NJZGxlOwogICAgICAgICAgICAgICAgZmxwb3MgPSAw LjA7CiAgICAgICAgfQoKICAgICAgICB2b2lkIHNlZWsoY29uc3QgY2xhc3MgcG9UaW1lICZuZXdU aW1lKSB7CiAgICAgICAgICAgICAgICBpZighd2F2KSByZXR1cm47CgogICAgICAgICAgICAgICAg ZmxvYXQgZm5ld3NhbXBsZXMgPSAtMTsKICAgICAgICAgICAgICAgIGlmKG5ld1RpbWUuc2Vjb25k cyAhPSAtMSAmJiBuZXdUaW1lLm1zICE9IC0xKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICBmbG9hdCBmbG5ld3RpbWUgPSAoZmxvYXQpbmV3VGltZS5zZWNvbmRzKygo ZmxvYXQpbmV3VGltZS5tcy8xMDAwLjApOwogICAgICAgICAgICAgICAgICAgICAgICBmbmV3c2Ft cGxlcyA9IGZsbmV3dGltZSAqIChmbG9hdCl3YXYtPnNhbXBsaW5nUmF0ZTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYobmV3VGltZS5jdXN0b20gPj0gMCAmJiBuZXdU aW1lLmN1c3RvbVVuaXQgPT0gInNhbXBsZXMiKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICBmbmV3c2FtcGxlcyA9IG5ld1RpbWUuY3VzdG9tOwogICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgIGlmKGZuZXdzYW1wbGVzID4gKGZsb2F0KXNhbXBsZUNvdW50 KCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGZuZXdzYW1wbGVzID0gKGZsb2F0KXNhbXBsZUNv dW50KCk7CgogICAgICAgICAgICAgICAgaWYoZm5ld3NhbXBsZXMgPj0gMCkgZmxwb3MgPSBmbmV3 c2FtcGxlczsKICAgICAgICB9CgogICAgICAgIHZvaWQgcGF1c2UoKSB7CiAgICAgICAgICAgICAg ICA6OkFydHM6OkRlYnVnOjpkZWJ1ZygicGF1c2UiKTsKICAgICAgICAgICAgICAgIF9zdGF0ZSA9 IHBvc1BhdXNlZDsKICAgICAgICB9CgoKCgoKCiAgICAgICAgdm9pZCBzdHJlYW1Jbml0KCkgewog ICAgICAgICAgICAgICAgOjpBcnRzOjpEZWJ1Zzo6ZGVidWcoInN0cmVhbUluaXQiKTsKICAgICAg ICB9CgogICAgICAgIHZvaWQgc3RyZWFtU3RhcnQoKSB7CiAgICAgICAgICAgICAgICA6OkFydHM6 OkRlYnVnOjpkZWJ1Zygic3RyZWFtU3RhcnQiKTsKICAgICAgICB9CgogICAgICAgIHZvaWQgY2Fs Y3VsYXRlQmxvY2sodW5zaWduZWQgbG9uZyBzYW1wbGVzKSB7CiAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIGhhdmVTYW1wbGVzID0gMDsKCiAgICAgICAgICAgICAgICBpZih3YXYgJiYgX3N0 YXRlID09IHBvc1BsYXlpbmcpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgIGRvdWJsZSBzcGVlZCA9IHdhdi0+c2FtcGxpbmdSYXRlIC8gc2FtcGxpbmdSYXRlRmxvYXQ7 CgogICAgICAgICAgICAgICAgICAgICAgICBoYXZlU2FtcGxlcyA9IHVuaV9jb252ZXJ0X3N0ZXJl b18yZmxvYXQoc2FtcGxlcywgd2F2LT5idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2F2LT5idWZmZXJTaXplLHdhdi0+Y2hhbm5lbENvdW50LHdhdi0+c2FtcGxlV2lkdGgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCxyaWdodCxzcGVlZCxmbHBvcyk7 CgogICAgICAgICAgICAgICAgICAgICAgICBmbHBvcyArPSAoZG91YmxlKWhhdmVTYW1wbGVzICog c3BlZWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYoaGF2ZVNhbXBsZXMg IT0gc2FtcGxlcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBpOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9aGF2ZVNhbXBsZXM7 aTxzYW1wbGVzO2krKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0W2ldID0g cmlnaHRbaV0gPSAwLjA7CgogICAgICAgICAgICAgICAgICAgICAgICBpZihfc3RhdGUgPT0gcG9z UGxheWluZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zdGF0ZSA9IHBvc0lk bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxwb3MgPSAwLjA7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZv aWQgc3RyZWFtRW5kKCkgewogICAgICAgICAgICAgICAgOjpBcnRzOjpEZWJ1Zzo6ZGVidWcoInN0 cmVhbUVuZCIpOwogICAgICAgIH0KfTsKCmNsYXNzIFdhdlBsYXlPYmplY3RfaW1wbF9GYWN0b3J5 IDogdmlydHVhbCBwdWJsaWMgQXJ0czo6RmFjdG9yeSB7IHB1YmxpYzogc3RkOjpzdHJpbmcgaW50 ZXJmYWNlTmFtZSgpIHsgcmV0dXJuIFdhdlBsYXlPYmplY3RfaW1wbDo6X2ludGVyZmFjZU5hbWVT a2VsKCk7IH0gQXJ0czo6T2JqZWN0X3NrZWwgKmNyZWF0ZUluc3RhbmNlKCkgeyByZXR1cm4gbmV3 IFdhdlBsYXlPYmplY3RfaW1wbCA7IH0gfSBUaGVfV2F2UGxheU9iamVjdF9pbXBsX0ZhY3Rvcnk7 Cg==