From mboxrd@z Thu Jan 1 00:00:00 1970 From: grigorig@web.de To: gcc-gnats@gcc.gnu.org Subject: optimization/3279: internal error at compiling a c++ source file Date: Tue, 19 Jun 2001 22:26:00 -0000 Message-id: <20010620051637.15457.qmail@sourceware.cygnus.com> X-SW-Source: 2001-06/msg00810.html List-Id: >Number: 3279 >Category: optimization >Synopsis: internal error at compiling a c++ source file >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue Jun 19 22:26:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Grigori Goronzy >Release: Reading specs from /usr/local/lib/gcc-lib/i586-pc-linux-gnu/3.0/specsConfigured with: ../gcc-3.0/configure --prefix=/usr/local --with-gxx-include-dir=/usr/local/include/g++ --enable-shared --enable-nls --enable-languages=c,c++Thread mode >Organization: >Environment: linux 2.4.5, i386, slackware linux, glibc 2.2 >Description: when i try to compile the attached file with -O3, gcc crashes with an internal compiler error: c++ -o nsFormControlHelper.o -c -DOSTYPE=\"Linux2.4\" -DOSARCH=\"Linux\" -DOJI -D_IMPL_NS_HTML -DENDER_LITE -I../../../../dist/include -I../../../../dist/include -I/windows/hda12/moz-cvs/mozilla/dist/include/nspr -I./../../../base/src -I./../../base/src -I./../../style/src -I./../../../xul/base/src -I/usr/X11R6/include -fPIC -I/usr/X11R6/include -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Wbad-function-cast -Wcast-align -Woverloaded-virtual -Wsynth -pedantic -Wno-long-long -pipe -fshort-wchar -pthread -O3 -DNDEBUG -DTRIMMED -I/usr/X11R6/include -DMOZILLA_CLIENT -include ../../../../config-defs.h -Wp,-MD,.deps/nsFormControlHelper.pp nsFormControlHelper.cpp nsFormControlHelper.cpp: In static member function `static void nsFormControlHelper::PaintFixedSizeCheckMark(nsIRenderingContext&, float)': nsFormControlHelper.cpp:733: Internal error: Speicherzugriffsfehler Please submit a full bug report, with preprocessed source if appropriate. See for instructions. gmake[5]: *** [nsFormControlHelper.o] Error 1 a preproccessed .ii - file is attached. >How-To-Repeat: gcc -O3 nsFormControlHelper.ii >Fix: don't know... >Release-Note: >Audit-Trail: >Unformatted: l: singlegcc version 3.0 ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="nsFormControlHelper.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="nsFormControlHelper.ii" IyAxICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIKIyAxICIuLi8uLi8uLi8uLi9jb25maWctZGVm cy5oIiAxCiMgMiAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAyMiAibnNGb3JtQ29udHJv bEhlbHBlci5jcHAiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEK IyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiMgMSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zRGVidWcuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNEZWJ1Zy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbS5oIiAxCiMg MjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiIDIKIyAxICIvd2luZG93cy9o ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMzkg Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVz LmgiCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3ByY3B1Y2ZnLmgiIDEKIyA0MCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p NTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAz CnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAxOTkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4 Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBp bnQgc2l6ZV90OwojIDQzICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJ0eXBlcy5oIiAyCiMgMjM0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgpleHRlcm4gIkMiIHsKIyAyNDQgIi93aW5k b3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5 cGVkZWYgdW5zaWduZWQgY2hhciBQUlVpbnQ4OwojIDI1OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2 cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBzaWduZWQgY2hh ciBQUkludDg7CiMgMjcxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFBSVWludDE2Owp0eXBl ZGVmIHNob3J0IFBSSW50MTY7CiMgMjg0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGludCBQUlVpbnQz MjsKdHlwZWRlZiBpbnQgUFJJbnQzMjsKIyAzMTggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgbG9uZyBsb25nIFBSSW50 NjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFBSVWludDY0OwojIDM0MiAiL3dpbmRvd3Mv aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRl ZiBpbnQgUFJJbnRuOwp0eXBlZGVmIHVuc2lnbmVkIGludCBQUlVpbnRuOwojIDM1MyAiL3dpbmRv d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlw ZWRlZiBkb3VibGUgUFJGbG9hdDY0OwoKCgoKCgp0eXBlZGVmIHNpemVfdCBQUlNpemU7CgoKCgoK Cgp0eXBlZGVmIFBSSW50MzIgUFJPZmZzZXQzMjsKdHlwZWRlZiBQUkludDY0IFBST2Zmc2V0NjQ7 CgoKCgoKCgp0eXBlZGVmIHB0cmRpZmZfdCBQUlB0cmRpZmY7CgoKCgoKCgp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgUFJVcHRyZGlmZjsKIyAzOTUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgUFJJbnRuIFBSQm9vbDsKIyA0 MDUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5 cGVzLmgiCnR5cGVkZWYgUFJVaW50OCBQUlBhY2tlZEJvb2w7CgoKCgoKdHlwZWRlZiBlbnVtIHsg UFJfRkFJTFVSRSA9IC0xLCBQUl9TVUNDRVNTID0gMCB9IFBSU3RhdHVzOwojIDQyNCAiL3dpbmRv d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlw ZWRlZiBsb25nIFBSV29yZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBSVXdvcmQ7CiMgNDY2ICIv d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5o IgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9v YnNvbGV0ZS9wcm90eXBlcy5oIiAxCiMgMjkgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSVWludG4g dWludG47Cgp0eXBlZGVmIFBSSW50biBpbnRuOwojIDUzICIvd2luZG93cy9oZGExMi9tb3otY3Zz L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIKIyAxICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUv ZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIv dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzExICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzEyICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpl eHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91 c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQg Y2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYg dW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9f ZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9f ZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVk ZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2lu dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2ln bmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4 dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVu c2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRl ZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVk ZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3Vf bG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBf X25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xv ZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVm IF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRl ZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwog IH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2Fk ZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191 c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBp bnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQg X19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBf X2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBl ZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90 Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNi bGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191 X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoK dHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRf dDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25n IGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJl YWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2Jp dHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3By aW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMK CgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBf X3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpf cHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBp bnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9w YXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwog IHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3Rh Y2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRl ZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVh ZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QK ewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVk IGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2Vy dmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBf X21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9t dXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRf bXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBz dHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3 X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsK ICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3 X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0 aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBp bnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGls ZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0 aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2Jh X3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmll cl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmll cmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQg Ii91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDIgMwoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1 X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0 eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBl ZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRl ZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlw ZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRl ZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlw ZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlw ZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5 cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlw ZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlw ZWRlZiBfX2tleV90IGtleV90OwojIDEyNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1NyAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoK CnR5cGVkZWYgX190aW1lX3QgdGltZV90OwojIDc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgODAgIi91c3IvaW5jbHVkZS90aW1l LmgiIDIgMwoKCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDkxICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgOTIgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTI3 ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1 c2Vjb25kc190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAx ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAxNDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVk ZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVz aG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxODQgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9p bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2ln bmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0 eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18p KSk7CiMgMjA2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv ZW5kaWFuLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMg MzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlh bi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyAyMDcgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAx IDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9z ZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIg Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv c2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVm IGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQg bG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSld OwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK CnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMSAzCiMgMTA2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsK ICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyA0NCAiL3Vz ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUu aCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3R5cGVzLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDIgMwoK CgpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRz X3QgdHZfdXNlYzsKICB9OwojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoK dHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoK ICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsK CgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwojIDg5ICIv dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50 IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAg ICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAg ICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAg c3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMs CiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAg ICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAg ICAgICAgICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2sp IHRocm93ICgpOwoKCn0KIyAyMTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAx ICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTMgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoK dHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Js a2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1MSAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5 cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90 IGZzZmlsY250NjRfdDsKCgp9CiMgNTQgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIiAyCgoKCgoKdHlwZWRlZiBQUlVp bnQ2NCB1aW50NjQ7Cgp0eXBlZGVmIFBSVWludDMyIHVpbnQzMjsKCgoKdHlwZWRlZiBQUlVpbnQx NiB1aW50MTY7CnR5cGVkZWYgUFJVaW50OCB1aW50ODsKIyA3NyAiL3dpbmRvd3MvaGRhMTIvbW96 LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL29ic29sZXRlL3Byb3R5cGVzLmgiCnR5cGVk ZWYgUFJJbnQ2NCBpbnQ2NDsKCgoKCgoKCnR5cGVkZWYgUFJJbnQzMiBpbnQzMjsKCgoKCnR5cGVk ZWYgUFJJbnQxNiBpbnQxNjsKdHlwZWRlZiBQUkludDggaW50ODsKCgoKCgp0eXBlZGVmIFBSRmxv YXQ2NCBmbG9hdDY0Owp0eXBlZGVmIFBSVXB0cmRpZmYgdXB0cmRpZmZfdDsKdHlwZWRlZiBQUlV3 b3JkIHVwcndvcmRfdDsKdHlwZWRlZiBQUldvcmQgcHJ3b3JkX3Q7CiMgNDY3ICIvd2luZG93cy9o ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAyCgoKCgoK fQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5oIiAyCiMgNDIgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiCmNsYXNzIG5zRGVidWcgewpwdWJsaWM6CgoK CgoKCiAgc3RhdGljIHZvaWQgQWJvcnRJZkZhbHNlKGNvbnN0IGNoYXIqIGFTdHIsIGNvbnN0IGNo YXIqIGFFeHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog YUZpbGUsIFBSSW50biBhTGluZSk7CiMgNjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Rl YnVnLmgiCiAgc3RhdGljIFBSQm9vbCBXYXJuSWZGYWxzZShjb25zdCBjaGFyKiBhU3RyLCBjb25z dCBjaGFyKiBhRXhwciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKIyA3OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zRGVidWcuaCIKICBzdGF0aWMgdm9pZCBTZXRXYXJuaW5nTWVzc2FnZUJveEVuYWJsZShQUkJv b2wgYU9uT2ZmKTsKCgoKCiAgc3RhdGljIFBSQm9vbCBHZXRXYXJuaW5nTWVzc2FnZUJveEVuYWJs ZSh2b2lkKTsKIyA5NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVidWcuaCIKICBzdGF0 aWMgdm9pZCBBYm9ydChjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3Rh dGljIHZvaWQgQnJlYWsoY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0 YXRpYyB2b2lkIFByZUNvbmRpdGlvbihjb25zdCBjaGFyKiBhU3RyLCBjb25zdCBjaGFyKiBhRXhw ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQ UkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBQb3N0Q29uZGl0aW9uKGNvbnN0IGNoYXIq IGFTdHIsIGNvbnN0IGNoYXIqIGFFeHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBB c3NlcnRpb24oY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hhciogYUV4cHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoK CiAgc3RhdGljIHZvaWQgTm90WWV0SW1wbGVtZW50ZWQoY29uc3QgY2hhciogYU1lc3NhZ2UsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQ UkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBOb3RSZWFjaGVkKGNvbnN0IGNoYXIqIGFN ZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxl LCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBFcnJvcihjb25zdCBjaGFyKiBhTWVz c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50 biBhTGluZSk7CgoKCgogIHN0YXRpYyB2b2lkIFdhcm5pbmcoY29uc3QgY2hhciogYU1lc3NhZ2Us CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBh TGluZSk7Cn07CiMgNDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAyCgoK CgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMTAgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc3Jvb3RpZGwuaCIgMQojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNyb290aWRsLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMg MzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIKIyAxICIvd2luZG93cy9oZGEx Mi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMzggIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zRGVidWcuaCIgMQojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNj b3JlLmgiIDIKIyAyMTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIKICAgIHR5 cGVkZWYgUFJVaW50MTYgUFJVbmljaGFyOwojIDEyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNyb290aWRsLmgiIDIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJ0aW1lLmgiIDEKIyAzMiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1j dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIgMQojIDMwICIvd2luZG93cy9o ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiCiMgMSAiL3dp bmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIg MQojIDMxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJsb25nLmgiIDIKCmV4dGVybiAiQyIgewojIDUwICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiCmV4dGVybiBQUkludDY0IExMX01heElu dCh2b2lkKTsKZXh0ZXJuIFBSSW50NjQgTExfTWluSW50KHZvaWQpOwpleHRlcm4gUFJJbnQ2NCBM TF9aZXJvKHZvaWQpOwojIDQwNyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BybG9uZy5oIgp9CiMgMzMgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIgMgoKZXh0ZXJuICJDIiB7CiMgNjEgIi93 aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIK dHlwZWRlZiBQUkludDY0IFBSVGltZTsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJUaW1lUGFyYW1l dGVycyB7CiAgICBQUkludDMyIHRwX2dtdF9vZmZzZXQ7CiAgICBQUkludDMyIHRwX2RzdF9vZmZz ZXQ7Cn0gUFJUaW1lUGFyYW1ldGVyczsKIyA5NiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgp0eXBlZGVmIHN0cnVjdCBQUkV4cGxvZGVk VGltZSB7CiAgICBQUkludDMyIHRtX3VzZWM7CiAgICBQUkludDMyIHRtX3NlYzsKCiAgICBQUklu dDMyIHRtX21pbjsKICAgIFBSSW50MzIgdG1faG91cjsKICAgIFBSSW50MzIgdG1fbWRheTsKCiAg ICBQUkludDMyIHRtX21vbnRoOwogICAgUFJJbnQxNiB0bV95ZWFyOwoKCiAgICBQUkludDggdG1f d2RheTsKCiAgICBQUkludDE2IHRtX3lkYXk7CgoKICAgIFBSVGltZVBhcmFtZXRlcnMgdG1fcGFy YW1zOwp9IFBSRXhwbG9kZWRUaW1lOwojIDEzOSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgp0eXBlZGVmIFBSVGltZVBhcmFtZXRlcnMg KCAqUFJUaW1lUGFyYW1GbikoY29uc3QgUFJFeHBsb2RlZFRpbWUgKmdtdCk7CiMgMTYxICIvd2lu ZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4 dGVybiBQUlRpbWUKClBSX05vdyh2b2lkKTsKIyAxNzUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKZXh0ZXJuIHZvaWQgUFJfRXhwbG9k ZVRpbWUoCiAgICBQUlRpbWUgdXNlY3MsIFBSVGltZVBhcmFtRm4gcGFyYW1zLCBQUkV4cGxvZGVk VGltZSAqZXhwbG9kZWQpOwoKCgoKCmV4dGVybiBQUlRpbWUKClBSX0ltcGxvZGVUaW1lKGNvbnN0 IFBSRXhwbG9kZWRUaW1lICpleHBsb2RlZCk7CiMgMTk4ICIvd2luZG93cy9oZGExMi9tb3otY3Zz L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBSX05vcm1h bGl6ZVRpbWUoCiAgICBQUkV4cGxvZGVkVGltZSAqZXhwbG9kZWQsIFBSVGltZVBhcmFtRm4gcGFy YW1zKTsKCgoKCgoKZXh0ZXJuIFBSVGltZVBhcmFtZXRlcnMgUFJfTG9jYWxUaW1lUGFyYW1ldGVy cyhjb25zdCBQUkV4cGxvZGVkVGltZSAqZ210KTsKCgpleHRlcm4gUFJUaW1lUGFyYW1ldGVycyBQ Ul9HTVRQYXJhbWV0ZXJzKGNvbnN0IFBSRXhwbG9kZWRUaW1lICpnbXQpOwoKCgoKCmV4dGVybiBQ UlRpbWVQYXJhbWV0ZXJzIFBSX1VTUGFjaWZpY1RpbWVQYXJhbWV0ZXJzKGNvbnN0IFBSRXhwbG9k ZWRUaW1lICpnbXQpOwojIDI0OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BydGltZS5oIgpleHRlcm4gUFJTdGF0dXMgUFJfUGFyc2VUaW1lU3RyaW5n ICgKICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcsCiAgICAgICAgUFJCb29sIGRlZmF1bHRfdG9f Z210LAogICAgICAgIFBSVGltZSAqcmVzdWx0KTsKIyAyNjUgIi93aW5kb3dzL2hkYTEyL21vei1j dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKZXh0ZXJuIFBSVWludDMyIFBS X0Zvcm1hdFRpbWUoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBjb25zdCBjaGFyICpmbXQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUkV4cGxvZGVkVGlt ZSAqdG0pOwoKCgoKZXh0ZXJuIFBSVWludDMyClBSX0Zvcm1hdFRpbWVVU0VuZ2xpc2goIGNoYXIq IGJ1ZiwgUFJVaW50MzIgYnVmU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciogZm9ybWF0LCBjb25zdCBQUkV4cGxvZGVkVGltZSogdG0gKTsKCgoKfQojIDEzICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNyb290aWRsLmgiIDIKIyAxMSAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zSVN1cHBvcnRzLmgiIDIKIyAxMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lTdXBwb3J0cy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0 aWxzLmgiIDEKIyAzMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMu aCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAzMyAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgoKCiMgMSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zRGVidWcuaCIgMQojIDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SUQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIgojIDEgIi91c3Iv aW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5o IiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYt cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBf X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9f ZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoK CgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg dm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNp emVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpf X3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChf X2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hy IChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChf X2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19j LCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3Ry bmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy biBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3Ry Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25z dCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0 cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94 bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3Ry dWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEz XTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAq X19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2Fs ZV90OwojIDEwOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gaW50IF9fc3Ry Y29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVf dCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g c2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNp emVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1 cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz CmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2Nv bnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f YykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90 IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ry c3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChf X2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3Qg Y2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9f Y29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAo Y2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQog ICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmlj dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2 ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3Rh Y2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVf dCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25z dCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0 ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhs ZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4g Y2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpz dHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRo cm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQg Kl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQg Kl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZv aWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19p KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAo bG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCl9fZXh0ZW5z aW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9s IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3Ry aW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVs aW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9f czEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93ICgpOwoK CmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNw eSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny YykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0 cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBuY3B5IChj aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIg KnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1mcm9i ICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYmFz ZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzYzICIvdXNyL2lu Y2x1ZGUvc3RyaW5nLmgiIDMKfQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5o IiAyCiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiCnN0cnVjdCBuc0lEIHsK CgoKCgogIFBSVWludDMyIG0wOwogIFBSVWludDE2IG0xOwogIFBSVWludDE2IG0yOwogIFBSVWlu dDggbTNbOF07CiMgNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiCiAgaW5saW5l IFBSQm9vbCBFcXVhbHMoY29uc3QgbnNJRCYgb3RoZXIpIGNvbnN0IHsKICAgIHJldHVybiAoUFJC b29sKQogICAgICAoKCgoUFJVaW50MzIqKSAmbTApWzBdID09ICgoUFJVaW50MzIqKSAmb3RoZXIu bTApWzBdKSAmJgogICAgICAgKCgoUFJVaW50MzIqKSAmbTApWzFdID09ICgoUFJVaW50MzIqKSAm b3RoZXIubTApWzFdKSAmJgogICAgICAgKCgoUFJVaW50MzIqKSAmbTApWzJdID09ICgoUFJVaW50 MzIqKSAmb3RoZXIubTApWzJdKSAmJgogICAgICAgKCgoUFJVaW50MzIqKSAmbTApWzNdID09ICgo UFJVaW50MzIqKSAmb3RoZXIubTApWzNdKSk7CiAgfQoKCgoKCiAgICAgICAgIFBSQm9vbCBQYXJz ZShjb25zdCBjaGFyICphSURTdHIpOwoKCgoKCiAgICAgICAgIGNoYXIqIFRvU3RyaW5nKCkgY29u c3Q7Cgp9OwojIDEwMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUQuaCIKdHlwZWRlZiBu c0lEIG5zQ0lEOwojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGls cy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlELmgiIDEKIyAzNSAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlELmgiCnR5cGVkZWYgbnNJRCBuc0lJRDsKIyAzOCAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgojIDEgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Vycm9yLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zRXJyb3IuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb20uaCIg MQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIiAyCiMgMSAiL3dpbmRv d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQoj IDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIiAyCgoKCgoKdHlwZWRlZiBQ UlVpbnQzMiBuc3Jlc3VsdDsKIyAyNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Vycm9y LmgiCmV4dGVybiBuc3Jlc3VsdApOU19FcnJvckFjY29yZGluZ1RvTlNQUigpOwojIDM5ICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAyCiMgMSAiL3dpbmRvd3Mv aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIiAxCiMgMjcg Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20u aCIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJ0eXBlcy5oIiAxCiMgMjggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcmF0b20uaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvY2suaCIgMQojIDMyICIvd2luZG93cy9oZGExMi9tb3ot Y3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiCiMgMSAiL3dpbmRvd3MvaGRh MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDMzICIv d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgi IDIKCmV4dGVybiAiQyIgewojIDQ3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiCnR5cGVkZWYgc3RydWN0IFBSTG9jayBQUkxvY2s7CiMg NjQgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxv Y2suaCIKZXh0ZXJuIFBSTG9jayogUFJfTmV3TG9jayh2b2lkKTsKIyA3NSAiL3dpbmRvd3MvaGRh MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgpleHRlcm4gdm9p ZCBQUl9EZXN0cm95TG9jayhQUkxvY2sgKmxvY2spOwojIDg2ICIvd2luZG93cy9oZGExMi9tb3ot Y3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiCmV4dGVybiB2b2lkIFBSX0xv Y2soUFJMb2NrICpsb2NrKTsKIyA5OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgpleHRlcm4gUFJTdGF0dXMgUFJfVW5sb2NrKFBSTG9j ayAqbG9jayk7Cgp9CiMgMjkgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcmF0b20uaCIgMgoKZXh0ZXJuICJDIiB7CiMgNDEgIi93aW5kb3dzL2hkYTEy L21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSSW50 MzIgUFJfQXRvbWljSW5jcmVtZW50KFBSSW50MzIgKnZhbCk7CiMgNTIgIi93aW5kb3dzL2hkYTEy L21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSSW50 MzIgUFJfQXRvbWljRGVjcmVtZW50KFBSSW50MzIgKnZhbCk7CiMgNjQgIi93aW5kb3dzL2hkYTEy L21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSSW50 MzIgUFJfQXRvbWljU2V0KFBSSW50MzIgKnZhbCwgUFJJbnQzMiBuZXd2YWwpOwojIDc2ICIvd2lu ZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4 dGVybiBQUkludDMyIFBSX0F0b21pY0FkZChQUkludDMyICpwdHIsIFBSSW50MzIgdmFsKTsKCgoK CnR5cGVkZWYgc3RydWN0IFBSU3RhY2tFbGVtU3RyIFBSU3RhY2tFbGVtOwoKc3RydWN0IFBSU3Rh Y2tFbGVtU3RyIHsKICAgIFBSU3RhY2tFbGVtICpwcnN0a19lbGVtX25leHQ7Cgp9OwoKdHlwZWRl ZiBzdHJ1Y3QgUFJTdGFja1N0ciBQUlN0YWNrOwojIDk5ICIvd2luZG93cy9oZGExMi9tb3otY3Zz L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQUlN0YWNrICogUFJf Q3JlYXRlU3RhY2soY29uc3QgY2hhciAqc3RhY2tfbmFtZSk7CiMgMTExICIvd2luZG93cy9oZGEx Mi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiB2b2lk IFBSX1N0YWNrUHVzaChQUlN0YWNrICpzdGFjaywgUFJTdGFja0VsZW0gKnN0YWNrX2VsZW0pOwoj IDEyNCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By YXRvbS5oIgpleHRlcm4gUFJTdGFja0VsZW0gKiBQUl9TdGFja1BvcChQUlN0YWNrICpzdGFjayk7 CiMgMTM4ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJhdG9tLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9EZXN0cm95U3RhY2soUFJTdGFjayAqc3RhY2sp OwoKfQojIDQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAy CgoKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJjbW9uLmgiIDEKIyAzMiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3ByY21vbi5oIgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIiAxCiMgMjIgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIgojIDEgIi93aW5kb3dzL2hkYTEyL21v ei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyMyAiL3dpbmRv d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybW9uLmgiIDIKIyAx ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2 YWwuaCIgMQojIDM0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJpbnJ2YWwuaCIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMzUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAyCgpleHRlcm4gIkMiIHsKCgoK Cgp0eXBlZGVmIFBSVWludDMyIFBSSW50ZXJ2YWxUaW1lOwojIDg5ICIvd2luZG93cy9oZGExMi9t b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIKZXh0ZXJuIFBSSW50 ZXJ2YWxUaW1lIFBSX0ludGVydmFsTm93KHZvaWQpOwojIDEwNyAiL3dpbmRvd3MvaGRhMTIvbW96 LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiCmV4dGVybiBQUlVpbnQz MiBQUl9UaWNrc1BlclNlY29uZCh2b2lkKTsKIyAxMjYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4gUFJJbnRlcnZhbFRp bWUgUFJfU2Vjb25kc1RvSW50ZXJ2YWwoUFJVaW50MzIgc2Vjb25kcyk7CmV4dGVybiBQUkludGVy dmFsVGltZSBQUl9NaWxsaXNlY29uZHNUb0ludGVydmFsKFBSVWludDMyIG1pbGxpKTsKZXh0ZXJu IFBSSW50ZXJ2YWxUaW1lIFBSX01pY3Jvc2Vjb25kc1RvSW50ZXJ2YWwoUFJVaW50MzIgbWljcm8p OwojIDE0NyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3ByaW5ydmFsLmgiCmV4dGVybiBQUlVpbnQzMiBQUl9JbnRlcnZhbFRvU2Vjb25kcyhQUkludGVy dmFsVGltZSB0aWNrcyk7CmV4dGVybiBQUlVpbnQzMiBQUl9JbnRlcnZhbFRvTWlsbGlzZWNvbmRz KFBSSW50ZXJ2YWxUaW1lIHRpY2tzKTsKZXh0ZXJuIFBSVWludDMyIFBSX0ludGVydmFsVG9NaWNy b3NlY29uZHMoUFJJbnRlcnZhbFRpbWUgdGlja3MpOwoKfQojIDI0ICIvd2luZG93cy9oZGExMi9t b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIgMgoKZXh0ZXJuICJDIiB7 Cgp0eXBlZGVmIHN0cnVjdCBQUk1vbml0b3IgUFJNb25pdG9yOwojIDM2ICIvd2luZG93cy9oZGEx Mi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIKZXh0ZXJuIFBSTW9u aXRvciogUFJfTmV3TW9uaXRvcih2b2lkKTsKCgoKCgoKCmV4dGVybiB2b2lkIFBSX0Rlc3Ryb3lN b25pdG9yKFBSTW9uaXRvciAqbW9uKTsKCgoKCgoKZXh0ZXJuIHZvaWQgUFJfRW50ZXJNb25pdG9y KFBSTW9uaXRvciAqbW9uKTsKCgoKCgoKZXh0ZXJuIFBSU3RhdHVzIFBSX0V4aXRNb25pdG9yKFBS TW9uaXRvciAqbW9uKTsKIyA3NiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BybW9uLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9XYWl0KFBSTW9uaXRvciAq bW9uLCBQUkludGVydmFsVGltZSB0aWNrcyk7CgoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9Ob3Rp ZnkoUFJNb25pdG9yICptb24pOwoKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfTm90aWZ5QWxsKFBS TW9uaXRvciAqbW9uKTsKCn0KIyAzMyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3ByY21vbi5oIiAyCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiIDEKIyAzNCAiL3dpbmRvd3MvaGRh MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY21vbi5oIiAyCgpleHRlcm4g IkMiIHsKIyA0NSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3ByY21vbi5oIgpleHRlcm4gUFJNb25pdG9yKiBQUl9DRW50ZXJNb25pdG9yKHZvaWQgKmFk ZHJlc3MpOwoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9DRXhpdE1vbml0b3Iodm9pZCAqYWRkcmVz cyk7CgoKCgoKZXh0ZXJuIFBSU3RhdHVzIFBSX0NXYWl0KHZvaWQgKmFkZHJlc3MsIFBSSW50ZXJ2 YWxUaW1lIHRpbWVvdXQpOwoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9DTm90aWZ5KHZvaWQgKmFk ZHJlc3MpOwoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9DTm90aWZ5QWxsKHZvaWQgKmFkZHJlc3Mp OwoKCgoKCmV4dGVybiB2b2lkIFBSX0NTZXRPbk1vbml0b3JSZWN5Y2xlKHZvaWQgKCAqY2FsbGJh Y2spKHZvaWQgKmFkZHJlc3MpKTsKCn0KIyA0MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SVN1cHBvcnRzVXRpbHMuaCIgMgojIDcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3Vw cG9ydHNVdGlscy5oIgp0eXBlZGVmIFBSVWludDMyIG5zcmVmY250OwojIDkwICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc1RyYWNlUmVmY250LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zVHJhY2VSZWZjbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb20uaCIg MQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIiAyCgojIDEg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk aW8uaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv My4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK IyAzNyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk ZS9zdGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1s aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQzICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgi IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA0NSAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMK IyA1MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk ZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjMgIi91c3IvbG9j YWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwp0 eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzMgIi91c3IvbG9jYWwvbGliL2djYy1s aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5j bHVkZS9saWJpby5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDkgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDEwICIvdXNyL2luY2x1ZGUv X0dfY29uZmlnLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMt bGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMTIgIi91c3IvbG9jYWwvbGli L2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIg MwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2No YXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg NDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2No YXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNs dWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAg ewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9f bWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBz dHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9z X3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19z dGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2dj b252LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5j bHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4 LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5o IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5j bHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9f R0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05W X05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAg X19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19H Q09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgpl bnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JT ID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBf ZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNf ZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAg Kiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwg aW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9z dGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9z dGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2Nv bnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2Nv bnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2dj b252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25l ZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJh bnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQg KCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRl ZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252 X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252 X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19l bmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZf dHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3Qg X19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9f bW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAq X190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5p dF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVk X2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAg aW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7 Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRi dWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAg aW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19t YnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9f Z2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9p bmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsK ICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9f Z2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlv bgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBf X2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAg fSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0 cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBf R191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p KSk7CiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MSAiL3Vzci9pbmNsdWRlL2xp YmlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMu MC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92 YV9saXN0IF9fZ251Y192YV9saXN0OwojIDUyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMg MTU4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9J T19GSUxFOwojIDE2OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19s b2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4 dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MSAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2 dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0 X25vY29udgp9OwojIDI1OSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxF IHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3Jl YWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAg Y2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19i dWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBj aGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lP X21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2Zp bGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25l ZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFy IF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDMgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAg dm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2Yg KGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3Bs dXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBz dHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJ TEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0 eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1 Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVf Zm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vl a19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVk ZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19pb19y ZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBjb29r aWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtfZnVu Y3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90OwoK CnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAq d3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9J T19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNf dCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVy biB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVfZmlsZSAqX19jZmlsZSwg aW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Nv b2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoKCgpleHRlcm4gIkMiIHsK CgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChf SU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lP X0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxFICopIHRo cm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3QpIHRo cm93ICgpOwojIDQyNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0 YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19j LCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxF ICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkg dGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv dyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA0NTQg Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxF ICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRlcm4g aW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVz dHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7 CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSB0 aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6 ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICos IF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVr cG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBf SU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNTEwICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMwp9CiMgNzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1s aW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9s aXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBj LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX0dfZnBvc190IGZwb3Nf dDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTM3ICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTM4ICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRl cm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7 CgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93 ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hh ciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93 ICgpOwojIDE2NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAv aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgp OwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4g Y2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTg2ICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu IGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBp bnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQp IHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyMzAgIi91c3IvbG9jYWwvbGliL2djYy1saWIv aTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9w ZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVy biBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywK ICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21v ZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVz dHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nv b2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAq Zm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMp IHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0 cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVz dHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9f cmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBf X24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJp bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnBy aW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgp OwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50 ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4 bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu dGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f cywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRl cm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy ZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg MiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwK ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4u LikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg MiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAz KSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAw KSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo X19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg dmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoK CmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9f Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h dF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBp bnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxF ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAo KTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4g aW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxv Y2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBw dXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBp bnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBn ZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193 LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAg IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9f cykgdGhyb3cgKCk7CiMgNDM0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgt Z251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGltIChj aGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0 ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2Rl bGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jl c3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19y ZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90 IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lk ICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6 ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXpl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9f Y29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50 IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKIyA0OTcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19z dHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19v ZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0 cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3Mp CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2Nv bnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpOwojIDUzMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp Yi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNl ZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhy b3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2 NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2 NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxF ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAq X19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNo YXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJu IF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZp bGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5s b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVu IChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4 dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFy ICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0 ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0 YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1 Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg ZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVu bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2MzggIi91c3IvbG9jYWwvbGli L2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvYml0cy9zdGRp by5oIiAzCmlubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10 LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rk b3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAo KQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxv Y2tlZCAoRklMRSAqX19mcCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9w dHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQg Y2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91 bmxvY2tlZCAodm9pZCkgdGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRy ID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQg Y2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hh ciAoaW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9 CgoKCgppbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3Ry ZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNo YXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIr KyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRl X3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFt LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+ X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tl ZCAoaW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRy ID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2ln bmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVf cHRyKysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoq X19saW5lcHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1 cm4gX19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlu bGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1 cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVy cm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0 cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjM5ICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCn0KIyAyOSAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVHJhY2VSZWZjbnQuaCIgMgoKY2xhc3MgbnNJU3Vw cG9ydHM7CiMgMTMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIgpz dHJ1Y3QgbnNUcmFjZVJlZmNudFN0YXRzIHsKICBuc3JlZmNudCBtQWRkUmVmczsKICBuc3JlZmNu dCBtUmVsZWFzZXM7CiAgbnNyZWZjbnQgbUNyZWF0ZXM7CiAgbnNyZWZjbnQgbURlc3Ryb3lzOwog IGRvdWJsZSBtUmVmc091dHN0YW5kaW5nVG90YWw7CiAgZG91YmxlIG1SZWZzT3V0c3RhbmRpbmdT cXVhcmVkOwogIGRvdWJsZSBtT2Jqc091dHN0YW5kaW5nVG90YWw7CiAgZG91YmxlIG1PYmpzT3V0 c3RhbmRpbmdTcXVhcmVkOwp9OwojIDE1MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVHJh Y2VSZWZjbnQuaCIKdHlwZWRlZiBQUkJvb2wgKCAqbnNUcmFjZVJlZmNudFN0YXRGdW5jKQogIChj b25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgIFBSVWludDMyIGFJbnN0YW5jZVNpemUsCiAgIG5zVHJh Y2VSZWZjbnRTdGF0cyogYUN1cnJlbnRTdGF0cywKICAgbnNUcmFjZVJlZmNudFN0YXRzKiBhUHJl dlN0YXRzLAogICB2b2lkICphQ2xvc3VyZSk7CgoKCgoKY2xhc3MgbnNUcmFjZVJlZmNudCB7CnB1 YmxpYzoKICBzdGF0aWMgdm9pZCBTdGFydHVwKCk7CgogIHN0YXRpYyB2b2lkIFNodXRkb3duKCk7 CgogIHN0YXRpYyB2b2lkIExvZ0FkZFJlZih2b2lkKiBhUHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNyZWZjbnQgYU5ld1JlZkNudCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBSVWludDMyIGFJbnN0YW5jZVNpemUpOwoKICBzdGF0aWMgdm9pZCBMb2dSZWxlYXNlKHZv aWQqIGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZWZjbnQgYU5ld1Jl ZkNudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhVHlwZU5h bWUpOwoKICBzdGF0aWMgdm9pZCBMb2dOZXdYUENPTSh2b2lkKiBhUHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFJbnN0YW5jZVNpemUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgYUxpbmUpOwoKICBzdGF0aWMgdm9pZCBMb2dEZWxldGVYUENPTSh2 b2lkKiBhUHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy KiBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFMaW5lKTsK CiAgc3RhdGljIG5zcmVmY250IExvZ0FkZFJlZkNhbGwodm9pZCogYVB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZWZjbnQgYU5ld1JlZmNudCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhTGluZSk7CgogIHN0YXRpYyBuc3Jl ZmNudCBMb2dSZWxlYXNlQ2FsbCh2b2lkKiBhUHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnNyZWZjbnQgYU5ld1JlZmNudCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGFMaW5lKTsKCiAgc3RhdGljIHZvaWQgTG9nQ3Rvcih2 b2lkKiBhUHRyLCBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0YXRpYyB2b2lkIExvZ0R0b3Iodm9p ZCogYVB0ciwgY29uc3QgY2hhciogYVR5cGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBSVWludDMyIGFJbnN0YW5jZVNpemUpOwoKICBzdGF0aWMgdm9pZCBMb2dBZGRDT01QdHIo dm9pZCAqYUNPTVB0ciwgbnNJU3VwcG9ydHMgKmFPYmplY3QpOwoKICBzdGF0aWMgdm9pZCBMb2dS ZWxlYXNlQ09NUHRyKHZvaWQgKmFDT01QdHIsIG5zSVN1cHBvcnRzICphT2JqZWN0KTsKCiAgZW51 bSBTdGF0aXN0aWNzVHlwZSB7CiAgICBBTExfU1RBVFMsCiAgICBORVdfU1RBVFMKICB9OwoKICBz dGF0aWMgbnNyZXN1bHQgRHVtcFN0YXRpc3RpY3MoU3RhdGlzdGljc1R5cGUgdHlwZSA9IEFMTF9T VEFUUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUqIG91dCA9 IDApOwoKICBzdGF0aWMgdm9pZCBSZXNldFN0YXRpc3RpY3Modm9pZCk7CgogIHN0YXRpYyB2b2lk IEdhdGhlclN0YXRpc3RpY3MobnNUcmFjZVJlZmNudFN0YXRGdW5jIGFGdW5jLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFDbG9zdXJlKTsKCiAgc3RhdGljIHZv aWQgTG9hZExpYnJhcnlTeW1ib2xzKGNvbnN0IGNoYXIqIGFMaWJyYXJ5TmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFMaWJyYXlIYW5kbGUpOwoKICBz dGF0aWMgdm9pZCBEZW1hbmdsZVN5bWJvbChjb25zdCBjaGFyICogYVN5bWJvbCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGFCdWZmZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBhQnVmTGVuKTsKCiAgc3RhdGljIHZvaWQgV2Fsa1Ro ZVN0YWNrKEZJTEUqIGFTdHJlYW0pOwoKICBzdGF0aWMgdm9pZCBTZXRQcmVmU2VydmljZUF2YWls YWJpbGl0eShQUkJvb2wgYXZhaWwpOwoKCgoKCgogIHN0YXRpYyB2b2lkIFNldEFjdGl2aXR5SXNM ZWdhbChQUkJvb2wgYUxlZ2FsKTsKfTsKCgoKCmV4dGVybiAiQyIgdm9pZApOU19NZWFuQW5kU3Rk RGV2KGRvdWJsZSBuLCBkb3VibGUgc3VtT2ZWYWx1ZXMsIGRvdWJsZSBzdW1PZlNxdWFyZWRWYWx1 ZXMsCiAgICAgICAgICAgICAgICAgZG91YmxlICptZWFuUmVzdWx0LCBkb3VibGUgKnN0ZERldlJl c3VsdCk7CiMgOTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgi IDIKCgoKCgoKCmNsYXNzIG5zSVN1cHBvcnRzIHsKcHVibGljOgojIDExNSAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFF1ZXJ5 SW50ZXJmYWNlKGNvbnN0IG5zSUlEJiBhSUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCoqIGFJbnN0YW5jZVB0cikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVmY250IEFkZFJl Zih2b2lkKSA9IDA7CiMgMTMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNV dGlscy5oIgogIHZpcnR1YWwgbnNyZWZjbnQgUmVsZWFzZSh2b2lkKSA9IDA7CgoKfTsKIyAxMTE3 ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMr KyIgewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5zcmVmY250Cm5zX2lmX2FkZHJlZigg VCBleHByICkKCgoKICB7CiAgICByZXR1cm4gZXhwciA/IGV4cHItPkFkZFJlZigpIDogMDsKICB9 CgogfQojIDEyMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgi CmV4dGVybiAiQysrIiB7CgoKCmNsYXNzIG5zSVN1cHBvcnRzOwoKdGVtcGxhdGUgPGNsYXNzIFQ+ CnN0cnVjdCBuc0NPTVR5cGVJbmZvCiAgewogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo KSB7IHJldHVybiBUOjpHZXRJSUQoKTsgfQogIH07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNDT01U eXBlSW5mbzxuc0lTdXBwb3J0cz4KICB7CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp IHsKICAgICAgICBzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDAwMDAwMDAwLCAweDAwMDAs IDB4MDAwMCwgezB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDZ9 IH07IHJldHVybiBpaWQ7CiAgICB9CiAgfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBEZXN0aW5hdGlv blR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsUXVlcnlJbnRlcmZhY2UoIG5zSVN1cHBvcnRzKiBh U291cmNlLCBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdGluYXRpb24gKQogIHsKICAgIHt9OwogICAg e307CgogICAgcmV0dXJuIGFTb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKG5zQ09NVHlwZUluZm88RGVz dGluYXRpb25UeXBlPjo6R2V0SUlEKCksICh2b2lkKiopYURlc3RpbmF0aW9uKTsKICB9Cgp9CgoK CgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNsYXNzSW5mby5oIiAxCiMgMTQg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDbGFzc0luZm8uaCIKIyAxICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJUHJvZ3JhbW1pbmdMYW5ndWFnZS5oIiAxCiMgMjggIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lQcm9ncmFtbWluZ0xhbmd1YWdlLmgiCmNsYXNzIG5zSVByb2dy YW1taW5nTGFuZ3VhZ2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZWE2MDRl OTAsIDB4NDBiYSwgMHgxMWQ1LCB7IDB4OTAsIDB4YmIsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcs IDB4M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7fQoKCgoKICBlbnVtIHsgVU5LTk9XTiA9IDBVIH07 CgogIGVudW0geyBDUExVU1BMVVMgPSAxVSB9OwoKICBlbnVtIHsgSkFWQVNDUklQVCA9IDJVIH07 CgogIGVudW0geyBQWVRIT04gPSAzVSB9OwoKICBlbnVtIHsgUEVSTCA9IDRVIH07CgogIGVudW0g eyBKQVZBID0gNVUgfTsKCiAgZW51bSB7IFpYODFfQkFTSUMgPSA2VSB9OwoKICBlbnVtIHsgSkFW QVNDUklQVDIgPSA3VSB9OwoKfTsKIyAxNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNs YXNzSW5mby5oIiAyCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDbGFzc0luZm8u aCIKY2xhc3MgbnNJQ2xhc3NJbmZvIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw eDk4NmMxMWQwLCAweGYzNDAsIDB4MTFkNCwgeyAweDkwLCAweDc1LCAweDAwLCAweDEwLCAweGE0 LCAweGU3LCAweDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KIyA0MyAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSUNsYXNzSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJmYWNl cyhQUlVpbnQzMiAqY291bnQsIG5zSUlEICogKiphcnJheSkgPSAwOwojIDU4ICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJQ2xhc3NJbmZvLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWxw ZXJGb3JMYW5ndWFnZShQUlVpbnQzMiBsYW5ndWFnZSwgbnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9 IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250cmFjdElEKGNoYXIgKiAqYUNvbnRy YWN0SUQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NEZXNjcmlwdGlvbihj aGFyICogKmFDbGFzc0Rlc2NyaXB0aW9uKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDbGFzc0lEKG5zQ0lEICogKmFDbGFzc0lEKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldEltcGxlbWVudGF0aW9uTGFuZ3VhZ2UoUFJVaW50MzIgKmFJbXBsZW1lbnRhdGlvbkxhbmd1 YWdlKSA9IDA7CgoKCgogIGVudW0geyBTSU5HTEVUT04gPSAxVSB9OwoKICBlbnVtIHsgVEhSRUFE U0FGRSA9IDJVIH07CgogIGVudW0geyBNQUlOX1RIUkVBRF9PTkxZID0gNFUgfTsKCiAgZW51bSB7 IERPTV9PQkpFQ1QgPSA4VSB9OwoKICBlbnVtIHsgUExVR0lOX09CSkVDVCA9IDE2VSB9OwoKICBl bnVtIHsgUkVTRVJWRUQgPSAyMTQ3NDgzNjQ4VSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRG bGFncyhQUlVpbnQzMiAqYUZsYWdzKSA9IDA7Cgp9OwojIDEyNzQgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiIDIKIyAxMTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lTdXBwb3J0cy5oIiAyCiMgNTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NP TVB0ci5oIiAyCgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQoj IDU1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIgMgojIDEwNyAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgdHlwZWRlZiBQUkJvb2wgTlNDQVBfQk9P TDsKIyAxNTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4KY2xhc3MgbnNEZXJpdmVkU2FmZSA6IHB1YmxpYyBUCiMgMTcwICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICB7CiAgICBwcml2YXRlOgoKICAgICAgdXNpbmcg VDo6QWRkUmVmOwogICAgICB1c2luZyBUOjpSZWxlYXNlOwoKCgoKCgogICAgICB2b2lkIG9wZXJh dG9yIGRlbGV0ZSggdm9pZCosIHNpemVfdCApOwoKCgogICAgICBuc0Rlcml2ZWRTYWZlPFQ+JiBv cGVyYXRvcj0oIGNvbnN0IFQmICk7CiMgMTk0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND T01QdHIuaCIKICB9OwojIDIxNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgi CnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgYWxyZWFkeV9BZGRSZWZlZAojIDIzMiAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewogICAgYWxyZWFkeV9BZGRSZWZlZCgg VCogYVJhd1B0ciApCiAgICAgICAgOiBtUmF3UHRyKGFSYXdQdHIpCiAgICAgIHsKCiAgICAgIH0K CiAgICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBtUmF3UHRyOyB9CgogICAgVCogbVJhd1B0cjsK ICB9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBhbHJlYWR5X0FkZFJlZmVkPFQ+ CmdldHRlcl9BZGRSZWZzKCBUKiBhUmF3UHRyICkKCgoKCiAgewogICAgcmV0dXJuIGFscmVhZHlf QWRkUmVmZWQ8VD4oYVJhd1B0cik7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25z dCBhbHJlYWR5X0FkZFJlZmVkPFQ+CmdldHRlcl9BZGRSZWZzKCBjb25zdCBhbHJlYWR5X0FkZFJl ZmVkPFQ+JiBhQWxyZWFkeUFkZFJlZmVkUHRyICkKICB7CiAgICByZXR1cm4gYUFscmVhZHlBZGRS ZWZlZFB0cjsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNvbnN0IGFscmVhZHlfQWRk UmVmZWQ8VD4KZG9udF9BZGRSZWYoIFQqIGFSYXdQdHIgKQogIHsKICAgIHJldHVybiBhbHJlYWR5 X0FkZFJlZmVkPFQ+KGFSYXdQdHIpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29u c3QgYWxyZWFkeV9BZGRSZWZlZDxUPgpkb250X0FkZFJlZiggY29uc3QgYWxyZWFkeV9BZGRSZWZl ZDxUPiBhQWxyZWFkeUFkZFJlZmVkUHRyICkKICB7CiAgICByZXR1cm4gYUFscmVhZHlBZGRSZWZl ZFB0cjsKICB9CiMgMjkxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKdGVt cGxhdGUgPGNsYXNzIFQ+CmlubGluZQpUKgpkb250X1F1ZXJ5SW50ZXJmYWNlKCBUKiBleHByICkK ICB7CiAgICByZXR1cm4gZXhwcjsKICB9CgoKCmNsYXNzIG5zQ09NUHRyX2hlbHBlcgojIDMxNyAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewogICAgcHVibGljOgogICAg ICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9pZCoqICkgY29u c3QgPSAwOwogIH07CgpjbGFzcyBuc1F1ZXJ5SW50ZXJmYWNlIDogcHVibGljIG5zQ09NUHRyX2hl bHBlcgogIHsKICAgIHB1YmxpYzoKICAgICAgbnNRdWVyeUludGVyZmFjZSggbnNJU3VwcG9ydHMq IGFSYXdQdHIsIG5zcmVzdWx0KiBlcnJvciApCiAgICAgICAgICA6IG1SYXdQdHIoYVJhd1B0ciks CiAgICAgICAgICAgIG1FcnJvclB0cihlcnJvcikKICAgICAgICB7CgogICAgICAgIH0KCiAgICAg IHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiAp IGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIG5zSVN1cHBvcnRzKiBtUmF3UHRyOwogICAgICBu c3Jlc3VsdCogbUVycm9yUHRyOwogIH07CgppbmxpbmUKY29uc3QgbnNRdWVyeUludGVyZmFjZQpk b19RdWVyeUludGVyZmFjZSggbnNJU3VwcG9ydHMqIGFSYXdQdHIsIG5zcmVzdWx0KiBlcnJvciA9 IDAgKQogIHsKICAgIHJldHVybiBuc1F1ZXJ5SW50ZXJmYWNlKGFSYXdQdHIsIGVycm9yKTsKICB9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCnZvaWQKZG9fUXVlcnlJbnRlcmZhY2UoIGFscmVh ZHlfQWRkUmVmZWQ8VD4mICkKICB7CgoKCiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQp2 b2lkCmRvX1F1ZXJ5SW50ZXJmYWNlKCBhbHJlYWR5X0FkZFJlZmVkPFQ+JiwgbnNyZXN1bHQqICkK ICB7CgoKCiAgfQojIDM4MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCmNs YXNzIG5zQ09NUHRyX2Jhc2UKIyAzOTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0 ci5oIgogIHsKICAgIHB1YmxpYzoKCiAgICAgIG5zQ09NUHRyX2Jhc2UoIG5zSVN1cHBvcnRzKiBy YXdQdHIgPSAwICkKICAgICAgICAgIDogbVJhd1B0cihyYXdQdHIpCiAgICAgICAgewoKICAgICAg ICB9CgoKICAgICAgICAgICAgICAgIH5uc0NPTVB0cl9iYXNlKCk7CgoKCgoKCiAgICAgICAgICAg ICAgICB2b2lkIGFzc2lnbl93aXRoX0FkZFJlZiggbnNJU3VwcG9ydHMqICk7CiAgICAgICAgICAg ICAgICB2b2lkIGFzc2lnbl9mcm9tX2hlbHBlciggY29uc3QgbnNDT01QdHJfaGVscGVyJiwgY29u c3QgbnNJSUQmICk7CiAgICAgICAgICAgICAgICB2b2lkKiogYmVnaW5fYXNzaWdubWVudCgpOwoK ICAgIHByb3RlY3RlZDoKICAgICAgbnNJU3VwcG9ydHMqIG1SYXdQdHI7CgogICAgICB2b2lkCiAg ICAgIGFzc2lnbl9hc3N1bWluZ19BZGRSZWYoIG5zSVN1cHBvcnRzKiBuZXdQdHIgKQogICAgICAg IHsKIyA0MzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICAgICAg bnNJU3VwcG9ydHMqIG9sZFB0ciA9IG1SYXdQdHI7CiAgICAgICAgICBtUmF3UHRyID0gbmV3UHRy OwogICAgICAgICAgOzsKICAgICAgICAgIGlmICggb2xkUHRyICkKICAgICAgICAgICAgKG9sZFB0 ciktPlJlbGVhc2UoKTsKICAgICAgICB9CiAgfTsKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNz IG5zQ09NUHRyCgogICAgOiBwcml2YXRlIG5zQ09NUHRyX2Jhc2UKCiAgewogICAgZW51bSB7IF9m b3JjZV9ldmVuX2NvbXBsaWFudF9jb21waWxlcnNfdG9fZmFpbF8gPSBzaXplb2YoVCkgfTsKIyA0 ODIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgcHVibGljOgogICAg ICB0eXBlZGVmIFQgZWxlbWVudF90eXBlOwojIDUxMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zQ09NUHRyLmgiCiAgICAgIG5zQ09NUHRyKCkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNl KDApCgogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIGNv bnN0IG5zQ09NUHRyPFQ+JiBhU21hcnRQdHIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2Uo YVNtYXJ0UHRyLm1SYXdQdHIpCgogICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAg ICAgICAgICAgIChtUmF3UHRyKS0+QWRkUmVmKCk7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAg ICAgIG5zQ09NUHRyKCBUKiBhUmF3UHRyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNlKGFS YXdQdHIpCgogICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAgICAgICht UmF3UHRyKS0+QWRkUmVmKCk7CiAgICAgICAgICA7OwogICAgICAgICAgOzsKICAgICAgICB9Cgog ICAgICBuc0NPTVB0ciggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgYVNtYXJ0UHRyICkKICAg ICAgICAgICAgOiBuc0NPTVB0cl9iYXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAg ICAgICAgICA7OwogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggY29uc3Qg bnNDT01QdHJfaGVscGVyJiBoZWxwZXIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoMCkK CgogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIoaGVs cGVyLCBuc0NPTVR5cGVJbmZvPFQ+OjpHZXRJSUQoKSk7CiAgICAgICAgICA7OwogICAgICAgIH0K IyA1NzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBuc0NPTVB0 cjxUPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0NPTVB0cjxUPiYgcmhzICkKCiAgICAgICAg ewogICAgICAgICAgYXNzaWduX3dpdGhfQWRkUmVmKHJocy5tUmF3UHRyKTsKICAgICAgICAgIHJl dHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxUPiYKICAgICAgb3BlcmF0b3I9 KCBUKiByaHMgKQoKICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fd2l0aF9BZGRSZWYocmhzKTsK ICAgICAgICAgIDs7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnND T01QdHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgcmhz ICkKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZihyaHMubVJhd1B0 cik7CiAgICAgICAgICA7OwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAg IG5zQ09NUHRyPFQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgcmhz ICkKCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl9mcm9tX2hlbHBlcihyaHMsIG5zQ09NVHlw ZUluZm88VD46OkdldElJRCgpKTsKICAgICAgICAgIDs7CiAgICAgICAgICByZXR1cm4gKnRoaXM7 CiAgICAgICAgfQojIDYyMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAg ICAgIG5zRGVyaXZlZFNhZmU8VD4qCiAgICAgIGdldCgpIGNvbnN0CgoKCgoKCiAgICAgICAgewog ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRGVyaXZlZFNhZmU8VD4qID4obVJh d1B0cik7CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNEZXJpdmVkU2FmZTxUPiooKSBjb25z dAoKCgoKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAg ICAgbnNEZXJpdmVkU2FmZTxUPioKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CiAgICAgICAgewog ICAgICAgICAge307CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQojIDY2NiAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgICAgIG5zQ09NUHRyPFQ+KgogICAg ICBnZXRfYWRkcmVzcygpCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAg ICB9CgogICAgICBjb25zdCBuc0NPTVB0cjxUPioKICAgICAgZ2V0X2FkZHJlc3MoKSBjb25zdAoK CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKCgoKCgogICAgcHJp dmF0ZToKICAgICAgY29uc3QgbnNDT01QdHI8VD4qCiAgICAgIG9wZXJhdG9yJigpIGNvbnN0CgoK CgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgbnND T01QdHI8VD4qCiAgICAgIG9wZXJhdG9yJigpCgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJu IHRoaXM7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgbnNEZXJpdmVkU2FmZTxUPiYKICAg ICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICB7fTsKICAgICAgICAgIHJl dHVybiAqZ2V0KCk7CiAgICAgICAgfQoKCgoKCgogICAgICBUKioKICAgICAgU3RhcnRBc3NpZ25t ZW50KCkKICAgICAgICB7CgogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IFQqKiA+ KGJlZ2luX2Fzc2lnbm1lbnQoKSk7CgoKCgogICAgICAgIH0KICB9OwojIDc0NSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCnRlbXBsYXRlIDw+CmNsYXNzIG5zQ09NUHRyPG5z SVN1cHBvcnRzPgogICAgOiBwcml2YXRlIG5zQ09NUHRyX2Jhc2UKICB7CiAgICBwdWJsaWM6CiAg ICAgIHR5cGVkZWYgbnNJU3VwcG9ydHMgZWxlbWVudF90eXBlOwojIDc2MyAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgICAgIG5zQ09NUHRyKCkKICAgICAgICAgICAgOiBu c0NPTVB0cl9iYXNlKDApCgogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAg bnNDT01QdHIoIGNvbnN0IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYgYVNtYXJ0UHRyICkKICAgICAg ICAgICAgOiBuc0NPTVB0cl9iYXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAg ICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAgICAobVJhd1B0ciktPkFkZFJlZigpOwogICAg ICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggbnNJU3VwcG9ydHMqIGFSYXdQdHIg KQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoYVJhd1B0cikKCiAgICAgICAgewogICAgICAg ICAgaWYgKCBtUmF3UHRyICkKICAgICAgICAgICAgKG1SYXdQdHIpLT5BZGRSZWYoKTsKICAgICAg ICAgIDs7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIGNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8 bnNJU3VwcG9ydHM+JiBhU21hcnRQdHIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoYVNt YXJ0UHRyLm1SYXdQdHIpCgogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAg bnNDT01QdHIoIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgaGVscGVyICkKICAgICAgICAgICAgOiBu c0NPTVB0cl9iYXNlKDApCgoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgICAgYXNzaWdu X2Zyb21faGVscGVyKGhlbHBlciwgbnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz46OkdldElJRCgp KTsKICAgICAgICB9CgoKCgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mCiAgICAgIG9wZXJh dG9yPSggY29uc3QgbnNDT01QdHI8bnNJU3VwcG9ydHM+JiByaHMgKQoKICAgICAgICB7CiAgICAg ICAgICBhc3NpZ25fd2l0aF9BZGRSZWYocmhzLm1SYXdQdHIpOwogICAgICAgICAgcmV0dXJuICp0 aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0 b3I9KCBuc0lTdXBwb3J0cyogcmhzICkKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX3dpdGhf QWRkUmVmKHJocyk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnND T01QdHI8bnNJU3VwcG9ydHM+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IGFscmVhZHlfQWRkUmVm ZWQ8bnNJU3VwcG9ydHM+JiByaHMgKQoKICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fYXNzdW1p bmdfQWRkUmVmKHJocy5tUmF3UHRyKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9 CgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnND T01QdHJfaGVscGVyJiByaHMgKQoKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX2Zyb21faGVs cGVyKHJocywgbnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz46OkdldElJRCgpKTsKICAgICAgICAg IHJldHVybiAqdGhpczsKICAgICAgICB9CgoKCgogICAgICBuc0Rlcml2ZWRTYWZlPG5zSVN1cHBv cnRzPioKICAgICAgZ2V0KCkgY29uc3QKCgoKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g cmVpbnRlcnByZXRfY2FzdDwgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4qID4obVJhd1B0cik7 CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4qKCkg Y29uc3QKCgoKCgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0K CiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+KgogICAgICBvcGVyYXRvci0+KCkgY29u c3QKICAgICAgICB7CiAgICAgICAgICB7fTsKICAgICAgICAgIHJldHVybiBnZXQoKTsKICAgICAg ICB9CiMgODg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICAgICAgbnND T01QdHI8bnNJU3VwcG9ydHM+KgogICAgICBnZXRfYWRkcmVzcygpCgoKICAgICAgICB7CiAgICAg ICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICBjb25zdCBuc0NPTVB0cjxuc0lTdXBw b3J0cz4qCiAgICAgIGdldF9hZGRyZXNzKCkgY29uc3QKCgogICAgICAgIHsKICAgICAgICAgIHJl dHVybiB0aGlzOwogICAgICAgIH0KCgoKCgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IG5zQ09N UHRyPG5zSVN1cHBvcnRzPioKICAgICAgb3BlcmF0b3ImKCkgY29uc3QKCgoKCgoKICAgICAgICB7 CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxuc0lTdXBw b3J0cz4qCiAgICAgIG9wZXJhdG9yJigpCgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRo aXM7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9y dHM+JgogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHt9OwogICAg ICAgICAgcmV0dXJuICpnZXQoKTsKICAgICAgICB9CgoKCgoKCiAgICAgIG5zSVN1cHBvcnRzKioK ICAgICAgU3RhcnRBc3NpZ25tZW50KCkKICAgICAgICB7CgogICAgICAgICAgcmV0dXJuIHJlaW50 ZXJwcmV0X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihiZWdpbl9hc3NpZ25tZW50KCkpOwoKCgoKICAg ICAgICB9CiAgfTsKIyA5OTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0 ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5zQ09NUHRyPFQ+KgphZGRyZXNzX29mKCBuc0NPTVB0 cjxUPiYgYVB0ciApCiAgewogICAgcmV0dXJuIGFQdHIuZ2V0X2FkZHJlc3MoKTsKICB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNvbnN0IG5zQ09NUHRyPFQ+KgphZGRyZXNzX29mKCBjb25z dCBuc0NPTVB0cjxUPiYgYVB0ciApCiAgewogICAgcmV0dXJuIGFQdHIuZ2V0X2FkZHJlc3MoKTsK ICB9CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBuc0dldHRlckFkZFJlZnMKIyAxMDM2ICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICB7CiAgICBwdWJsaWM6CiAgICAg IGV4cGxpY2l0CiAgICAgIG5zR2V0dGVyQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciAp CiAgICAgICAgICA6IG1UYXJnZXRTbWFydFB0cihhU21hcnRQdHIpCiAgICAgICAgewoKICAgICAg ICB9CiMgMTA1OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgICAgIG9w ZXJhdG9yIHZvaWQqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh c3Q8IHZvaWQqKiA+KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKSk7CiAgICAgICAg fQoKICAgICAgb3BlcmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAgICAgewogICAgICAgICAgcmV0 dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihtVGFyZ2V0U21hcnRQdHIuU3Rh cnRBc3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIFQqKigpCiAgICAgICAg ewogICAgICAgICAgcmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKTsKICAg ICAgICB9CgogICAgICBUKiYKICAgICAgb3BlcmF0b3IqKCkKICAgICAgICB7CiAgICAgICAgICBy ZXR1cm4gKihtVGFyZ2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAg ICBwcml2YXRlOgogICAgICBuc0NPTVB0cjxUPiYgbVRhcmdldFNtYXJ0UHRyOwogIH07CgoKdGVt cGxhdGUgPD4KY2xhc3MgbnNHZXR0ZXJBZGRSZWZzPG5zSVN1cHBvcnRzPgogIHsKICAgIHB1Ymxp YzoKICAgICAgZXhwbGljaXQKICAgICAgbnNHZXR0ZXJBZGRSZWZzKCBuc0NPTVB0cjxuc0lTdXBw b3J0cz4mIGFTbWFydFB0ciApCiAgICAgICAgICA6IG1UYXJnZXRTbWFydFB0cihhU21hcnRQdHIp CiAgICAgICAgewoKICAgICAgICB9CiMgMTEwMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z Q09NUHRyLmgiCiAgICAgIG9wZXJhdG9yIHZvaWQqKigpCiAgICAgICAgewogICAgICAgICAgcmV0 dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2ln bm1lbnQoKSk7CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAg ICAgewogICAgICAgICAgcmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKTsK ICAgICAgICB9CgogICAgICBuc0lTdXBwb3J0cyomCiAgICAgIG9wZXJhdG9yKigpCiAgICAgICAg ewogICAgICAgICAgcmV0dXJuICoobVRhcmdldFNtYXJ0UHRyLlN0YXJ0QXNzaWdubWVudCgpKTsK ICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+JiBtVGFy Z2V0U21hcnRQdHI7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5zR2V0dGVyQWRk UmVmczxUPgpnZXR0ZXJfQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciApCgoKCgogIHsK ICAgIHJldHVybiBuc0dldHRlckFkZFJlZnM8VD4oYVNtYXJ0UHRyKTsKICB9CgoKCgoKdGVtcGxh dGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0 IG5zQ09NUHRyPFQ+JiBsaHMsIGNvbnN0IG5zQ09NUHRyPFU+JiByaHMgKQogIHsKICAgIHJldHVy biBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRpY19jYXN0PCBj b25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBV PgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBj b25zdCBuc0NPTVB0cjxVPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0 IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0 KCkpOwogIH0KCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9P TApvcGVyYXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBVKiByaHMgKQogIHsK ICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRp Y19jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz IFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IFUqIGxocywgY29uc3QgbnND T01QdHI8VD4mIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+ KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsKICB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29u c3QgbnNDT01QdHI8VD4mIGxocywgY29uc3QgVSogcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGlj X2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9p ZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBf Qk9PTApvcGVyYXRvciE9KCBjb25zdCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMgKQog IHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9IHN0YXRpY19j YXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDEyMDYgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5l Ck5TQ0FQX0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgVSogcmhzICkK ICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSBz dGF0aWNfY2FzdDwgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBV PgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+ JiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgdm9pZCogPihsaHMpID09IHN0YXRp Y19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQs IGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0oIGNvbnN0IG5zQ09NUHRyPFQ+ JiBsaHMsIFUqIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+ KGxocy5nZXQoKSkgIT0gc3RhdGljX2Nhc3Q8IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggVSogbGhzLCBj b25zdCBuc0NPTVB0cjxUPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IHZvaWQq ID4obGhzKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KCgoK CgoKY2xhc3MgTlNDQVBfWmVybzsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBfQk9P TApvcGVyYXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBOU0NBUF9aZXJvKiByaHMgKQoK ICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSBy ZWludGVycHJldF9jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNz IFQ+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIE5TQ0FQX1plcm8qIGxocywgY29uc3Qg bnNDT01QdHI8VD4mIHJocyApCgogIHsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25z dCB2b2lkKiA+KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsK ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29u c3QgbnNDT01QdHI8VD4mIGxocywgTlNDQVBfWmVybyogcmhzICkKCiAgewogICAgcmV0dXJuIHN0 YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkgIT0gcmVpbnRlcnByZXRfY2FzdDwg Y29uc3Qgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBf Qk9PTApvcGVyYXRvciE9KCBOU0NBUF9aZXJvKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMg KQoKICB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9 IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDEzMDkgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgppbmxpbmUKTlNDQVBfQk9PTApTYW1lQ09N SWRlbnRpdHkoIG5zSVN1cHBvcnRzKiBsaHMsIG5zSVN1cHBvcnRzKiByaHMgKQogIHsKICAgIHJl dHVybiBuc0NPTVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKGxocykgKSA9PSBu c0NPTVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKHJocykgKTsKICB9CgoKCnRl bXBsYXRlIDxjbGFzcyBTb3VyY2VUeXBlLCBjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpu c3Jlc3VsdApDYWxsUXVlcnlJbnRlcmZhY2UoIG5zQ09NUHRyPFNvdXJjZVR5cGU+JiBhU291cmNl UHRyLCBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdFB0ciApCiAgewogICAgcmV0dXJuIENhbGxRdWVy eUludGVyZmFjZShhU291cmNlUHRyLmdldCgpLCBhRGVzdFB0cik7CiAgfQojIDIzICJuc0Zvcm1D b250cm9sSGVscGVyLmNwcCIgMgojIDEgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIgMQojIDI2ICJu c0Zvcm1Db250cm9sSGVscGVyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZv cm1Db250cm9sRnJhbWUuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9y bUNvbnRyb2xGcmFtZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0 cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJvbEZyYW1l LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGb250LmgiIDEKIyAyNiAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRm9udC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGb250Lmgi IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjYgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zY29yZS5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgi IDIKIyA0MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIKdHlwZWRlZiBQUklu dDMyIG5zY29vcmQ7CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZvbnQuaCIgMgoj IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgNDYgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc1N0cmluZzIuaCIgMQojIDQ3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcy LmgiCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3BydHlwZXMuaCIgMQojIDQ4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgi IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyA0OSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2Nj LWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyA1MCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z U3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIgMQoj IDE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQXRvbS5oIgpjbGFzcyBuc0lTaXplT2ZI YW5kbGVyOwoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcu aCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIK IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBUmVhZGFibGVTdHJpbmcuaCIgMQojIDMw ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBUmVhZGFibGVTdHJpbmcuaCIKIyAxICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zQVN0cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0 cmluZ0Z3ZC5oIiAxCiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0Z3ZC5o IgpjbGFzcyBuc0FTdHJpbmc7CmNsYXNzIG5zQUNTdHJpbmc7CgoKCgoKCmNsYXNzIG5zQVByb21p c2VTdHJpbmc7CmNsYXNzIG5zQVByb21pc2VDU3RyaW5nOwoKCgoKCgpjbGFzcyBuc0FGbGF0U3Ry aW5nOwpjbGFzcyBuc0FGbGF0Q1N0cmluZzsKCgoKCgoKY2xhc3MgbnNEZXBlbmRlbnRTdHJpbmc7 CmNsYXNzIG5zRGVwZW5kZW50Q1N0cmluZzsKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zQVN0cmluZy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJpdmF0 ZVNoYXJhYmxlU3RyaW5nLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJp dmF0ZVNoYXJhYmxlU3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVm ZmVySGFuZGxlLmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFu ZGxlLmgiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1 ZmZlckhhbmRsZS5oIiAyCgoKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0J1ZmZlckhhbmRsZS5oIiAyCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNE ZWJ1Zy5oIiAxCiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRsZS5o IiAyCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyA0MCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiIDIKIyA4MCAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4K Y2xhc3MgbnNCdWZmZXJIYW5kbGUKICB7CiAgICBwdWJsaWM6CiAgICAgIG5zQnVmZmVySGFuZGxl KCkgeyB9CiAgICAgIG5zQnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFydCwgQ2hhclQqIGFE YXRhRW5kICkgOiBtRGF0YVN0YXJ0KGFEYXRhU3RhcnQpLCBtRGF0YUVuZChhRGF0YUVuZCkgeyB9 CgogICAgICB2b2lkIERhdGFTdGFydCggQ2hhclQqIGFOZXdEYXRhU3RhcnQgKSB7IG1EYXRhU3Rh cnQgPSBhTmV3RGF0YVN0YXJ0OyB9CiAgICAgIENoYXJUKiBEYXRhU3RhcnQoKSB7IHJldHVybiBt RGF0YVN0YXJ0OyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhU3RhcnQoKSBjb25zdCB7IHJldHVy biBtRGF0YVN0YXJ0OyB9CgogICAgICB2b2lkIERhdGFFbmQoIENoYXJUKiBhTmV3RGF0YUVuZCAp IHsgbURhdGFFbmQgPSBhTmV3RGF0YUVuZDsgfQogICAgICBDaGFyVCogRGF0YUVuZCgpIHsgcmV0 dXJuIG1EYXRhRW5kOyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhRW5kKCkgY29uc3QgeyByZXR1 cm4gbURhdGFFbmQ7IH0KCiAgICAgIHB0cmRpZmZfdCBEYXRhTGVuZ3RoKCkgY29uc3QgeyByZXR1 cm4gbURhdGFFbmQgLSBtRGF0YVN0YXJ0OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBDaGFyVCog bURhdGFTdGFydDsKICAgICAgQ2hhclQqIG1EYXRhRW5kOwogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg Q2hhclQ+CmNsYXNzIG5zQ29uc3RCdWZmZXJIYW5kbGUKICB7CiAgICBwdWJsaWM6CiAgICAgIG5z Q29uc3RCdWZmZXJIYW5kbGUoKSB7IH0KICAgICAgbnNDb25zdEJ1ZmZlckhhbmRsZSggY29uc3Qg Q2hhclQqIGFEYXRhU3RhcnQsIGNvbnN0IENoYXJUKiBhRGF0YUVuZCApIDogbURhdGFTdGFydChh RGF0YVN0YXJ0KSwgbURhdGFFbmQoYURhdGFFbmQpIHsgfQoKICAgICAgdm9pZCBEYXRhU3RhcnQo IGNvbnN0IENoYXJUKiBhTmV3RGF0YVN0YXJ0ICkgeyBtRGF0YVN0YXJ0ID0gYU5ld0RhdGFTdGFy dDsgfQogICAgICBjb25zdCBDaGFyVCogRGF0YVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbURhdGFT dGFydDsgfQoKICAgICAgdm9pZCBEYXRhRW5kKCBjb25zdCBDaGFyVCogYU5ld0RhdGFFbmQgKSB7 IG1EYXRhRW5kID0gYU5ld0RhdGFFbmQ7IH0KICAgICAgY29uc3QgQ2hhclQqIERhdGFFbmQoKSBj b25zdCB7IHJldHVybiBtRGF0YUVuZDsgfQoKICAgICAgcHRyZGlmZl90IERhdGFMZW5ndGgoKSBj b25zdCB7IHJldHVybiBtRGF0YUVuZCAtIG1EYXRhU3RhcnQ7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIGNvbnN0IENoYXJUKiBtRGF0YVN0YXJ0OwogICAgICBjb25zdCBDaGFyVCogbURhdGFFbmQ7 CiAgfTsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNTdHJpbmdBbGxvY2F0 b3IKICB7CiAgICBwdWJsaWM6CgogICAgICB2aXJ0dWFsIHZvaWQgRGVhbGxvY2F0ZSggQ2hhclQq ICkgY29uc3QgPSAwOwogIH07CgoKCgogICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Y2hhcj4mIFN0 cmluZ0FsbG9jYXRvcl9jaGFyKCk7CiAgICAgICBuc1N0cmluZ0FsbG9jYXRvcjxQUlVuaWNoYXI+ JiBTdHJpbmdBbGxvY2F0b3Jfd2NoYXJfdCgpOwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1 Y3QgbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHMKICB7CiAgfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBu c1N0cmluZ0FsbG9jYXRvclRyYWl0czxjaGFyPgogIHsKICAgIHN0YXRpYyBuc1N0cmluZ0FsbG9j YXRvcjxjaGFyPiYgZ2xvYmFsX3N0cmluZ19hbGxvY2F0b3IoKSB7IHJldHVybiBTdHJpbmdBbGxv Y2F0b3JfY2hhcigpOyB9CiAgfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBuc1N0cmluZ0FsbG9jYXRv clRyYWl0czxQUlVuaWNoYXI+CiAgewogICAgc3RhdGljIG5zU3RyaW5nQWxsb2NhdG9yPFBSVW5p Y2hhcj4mIGdsb2JhbF9zdHJpbmdfYWxsb2NhdG9yKCkgeyByZXR1cm4gU3RyaW5nQWxsb2NhdG9y X3djaGFyX3QoKTsgfQogIH07CiMgMTcwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZm ZXJIYW5kbGUuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc1NoYXJlZEJ1ZmZlckhh bmRsZQogICAgOiBwdWJsaWMgbnNCdWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAgcHJvdGVjdGVk OgogICAgICBlbnVtCiAgICAgICAgewogICAgICAgICAga0lzU2hhcmVkID0gMHgwODAwMDAwMCwK ICAgICAgICAgIGtJc1NpbmdsZUFsbG9jYXRpb25XaXRoQnVmZmVyID0gMHgwNDAwMDAwMCwKICAg ICAgICAgIGtJc1N0b3JhZ2VEZWZpbmVkU2VwYXJhdGVseSA9IDB4MDIwMDAwMDAsCiAgICAgICAg ICBrSXNVc2VyQWxsb2NhdG9yID0gMHgwMTAwMDAwMCwKCgogICAgICAgICAga0lzTlVMTCA9IDB4 ODAwMDAwMDAsCiAgICAgICAgICBrSW1wbGVtZW50YXRpb25GbGFnc01hc2sgPSAweEYwMDAwMDAw LAoKICAgICAgICAgIGtGbGFnc01hc2sgPSAweEZGMDAwMDAwLAogICAgICAgICAga1JlZkNvdW50 TWFzayA9IDB4MDBGRkZGRkYKICAgICAgICB9OwoKICAgIHB1YmxpYzoKICAgICAgbnNTaGFyZWRC dWZmZXJIYW5kbGUoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQgKQogICAgICAg ICAgOiBuc0J1ZmZlckhhbmRsZTxDaGFyVD4oYURhdGFTdGFydCwgYURhdGFFbmQpCiAgICAgICAg ewogICAgICAgICAgbUZsYWdzID0ga0lzU2hhcmVkOwogICAgICAgIH0KCiAgICAgIG5zU2hhcmVk QnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFydCwgQ2hhclQqIGFEYXRhRW5kLCBDaGFyVCos IENoYXJUKiwgUFJCb29sIGlzU2luZ2xlQWxsb2NhdGlvbiApCiAgICAgICAgICA6IG5zQnVmZmVy SGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCkKICAgICAgICB7CiAgICAgICAgICBt RmxhZ3MgPSBrSXNTaGFyZWQ7CiAgICAgICAgICBpZiAoIGlzU2luZ2xlQWxsb2NhdGlvbiApCiAg ICAgICAgICAgIG1GbGFncyB8PSBrSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1ZmZlcjsKICAgICAg ICB9CgogICAgICB+bnNTaGFyZWRCdWZmZXJIYW5kbGUoKTsKCiAgICAgIHZvaWQKICAgICAgQWNx dWlyZVJlZmVyZW5jZSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgbnNTaGFyZWRCdWZmZXJI YW5kbGU8Q2hhclQ+KiBtdXRhYmxlX3RoaXMgPSBjb25zdF9jYXN0PCBuc1NoYXJlZEJ1ZmZlckhh bmRsZTxDaGFyVD4qID4odGhpcyk7CiAgICAgICAgICBtdXRhYmxlX3RoaXMtPnNldF9yZWZjb3Vu dCggZ2V0X3JlZmNvdW50KCkrMSApOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgUmVsZWFz ZVJlZmVyZW5jZSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgbnNTaGFyZWRCdWZmZXJIYW5k bGU8Q2hhclQ+KiBtdXRhYmxlX3RoaXMgPSBjb25zdF9jYXN0PCBuc1NoYXJlZEJ1ZmZlckhhbmRs ZTxDaGFyVD4qID4odGhpcyk7CiAgICAgICAgICBpZiAoICFtdXRhYmxlX3RoaXMtPnNldF9yZWZj b3VudCggZ2V0X3JlZmNvdW50KCktMSApICkKICAgICAgICAgICAgZGVsZXRlIG11dGFibGVfdGhp czsKCiAgICAgICAgfQoKICAgICAgUFJCb29sCiAgICAgIElzUmVmZXJlbmNlZCgpIGNvbnN0CiAg ICAgICAgewogICAgICAgICAgcmV0dXJuIGdldF9yZWZjb3VudCgpICE9IDA7CiAgICAgICAgfQoK ICAgICAgUFJVaW50MzIKICAgICAgR2V0SW1wbGVtZW50YXRpb25GbGFncygpIGNvbnN0CiAgICAg ICAgewogICAgICAgICAgcmV0dXJuIG1GbGFncyAmIGtJbXBsZW1lbnRhdGlvbkZsYWdzTWFzazsK ICAgICAgICB9CgogICAgICB2b2lkCiAgICAgIFNldEltcGxlbWVudGF0aW9uRmxhZ3MoIFBSVWlu dDMyIGFOZXdGbGFncyApCiAgICAgICAgewogICAgICAgICAgbUZsYWdzID0gKG1GbGFncyAmIH5r SW1wbGVtZW50YXRpb25GbGFnc01hc2spIHwgKGFOZXdGbGFncyAmIGtJbXBsZW1lbnRhdGlvbkZs YWdzTWFzayk7CiAgICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgUFJVaW50MzIgbUZsYWdz OwoKICAgICAgUFJVaW50MzIKICAgICAgZ2V0X3JlZmNvdW50KCkgY29uc3QKICAgICAgICB7CiAg ICAgICAgICByZXR1cm4gbUZsYWdzICYga1JlZkNvdW50TWFzazsKICAgICAgICB9CgogICAgICBQ UlVpbnQzMgogICAgICBzZXRfcmVmY291bnQoIFBSVWludDMyIGFOZXdSZWZDb3VudCApCiAgICAg ICAgewogICAgICAgICAge307CgogICAgICAgICAgbUZsYWdzID0gKG1GbGFncyAmIGtGbGFnc01h c2spIHwgYU5ld1JlZkNvdW50OwogICAgICAgICAgcmV0dXJuIGFOZXdSZWZDb3VudDsKICAgICAg ICB9CgogICAgICBuc1N0cmluZ0FsbG9jYXRvcjxDaGFyVD4mIGdldF9hbGxvY2F0b3IoKSBjb25z dDsKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNGbGV4QnVmZmVySGFuZGxl CiAgICA6IHB1YmxpYyBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4KICB7CiAgICBwdWJsaWM6 CiAgICAgIG5zRmxleEJ1ZmZlckhhbmRsZSggQ2hhclQqIGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0 YUVuZCwgQ2hhclQqIGFTdG9yYWdlU3RhcnQsIENoYXJUKiBhU3RvcmFnZUVuZCApCiAgICAgICAg ICA6IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCksCiAg ICAgICAgICAgIG1TdG9yYWdlU3RhcnQoYVN0b3JhZ2VTdGFydCksCiAgICAgICAgICAgIG1TdG9y YWdlRW5kKGFTdG9yYWdlRW5kKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPm1GbGFncyB8PSB0 aGlzLT5rSXNTdG9yYWdlRGVmaW5lZFNlcGFyYXRlbHk7CiAgICAgICAgfQoKICAgICAgdm9pZCBT dG9yYWdlU3RhcnQoIENoYXJUKiBhTmV3U3RvcmFnZVN0YXJ0ICkgeyBtU3RvcmFnZVN0YXJ0ID0g YU5ld1N0b3JhZ2VTdGFydDsgfQogICAgICBDaGFyVCogU3RvcmFnZVN0YXJ0KCkgeyByZXR1cm4g bVN0b3JhZ2VTdGFydDsgfQogICAgICBjb25zdCBDaGFyVCogU3RvcmFnZVN0YXJ0KCkgY29uc3Qg eyByZXR1cm4gbVN0b3JhZ2VTdGFydDsgfQoKICAgICAgdm9pZCBTdG9yYWdlRW5kKCBDaGFyVCog YU5ld1N0b3JhZ2VFbmQgKSB7IG1TdG9yYWdlRW5kID0gYU5ld1N0b3JhZ2VFbmQ7IH0KICAgICAg Q2hhclQqIFN0b3JhZ2VFbmQoKSB7IHJldHVybiBtU3RvcmFnZUVuZDsgfQogICAgICBjb25zdCBD aGFyVCogU3RvcmFnZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1TdG9yYWdlRW5kOyB9CgogICAgICBw dHJkaWZmX3QgU3RvcmFnZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1TdG9yYWdlRW5kIC0gbVN0 b3JhZ2VTdGFydDsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgQ2hhclQqIG1TdG9yYWdlU3RhcnQ7 CiAgICAgIENoYXJUKiBtU3RvcmFnZUVuZDsKICB9OwoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpj bGFzcyBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdpdGhBbGxvY2F0b3IKICAgIDogcHVibGljIG5zU2hh cmVkQnVmZmVySGFuZGxlPENoYXJUPgogIHsKICAgIHB1YmxpYzoKICAgICAgbnNTaGFyZWRCdWZm ZXJIYW5kbGVXaXRoQWxsb2NhdG9yKCBDaGFyVCogYURhdGFTdGFydCwgQ2hhclQqIGFEYXRhRW5k LCBuc1N0cmluZ0FsbG9jYXRvcjxDaGFyVD4mIGFBbGxvY2F0b3IgKQogICAgICAgICAgOiBuc1No YXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4oYURhdGFTdGFydCwgYURhdGFFbmQpLAogICAgICAgICAg ICBtQWxsb2NhdG9yKGFBbGxvY2F0b3IpCiAgICAgICAgewogICAgICAgICAgdGhpcy0+bUZsYWdz IHw9IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3I7CiAgICAgICAgfQoKICAgICAgbnNTdHJpbmdBbGxv Y2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbUFsbG9jYXRvcjsg fQoKICAgIHByb3RlY3RlZDoKICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBtQWxsb2Nh dG9yOwogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zRmxleEJ1ZmZlckhhbmRs ZVdpdGhBbGxvY2F0b3IKICAgIDogcHVibGljIG5zRmxleEJ1ZmZlckhhbmRsZTxDaGFyVD4KICB7 CiAgICBwdWJsaWM6CiAgICAgIG5zRmxleEJ1ZmZlckhhbmRsZVdpdGhBbGxvY2F0b3IoIENoYXJU KiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENoYXJUKiBhU3RvcmFnZVN0YXJ0LCBDaGFyVCogYVN0b3JhZ2VFbmQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPENo YXJUPiYgYUFsbG9jYXRvciApCiAgICAgICAgICA6IG5zRmxleEJ1ZmZlckhhbmRsZTxDaGFyVD4o YURhdGFTdGFydCwgYURhdGFFbmQsIGFTdG9yYWdlU3RhcnQsIGFTdG9yYWdlRW5kKSwKICAgICAg ICAgICAgbUFsbG9jYXRvcihhQWxsb2NhdG9yKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPm1G bGFncyB8PSB0aGlzLT5rSXNVc2VyQWxsb2NhdG9yOwogICAgICAgIH0KCiAgICAgIG5zU3RyaW5n QWxsb2NhdG9yPENoYXJUPiYgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1BbGxvY2F0 b3I7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPENoYXJUPiYgbUFs bG9jYXRvcjsKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KbnNTdHJpbmdBbGxvY2F0b3I8 Q2hhclQ+Jgpuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD46OmdldF9hbGxvY2F0b3IoKSBjb25z dAoKICB7CiAgICBpZiAoIG1GbGFncyAmIGtJc1VzZXJBbGxvY2F0b3IgKQogICAgICB7CiAgICAg ICAgaWYgKCBtRmxhZ3MgJiBrSXNTdG9yYWdlRGVmaW5lZFNlcGFyYXRlbHkgKQogICAgICAgICAg cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5zRmxleEJ1ZmZlckhhbmRsZVdpdGhBbGxv Y2F0b3I8Q2hhclQ+KiA+KHRoaXMpLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgZWxzZQogICAg ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxl V2l0aEFsbG9jYXRvcjxDaGFyVD4qID4odGhpcyktPmdldF9hbGxvY2F0b3IoKTsKICAgICAgfQoK ICAgIHJldHVybiBuc1N0cmluZ0FsbG9jYXRvclRyYWl0czxDaGFyVD46Omdsb2JhbF9zdHJpbmdf YWxsb2NhdG9yKCk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KbnNTaGFyZWRCdWZmZXJI YW5kbGU8Q2hhclQ+Ojp+bnNTaGFyZWRCdWZmZXJIYW5kbGUoKQoKICB7CiAgICB7fTsKCiAgICBp ZiAoICEobUZsYWdzICYga0lzU2luZ2xlQWxsb2NhdGlvbldpdGhCdWZmZXIpICkKICAgICAgewog ICAgICAgIENoYXJUKiBzdHJpbmdfc3RvcmFnZSA9IHRoaXMtPm1EYXRhU3RhcnQ7CiAgICAgICAg aWYgKCBtRmxhZ3MgJiBrSXNTdG9yYWdlRGVmaW5lZFNlcGFyYXRlbHkgKQogICAgICAgICAgc3Ry aW5nX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PCBuc0ZsZXhCdWZmZXJIYW5kbGU8Q2hhclQ+ KiA+KHRoaXMpLT5TdG9yYWdlU3RhcnQoKTsKCiAgICAgICAgZ2V0X2FsbG9jYXRvcigpLkRlYWxs b2NhdGUoc3RyaW5nX3N0b3JhZ2UpOwogICAgICB9CiAgfQojIDMwICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNQcml2YXRlU2hhcmFibGVTdHJpbmcuaCIgMgojIDQwICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNQcml2YXRlU2hhcmFibGVTdHJpbmcuaCIKY2xhc3MgbnNQcml2YXRlU2hh cmFibGVTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGNoYXJf dHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgfm5zUHJpdmF0ZVNoYXJhYmxlU3RyaW5n KCkge30KCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgR2V0SW1wbGVtZW50YXRpb25GbGFncygpIGNv bnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldEZs YXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRs ZTxjaGFyX3R5cGU+KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25z dCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUo KSBjb25zdDsKCgoKCgoKCiAgfTsKCmNsYXNzIG5zUHJpdmF0ZVNoYXJhYmxlQ1N0cmluZwogIHsK ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwdWJsaWM6CiAg ICAgIHZpcnR1YWwgfm5zUHJpdmF0ZVNoYXJhYmxlQ1N0cmluZygpIHt9CgogICAgICB2aXJ0dWFs IFBSVWludDMyIEdldEltcGxlbWVudGF0aW9uRmxhZ3MoKSBjb25zdDsKICAgICAgdmlydHVhbCBj b25zdCBuc0J1ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29u c3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiogR2V0QnVm ZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNTaGFyZWRCdWZmZXJIYW5k bGU8Y2hhcl90eXBlPiogR2V0U2hhcmVkQnVmZmVySGFuZGxlKCkgY29uc3Q7CgoKCgoKCgogIH07 CiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMgoKCgojIDEgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIgMQojIDI3ICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNDaGFyVHJhaXRzLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgpl eHRlcm4gIkMiIHsKIyA0MCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZW5kaWFuLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgoKCgoKCmVu dW0KewogIF9JU3VwcGVyID0gKCgwKSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAo MCkpID4+IDgpKSwKICBfSVNsb3dlciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAo KDEgPDwgKDEpKSA+PiA4KSksCiAgX0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8 IDgpIDogKCgxIDw8ICgyKSkgPj4gOCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwg KDMpKSA8PCA4KSA6ICgoMSA8PCAoMykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ ICgoMSA8PCAoNCkpIDw8IDgpIDogKCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1 KSA8IDggPyAoKDEgPDwgKDUpKSA8PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmlu dCA9ICgoNikgPCA4ID8gKCgxIDw8ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAg X0lTZ3JhcGggPSAoKDcpIDwgOCA/ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4g OCkpLAogIF9JU2JsYW5rID0gKCg4KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAo OCkpID4+IDgpKSwKICBfSVNjbnRybCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAo KDEgPDwgKDkpKSA+PiA4KSksCiAgX0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkg PDwgOCkgOiAoKDEgPDwgKDEwKSkgPj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgx IDw8ICgxMSkpIDw8IDgpIDogKCgxIDw8ICgxMSkpID4+IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1 ZGUvY3R5cGUuaCIgMwpleHRlcm4gX19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVf YjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2Nv bnN0IF9faW50MzJfdCAqX19jdHlwZV90b3VwcGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUu aCIgMwpleHRlcm4gaW50IGlzYWxudW0gKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBo YSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIHRocm93ICgpOwpleHRl cm4gaW50IGlzZGlnaXQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNsb3dlciAoaW50KSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz cHJpbnQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXIgKGlu dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQgKGludCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBpc2JsYW5rIChpbnQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQg X19jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IHRvYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQp IHRocm93ICgpOwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwojIDE2OCAiL3Vz ci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludAp0b2xvd2VyIChpbnQgX19j KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fYyA+PSAtMTI4ICYmIF9fYyA8IDI1NiA/IF9fY3R5cGVf dG9sb3dlcltfX2NdIDogX19jOwp9CgpleHRlcm4gX19pbmxpbmUgaW50CnRvdXBwZXIgKGludCBf X2MpIHRocm93ICgpCnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlw ZV90b3VwcGVyW19fY10gOiBfX2M7Cn0KIyAyMTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjEyICIvdXNyL2luY2x1ZGUvY3R5cGUu aCIgMiAzCiMgMjI0ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IF9faXNhbG51 bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChp bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9f bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxl X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRo cm93ICgpOwpleHRlcm4gaW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp OwpleHRlcm4gaW50IF9faXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl cm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50 IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1 cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRf bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGlu dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBf X2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChp bnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc3ICIvdXNyL2luY2x1ZGUvY3R5 cGUuaCIgMwp9CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIg MgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAzMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIiAyCiMgMzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0NoYXJUcmFpdHMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJ dGVyYXRvclV0aWxzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5n SXRlcmF0b3JVdGlscy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CmlubGluZQpQUkJvb2wK U2FtZUZyYWdtZW50KCBjb25zdCBJdGVyYXRvciYgbGhzLCBjb25zdCBJdGVyYXRvciYgcmhzICkK ICB7CiAgICByZXR1cm4gbGhzLmZyYWdtZW50KCkubVN0YXJ0ID09IHJocy5mcmFnbWVudCgpLm1T dGFydDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+IGNsYXNzIG5zUmVhZGluZ0l0ZXJhdG9y OwoKCgoKICAgICAgIHNpemVfdCBEaXN0YW5jZSggY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8UFJV bmljaGFyPiYsIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPFBSVW5pY2hhcj4mICk7CiAgICAgICBz aXplX3QgRGlzdGFuY2UoIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXI+JiwgY29uc3QgbnNS ZWFkaW5nSXRlcmF0b3I8Y2hhcj4mICk7CiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0NoYXJUcmFpdHMuaCIgMgoKCgoKCiAgdHlwZWRlZiBQUkJvb2wgbnNDaGFyVHJhaXRzX2Jvb2w7 CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNDaGFyVHJhaXRzCiAgewogICAgdHlw ZWRlZiBDaGFyVCBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIGNoYXIgaW5jb21wYXRpYmxlX2NoYXJf dHlwZTsKCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFzc2lnbiggY2hhcl90eXBlJiBsaHMsIGNv bnN0IGNoYXJfdHlwZSYgcmhzICkKICAgICAgewogICAgICAgIGxocyA9IHJoczsKICAgICAgfQoK CgoKICAgIHR5cGVkZWYgaW50IGludF90eXBlOwoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlCiAg ICB0b19jaGFyX3R5cGUoIGNvbnN0IGludF90eXBlJiBjICkKICAgICAgewogICAgICAgIHJldHVy biBjaGFyX3R5cGUoYyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGludF90eXBlCiAgICB0b19p bnRfdHlwZSggY29uc3QgY2hhcl90eXBlJiBjICkKICAgICAgewogICAgICAgIHJldHVybiBpbnRf dHlwZShjKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGVx X2ludF90eXBlKCBjb25zdCBpbnRfdHlwZSYgbGhzLCBjb25zdCBpbnRfdHlwZSYgcmhzICkKICAg ICAgewogICAgICAgIHJldHVybiBsaHMgPT0gcmhzOwogICAgICB9CgoKCgogICAgc3RhdGljCiAg ICBuc0NoYXJUcmFpdHNfYm9vbAogICAgZXEoIGNvbnN0IGNoYXJfdHlwZSYgbGhzLCBjb25zdCBj aGFyX3R5cGUmIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAg fQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjb25zdCBjaGFyX3R5 cGUmIGxocywgY29uc3QgY2hhcl90eXBlJiByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGxo cyA8IHJoczsKICAgICAgfQoKCgoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlKgogICAgY29weSgg Y2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAg ICAgICAgY2hhcl90eXBlKiByZXN1bHQgPSBzMTsKICAgICAgICB3aGlsZSAoIG4tLSApCiAgICAg ICAgICBhc3NpZ24oKnMxKyssICpzMisrKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9 CgogICAgc3RhdGljCiAgICBjaGFyX3R5cGUqCiAgICBtb3ZlKCBjaGFyX3R5cGUqIHMxLCBjb25z dCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICBjaGFyX3R5cGUqIHJl c3VsdCA9IHMxOwoKICAgICAgICBpZiAoIG4gKQogICAgICAgICAgewogICAgICAgICAgICBpZiAo IHMyID4gczEgKQogICAgICAgICAgICAgIGNvcHkoczEsIHMyLCBuKTsKICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHMxICs9IG47CiAgICAgICAgICAgICAg ICBzMiArPSBuOwogICAgICAgICAgICAgICAgd2hpbGUgKCBuLS0gKQogICAgICAgICAgICAgICAg ICBhc3NpZ24oKi0tczEsICotLXMyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAg ICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAg IGFzc2lnbiggY2hhcl90eXBlKiBzLCBzaXplX3QgbiwgY29uc3QgY2hhcl90eXBlJiBjICkKICAg ICAgewogICAgICAgIGNoYXJfdHlwZSogcmVzdWx0ID0gczsKICAgICAgICB3aGlsZSAoIG4tLSAp CiAgICAgICAgICBhc3NpZ24oKnMrKywgYyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg fQoKICAgIHN0YXRpYwogICAgaW50CiAgICBjb21wYXJlKCBjb25zdCBjaGFyX3R5cGUqIHMxLCBj b25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICBmb3IgKCA7IG4t LTsgKytzMSwgKytzMiApCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICggbHQoKnMxLCAqczIp ICkKICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmICggbHQoKnMyLCAqczEp ICkKICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDA7 CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHNpemVfdAogICAgbGVuZ3RoKCBjb25zdCBjaGFyX3R5 cGUqIHMgKQogICAgICB7CiAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CiAgICAgICAgd2hpbGUg KCAhZXEoKnMrKywgQ2hhclQoMCkpICkKICAgICAgICAgICsrcmVzdWx0OwogICAgICAgIHJldHVy biByZXN1bHQ7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgIGZp bmQoIGNvbnN0IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNvbnN0IGNoYXJfdHlwZSYgYyApCiAg ICAgIHsKICAgICAgICB3aGlsZSAoIG4tLSApCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICgg ZXEoKnMsIGMpICkKICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICAgICAgKytzOwogICAg ICAgICAgfQoKICAgICAgICByZXR1cm4gMDsKICAgICAgfQojIDIxMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIgogIH07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNDaGFy VHJhaXRzPGNoYXI+CiAgewogICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgIHR5cGVkZWYg UFJVbmljaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5cGU7CgogICAgc3RhdGljCiAgICB2b2lkCiAg ICBhc3NpZ24oIGNoYXImIGxocywgY2hhciByaHMgKQogICAgICB7CiAgICAgICAgbGhzID0gcmhz OwogICAgICB9CgoKCgogICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CgogICAgc3RhdGljCiAgICBj aGFyCiAgICB0b19jaGFyX3R5cGUoIGludCBjICkKICAgICAgewogICAgICAgIHJldHVybiBjaGFy KGMpOwogICAgICB9CgogICAgc3RhdGljCiAgICBpbnQKICAgIHRvX2ludF90eXBlKCBjaGFyIGMg KQogICAgICB7CiAgICAgICAgcmV0dXJuIGludCggc3RhdGljX2Nhc3Q8IHVuc2lnbmVkIGNoYXIg PihjKSApOwogICAgICB9CgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAgZXFf aW50X3R5cGUoIGludCBsaHMsIGludCByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGxocyA9 PSByaHM7CiAgICAgIH0KCgoKCiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBl cSggY2hhciBsaHMsIGNoYXIgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPT0gcmhz OwogICAgICB9CgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAgbHQoIGNoYXIg bGhzLCBjaGFyIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzIDwgcmhzOwogICAgICB9 CgoKCgogICAgc3RhdGljCiAgICBjaGFyKgogICAgbW92ZSggY2hhciogczEsIGNvbnN0IGNoYXIq IHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNoYXIq ID4obWVtbW92ZShzMSwgczIsIG4pKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgY2hhcioKICAg IGNvcHkoIGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAg ICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyKiA+KG1lbWNweShzMSwgczIsIG4pKTsKICAgICAg fQoKICAgIHN0YXRpYwogICAgY2hhcioKICAgIGFzc2lnbiggY2hhciogcywgc2l6ZV90IG4sIGNo YXIgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNoYXIqID4obWVtc2V0 KHMsIHRvX2ludF90eXBlKGMpLCBuKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGludAogICAg Y29tcGFyZSggY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBzaXplX3QgbiApCiAgICAg IHsKICAgICAgICByZXR1cm4gbWVtY21wKHMxLCBzMiwgbik7CiAgICAgIH0KCiAgICBzdGF0aWMK ICAgIHNpemVfdAogICAgbGVuZ3RoKCBjb25zdCBjaGFyKiBzICkKICAgICAgewogICAgICAgIHJl dHVybiBzdHJsZW4ocyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXIqCiAgICBm aW5kKCBjb25zdCBjaGFyKiBzLCBzaXplX3QgbiwgY2hhciBjICkKICAgICAgewogICAgICAgIHJl dHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBjaGFyKiA+KG1lbWNocihzLCB0b19pbnRfdHlw ZShjKSwgbikpOwogICAgICB9CiMgMzM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDaGFy VHJhaXRzLmgiCiAgfTsKIyA0NjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFp dHMuaCIKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CnN0cnVjdCBuc0NoYXJTb3VyY2VU cmFpdHMKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIElucHV0SXRlcmF0b3I6OmRpZmZlcmVuY2Vf dHlwZSBkaWZmZXJlbmNlX3R5cGU7CiMgNDgwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND aGFyVHJhaXRzLmgiCiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICByZWFkYWJsZV9kaXN0YW5j ZSggY29uc3QgSW5wdXRJdGVyYXRvciYgaXRlciApCiAgICAgIHsKICAgICAgICByZXR1cm4gaXRl ci5zaXplX2ZvcndhcmQoKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJl YWRhYmxlX2Rpc3RhbmNlKCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBmaXJzdCwgY29uc3QgSW5wdXRJ dGVyYXRvciYgbGFzdCApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIoU2FtZUZyYWdt ZW50KGZpcnN0LCBsYXN0KSA/IGxhc3QuZ2V0KCktZmlyc3QuZ2V0KCkgOiBmaXJzdC5zaXplX2Zv cndhcmQoKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IHR5cGVuYW1lIElucHV0SXRl cmF0b3I6OnZhbHVlX3R5cGUqCiAgICByZWFkKCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBpdGVyICkK ICAgICAgewogICAgICAgIHJldHVybiBpdGVyLmdldCgpOwogICAgICB9CgogICAgc3RhdGljCiAg ICB2b2lkCiAgICBhZHZhbmNlKCBJbnB1dEl0ZXJhdG9yJiBzLCBkaWZmZXJlbmNlX3R5cGUgbiAp CiAgICAgIHsKICAgICAgICBzLmFkdmFuY2Uobik7CiAgICAgIH0KICB9OwoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgQ2hhclQ+CnN0cnVjdCBuc0NoYXJTb3VyY2VUcmFpdHM8Q2hhclQqPgogIHsKICAgIHR5 cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKIyA1MjUgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJlYWRh YmxlX2Rpc3RhbmNlKCBDaGFyVCogcyApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIo bnNDaGFyVHJhaXRzPENoYXJUPjo6bGVuZ3RoKHMpKTsKCiAgICAgIH0KCiAgICBzdGF0aWMKICAg IFBSVWludDMyCiAgICByZWFkYWJsZV9kaXN0YW5jZSggQ2hhclQqIGZpcnN0LCBDaGFyVCogbGFz dCApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIobGFzdC1maXJzdCk7CiAgICAgIH0K CiAgICBzdGF0aWMKICAgIGNvbnN0IENoYXJUKgogICAgcmVhZCggQ2hhclQqIHMgKQogICAgICB7 CiAgICAgICAgcmV0dXJuIHM7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFkdmFu Y2UoIENoYXJUKiYgcywgZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICB7CiAgICAgICAgcyArPSBu OwogICAgICB9CiAgfTsKIyA2NDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFp dHMuaCIKdGVtcGxhdGUgPGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpzdHJ1Y3QgbnNDaGFyU2lua1Ry YWl0cwogIHsKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHdyaXRlKCBPdXRwdXRJdGVyYXRv ciYgaXRlciwgY29uc3QgdHlwZW5hbWUgT3V0cHV0SXRlcmF0b3I6OnZhbHVlX3R5cGUqIHMsIFBS VWludDMyIG4gKQogICAgICB7CiAgICAgICAgcmV0dXJuIGl0ZXIud3JpdGUocywgbik7CiAgICAg IH0KICB9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVjdCBuc0NoYXJTaW5rVHJhaXRz PENoYXJUKj4KICB7CiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICB3cml0ZSggQ2hhclQqJiBp dGVyLCBjb25zdCBDaGFyVCogcywgUFJVaW50MzIgbiApCiAgICAgIHsKICAgICAgICBuc0NoYXJU cmFpdHM8Q2hhclQ+Ojptb3ZlKGl0ZXIsIHMsIG4pOwogICAgICAgIGl0ZXIgKz0gbjsKICAgICAg ICByZXR1cm4gbjsKICAgICAgfQogIH07CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0FTdHJpbmcuaCIgMgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0 ZXJhdG9yLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0 b3IuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGcmFnbWVudC5oIiAx CiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0ZyYWdtZW50LmgiCmVudW0g bnNGcmFnbWVudFJlcXVlc3QgeyBrUHJldkZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCwga0xhc3RG cmFnbWVudCwga05leHRGcmFnbWVudCwga0ZyYWdtZW50QXQgfTsKIyA1MyAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zU3RyaW5nRnJhZ21lbnQuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpz dHJ1Y3QgbnNSZWFkYWJsZUZyYWdtZW50CiAgewogICAgY29uc3QgQ2hhclQqIG1TdGFydDsKICAg IGNvbnN0IENoYXJUKiBtRW5kOwogICAgY29uc3Qgdm9pZCogbUZyYWdtZW50SWRlbnRpZmllcjsK CiAgICBuc1JlYWRhYmxlRnJhZ21lbnQoKQogICAgICAgIDogbVN0YXJ0KDApLCBtRW5kKDApLCBt RnJhZ21lbnRJZGVudGlmaWVyKDApCiAgICAgIHsKCiAgICAgIH0KICB9OwojIDgwICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGcmFnbWVudC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hh clQ+CnN0cnVjdCBuc1dyaXRhYmxlRnJhZ21lbnQKICB7CiAgICBDaGFyVCogbVN0YXJ0OwogICAg Q2hhclQqIG1FbmQ7CiAgICB2b2lkKiBtRnJhZ21lbnRJZGVudGlmaWVyOwoKICAgIG5zV3JpdGFi bGVGcmFnbWVudCgpCiAgICAgICAgOiBtU3RhcnQoMCksIG1FbmQoMCksIG1GcmFnbWVudElkZW50 aWZpZXIoMCkKICAgICAgewoKICAgICAgfQogIH07CiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiIDIKCgoKCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zU3RyaW5nVHJhaXRzLmgiIDEKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zU3RyaW5nVHJhaXRzLmgiCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zU3RyaW5n VHJhaXRzCiAgewogICAgdHlwZWRlZiBuc0FTdHJpbmcgYWJzdHJhY3Rfc3RyaW5nX3R5cGU7CiAg ICB0eXBlZGVmIG5zQVByb21pc2VTdHJpbmcgYWJzdHJhY3RfcHJvbWlzZV90eXBlOwogICAgdHlw ZWRlZiBuc0FGbGF0U3RyaW5nIGFic3RyYWN0X2ZsYXRfdHlwZTsKICAgIHR5cGVkZWYgY29uc3Qg bnNEZXBlbmRlbnRTdHJpbmcgbGl0ZXJhbF9zdHJpbmdfdHlwZTsKICB9OwojIDY2ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdUcmFpdHMuaCIKdGVtcGxhdGUgPD4Kc3RydWN0IG5z U3RyaW5nVHJhaXRzPGNoYXI+CiAgewogICAgdHlwZWRlZiBuc0FDU3RyaW5nIGFic3RyYWN0X3N0 cmluZ190eXBlOwogICAgdHlwZWRlZiBuc0FQcm9taXNlQ1N0cmluZyBhYnN0cmFjdF9wcm9taXNl X3R5cGU7CiAgICB0eXBlZGVmIG5zQUZsYXRDU3RyaW5nIGFic3RyYWN0X2ZsYXRfdHlwZTsKICAg IHR5cGVkZWYgY29uc3QgbnNEZXBlbmRlbnRDU3RyaW5nIGxpdGVyYWxfc3RyaW5nX3R5cGU7CiAg fTsKIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIgMgoK CgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FsZ29yaXRobS5oIiAxCiMgMzggIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FsZ29yaXRobS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K aW5saW5lCmNvbnN0IFQmCk5TX01JTiggY29uc3QgVCYgYSwgY29uc3QgVCYgYiApCiAgewogICAg cmV0dXJuIGIgPCBhID8gYiA6IGE7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25z dCBUJgpOU19NQVgoIGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIgKQogIHsKICAgIHJldHVybiBhID4g YiA/IGEgOiBiOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBUPgpp bmxpbmUKUFJVaW50MzIKTlNfQ09VTlQoIElucHV0SXRlcmF0b3ImIGZpcnN0LCBjb25zdCBJbnB1 dEl0ZXJhdG9yJiBsYXN0LCBjb25zdCBUJiB2YWx1ZSApCiAgewogICAgUFJVaW50MzIgcmVzdWx0 ID0gMDsKICAgIGZvciAoIDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCApCiAgICAgIGlmICggKmZp cnN0ID09IHZhbHVlICkKICAgICAgICArK3Jlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoK dGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIE91dHB1dEl0ZXJhdG9yPgppbmxp bmUKT3V0cHV0SXRlcmF0b3ImCmNvcHlfc3RyaW5nKCBJbnB1dEl0ZXJhdG9yJiBmaXJzdCwgY29u c3QgSW5wdXRJdGVyYXRvciYgbGFzdCwgT3V0cHV0SXRlcmF0b3ImIHJlc3VsdCApCiAgewogICAg dHlwZWRlZiBuc0NoYXJTb3VyY2VUcmFpdHM8SW5wdXRJdGVyYXRvcj4gc291cmNlX3RyYWl0czsK ICAgIHR5cGVkZWYgbnNDaGFyU2lua1RyYWl0czxPdXRwdXRJdGVyYXRvcj4gc2lua190cmFpdHM7 CgogICAgd2hpbGUgKCBmaXJzdCAhPSBsYXN0ICkKICAgICAgewogICAgICAgIFBSSW50MzIgY291 bnRfY29waWVkID0gUFJJbnQzMihzaW5rX3RyYWl0czo6d3JpdGUocmVzdWx0LCBzb3VyY2VfdHJh aXRzOjpyZWFkKGZpcnN0KSwgc291cmNlX3RyYWl0czo6cmVhZGFibGVfZGlzdGFuY2UoZmlyc3Qs IGxhc3QpKSk7CiAgICAgICAge307CiAgICAgICAgc291cmNlX3RyYWl0czo6YWR2YW5jZShmaXJz dCwgY291bnRfY29waWVkKTsKICAgICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKdGVtcGxh dGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpPdXRwdXRJdGVy YXRvciYKY29weV9zdHJpbmdfYmFja3dhcmQoIGNvbnN0IElucHV0SXRlcmF0b3ImIGZpcnN0LCBJ bnB1dEl0ZXJhdG9yJiBsYXN0LCBPdXRwdXRJdGVyYXRvciYgcmVzdWx0ICkKICB7CiAgICB3aGls ZSAoIGZpcnN0ICE9IGxhc3QgKQogICAgICB7CiAgICAgICAgbGFzdC5ub3JtYWxpemVfYmFja3dh cmQoKTsKICAgICAgICByZXN1bHQubm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgUFJVaW50 MzIgbGVuZ3RoVG9Db3B5ID0gUFJVaW50MzIoIE5TX01JTihsYXN0LnNpemVfYmFja3dhcmQoKSwg cmVzdWx0LnNpemVfYmFja3dhcmQoKSkgKTsKICAgICAgICBpZiAoIGZpcnN0LmZyYWdtZW50KCku bVN0YXJ0ID09IGxhc3QuZnJhZ21lbnQoKS5tU3RhcnQgKQogICAgICAgICAgbGVuZ3RoVG9Db3B5 ID0gTlNfTUlOKGxlbmd0aFRvQ29weSwgUFJVaW50MzIobGFzdC5nZXQoKSAtIGZpcnN0LmdldCgp KSk7CgogICAgICAgIHt9OwoKCgoKCiAgICAgICAgbnNDaGFyVHJhaXRzPHR5cGVuYW1lIE91dHB1 dEl0ZXJhdG9yOjp2YWx1ZV90eXBlPjo6bW92ZShyZXN1bHQuZ2V0KCktbGVuZ3RoVG9Db3B5LCBs YXN0LmdldCgpLWxlbmd0aFRvQ29weSwgbGVuZ3RoVG9Db3B5KTsKCgogICAgICAgIGxhc3QuYWR2 YW5jZSggLVBSSW50MzIobGVuZ3RoVG9Db3B5KSApOwogICAgICAgIHJlc3VsdC5hZHZhbmNlKCAt UFJJbnQzMihsZW5ndGhUb0NvcHkpICk7CiAgICAgIH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0K IyA0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIgMgojIDU1 ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIgp0ZW1wbGF0ZSA8 Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zUmVhZGluZ0l0ZXJhdG9yCgogIHsKICAgIHB1YmxpYzoKICAg ICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIENoYXJU IHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29uc3QgQ2hhclQqIHBvaW50ZXI7CiAgICAgIHR5 cGVkZWYgY29uc3QgQ2hhclQmIHJlZmVyZW5jZTsKCgogICAgcHJpdmF0ZToKICAgICAgZnJpZW5k IGNsYXNzIG5zQVN0cmluZzsKICAgICAgZnJpZW5kIGNsYXNzIG5zQUNTdHJpbmc7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgbnNTdHJpbmdUcmFpdHM8Q2hhclQ+OjphYnN0cmFjdF9zdHJpbmdfdHlw ZSBzdHJpbmdfdHlwZTsKCiAgICAgIG5zUmVhZGFibGVGcmFnbWVudDxDaGFyVD4gbUZyYWdtZW50 OwogICAgICBjb25zdCBDaGFyVCogbVBvc2l0aW9uOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSog bU93bmluZ1N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yKCkgeyB9 CgoKCiAgICAgIGlubGluZSB2b2lkIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgIGlubGluZSB2 b2lkIG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwoKICAgICAgcG9pbnRlcgogICAgICBnZXQoKSBjb25z dAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAg Q2hhclQKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g KmdldCgpOwogICAgICAgIH0KIyAxMDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu Z0l0ZXJhdG9yLmgiCiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYKICAgICAgb3BlcmF0 b3IrKygpCiAgICAgICAgewogICAgICAgICAgKyttUG9zaXRpb247CiAgICAgICAgICBub3JtYWxp emVfZm9yd2FyZCgpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5z UmVhZGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVyYXRvcisrKCBpbnQgKQogICAgICAgIHsK ICAgICAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiByZXN1bHQoKnRoaXMpOwogICAgICAg ICAgKyttUG9zaXRpb247CiAgICAgICAgICBub3JtYWxpemVfZm9yd2FyZCgpOwogICAgICAgICAg cmV0dXJuIHJlc3VsdDsKICAgICAgICB9CgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4m CiAgICAgIG9wZXJhdG9yLS0oKQogICAgICAgIHsKICAgICAgICAgIG5vcm1hbGl6ZV9iYWNrd2Fy ZCgpOwogICAgICAgICAgLS1tUG9zaXRpb247CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg ICAgfQoKICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+CiAgICAgIG9wZXJhdG9yLS0oIGlu dCApCiAgICAgICAgewogICAgICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+IHJlc3VsdCgq dGhpcyk7CiAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0 aW9uOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CgogICAgICBjb25zdCBuc1Jl YWRhYmxlRnJhZ21lbnQ8Q2hhclQ+JgogICAgICBmcmFnbWVudCgpIGNvbnN0CiAgICAgICAgewog ICAgICAgICAgcmV0dXJuIG1GcmFnbWVudDsKICAgICAgICB9CgogICAgICBjb25zdCBzdHJpbmdf dHlwZSYKICAgICAgc3RyaW5nKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICB7fTsKICAgICAg ICAgIHJldHVybiAqbU93bmluZ1N0cmluZzsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNlX3R5 cGUKICAgICAgc2l6ZV9mb3J3YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g bUZyYWdtZW50Lm1FbmQgLSBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90 eXBlCiAgICAgIHNpemVfYmFja3dhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVy biBtUG9zaXRpb24gLSBtRnJhZ21lbnQubVN0YXJ0OwogICAgICAgIH0KCiAgICAgIG5zUmVhZGlu Z0l0ZXJhdG9yPENoYXJUPiYKICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBlIG4gKQogICAg ICAgIHsKICAgICAgICAgIHdoaWxlICggbiA+IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgZGlmZmVyZW5jZV90eXBlIG9uZV9ob3AgPSBOU19NSU4obiwgc2l6ZV9mb3J3YXJkKCkpOwoK ICAgICAgICAgICAgICB7fTsKCgogICAgICAgICAgICAgIG1Qb3NpdGlvbiArPSBvbmVfaG9wOwog ICAgICAgICAgICAgIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgICAgICAgICAgbiAtPSBvbmVf aG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgd2hpbGUgKCBuIDwgMCApCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgICAgICBkaWZm ZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01BWChuLCAtc2l6ZV9iYWNrd2FyZCgpKTsKCiAgICAg ICAgICAgICAge307CgoKICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAg ICAgICAgICBuIC09IG9uZV9ob3A7CiAgICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gKnRo aXM7CiAgICAgICAgfQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zV3JpdGlu Z0l0ZXJhdG9yCgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy ZW5jZV90eXBlOwogICAgICB0eXBlZGVmIENoYXJUIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYg Q2hhclQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgQ2hhclQmIHJlZmVyZW5jZTsKCgogICAgcHJp dmF0ZToKICAgICAgZnJpZW5kIGNsYXNzIG5zQVN0cmluZzsKICAgICAgZnJpZW5kIGNsYXNzIG5z QUNTdHJpbmc7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbnNTdHJpbmdUcmFpdHM8Q2hhclQ+Ojph YnN0cmFjdF9zdHJpbmdfdHlwZSBzdHJpbmdfdHlwZTsKCiAgICAgIG5zV3JpdGFibGVGcmFnbWVu dDxDaGFyVD4gbUZyYWdtZW50OwogICAgICBDaGFyVCogbVBvc2l0aW9uOwogICAgICBzdHJpbmdf dHlwZSogbU93bmluZ1N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9y KCkgeyB9CgoKCiAgICAgIGlubGluZSB2b2lkIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgIGlu bGluZSB2b2lkIG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwoKICAgICAgcG9pbnRlcgogICAgICBnZXQo KSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb247CiAgICAgICAgfQoK ICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgewogICAgICAg ICAgcmV0dXJuICpnZXQoKTsKICAgICAgICB9CiMgMjQ1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNTdHJpbmdJdGVyYXRvci5oIgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4mCiAg ICAgIG9wZXJhdG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAg ICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9 CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3IrKyggaW50ICkK ICAgICAgICB7CiAgICAgICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4gcmVzdWx0KCp0aGlz KTsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsK ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNXcml0aW5nSXRlcmF0 b3I8Q2hhclQ+JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAgICBub3JtYWxp emVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAgcmV0dXJuICp0 aGlzOwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVy YXRvci0tKCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJU PiByZXN1bHQoKnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAg ICAtLW1Qb3NpdGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAg Y29uc3QgbnNXcml0YWJsZUZyYWdtZW50PENoYXJUPiYKICAgICAgZnJhZ21lbnQoKSBjb25zdAog ICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgbnNX cml0YWJsZUZyYWdtZW50PENoYXJUPiYKICAgICAgZnJhZ21lbnQoKQogICAgICAgIHsKICAgICAg ICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUm CiAgICAgIHN0cmluZygpIGNvbnN0CiAgICAgICAgewogICAgICAgICAge307CiAgICAgICAgICBy ZXR1cm4gKm1Pd25pbmdTdHJpbmc7CiAgICAgICAgfQoKICAgICAgc3RyaW5nX3R5cGUmCiAgICAg IHN0cmluZygpCiAgICAgICAgewogICAgICAgICAge307CiAgICAgICAgICByZXR1cm4gKm1Pd25p bmdTdHJpbmc7CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIHNpemVfZm9y d2FyZCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudC5tRW5kIC0g bVBvc2l0aW9uOwogICAgICAgIH0KCiAgICAgIGRpZmZlcmVuY2VfdHlwZQogICAgICBzaXplX2Jh Y2t3YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbVBvc2l0aW9uIC0gbUZy YWdtZW50Lm1TdGFydDsKICAgICAgICB9CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4m CiAgICAgIGFkdmFuY2UoIGRpZmZlcmVuY2VfdHlwZSBuICkKICAgICAgICB7CiAgICAgICAgICB3 aGlsZSAoIG4gPiAwICkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlw ZSBvbmVfaG9wID0gTlNfTUlOKG4sIHNpemVfZm9yd2FyZCgpKTsKCiAgICAgICAgICAgICAge307 CgoKICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBub3Jt YWxpemVfZm9yd2FyZCgpOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAgICAg fQoKICAgICAgICAgIHdoaWxlICggbiA8IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg bm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9uZV9o b3AgPSBOU19NQVgobiwgLXNpemVfYmFja3dhcmQoKSk7CgogICAgICAgICAgICAgIHt9OwoKCiAg ICAgICAgICAgICAgbVBvc2l0aW9uICs9IG9uZV9ob3A7CiAgICAgICAgICAgICAgbiAtPSBvbmVf aG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAg ICAgIFBSVWludDMyCiAgICAgIHdyaXRlKCBjb25zdCB2YWx1ZV90eXBlKiBzLCBQUlVpbnQzMiBu ICkKICAgICAgICB7CiAgICAgICAgICB7fTsKCiAgICAgICAgICBuID0gTlNfTUlOKG4sIFBSVWlu dDMyKHNpemVfZm9yd2FyZCgpKSk7CiAgICAgICAgICBuc0NoYXJUcmFpdHM8dmFsdWVfdHlwZT46 Om1vdmUobVBvc2l0aW9uLCBzLCBuKTsKICAgICAgICAgIGFkdmFuY2UoIGRpZmZlcmVuY2VfdHlw ZShuKSApOwogICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgfQogIH07Cgp0ZW1wbGF0ZSA8Y2xh c3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXpl X2ZvcndhcmQoKQogIHsKICAgIHdoaWxlICggbVBvc2l0aW9uID09IG1GcmFnbWVudC5tRW5kCiAg ICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFJlYWRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBr TmV4dEZyYWdtZW50KSApCiAgICAgICAgbVBvc2l0aW9uID0gbUZyYWdtZW50Lm1TdGFydDsKICB9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0ZXJhdG9yPENo YXJUPjo6bm9ybWFsaXplX2JhY2t3YXJkKCkKICB7CiAgICB3aGlsZSAoIG1Qb3NpdGlvbiA9PSBt RnJhZ21lbnQubVN0YXJ0CiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFJlYWRhYmxlRnJh Z21lbnQobUZyYWdtZW50LCBrUHJldkZyYWdtZW50KSApCiAgICAgICAgbVBvc2l0aW9uID0gbUZy YWdtZW50Lm1FbmQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUKUFJCb29sCm9w ZXJhdG9yPT0oIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBjb25zdCBuc1Jl YWRpbmdJdGVyYXRvcjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5nZXQoKSA9PSBy aHMuZ2V0KCk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUKUFJCb29sCm9wZXJh dG9yIT0oIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBjb25zdCBuc1JlYWRp bmdJdGVyYXRvcjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5nZXQoKSAhPSByaHMu Z2V0KCk7CiAgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zV3Jp dGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2ZvcndhcmQoKQogIHsKICAgIHdoaWxlICgg bVBvc2l0aW9uID09IG1GcmFnbWVudC5tRW5kCiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdl dFdyaXRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrTmV4dEZyYWdtZW50KSApCiAgICAgIG1Qb3Np dGlvbiA9IG1GcmFnbWVudC5tU3RhcnQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxp bmUKdm9pZApuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD46Om5vcm1hbGl6ZV9iYWNrd2FyZCgpCiAg ewogICAgd2hpbGUgKCBtUG9zaXRpb24gPT0gbUZyYWdtZW50Lm1TdGFydAogICAgICAgICAmJiBt T3duaW5nU3RyaW5nLT5HZXRXcml0YWJsZUZyYWdtZW50KG1GcmFnbWVudCwga1ByZXZGcmFnbWVu dCkgKQogICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQubUVuZDsKICB9Cgp0ZW1wbGF0ZSA8Y2xh c3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNXcml0aW5nSXRlcmF0 b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7 CiAgICByZXR1cm4gbGhzLmdldCgpID09IHJocy5nZXQoKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg Q2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8 Q2hhclQ+JiBsaHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7CiAg ICByZXR1cm4gbGhzLmdldCgpICE9IHJocy5nZXQoKTsKICB9CiMgNDEgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMgoKCgoKCgoKY2xhc3MgbnNBU3RyaW5nCiAgICA6IHB1 YmxpYyBuc1ByaXZhdGVTaGFyYWJsZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl ZiBuc0FTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQVByb21pc2VTdHJpbmcgcHJv bWlzZV90eXBlOwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVk ZWYgY2hhciBpbmNvbXBhdGlibGVfY2hhcl90eXBlOwoKCiAgICAgIHR5cGVkZWYgbnNSZWFkaW5n SXRlcmF0b3I8Y2hhcl90eXBlPiBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBuc1dyaXRp bmdJdGVyYXRvcjxjaGFyX3R5cGU+IGl0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBz aXplX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVaW50MzIgaW5kZXhfdHlwZTsKCgoKCgoKICAgICAg dmlydHVhbCB+bnNBU3RyaW5nKCkgeyB9CgogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3ImIEJl Z2luUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CiAgICAgIGlubGluZSBjb25zdF9p dGVyYXRvciYgRW5kUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CgogICAgICBpbmxp bmUgaXRlcmF0b3ImIEJlZ2luV3JpdGluZyggaXRlcmF0b3ImICk7CiAgICAgIGlubGluZSBpdGVy YXRvciYgRW5kV3JpdGluZyggaXRlcmF0b3ImICk7CgogICAgICB2aXJ0dWFsIHNpemVfdHlwZSBM ZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g TGVuZ3RoKCkgPT0gMDsgfQoKICAgICAgaW5saW5lIFBSQm9vbCBFcXVhbHMoIGNvbnN0IHNlbGZf dHlwZSYgKSBjb25zdDsKICAgICAgUFJCb29sIEVxdWFscyggY29uc3QgY2hhcl90eXBlKiApIGNv bnN0OwoKCgoKCgoKICAgICAgY2hhcl90eXBlIEZpcnN0KCkgY29uc3Q7CiAgICAgIGNoYXJfdHlw ZSBMYXN0KCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUgQ291bnRDaGFyKCBjaGFyX3R5cGUgKSBj b25zdDsKIyAxMTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAg c2l6ZV90eXBlIExlZnQoIHNlbGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwogICAgICBzaXpl X3R5cGUgTWlkKCBzZWxmX3R5cGUmLCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICAgICAg c2l6ZV90eXBlIFJpZ2h0KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKCgogICAgICBQ UkludDMyIEZpbmRDaGFyKCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgYU9mZnNldCA9IDAgKSBjb25z dDsKIyAxMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdmly dHVhbCB2b2lkIFNldENhcGFjaXR5KCBzaXplX3R5cGUgKSB7IH0KIyAxNDMgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdmlydHVhbCB2b2lkIFNldExlbmd0aCgg c2l6ZV90eXBlICkgeyB9CgoKICAgICAgdm9pZAogICAgICBUcnVuY2F0ZSggc2l6ZV90eXBlIGFO ZXdMZW5ndGg9MCApCiAgICAgICAgewogICAgICAgICAge307CgogICAgICAgICAgaWYgKCBhTmV3 TGVuZ3RoIDwgdGhpcy0+TGVuZ3RoKCkgKQogICAgICAgICAgICBTZXRMZW5ndGgoYU5ld0xlbmd0 aCk7CiAgICAgICAgfQojIDE3OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5o IgogICAgICB2b2lkIEFzc2lnbiggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2ln bkZyb21SZWFkYWJsZShhUmVhZGFibGUpOyB9CiAgICAgIGlubGluZSB2b2lkIEFzc2lnbiggY29u c3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKTsKICAgICAgdm9pZCBBc3NpZ24oIGNvbnN0IGNo YXJfdHlwZSogYVB0ciApIHsgYVB0ciA/IGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKGFQdHIpIDog U2V0TGVuZ3RoKDApOyB9CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIs IHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aChhUHRy LCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEFzc2lnbiggY2hhcl90eXBlIGFDaGFyICkgeyBkb19B c3NpZ25Gcm9tRWxlbWVudChhQ2hhcik7IH0KCgogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSgg Y29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4g KnRoaXM7IH0KCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBjb25zdCBwcm9taXNlX3R5cGUm IGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBz ZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBc3NpZ24oYVB0 cik7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY2hhcl90eXBl IGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgoKCiAgICAgIHZv aWQgQXBwZW5kKCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kRnJvbVJlYWRh YmxlKGFSZWFkYWJsZSk7IH0KICAgICAgaW5saW5lIHZvaWQgQXBwZW5kKCBjb25zdCBwcm9taXNl X3R5cGUmIGFSZWFkYWJsZSApOwogICAgICB2b2lkIEFwcGVuZCggY29uc3QgY2hhcl90eXBlKiBh UHRyICkgeyBpZiAoYVB0cikgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIoYVB0cik7IH0KICAgICAg dm9pZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgc2l6ZV90eXBlIGFMZW5ndGggKSB7 IGRvX0FwcGVuZEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIHZv aWQgQXBwZW5kKCBjaGFyX3R5cGUgYUNoYXIgKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50KGFDaGFy KTsgfQoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFk YWJsZSApIHsgQXBwZW5kKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5 cGUmIG9wZXJhdG9yKz0oIGNvbnN0IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlICkgeyBBcHBlbmQo YVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSgg Y29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBcHBlbmQoYVB0cik7IHJldHVybiAqdGhpczsgfQog ICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXBwZW5kKGFD aGFyKTsgcmV0dXJuICp0aGlzOyB9CiMgMjE5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNB U3RyaW5nLmgiCiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSwg aW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBJbnNlcnRGcm9tUmVhZGFibGUoYVJlYWRhYmxlLCBh dFBvc2l0aW9uKTsgfQogICAgICBpbmxpbmUgdm9pZCBJbnNlcnQoIGNvbnN0IHByb21pc2VfdHlw ZSYgYVJlYWRhYmxlLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKTsKICAgICAgdm9pZCBJbnNlcnQo IGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBpZiAoYVB0 cikgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHIoYVB0ciwgYXRQb3NpdGlvbik7IH0KICAgICAgdm9p ZCBJbnNlcnQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uLCBz aXplX3R5cGUgYUxlbmd0aCApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwg YXRQb3NpdGlvbiwgYUxlbmd0aCk7IH0KICAgICAgdm9pZCBJbnNlcnQoIGNoYXJfdHlwZSBhQ2hh ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBkb19JbnNlcnRGcm9tRWxlbWVudChhQ2hhciwg YXRQb3NpdGlvbik7IH0KCgoKICAgICAgdmlydHVhbCB2b2lkIEN1dCggaW5kZXhfdHlwZSBjdXRT dGFydCwgc2l6ZV90eXBlIGN1dExlbmd0aCApOwoKCgogICAgICB2b2lkIFJlcGxhY2UoIGluZGV4 X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlwZSBjdXRMZW5ndGgsIGNvbnN0IHNlbGZfdHlwZSYgYVJl YWRhYmxlICkgeyBSZXBsYWNlRnJvbVJlYWRhYmxlKGN1dFN0YXJ0LCBjdXRMZW5ndGgsIGFSZWFk YWJsZSk7IH0KCgogICAgcHJpdmF0ZToKCiAgICAgIGluZGV4X3R5cGUgQ291bnRDaGFyKCBpbmNv bXBhdGlibGVfY2hhcl90eXBlICkgY29uc3Q7CiAgICAgIHZvaWQgb3BlcmF0b3I9ICggaW5jb21w YXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lkIEFzc2lnbiAoIGluY29tcGF0aWJsZV9jaGFy X3R5cGUgKTsKICAgICAgdm9pZCBvcGVyYXRvcis9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSAp OwogICAgICB2b2lkIEFwcGVuZCAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9p ZCBJbnNlcnQgKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlLCBpbmRleF90eXBlICk7CgoKICAgIHBy b3RlY3RlZDoKICAgICAgICAgICAgICB2b2lkIEFzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2Vs Zl90eXBlJiApOwogICAgICAgICAgICAgIHZvaWQgQXNzaWduRnJvbVByb21pc2UoIGNvbnN0IHNl bGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21SZWFkYWJsZSggY29u c3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1lbnRQ dHIoIGNvbnN0IGNoYXJfdHlwZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21F bGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsKICAgICAgdmly dHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAgICAgICAgICAg ICAgdm9pZCBBcHBlbmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAg ICAgICB2b2lkIEFwcGVuZEZyb21Qcm9taXNlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZp cnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAg ICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5cGUq ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudFB0ckxlbmd0aCggY29u c3QgY2hhcl90eXBlKiwgc2l6ZV90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRG cm9tRWxlbWVudCggY2hhcl90eXBlICk7CgogICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJvbVJl YWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBpbmRleF90eXBlICk7CiAgICAgICAgICAgICAgdm9p ZCBJbnNlcnRGcm9tUHJvbWlzZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAg ICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBp bmRleF90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudFB0cigg Y29uc3QgY2hhcl90eXBlKiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5z ZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUsIHNp emVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoIGNoYXJf dHlwZSwgaW5kZXhfdHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIFJlcGxhY2VGcm9tUmVhZGFi bGUoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwogICAgICAgICAg ICAgIHZvaWQgUmVwbGFjZUZyb21Qcm9taXNlKCBpbmRleF90eXBlLCBzaXplX3R5cGUsIGNvbnN0 IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX1JlcGxhY2VGcm9tUmVhZGFibGUo IGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwoKCgogICAgcHVibGlj OgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFnbWVudCggbnNS ZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIg PSAwICkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVGcmFn bWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwg UFJVaW50MzIgPSAwICkgPSAwOwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBj b25zdCBzZWxmX3R5cGUmIGFTdHJpbmcgKSBjb25zdCB7IHJldHVybiAmYVN0cmluZyA9PSB0aGlz OyB9CiAgfTsKCmNsYXNzIG5zQUNTdHJpbmcKICAgIDogcHVibGljIG5zUHJpdmF0ZVNoYXJhYmxl Q1N0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0FDU3RyaW5nIHNlbGZfdHlw ZTsKICAgICAgdHlwZWRlZiBuc0FQcm9taXNlQ1N0cmluZyBwcm9taXNlX3R5cGU7CiAgICAgIHR5 cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGluY29tcGF0aWJs ZV9jaGFyX3R5cGU7CgoKICAgICAgdHlwZWRlZiBuc1JlYWRpbmdJdGVyYXRvcjxjaGFyX3R5cGU+ IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIG5zV3JpdGluZ0l0ZXJhdG9yPGNoYXJfdHlw ZT4gaXRlcmF0b3I7CgogICAgICB0eXBlZGVmIFBSVWludDMyIHNpemVfdHlwZTsKICAgICAgdHlw ZWRlZiBQUlVpbnQzMiBpbmRleF90eXBlOwoKCgoKCgogICAgICB2aXJ0dWFsIH5uc0FDU3RyaW5n KCkgeyB9CgogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3ImIEJlZ2luUmVhZGluZyggY29uc3Rf aXRlcmF0b3ImICkgY29uc3Q7CiAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvciYgRW5kUmVhZGlu ZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CgogICAgICBpbmxpbmUgaXRlcmF0b3ImIEJlZ2lu V3JpdGluZyggaXRlcmF0b3ImICk7CiAgICAgIGlubGluZSBpdGVyYXRvciYgRW5kV3JpdGluZygg aXRlcmF0b3ImICk7CgogICAgICB2aXJ0dWFsIHNpemVfdHlwZSBMZW5ndGgoKSBjb25zdCA9IDA7 CiAgICAgIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gTGVuZ3RoKCkgPT0gMDsgfQoK ICAgICAgaW5saW5lIFBSQm9vbCBFcXVhbHMoIGNvbnN0IHNlbGZfdHlwZSYgKSBjb25zdDsKICAg ICAgUFJCb29sIEVxdWFscyggY29uc3QgY2hhcl90eXBlKiApIGNvbnN0OwoKCgoKCgoKICAgICAg Y2hhcl90eXBlIEZpcnN0KCkgY29uc3Q7CiAgICAgIGNoYXJfdHlwZSBMYXN0KCkgY29uc3Q7Cgog ICAgICBzaXplX3R5cGUgQ291bnRDaGFyKCBjaGFyX3R5cGUgKSBjb25zdDsKIyAzNDIgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgc2l6ZV90eXBlIExlZnQoIHNl bGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwogICAgICBzaXplX3R5cGUgTWlkKCBzZWxmX3R5 cGUmLCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgc2l6ZV90eXBlIFJpZ2h0KCBz ZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKCgogICAgICBQUkludDMyIEZpbmRDaGFyKCBj aGFyX3R5cGUsIFBSVWludDMyIGFPZmZzZXQgPSAwICkgY29uc3Q7CiMgMzU4ICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9pZCBTZXRDYXBhY2l0 eSggc2l6ZV90eXBlICkgeyB9CiMgMzczICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3Ry aW5nLmgiCiAgICAgIHZpcnR1YWwgdm9pZCBTZXRMZW5ndGgoIHNpemVfdHlwZSApIHsgfQoKCiAg ICAgIHZvaWQKICAgICAgVHJ1bmNhdGUoIHNpemVfdHlwZSBhTmV3TGVuZ3RoPTAgKQogICAgICAg IHsKICAgICAgICAgIHt9OwoKICAgICAgICAgIGlmICggYU5ld0xlbmd0aCA8IHRoaXMtPkxlbmd0 aCgpICkKICAgICAgICAgICAgU2V0TGVuZ3RoKGFOZXdMZW5ndGgpOwogICAgICAgIH0KIyA0MDgg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdm9pZCBBc3NpZ24o IGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBBc3NpZ25Gcm9tUmVhZGFibGUoYVJlYWRh YmxlKTsgfQogICAgICBpbmxpbmUgdm9pZCBBc3NpZ24oIGNvbnN0IHByb21pc2VfdHlwZSYgYVJl YWRhYmxlICk7CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IGFQ dHIgPyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0cihhUHRyKSA6IFNldExlbmd0aCgwKTsgfQogICAg ICB2b2lkIEFzc2lnbiggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBzaXplX3R5cGUgYUxlbmd0aCAp IHsgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYUxlbmd0aCk7IH0KICAgICAg dm9pZCBBc3NpZ24oIGNoYXJfdHlwZSBhQ2hhciApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnQoYUNo YXIpOyB9CgoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlwZSYgYVJl YWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogICAgICBzZWxm X3R5cGUmIG9wZXJhdG9yPSggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2ln bihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0o IGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0K ICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXNzaWduKGFD aGFyKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKCgogICAgICB2b2lkIEFwcGVuZCggY29uc3Qgc2Vs Zl90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVuZEZyb21SZWFkYWJsZShhUmVhZGFibGUpOyB9CiAg ICAgIGlubGluZSB2b2lkIEFwcGVuZCggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKTsK ICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgaWYgKGFQdHIpIGRv X0FwcGVuZEZyb21FbGVtZW50UHRyKGFQdHIpOyB9CiAgICAgIHZvaWQgQXBwZW5kKCBjb25zdCBj aGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19BcHBlbmRGcm9tRWxlbWVu dFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEFwcGVuZCggY2hhcl90eXBl IGFDaGFyICkgeyBkb19BcHBlbmRGcm9tRWxlbWVudChhQ2hhcik7IH0KCiAgICAgIHNlbGZfdHlw ZSYgb3BlcmF0b3IrPSggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVuZChhUmVh ZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9KCBjb25z dCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kKGFSZWFkYWJsZSk7IHJldHVybiAq dGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNvbnN0IGNoYXJfdHlwZSogYVB0 ciApIHsgQXBwZW5kKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVy YXRvcis9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFwcGVuZChhQ2hhcik7IHJldHVybiAqdGhpczsg fQojIDQ0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAgICB2b2lk IEluc2VydCggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUsIGluZGV4X3R5cGUgYXRQb3NpdGlv biApIHsgSW5zZXJ0RnJvbVJlYWRhYmxlKGFSZWFkYWJsZSwgYXRQb3NpdGlvbik7IH0KICAgICAg aW5saW5lIHZvaWQgSW5zZXJ0KCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSwgaW5kZXhf dHlwZSBhdFBvc2l0aW9uICk7CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFyX3R5cGUqIGFQ dHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApIHsgaWYgKGFQdHIpIGRvX0luc2VydEZyb21FbGVt ZW50UHRyKGFQdHIsIGF0UG9zaXRpb24pOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFy X3R5cGUqIGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiwgc2l6ZV90eXBlIGFMZW5ndGggKSB7 IGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGF0UG9zaXRpb24sIGFMZW5ndGgp OyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjaGFyX3R5cGUgYUNoYXIsIGluZGV4X3R5cGUgYXRQb3Np dGlvbiApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoYUNoYXIsIGF0UG9zaXRpb24pOyB9CgoKCiAg ICAgIHZpcnR1YWwgdm9pZCBDdXQoIGluZGV4X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlwZSBjdXRM ZW5ndGggKTsKCgoKICAgICAgdm9pZCBSZXBsYWNlKCBpbmRleF90eXBlIGN1dFN0YXJ0LCBzaXpl X3R5cGUgY3V0TGVuZ3RoLCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgUmVwbGFjZUZy b21SZWFkYWJsZShjdXRTdGFydCwgY3V0TGVuZ3RoLCBhUmVhZGFibGUpOyB9CgoKICAgIHByaXZh dGU6CgogICAgICBpbmRleF90eXBlIENvdW50Q2hhciggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSAp IGNvbnN0OwogICAgICB2b2lkIG9wZXJhdG9yPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsK ICAgICAgdm9pZCBBc3NpZ24gKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZvaWQg b3BlcmF0b3IrPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBBcHBlbmQg KCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZvaWQgSW5zZXJ0ICggaW5jb21wYXRp YmxlX2NoYXJfdHlwZSwgaW5kZXhfdHlwZSApOwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgICAg ICAgdm9pZCBBc3NpZ25Gcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAg ICAgICB2b2lkIEFzc2lnbkZyb21Qcm9taXNlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZp cnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAg ICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5cGUq ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aCggY29u c3QgY2hhcl90eXBlKiwgc2l6ZV90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25G cm9tRWxlbWVudCggY2hhcl90eXBlICk7CgogICAgICAgICAgICAgIHZvaWQgQXBwZW5kRnJvbVJl YWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgICAgICAgICAgdm9pZCBBcHBlbmRGcm9t UHJvbWlzZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5k RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19B cHBlbmRGcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90eXBlKiApOwogICAgICB2aXJ0dWFsIHZv aWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIHNpemVf dHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnQoIGNoYXJfdHlw ZSApOwoKICAgICAgICAgICAgICB2b2lkIEluc2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90 eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJvbVByb21pc2Uo IGNvbnN0IHNlbGZfdHlwZSYsIGluZGV4X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0lu c2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICB2 aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSosIGlu ZGV4X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVu Z3RoKCBjb25zdCBjaGFyX3R5cGUqLCBpbmRleF90eXBlLCBzaXplX3R5cGUgKTsKICAgICAgdmly dHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50KCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgKTsK CiAgICAgICAgICAgICAgdm9pZCBSZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXpl X3R5cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAgICAgICB2b2lkIFJlcGxhY2VGcm9t UHJvbWlzZSggaW5kZXhfdHlwZSwgc2l6ZV90eXBlLCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAg IHZpcnR1YWwgdm9pZCBkb19SZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXplX3R5 cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKCgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFy X3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApIGNvbnN0ID0gMDsKICAg ICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFibGVGcmFn bWVudDxjaGFyX3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApID0gMDsK ICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29uc3Qgc2VsZl90eXBlJiBhU3Ry aW5nICkgY29uc3QgeyByZXR1cm4gJmFTdHJpbmcgPT0gdGhpczsgfQogIH07CgojIDEgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FQcm9taXNlU3RyaW5nLmgiIDEKIyAzNSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zQVByb21pc2VTdHJpbmcuaCIKY2xhc3MgbnNBUHJvbWlzZVN0cmlu ZyA6IHB1YmxpYyBuc0FTdHJpbmcgeyB9OwpjbGFzcyBuc0FQcm9taXNlQ1N0cmluZyA6IHB1Ymxp YyBuc0FDU3RyaW5nIHsgfTsKIyA1MDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJp bmcuaCIgMgoKaW5saW5lCnZvaWQKbnNBU3RyaW5nOjpBc3NpZ24oIGNvbnN0IG5zQVByb21pc2VT dHJpbmcmIGFSZWFkYWJsZSApCiAgewogICAgQXNzaWduRnJvbVByb21pc2UoYVJlYWRhYmxlKTsK ICB9CgppbmxpbmUKdm9pZApuc0FTdHJpbmc6OkFwcGVuZCggY29uc3QgbnNBUHJvbWlzZVN0cmlu ZyYgYVJlYWRhYmxlICkKICB7CiAgICBBcHBlbmRGcm9tUHJvbWlzZShhUmVhZGFibGUpOwogIH0K CmlubGluZQp2b2lkCm5zQVN0cmluZzo6SW5zZXJ0KCBjb25zdCBuc0FQcm9taXNlU3RyaW5nJiBh UmVhZGFibGUsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApCiAgewogICAgSW5zZXJ0RnJvbVByb21p c2UoYVJlYWRhYmxlLCBhdFBvc2l0aW9uKTsKICB9CgppbmxpbmUKdm9pZApuc0FDU3RyaW5nOjpB c3NpZ24oIGNvbnN0IG5zQVByb21pc2VDU3RyaW5nJiBhUmVhZGFibGUgKQogIHsKICAgIEFzc2ln bkZyb21Qcm9taXNlKGFSZWFkYWJsZSk7CiAgfQoKaW5saW5lCnZvaWQKbnNBQ1N0cmluZzo6QXBw ZW5kKCBjb25zdCBuc0FQcm9taXNlQ1N0cmluZyYgYVJlYWRhYmxlICkKICB7CiAgICBBcHBlbmRG cm9tUHJvbWlzZShhUmVhZGFibGUpOwogIH0KCmlubGluZQp2b2lkCm5zQUNTdHJpbmc6Okluc2Vy dCggY29uc3QgbnNBUHJvbWlzZUNTdHJpbmcmIGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBvc2l0 aW9uICkKICB7CiAgICBJbnNlcnRGcm9tUHJvbWlzZShhUmVhZGFibGUsIGF0UG9zaXRpb24pOwog IH0KCgoKCgppbmxpbmUKbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYKbnNBU3RyaW5nOjpCZWdp blJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0 Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1G cmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0 Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICBy ZXR1cm4gYVJlc3VsdDsKICB9CgppbmxpbmUKbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYKbnNB U3RyaW5nOjpFbmRSZWFkaW5nKCBjb25zdF9pdGVyYXRvciYgYVJlc3VsdCApIGNvbnN0CiAgewog ICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFJlYWRhYmxlRnJhZ21lbnQo YVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24g PSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCmlubGlu ZQpuc0FTdHJpbmc6Oml0ZXJhdG9yJgpuc0FTdHJpbmc6OkJlZ2luV3JpdGluZyggaXRlcmF0b3Im IGFSZXN1bHQgKQogIHsKICAgIGFSZXN1bHQubU93bmluZ1N0cmluZyA9IHRoaXM7CiAgICBHZXRX cml0YWJsZUZyYWdtZW50KGFSZXN1bHQubUZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCk7CiAgICBh UmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1TdGFydDsKICAgIGFSZXN1bHQu bm9ybWFsaXplX2ZvcndhcmQoKTsKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCgppbmxpbmUKbnNB U3RyaW5nOjppdGVyYXRvciYKbnNBU3RyaW5nOjpFbmRXcml0aW5nKCBpdGVyYXRvciYgYVJlc3Vs dCApCiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRhYmxl RnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5t UG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0Owog IH0KCmNsYXNzIG5zU3RyaW5nQ29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdmlydHVh bCBpbnQgb3BlcmF0b3IoKSggY29uc3QgUFJVbmljaGFyKiwgY29uc3QgUFJVbmljaGFyKiwgUFJV aW50MzIgYUxlbmd0aCApIGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNEZWZhdWx0U3RyaW5nQ29t cGFyYXRvcgogICAgOiBwdWJsaWMgbnNTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgog ICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBQUlVuaWNoYXIqLCBjb25zdCBQUlVu aWNoYXIqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgfTsKCmNsYXNzIG5zQ2FzZUluc2Vu c2l0aXZlU3RyaW5nQ29tcGFyYXRvcgogICAgOiBwdWJsaWMgbnNTdHJpbmdDb21wYXJhdG9yCiAg ewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBQUlVuaWNo YXIqLCBjb25zdCBQUlVuaWNoYXIqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgfTsKCiAg ICAgICBpbnQgQ29tcGFyZSggY29uc3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYg cmhzLCBjb25zdCBuc1N0cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRv cigpICk7CgppbmxpbmUKUFJCb29sCm5zQVN0cmluZzo6RXF1YWxzKCBjb25zdCBzZWxmX3R5cGUm IHJocyApIGNvbnN0CiAgewogICAgcmV0dXJuIExlbmd0aCgpPT1yaHMuTGVuZ3RoKCkgJiYgQ29t cGFyZSgqdGhpcywgcmhzKT09MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yIT0oIGNvbnN0 IG5zQVN0cmluZyYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuICFs aHMuRXF1YWxzKHJocyk7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcjwgKCBjb25zdCBuc0FT dHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJl KGxocywgcmhzKTwgMDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPD0oIGNvbnN0IG5zQVN0 cmluZyYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUo bGhzLCByaHMpPD0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNBU3Ry aW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLkVxdWFs cyhyaHMpOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I+PSggY29uc3QgbnNBU3RyaW5nJiBs aHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJo cyk+PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj4gKCBjb25zdCBuc0FTdHJpbmcmIGxo cywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhz KT4gMDsKICB9CgppbmxpbmUKbnNBU3RyaW5nOjpzaXplX3R5cGUKbnNBU3RyaW5nOjpMZWZ0KCBu c0FTdHJpbmcmIGFSZXN1bHQsIHNpemVfdHlwZSBhTGVuZ3RoVG9Db3B5ICkgY29uc3QKICB7CiAg ICByZXR1cm4gTWlkKGFSZXN1bHQsIDAsIGFMZW5ndGhUb0NvcHkpOwogIH0KCgoKCgoKaW5saW5l Cm5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FDU3RyaW5nOjpCZWdpblJlYWRpbmcoIGNv bnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJp bmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0Zp cnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5t U3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3Vs dDsKICB9CgppbmxpbmUKbnNBQ1N0cmluZzo6Y29uc3RfaXRlcmF0b3ImCm5zQUNTdHJpbmc6OkVu ZFJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0 Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1G cmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQu bUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKaW5saW5lCm5zQUNTdHJp bmc6Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpCZWdpbldyaXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0 ICkKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFibGVG cmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5t UG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6 ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsKICB9CgoKaW5saW5lCm5zQUNTdHJpbmc6 Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpFbmRXcml0aW5nKCBpdGVyYXRvciYgYVJlc3VsdCApCiAg ewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRhYmxlRnJhZ21l bnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRp b24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCgpj bGFzcyBuc0NTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGlu dCBvcGVyYXRvcigpKCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWludDMyIGFMZW5ndGgg KSBjb25zdCA9IDA7CiAgfTsKCmNsYXNzIG5zRGVmYXVsdENTdHJpbmdDb21wYXJhdG9yCiAgICA6 IHB1YmxpYyBuc0NTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFs IGludCBvcGVyYXRvcigpKCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWludDMyIGFMZW5n dGggKSBjb25zdDsKICB9OwoKY2xhc3MgbnNDYXNlSW5zZW5zaXRpdmVDU3RyaW5nQ29tcGFyYXRv cgogICAgOiBwdWJsaWMgbnNDU3RyaW5nQ29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAg dmlydHVhbCBpbnQgb3BlcmF0b3IoKSggY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBQUlVpbnQz MiBhTGVuZ3RoICkgY29uc3Q7CiAgfTsKCiAgICAgICBpbnQgQ29tcGFyZSggY29uc3QgbnNBQ1N0 cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMsIGNvbnN0IG5zQ1N0cmluZ0NvbXBhcmF0 b3ImID0gbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IoKSApOwoKaW5saW5lClBSQm9vbApuc0FD U3RyaW5nOjpFcXVhbHMoIGNvbnN0IHNlbGZfdHlwZSYgcmhzICkgY29uc3QKICB7CiAgICByZXR1 cm4gTGVuZ3RoKCk9PXJocy5MZW5ndGgoKSAmJiBDb21wYXJlKCp0aGlzLCByaHMpPT0wOwogIH0K CmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBu c0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiAhbGhzLkVxdWFscyhyaHMpOwogIH0KCmlu bGluZQpQUkJvb2wKb3BlcmF0b3I8ICggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FD U3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKTwgMDsKICB9Cgpp bmxpbmUKUFJCb29sCm9wZXJhdG9yPD0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNB Q1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk8PTA7CiAgfQoK aW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5z QUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIGxocy5FcXVhbHMocmhzKTsKICB9Cgppbmxp bmUKUFJCb29sCm9wZXJhdG9yPj0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0 cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk+PTA7CiAgfQoKaW5s aW5lClBSQm9vbApvcGVyYXRvcj4gKCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5zQUNT dHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCByaHMpPiAwOwogIH0KCmlu bGluZQpuc0FDU3RyaW5nOjpzaXplX3R5cGUKbnNBQ1N0cmluZzo6TGVmdCggbnNBQ1N0cmluZyYg YVJlc3VsdCwgc2l6ZV90eXBlIGFMZW5ndGhUb0NvcHkgKSBjb25zdAogIHsKICAgIHJldHVybiBN aWQoYVJlc3VsdCwgMCwgYUxlbmd0aFRvQ29weSk7CiAgfQoKCgojIDEgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0RlcGVuZGVudENvbmNhdGVuYXRpb24uaCIgMQojIDUwICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uLmgiCmNsYXNzIG5zRGVwZW5k ZW50Q29uY2F0ZW5hdGlvbgogICAgOiBwdWJsaWMgbnNBUHJvbWlzZVN0cmluZwogIHsKICAgIHB1 YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24gc2VsZl90eXBlOwog ICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU3RyaW5n IHN0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHN0cmluZ190eXBlOjpjb25zdF9pdGVyYXRvciBj b25zdF9pdGVyYXRvcjsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYs IG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNvbnN0OwogICAgICB2aXJ0dWFsIGNoYXJf dHlwZSogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4m LCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9CgogICAgICBlbnVt IHsga0xlZnRTdHJpbmcsIGtSaWdodFN0cmluZyB9OwoKICAgICAgaW50CiAgICAgIEdldEN1cnJl bnRTdHJpbmdGcm9tRnJhZ21lbnQoIGNvbnN0IG5zUmVhZGFibGVGcmFnbWVudDxjaGFyX3R5cGU+ JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAocmVpbnRlcnBy ZXRfY2FzdDwgUFJVaW50MzIgPihhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllcikgJiBtRnJh Z21lbnRJZGVudGlmaWVyTWFzaykgPyBrUmlnaHRTdHJpbmcgOiBrTGVmdFN0cmluZzsKICAgICAg ICB9CgogICAgICBpbnQKICAgICAgU2V0TGVmdFN0cmluZ0luRnJhZ21lbnQoIG5zUmVhZGFibGVG cmFnbWVudDxjaGFyX3R5cGU+JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAg IGFGcmFnbWVudC5tRnJhZ21lbnRJZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDwgdm9pZCog PihyZWludGVycHJldF9jYXN0PCBQUlVpbnQzMiA+KGFGcmFnbWVudC5tRnJhZ21lbnRJZGVudGlm aWVyKSAmIH5tRnJhZ21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga0xlZnRT dHJpbmc7CiAgICAgICAgfQoKICAgICAgaW50CiAgICAgIFNldFJpZ2h0U3RyaW5nSW5GcmFnbWVu dCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNvbnN0CiAgICAg ICAgewogICAgICAgICAgYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIgPSByZWludGVycHJl dF9jYXN0PCB2b2lkKiA+KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVWludDMyID4oYUZyYWdtZW50Lm1G cmFnbWVudElkZW50aWZpZXIpIHwgbUZyYWdtZW50SWRlbnRpZmllck1hc2spOwogICAgICAgICAg cmV0dXJuIGtSaWdodFN0cmluZzsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICBuc0RlcGVu ZGVudENvbmNhdGVuYXRpb24oIGNvbnN0IHN0cmluZ190eXBlJiBhTGVmdFN0cmluZywgY29uc3Qg c3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZywgUFJVaW50MzIgYU1hc2sgPSAxICkKICAgICAgICAg IDogbUZyYWdtZW50SWRlbnRpZmllck1hc2soYU1hc2spCiAgICAgICAgewogICAgICAgICAgbVN0 cmluZ3Nba0xlZnRTdHJpbmddID0gJmFMZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nba1Jp Z2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRD b25jYXRlbmF0aW9uKCBjb25zdCBzZWxmX3R5cGUmIGFMZWZ0U3RyaW5nLCBjb25zdCBzdHJpbmdf dHlwZSYgYVJpZ2h0U3RyaW5nICkKICAgICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1hc2so YUxlZnRTdHJpbmcubUZyYWdtZW50SWRlbnRpZmllck1hc2s8PDEpCiAgICAgICAgewogICAgICAg ICAgbVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFMZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmlu Z3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAgICAgICAgfQoKCgoKICAgIHByaXZh dGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiApOwoKICAgIHB1Ymxp YzoKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwg UFJCb29sIElzRGVwZW5kZW50T24oIGNvbnN0IHN0cmluZ190eXBlJiApIGNvbnN0OwoKCgoKICAg ICAgUFJVaW50MzIgR2V0RnJhZ21lbnRJZGVudGlmaWVyTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1G cmFnbWVudElkZW50aWZpZXJNYXNrOyB9CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBvcGVyYXRv cisoIGNvbnN0IHNlbGZfdHlwZSYgKTsKCgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IHN0cmlu Z190eXBlKiBtU3RyaW5nc1syXTsKICAgICAgUFJVaW50MzIgbUZyYWdtZW50SWRlbnRpZmllck1h c2s7CiAgfTsKCmNsYXNzIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24KICAgIDogcHVibGljIG5z QVByb21pc2VDU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zRGVwZW5kZW50 Q0NvbmNhdGVuYXRpb24gc2VsZl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwog ICAgICB0eXBlZGVmIG5zQUNTdHJpbmcgc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyaW5n X3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIHByb3RlY3RlZDoKICAg ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFi bGVGcmFnbWVudDxjaGFyX3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29u c3Q7CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRh YmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIHsg cmV0dXJuIDA7IH0KCiAgICAgIGVudW0geyBrTGVmdFN0cmluZywga1JpZ2h0U3RyaW5nIH07Cgog ICAgICBpbnQKICAgICAgR2V0Q3VycmVudFN0cmluZ0Zyb21GcmFnbWVudCggY29uc3QgbnNSZWFk YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAg ICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PCBQUlVpbnQzMiA+KGFGcmFnbWVudC5tRnJh Z21lbnRJZGVudGlmaWVyKSAmIG1GcmFnbWVudElkZW50aWZpZXJNYXNrKSA/IGtSaWdodFN0cmlu ZyA6IGtMZWZ0U3RyaW5nOwogICAgICAgIH0KCiAgICAgIGludAogICAgICBTZXRMZWZ0U3RyaW5n SW5GcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNv bnN0CiAgICAgICAgewogICAgICAgICAgYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIgPSBy ZWludGVycHJldF9jYXN0PCB2b2lkKiA+KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVWludDMyID4oYUZy YWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIpICYgfm1GcmFnbWVudElkZW50aWZpZXJNYXNrKTsK ICAgICAgICAgIHJldHVybiBrTGVmdFN0cmluZzsKICAgICAgICB9CgogICAgICBpbnQKICAgICAg U2V0UmlnaHRTdHJpbmdJbkZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYg YUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBhRnJhZ21lbnQubUZyYWdtZW50 SWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqID4ocmVpbnRlcnByZXRfY2FzdDwg UFJVaW50MzIgPihhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllcikgfCBtRnJhZ21lbnRJZGVu dGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga1JpZ2h0U3RyaW5nOwogICAgICAgIH0KCiAg ICBwdWJsaWM6CiAgICAgIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24oIGNvbnN0IHN0cmluZ190 eXBlJiBhTGVmdFN0cmluZywgY29uc3Qgc3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZywgUFJVaW50 MzIgYU1hc2sgPSAxICkKICAgICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1hc2soYU1hc2sp CiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFMZWZ0U3RyaW5n OwogICAgICAgICAgbVN0cmluZ3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAgICAg ICAgfQoKICAgICAgbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbiggY29uc3Qgc2VsZl90eXBlJiBh TGVmdFN0cmluZywgY29uc3Qgc3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZyApCiAgICAgICAgICA6 IG1GcmFnbWVudElkZW50aWZpZXJNYXNrKGFMZWZ0U3RyaW5nLm1GcmFnbWVudElkZW50aWZpZXJN YXNrPDwxKQogICAgICAgIHsKICAgICAgICAgIG1TdHJpbmdzW2tMZWZ0U3RyaW5nXSA9ICZhTGVm dFN0cmluZzsKICAgICAgICAgIG1TdHJpbmdzW2tSaWdodFN0cmluZ10gPSAmYVJpZ2h0U3RyaW5n OwogICAgICAgIH0KCgoKCiAgICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0 IHNlbGZfdHlwZSYgKTsKCiAgICBwdWJsaWM6CgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0 aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzdHJp bmdfdHlwZSYgKSBjb25zdDsKCgoKCiAgICAgIFBSVWludDMyIEdldEZyYWdtZW50SWRlbnRpZmll ck1hc2soKSBjb25zdCB7IHJldHVybiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzazsgfQoKICAgIHBy aXZhdGU6CiAgICAgIHZvaWQgb3BlcmF0b3IrKCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBw cml2YXRlOgogICAgICBjb25zdCBzdHJpbmdfdHlwZSogbVN0cmluZ3NbMl07CiAgICAgIFBSVWlu dDMyIG1GcmFnbWVudElkZW50aWZpZXJNYXNrOwogIH07CiMgMjI0ICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uLmgiCmlubGluZQpjb25zdCBuc0RlcGVu ZGVudENvbmNhdGVuYXRpb24Kb3BlcmF0b3IrKCBjb25zdCBuc0RlcGVuZGVudENvbmNhdGVuYXRp b24mIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVu dENvbmNhdGVuYXRpb24obGhzLCByaHMsIGxocy5HZXRGcmFnbWVudElkZW50aWZpZXJNYXNrKCk8 PDEpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uCm9wZXJhdG9y KyggY29uc3QgbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbiYgbGhzLCBjb25zdCBuc0FDU3RyaW5n JiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uKGxocywgcmhz LCBsaHMuR2V0RnJhZ21lbnRJZGVudGlmaWVyTWFzaygpPDwxKTsKICB9CgppbmxpbmUKY29uc3Qg bnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uCm9wZXJhdG9yKyggY29uc3QgbnNBU3RyaW5nJiBsaHMs IGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRDb25jYXRl bmF0aW9uKGxocywgcmhzKTsKICB9CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRDQ29uY2F0ZW5h dGlvbgpvcGVyYXRvcisoIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYg cmhzICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbihsaHMsIHJocyk7 CiAgfQojIDgxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIiAyCiMgMzEg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJsZVN0cmluZy5oIiAyCgoKdHlwZWRl ZiBjb25zdCBuc0FTdHJpbmcgbnNBUmVhZGFibGVTdHJpbmc7CnR5cGVkZWYgY29uc3QgbnNBQ1N0 cmluZyBuc0FSZWFkYWJsZUNTdHJpbmc7CgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNMaXRlcmFsU3RyaW5nLmgiIDEKIyAzMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTGl0 ZXJhbFN0cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudFN0 cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudFN0cmlu Zy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FGbGF0U3RyaW5nLmgiIDEKIyAz MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQUZsYXRTdHJpbmcuaCIKY2xhc3MgbnNBRmxh dFN0cmluZwogICAgOiBwdWJsaWMgbnNBU3RyaW5nCiAgewogICAgcHVibGljOgoKICAgICAgdmly dHVhbCBjb25zdCBQUlVuaWNoYXIqIGdldCgpIGNvbnN0OwogICAgICBQUlVuaWNoYXIgb3BlcmF0 b3JbXSggUFJVaW50MzIgaSApIGNvbnN0IHsgcmV0dXJuIGdldCgpWyBpIF07IH0KICAgICAgUFJV bmljaGFyIENoYXJBdCggUFJVaW50MzIgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIg TGVuZ3RoKCkgY29uc3Q7CgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBQUlVuaWNo YXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+Jiwg bnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVbmlj aGFyKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYs IG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApOwogIH07CgpjbGFzcyBuc0FGbGF0Q1N0cmlu ZwogICAgOiBwdWJsaWMgbnNBQ1N0cmluZwogIHsKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhciogZ2V0KCkgY29uc3Q7CiAgICAgIGNoYXIgb3BlcmF0b3JbXSggUFJVaW50MzIg aSApIGNvbnN0IHsgcmV0dXJuIGdldCgpWyBpIF07IH0KICAgICAgY2hhciBDaGFyQXQoIFBSVWlu dDMyICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKCiAg ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCgg bnNSZWFkYWJsZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkg Y29uc3Q7CiAgICAgIHZpcnR1YWwgY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJs ZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CiAgfTsKCmlu bGluZQpQUlVuaWNoYXIKbnNBRmxhdFN0cmluZzo6Q2hhckF0KCBQUlVpbnQzMiBpICkgY29uc3QK ICB7CiAgICB7fTsKICAgIHJldHVybiBvcGVyYXRvcltdKGkpOwogIH0KCmlubGluZQpjaGFyCm5z QUZsYXRDU3RyaW5nOjpDaGFyQXQoIFBSVWludDMyIGkgKSBjb25zdAogIHsKICAgIHt9OwogICAg cmV0dXJuIG9wZXJhdG9yW10oaSk7CiAgfQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNEZXBlbmRlbnRTdHJpbmcuaCIgMgojIDQ1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNE ZXBlbmRlbnRTdHJpbmcuaCIKY2xhc3MgbnNEZXBlbmRlbnRTdHJpbmcKICAgICAgOiBwdWJsaWMg bnNBRmxhdFN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNv bnN0IFBSVW5pY2hhciogYVB0ciApCiAgICAgICAgewogICAgICAgICAgbUhhbmRsZS5EYXRhU3Rh cnQoYVB0cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYVB0ciA/IChhUHRyK25zQ2hhclRy YWl0czxQUlVuaWNoYXI+OjpsZW5ndGgoYVB0cikpIDogMCk7CiAgICAgICAgfQoKICAgICAgdm9p ZAogICAgICBSZWJpbmQoIGNvbnN0IFBSVW5pY2hhciogYVN0YXJ0UHRyLCBjb25zdCBQUlVuaWNo YXIqIGFFbmRQdHIgKQogICAgICAgIHsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFy dFB0cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAg ICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IFBSVW5pY2hhciogYVB0ciwgUFJVaW50MzIgYUxl bmd0aCApCiAgICAgICAgewogICAgICAgICAgaWYgKCBhTGVuZ3RoID09IFBSVWludDMyKC0xKSAp CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgUmViaW5kKGFQdHIpOwogICAgICAgICAgICB9 CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIFJlYmluZChhUHRyLCBhUHRyK2FMZW5ndGgpOwog ICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50U3RyaW5nKCBjb25zdCBQUlVuaWNoYXIqIGFTdGFy dFB0ciwgY29uc3QgUFJVbmljaGFyKiBhRW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRyLCBhRW5k UHRyKTsgfQogICAgICBuc0RlcGVuZGVudFN0cmluZyggY29uc3QgUFJVbmljaGFyKiBhUHRyLCBQ UlVpbnQzMiBhTGVuZ3RoICkgeyBSZWJpbmQoYVB0ciwgYUxlbmd0aCk7IH0KICAgICAgZXhwbGlj aXQgbnNEZXBlbmRlbnRTdHJpbmcoIGNvbnN0IFBSVW5pY2hhciogYVB0ciApIHsgUmViaW5kKGFQ dHIpOyB9CgoKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc0Rl cGVuZGVudFN0cmluZyYgKTsKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZm ZXJIYW5kbGU8UFJVbmljaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0IHsgcmV0dXJu IHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5zQnVmZmVySGFuZGxlPFBSVW5pY2hhcj4qID4oJm1I YW5kbGUpOyB9CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiog R2V0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qg bnNCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiogPigmbUhhbmRsZSk7IH0KCiAgICBwcml2YXRlOgog ICAgICBuc0NvbnN0QnVmZmVySGFuZGxlPFBSVW5pY2hhcj4gbUhhbmRsZTsKICB9OwoKCgpjbGFz cyBuc0RlcGVuZGVudENTdHJpbmcKICAgICAgOiBwdWJsaWMgbnNBRmxhdENTdHJpbmcKICB7CiAg ICBwdWJsaWM6CiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBjaGFyKiBhUHRyICkKICAg ICAgICB7CiAgICAgICAgICBtSGFuZGxlLkRhdGFTdGFydChhUHRyKTsKICAgICAgICAgIG1IYW5k bGUuRGF0YUVuZChhUHRyID8gKGFQdHIrbnNDaGFyVHJhaXRzPGNoYXI+OjpsZW5ndGgoYVB0cikp IDogMCk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXIqIGFT dGFydFB0ciwgY29uc3QgY2hhciogYUVuZFB0ciApCiAgICAgICAgewogICAgICAgICAgbUhhbmRs ZS5EYXRhU3RhcnQoYVN0YXJ0UHRyKTsKICAgICAgICAgIG1IYW5kbGUuRGF0YUVuZChhRW5kUHRy KTsKICAgICAgICB9CgogICAgICB2b2lkCiAgICAgIFJlYmluZCggY29uc3QgY2hhciogYVB0ciwg UFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgaWYgKCBhTGVuZ3RoID09IFBS VWludDMyKC0xKSApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgUmViaW5kKGFQdHIpOwog ICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIFJlYmluZChhUHRyLCBhUHRy K2FMZW5ndGgpOwogICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50Q1N0cmluZyggY29uc3QgY2hh ciogYVN0YXJ0UHRyLCBjb25zdCBjaGFyKiBhRW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRyLCBh RW5kUHRyKTsgfQogICAgICBuc0RlcGVuZGVudENTdHJpbmcoIGNvbnN0IGNoYXIqIGFQdHIsIFBS VWludDMyIGFMZW5ndGggKSB7IFJlYmluZChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICBleHBsaWNp dCBuc0RlcGVuZGVudENTdHJpbmcoIGNvbnN0IGNoYXIqIGFQdHIgKSB7IFJlYmluZChhUHRyKTsg fQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNEZXBlbmRl bnRDU3RyaW5nJiApOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhh bmRsZTxjaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJw cmV0X2Nhc3Q8IGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiA+KCZtSGFuZGxlKTsgfQogICAg ICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiBHZXRCdWZmZXJIYW5kbGUoKSBj b25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBuc0J1ZmZlckhhbmRsZTxjaGFy PiogPigmbUhhbmRsZSk7IH0KCiAgICBwcml2YXRlOgogICAgICBuc0NvbnN0QnVmZmVySGFuZGxl PGNoYXI+IG1IYW5kbGU7CiAgfTsKIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTGl0 ZXJhbFN0cmluZy5oIiAyCiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJs ZVN0cmluZy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50 U3Vic3RyaW5nLmgiIDEKIyA0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50 U3Vic3RyaW5nLmgiCmNsYXNzIG5zRGVwZW5kZW50U3Vic3RyaW5nCiAgICAgIDogcHVibGljIG5z QVByb21pc2VTdHJpbmcKIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50 U3Vic3RyaW5nLmgiCiAgewogICAgdHlwZWRlZiBuc0FTdHJpbmcgc3RyaW5nX3R5cGU7CiAgICB0 eXBlZGVmIHN0cmluZ190eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICBw cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBHZXRSZWFkYWJsZUZyYWdt ZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQ UlVpbnQzMiApIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVW5pY2hhciogR2V0V3JpdGFibGVGcmFn bWVudCggbnNXcml0YWJsZUZyYWdtZW50PFBSVW5pY2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwg UFJVaW50MzIgKSB7IHJldHVybiAwOyB9CgogICAgcHVibGljOgogICAgICBuc0RlcGVuZGVudFN1 YnN0cmluZyggY29uc3Qgc3RyaW5nX3R5cGUmIGFTdHJpbmcsIFBSVWludDMyIGFTdGFydFBvcywg UFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgICA6IG1TdHJpbmcoYVN0cmluZyksCiAgICAgICAg ICAgIG1TdGFydFBvcyggTlNfTUlOKGFTdGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkgKSwKICAg ICAgICAgICAgbUxlbmd0aCggTlNfTUlOKGFMZW5ndGgsIGFTdHJpbmcuTGVuZ3RoKCktbVN0YXJ0 UG9zKSApCiAgICAgICAgewoKICAgICAgICB9CgogICAgICBuc0RlcGVuZGVudFN1YnN0cmluZygg Y29uc3QgY29uc3RfaXRlcmF0b3ImIGFTdGFydCwgY29uc3QgY29uc3RfaXRlcmF0b3ImIGFFbmQg KQogICAgICAgICAgOiBtU3RyaW5nKGFTdGFydC5zdHJpbmcoKSkKICAgICAgICB7CiAgICAgICAg ICBjb25zdF9pdGVyYXRvciB6ZXJvUG9pbnQ7CiAgICAgICAgICBtU3RyaW5nLkJlZ2luUmVhZGlu Zyh6ZXJvUG9pbnQpOwogICAgICAgICAgbVN0YXJ0UG9zID0gRGlzdGFuY2UoemVyb1BvaW50LCBh U3RhcnQpOwogICAgICAgICAgbUxlbmd0aCA9IERpc3RhbmNlKGFTdGFydCwgYUVuZCk7CiAgICAg ICAgfQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNEZXBl bmRlbnRTdWJzdHJpbmcmICk7CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIFBSVWludDMyIExl bmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBz dHJpbmdfdHlwZSYgYVN0cmluZyApIGNvbnN0IHsgcmV0dXJuIG1TdHJpbmcuSXNEZXBlbmRlbnRP bihhU3RyaW5nKTsgfQoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBtU3Ry aW5nOwogICAgICBQUlVpbnQzMiBtU3RhcnRQb3M7CiAgICAgIFBSVWludDMyIG1MZW5ndGg7CiAg fTsKCmNsYXNzIG5zRGVwZW5kZW50Q1N1YnN0cmluZwogICAgICA6IHB1YmxpYyBuc0FQcm9taXNl Q1N0cmluZwojIDEwNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50U3Vic3Ry aW5nLmgiCiAgewogICAgdHlwZWRlZiBuc0FDU3RyaW5nIHN0cmluZ190eXBlOwogICAgdHlwZWRl ZiBzdHJpbmdfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAgcHJvdGVj dGVkOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVh ZGFibGVGcmFnbWVudDxjaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNvbnN0 OwogICAgICB2aXJ0dWFsIGNoYXIqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFibGVGcmFn bWVudDxjaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIHsgcmV0dXJuIDA7IH0K CiAgICBwdWJsaWM6CiAgICAgIG5zRGVwZW5kZW50Q1N1YnN0cmluZyggY29uc3Qgc3RyaW5nX3R5 cGUmIGFTdHJpbmcsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYUxlbmd0aCApCiAgICAg ICAgICA6IG1TdHJpbmcoYVN0cmluZyksCiAgICAgICAgICAgIG1TdGFydFBvcyggTlNfTUlOKGFT dGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkgKSwKICAgICAgICAgICAgbUxlbmd0aCggTlNfTUlO KGFMZW5ndGgsIGFTdHJpbmcuTGVuZ3RoKCktbVN0YXJ0UG9zKSApCiAgICAgICAgewoKICAgICAg ICB9CgogICAgICBuc0RlcGVuZGVudENTdWJzdHJpbmcoIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBh U3RhcnQsIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBhRW5kICkKICAgICAgICAgIDogbVN0cmluZyhh U3RhcnQuc3RyaW5nKCkpCiAgICAgICAgewogICAgICAgICAgY29uc3RfaXRlcmF0b3IgemVyb1Bv aW50OwogICAgICAgICAgbVN0cmluZy5CZWdpblJlYWRpbmcoemVyb1BvaW50KTsKICAgICAgICAg IG1TdGFydFBvcyA9IERpc3RhbmNlKHplcm9Qb2ludCwgYVN0YXJ0KTsKICAgICAgICAgIG1MZW5n dGggPSBEaXN0YW5jZShhU3RhcnQsIGFFbmQpOwogICAgICAgIH0KCgoKCiAgICBwcml2YXRlOgoK ICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5zRGVwZW5kZW50Q1N1YnN0cmluZyYgKTsKCiAg ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICAgIHZp cnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24oIGNvbnN0IHN0cmluZ190eXBlJiBhU3RyaW5nICkg Y29uc3QgeyByZXR1cm4gbVN0cmluZy5Jc0RlcGVuZGVudE9uKGFTdHJpbmcpOyB9CgogICAgcHJp dmF0ZToKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIG1TdHJpbmc7CiAgICAgIFBSVWludDMyIG1T dGFydFBvczsKICAgICAgUFJVaW50MzIgbUxlbmd0aDsKICB9OwoKCgoKCgoKaW5saW5lCmNvbnN0 IG5zRGVwZW5kZW50Q1N1YnN0cmluZwpTdWJzdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFTdHJp bmcsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYVN1YnN0cmluZ0xlbmd0aCApCiAgewog ICAgcmV0dXJuIG5zRGVwZW5kZW50Q1N1YnN0cmluZyhhU3RyaW5nLCBhU3RhcnRQb3MsIGFTdWJz dHJpbmdMZW5ndGgpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudFN1YnN0cmluZwpTdWJz dHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZywgUFJVaW50MzIgYVN0YXJ0UG9zLCBQUlVp bnQzMiBhU3Vic3RyaW5nTGVuZ3RoICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRTdWJzdHJp bmcoYVN0cmluZywgYVN0YXJ0UG9zLCBhU3Vic3RyaW5nTGVuZ3RoKTsKICB9CgppbmxpbmUKY29u c3QgbnNEZXBlbmRlbnRDU3Vic3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNSZWFkaW5nSXRlcmF0 b3I8Y2hhcj4mIGFTdGFydCwgY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Y2hhcj4mIGFFbmQgKQog IHsKICAgIHJldHVybiBuc0RlcGVuZGVudENTdWJzdHJpbmcoYVN0YXJ0LCBhRW5kKTsKICB9Cgpp bmxpbmUKY29uc3QgbnNEZXBlbmRlbnRTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc1JlYWRp bmdJdGVyYXRvcjxQUlVuaWNoYXI+JiBhU3RhcnQsIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPFBS VW5pY2hhcj4mIGFFbmQgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudFN1YnN0cmluZyhhU3Rh cnQsIGFFbmQpOwogIH0KIyA0MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVJlYWRhYmxl U3RyaW5nLmgiIDIKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm9taXNlRmxh dFN0cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb21pc2VGbGF0 U3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU2hhcmFibGVTdHJpbmcu aCIgMQojIDM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTaGFyYWJsZVN0cmluZy5oIgoj IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRsZVV0aWxzLmgiIDEKIyAz NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlVXRpbHMuaCIKIyAxICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrL2JhY2t3YXJkL25ldy5oIiAxIDMKIyAzMyAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy9iYWNrd2FyZC9uZXcuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KysvYmFja3dhcmQvYmFja3dhcmRfd2FybmluZy5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy9iYWNrd2FyZC9uZXcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9u ZXciIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrL25ldyIgMwojIDEgIi91c3IvbG9j YWwvaW5jbHVkZS9nKysvY3N0ZGRlZiIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKysv Y3N0ZGRlZiIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGRlZi5o IiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMK IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3Rk ZGVmLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcg OjpzaXplX3Q7Cn0KIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9jc3RkZGVmIiAyIDMKIyAz NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9uZXciIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKysvZXhjZXB0aW9uIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9leGNlcHRp b24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIGV4Y2VwdGlvbgog IHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhj ZXB0aW9uKCkgdGhyb3coKTsKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRo cm93KCk7CiAgfTsKCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24KICB7 CiAgcHVibGljOgogICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5i YWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVf aGFuZGxlcikgKCk7CiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCiAg dGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3co KTsKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAg dW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhy b3coKTsKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7 CgogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKfQojIDM2ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrL25ldyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7 CiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBi YWRfYWxsb2MoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsK ICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5v dGhyb3c7CiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0 X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKTsKfQoKCnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNp emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpz aXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQg KikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICopIHRocm93KCk7CnZvaWQg Km9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp Owp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3Qm KSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJv d190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICosIGNvbnN0IHN0ZDo6 bm90aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6 ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQppbmxpbmUgdm9pZCAq b3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJu IHBsYWNlOyB9Cn0KIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9iYWNrd2FyZC9uZXcuaCIg MiAzCgp1c2luZyBzdGQ6OmJhZF9hbGxvYzsKdXNpbmcgc3RkOjpub3Rocm93X3Q7CnVzaW5nIHN0 ZDo6bm90aHJvdzsKdXNpbmcgc3RkOjpuZXdfaGFuZGxlcjsKdXNpbmcgc3RkOjpzZXRfbmV3X2hh bmRsZXI7CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRsZVV0aWxz LmgiIDIKCgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc0F1dG9CdWZmZXJIYW5kbGUK ICB7CiAgICBwdWJsaWM6CiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZSgpIDogbUhhbmRsZSgwKSB7 IH0KCiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZSggY29uc3QgbnNBdXRvQnVmZmVySGFuZGxlPENo YXJUPiYgYU90aGVyICkKICAgICAgICAgIDogbUhhbmRsZShhT3RoZXIuZ2V0KCkpCiAgICAgICAg ewogICAgICAgICAgaWYgKCBtSGFuZGxlICkKICAgICAgICAgICAgbUhhbmRsZS0+QWNxdWlyZVJl ZmVyZW5jZSgpOwogICAgICAgIH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG5zQXV0b0J1ZmZlckhh bmRsZSggY29uc3QgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiBhSGFuZGxlICkKICAgICAg ICAgIDogbUhhbmRsZSggY29uc3RfY2FzdDwgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiA+ KGFIYW5kbGUpICkKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1IYW5kbGUgKQogICAgICAgICAg ICBtSGFuZGxlLT5BY3F1aXJlUmVmZXJlbmNlKCk7CiAgICAgICAgfQoKICAgICB+bnNBdXRvQnVm ZmVySGFuZGxlKCkKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1IYW5kbGUgKQogICAgICAgICAg ICBtSGFuZGxlLT5SZWxlYXNlUmVmZXJlbmNlKCk7CiAgICAgICAgfQoKICAgICAgbnNBdXRvQnVm ZmVySGFuZGxlPENoYXJUPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhh bmRsZTxDaGFyVD4qIHJocyApCiAgICAgICAgewogICAgICAgICAgbnNTaGFyZWRCdWZmZXJIYW5k bGU8Q2hhclQ+KiBvbGRfaGFuZGxlID0gbUhhbmRsZTsKICAgICAgICAgIGlmICggKG1IYW5kbGUg PSBjb25zdF9jYXN0PCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qID4ocmhzKSkgKQogICAg ICAgICAgICBtSGFuZGxlLT5BY3F1aXJlUmVmZXJlbmNlKCk7CiAgICAgICAgICBpZiAoIG9sZF9o YW5kbGUgKQogICAgICAgICAgICBvbGRfaGFuZGxlLT5SZWxlYXNlUmVmZXJlbmNlKCk7CiAgICAg ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNBdXRvQnVmZmVySGFuZGxlPENo YXJUPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+JiBy aHMgKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiBvcGVyYXRvcj0ocmhzLmdldCgpKTsKICAg ICAgICB9CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qCiAgICAgIGdldCgpIGNv bnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1IYW5kbGU7CiAgICAgICAgfQoKICAgICAg b3BlcmF0b3IgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KigpIGNvbnN0CiAgICAgICAgewog ICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0KCiAgICAgIG5zU2hhcmVkQnVmZmVySGFu ZGxlPENoYXJUPioKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CiAgICAgICAgewogICAgICAgICAg cmV0dXJuIGdldCgpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICBuc1NoYXJlZEJ1ZmZl ckhhbmRsZTxDaGFyVD4qIG1IYW5kbGU7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwg Y2xhc3MgQ2hhclQ+CmlubGluZQpzaXplX3QKTlNfQWxpZ25lZEhhbmRsZVNpemUoIGNvbnN0IEhh bmRsZVQqLCBjb25zdCBDaGFyVCogKQogIHsKCiAgICByZXR1cm4gKChzaXplb2YoSGFuZGxlVCkg KyBzaXplb2YoQ2hhclQpIC0gMSkgLyBzaXplb2YoQ2hhclQpKSAqIHNpemVvZihDaGFyVCk7CiAg fQoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIENoYXJUPgppbmxpbmUKY29uc3QgQ2hh clQqCk5TX0RhdGFBZnRlckhhbmRsZSggY29uc3QgSGFuZGxlVCogYUhhbmRsZVB0ciwgY29uc3Qg Q2hhclQqIGFEdW1teUNoYXJUUHRyICkKICB7CiAgICB0eXBlZGVmIGNvbnN0IENoYXJUKiBDaGFy VF9wdHI7CiAgICByZXR1cm4gQ2hhclRfcHRyKHN0YXRpY19jYXN0PCBjb25zdCB1bnNpZ25lZCBj aGFyKiA+KGFIYW5kbGVQdHIpICsgTlNfQWxpZ25lZEhhbmRsZVNpemUoYUhhbmRsZVB0ciwgYUR1 bW15Q2hhclRQdHIpKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgQ2hhclQ+ CmlubGluZQpDaGFyVCoKTlNfRGF0YUFmdGVySGFuZGxlKCBIYW5kbGVUKiBhSGFuZGxlUHRyLCBj b25zdCBDaGFyVCogYUR1bW15Q2hhclRQdHIgKQogIHsKICAgIHR5cGVkZWYgQ2hhclQqIENoYXJU X3B0cjsKICAgIHJldHVybiBDaGFyVF9wdHIoc3RhdGljX2Nhc3Q8IHVuc2lnbmVkIGNoYXIqID4o YUhhbmRsZVB0cikgKyBOU19BbGlnbmVkSGFuZGxlU2l6ZShhSGFuZGxlUHRyLCBhRHVtbXlDaGFy VFB0cikpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBIYW5kbGVULCBjbGFzcyBTdHJpbmdUPgpIYW5k bGVUKgpOU19BbGxvY2F0ZUNvbnRpZ3VvdXNIYW5kbGVXaXRoRGF0YSggY29uc3QgSGFuZGxlVCog YUR1bW15SGFuZGxlUHRyLCBQUlVpbnQzMiBhQWRkaXRpb25hbENhcGFjaXR5LCBjb25zdCBTdHJp bmdUKiBhRGF0YVNvdXJjZSApCiAgewogICAgdHlwZWRlZiB0eXBlbmFtZSBTdHJpbmdUOjpjaGFy X3R5cGUgY2hhcl90eXBlOwogICAgdHlwZWRlZiBjaGFyX3R5cGUqIGNoYXJfcHRyOwoKCiAgICBz aXplX3QgaGFuZGxlX3NpemUgPSBOU19BbGlnbmVkSGFuZGxlU2l6ZShhRHVtbXlIYW5kbGVQdHIs IGNoYXJfcHRyKDApKTsKCgogICAgc2l6ZV90IGRhdGFfbGVuZ3RoID0gYURhdGFTb3VyY2U/IGFE YXRhU291cmNlLT5MZW5ndGgoKSA6IDA7CiAgICBzaXplX3QgYnVmZmVyX2xlbmd0aCA9IGRhdGFf bGVuZ3RoICsgYUFkZGl0aW9uYWxDYXBhY2l0eTsKCgogICAgc2l6ZV90IGJ1ZmZlcl9zaXplID0g YnVmZmVyX2xlbmd0aCAqIHNpemVvZihjaGFyX3R5cGUpOwoKCiAgICBIYW5kbGVUKiByZXN1bHQg PSAwOwogICAgdm9pZCogaGFuZGxlX3B0ciA9IDo6b3BlcmF0b3IgbmV3KGhhbmRsZV9zaXplICsg YnVmZmVyX3NpemUpOwoKICAgIGlmICggaGFuZGxlX3B0ciApCiAgICAgIHsKICAgICAgICBjaGFy X3B0ciBkYXRhX3N0YXJ0X3B0ciA9IGNoYXJfcHRyKHN0YXRpY19jYXN0PCB1bnNpZ25lZCBjaGFy KiA+KGhhbmRsZV9wdHIpICsgaGFuZGxlX3NpemUpOwogICAgICAgIGNoYXJfcHRyIGRhdGFfZW5k X3B0ciA9IGRhdGFfc3RhcnRfcHRyICsgZGF0YV9sZW5ndGg7CiAgICAgICAgY2hhcl9wdHIgYnVm ZmVyX2VuZF9wdHIgPSBkYXRhX3N0YXJ0X3B0ciArIGJ1ZmZlcl9sZW5ndGg7CgogICAgICAgIGNo YXJfcHRyIHRvQmVnaW4gPSBkYXRhX3N0YXJ0X3B0cjsKCiAgICAgICAgaWYgKCBkYXRhX2xlbmd0 aCApCiAgICAgICAgICB7CiAgICAgICAgICAgIHR5cGVuYW1lIFN0cmluZ1Q6OmNvbnN0X2l0ZXJh dG9yIGZyb21CZWdpbiwgZnJvbUVuZDsKICAgICAgICAgICAgY29weV9zdHJpbmcoYURhdGFTb3Vy Y2UtPkJlZ2luUmVhZGluZyhmcm9tQmVnaW4pLCBhRGF0YVNvdXJjZS0+RW5kUmVhZGluZyhmcm9t RW5kKSwgdG9CZWdpbik7CiAgICAgICAgICB9CgoKICAgICAgICBpZiAoIGFBZGRpdGlvbmFsQ2Fw YWNpdHkgPiAwICkKICAgICAgICAgICp0b0JlZ2luID0gY2hhcl90eXBlKDApOwoKICAgICAgICBy ZXN1bHQgPSBuZXcgKGhhbmRsZV9wdHIpIEhhbmRsZVQoZGF0YV9zdGFydF9wdHIsIGRhdGFfZW5k X3B0ciwgZGF0YV9zdGFydF9wdHIsIGJ1ZmZlcl9lbmRfcHRyLCAxKTsKICAgICAgfQoKICAgIHJl dHVybiByZXN1bHQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIFN0cmluZ1Q+ CmlubGluZQpIYW5kbGVUKgpOU19BbGxvY2F0ZUNvbnRpZ3VvdXNIYW5kbGVXaXRoRGF0YSggY29u c3QgSGFuZGxlVCogYUR1bW15SGFuZGxlUHRyLCBjb25zdCBTdHJpbmdUJiBhRGF0YVNvdXJjZSwg UFJVaW50MzIgYUFkZGl0aW9uYWxDYXBhY2l0eSApCiAgewogICAgcmV0dXJuIE5TX0FsbG9jYXRl Q29udGlndW91c0hhbmRsZVdpdGhEYXRhKGFEdW1teUhhbmRsZVB0ciwgYUFkZGl0aW9uYWxDYXBh Y2l0eSwgJmFEYXRhU291cmNlKTsKICB9CiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c1NoYXJhYmxlU3RyaW5nLmgiIDIKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU2hh cmFibGVTdHJpbmcuaCIKY2xhc3MgbnNTaGFyYWJsZVN0cmluZwogICAgOiBwdWJsaWMgbnNBRmxh dFN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc1NoYXJhYmxlU3RyaW5nIHNl bGZfdHlwZTsKICAgICAgdHlwZWRlZiBQUlVuaWNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IG5zQVN0cmluZyBzdHJpbmdfdHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIG5zU2hhcmFibGVTdHJp bmcoKSB7IH0KICAgICAgbnNTaGFyYWJsZVN0cmluZyggY29uc3Qgc2VsZl90eXBlJiBhT3RoZXIg KSA6IG1CdWZmZXIoYU90aGVyLm1CdWZmZXIpIHsgfQogICAgICBleHBsaWNpdCBuc1NoYXJhYmxl U3RyaW5nKCBjb25zdCBzdHJpbmdfdHlwZSYgYVJlYWRhYmxlICkgeyBhc3NpZ24oYVJlYWRhYmxl KTsgfQogICAgICBleHBsaWNpdCBuc1NoYXJhYmxlU3RyaW5nKCBjb25zdCBuc1NoYXJlZEJ1ZmZl ckhhbmRsZTxjaGFyX3R5cGU+KiBhSGFuZGxlICkgOiBtQnVmZmVyKGFIYW5kbGUpIHsgfQoKICAg ICAgc2VsZl90eXBlJgogICAgICBvcGVyYXRvcj0oIGNvbnN0IHN0cmluZ190eXBlJiBhUmVhZGFi bGUgKQogICAgICAgIHsKICAgICAgICAgIGFzc2lnbihhUmVhZGFibGUpOwogICAgICAgICAgcmV0 dXJuICp0aGlzOwogICAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQgYXNzaWduKCBj b25zdCBzdHJpbmdfdHlwZSYgKTsKICAgICAgdmlydHVhbCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhh bmRsZTxjaGFyX3R5cGU+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKCiAgICBwcml2 YXRlOgogICAgICBuc0F1dG9CdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiBtQnVmZmVyOwogIH07CgoK Y2xhc3MgbnNTaGFyYWJsZUNTdHJpbmcKICAgIDogcHVibGljIG5zQUZsYXRDU3RyaW5nCiAgewog ICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zU2hhcmFibGVDU3RyaW5nIHNlbGZfdHlwZTsKICAg ICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBuc0FDU3RyaW5nIHN0cmlu Z190eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNTaGFyYWJsZUNTdHJpbmcoKSB7IH0KICAgICAg bnNTaGFyYWJsZUNTdHJpbmcoIGNvbnN0IHNlbGZfdHlwZSYgYU90aGVyICkgOiBtQnVmZmVyKGFP dGhlci5tQnVmZmVyKSB7IH0KICAgICAgZXhwbGljaXQgbnNTaGFyYWJsZUNTdHJpbmcoIGNvbnN0 IHN0cmluZ190eXBlJiBhUmVhZGFibGUgKSB7IGFzc2lnbihhUmVhZGFibGUpOyB9CiAgICAgIGV4 cGxpY2l0IG5zU2hhcmFibGVDU3RyaW5nKCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFy X3R5cGU+KiBhSGFuZGxlICkgOiBtQnVmZmVyKGFIYW5kbGUpIHsgfQoKICAgICAgc2VsZl90eXBl JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IHN0cmluZ190eXBlJiBhUmVhZGFibGUgKQogICAgICAg IHsKICAgICAgICAgIGFzc2lnbihhUmVhZGFibGUpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwog ICAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQgYXNzaWduKCBjb25zdCBzdHJpbmdf dHlwZSYgKTsKICAgICAgdmlydHVhbCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFyX3R5 cGU+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBu c0F1dG9CdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiBtQnVmZmVyOwogIH07CiMgMjkgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc1Byb21pc2VGbGF0U3RyaW5nLmgiIDIKIyA4MyAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zUHJvbWlzZUZsYXRTdHJpbmcuaCIKY2xhc3MgbnNQcm9taXNlRmxh dFN0cmluZwogICAgOiBwdWJsaWMgbnNBRmxhdFN0cmluZwogIHsKICAgIGZyaWVuZCBjb25zdCBu c1Byb21pc2VGbGF0U3RyaW5nIFByb21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc0FTdHJpbmcmICk7 CgogICAgcHVibGljOgogICAgICBuc1Byb21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc1Byb21pc2VG bGF0U3RyaW5nJiApOwoKICAgIHByb3RlY3RlZDoKICAgICAgbnNQcm9taXNlRmxhdFN0cmluZygp IDogbVByb21pc2VkU3RyaW5nKCZtRmxhdHRlbmVkU3RyaW5nKSB7IH0KICAgICAgZXhwbGljaXQg bnNQcm9taXNlRmxhdFN0cmluZyggY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CgoKICAgICAg dmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRGbGF0QnVmZmVySGFu ZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFy PiogR2V0QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNTaGFyZWRC dWZmZXJIYW5kbGU8UFJVbmljaGFyPiogR2V0U2hhcmVkQnVmZmVySGFuZGxlKCkgY29uc3Q7CiAg ICAgIHZpcnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24oIGNvbnN0IG5zQVN0cmluZyYgKSBjb25z dDsKCgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIGdldCgpIGNv bnN0OwogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwogICAgcHJvdGVjdGVk OgogICAgICB2aXJ0dWFsIGNvbnN0IFBSVW5pY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNS ZWFkYWJsZUZyYWdtZW50PFBSVW5pY2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIg KSBjb25zdDsKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc1By b21pc2VGbGF0U3RyaW5nJiApOwoKICAgIHByaXZhdGU6CiAgICAgIG5zU2hhcmFibGVTdHJpbmcg bUZsYXR0ZW5lZFN0cmluZzsKICAgICAgY29uc3QgbnNBRmxhdFN0cmluZyogbVByb21pc2VkU3Ry aW5nOwogIH07CgpjbGFzcyBuc1Byb21pc2VGbGF0Q1N0cmluZwogICAgOiBwdWJsaWMgbnNBRmxh dENTdHJpbmcKICB7CiAgICBmcmllbmQgY29uc3QgbnNQcm9taXNlRmxhdENTdHJpbmcgUHJvbWlz ZUZsYXRDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiApOwoKICAgIHB1YmxpYzoKICAgICAgbnNQ cm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zUHJvbWlzZUZsYXRDU3RyaW5nJiApOwoKICAgIHBy b3RlY3RlZDoKICAgICAgbnNQcm9taXNlRmxhdENTdHJpbmcoKSA6IG1Qcm9taXNlZFN0cmluZygm bUZsYXR0ZW5lZFN0cmluZykgeyB9CiAgICAgIGV4cGxpY2l0IG5zUHJvbWlzZUZsYXRDU3RyaW5n KCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nICk7CgoKICAgICAgdmlydHVhbCBjb25zdCBuc0J1 ZmZlckhhbmRsZTxjaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0 dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsK ICAgICAgdmlydHVhbCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFyPiogR2V0U2hhcmVk QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24o IGNvbnN0IG5zQUNTdHJpbmcmICkgY29uc3Q7CgoKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhciogZ2V0KCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkg Y29uc3Q7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogR2V0UmVhZGFi bGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3Qs IFBSVWludDMyICkgY29uc3Q7CgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSgg Y29uc3QgbnNQcm9taXNlRmxhdENTdHJpbmcmICk7CgogICAgcHJpdmF0ZToKICAgICAgbnNTaGFy YWJsZUNTdHJpbmcgbUZsYXR0ZW5lZFN0cmluZzsKICAgICAgY29uc3QgbnNBRmxhdENTdHJpbmcq IG1Qcm9taXNlZFN0cmluZzsKICB9OwoKCmlubGluZQpjb25zdCBuc1Byb21pc2VGbGF0U3RyaW5n ClByb21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc0FTdHJpbmcmIGFTdHJpbmcgKQogIHsKICAgIHJl dHVybiBuc1Byb21pc2VGbGF0U3RyaW5nKGFTdHJpbmcpOwogIH0KCmlubGluZQpjb25zdCBuc1By b21pc2VGbGF0Q1N0cmluZwpQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFT dHJpbmcgKQogIHsKICAgIHJldHVybiBuc1Byb21pc2VGbGF0Q1N0cmluZyhhU3RyaW5nKTsKICB9 CiMgNDYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJsZVN0cmluZy5oIiAyCiMg MzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FXcml0YWJsZVN0cmluZy5oIiAyCgoKdHlw ZWRlZiBuc0FTdHJpbmcgbnNBV3JpdGFibGVTdHJpbmc7CnR5cGVkZWYgbnNBQ1N0cmluZyBuc0FX cml0YWJsZUNTdHJpbmc7CiMgMjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lBdG9tLmgi IDIKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIKY2xhc3MgbnNJQXRv bSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzZDFiMTViMCwgMHg5M2I0LCAw eDExZDEsIHsgMHg4OSwgMHg1YiwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5MSwgMHgxYiwgMHg4MSB9 fTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKG5zQVdyaXRh YmxlU3RyaW5nICYgYVN0cmluZykgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVbmlj b2RlKGNvbnN0IFBSVW5pY2hhciAqKmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIgKmFIYW5kbGVyLCBQUlVpbnQzMiAqX3JldHZhbCkg PSAwOwoKfTsKIyAxMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lBdG9tLmgiCmV4dGVy biBuc0lBdG9tKiBOU19OZXdBdG9tKGNvbnN0IGNoYXIqIGlzb2xhdGluMSk7CgoKCgpleHRlcm4g bnNJQXRvbSogTlNfTmV3QXRvbShjb25zdCBQUlVuaWNoYXIqIHVuaWNvZGUpOwoKCgpleHRlcm4g bnNJQXRvbSogTlNfTmV3QXRvbShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZyk7CgoK CgpleHRlcm4gbnNyZWZjbnQgTlNfR2V0TnVtYmVyT2ZBdG9tcyh2b2lkKTsKZXh0ZXJuIHZvaWQg TlNfUHVyZ2VBdG9tVGFibGUodm9pZCk7CiMgNTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c1N0cmluZzIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAxCiMg MTkxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKIyAxICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAxOTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c1N0ci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWVtb3J5LmgiIDEKIyAy NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWVtb3J5LmgiCiMgMSAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSU1lbW9yeS5oIiAxCiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lNZW1vcnkuaCIKY2xhc3MgbnNJTWVtb3J5IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1 YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE IGlpZCA9IHsweDU5ZTdlNzdhLCAweDM4ZTQsIDB4MTFkNCwgeyAweDhjLCAweGY1LCAweDAwLCAw eDYwLCAweGIwLCAweGZjLCAweDE0LCAweGEzIH19OyByZXR1cm4gaWlkO30KIyA1MCAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSU1lbW9yeS5oIgogIHZpcnR1YWwgdm9pZCAqIEFsbG9jKHNp emVfdCBzaXplKSA9IDA7CiMgNjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1vcnku aCIKICB2aXJ0dWFsIHZvaWQgKiBSZWFsbG9jKHZvaWQgKiBwdHIsIHNpemVfdCBuZXdTaXplKSA9 IDA7CiMgNzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1vcnkuaCIKICB2aXJ0dWFs IHZvaWQgRnJlZSh2b2lkICogcHRyKSA9IDA7CiMgODggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lNZW1vcnkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhlYXBNaW5pbWl6ZShQUkJvb2wgaW1t ZWRpYXRlKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNMb3dNZW1vcnkoUFJCb29s ICpfcmV0dmFsKSA9IDA7Cgp9OwojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNNZW1v cnkuaCIgMgoKCgoKCgoKY2xhc3MgbnNNZW1vcnkKewpwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCog QWxsb2Moc2l6ZV90IHNpemUpOwogICAgc3RhdGljIHZvaWQqIFJlYWxsb2Modm9pZCogcHRyLCBz aXplX3Qgc2l6ZSk7CiAgICBzdGF0aWMgdm9pZCBGcmVlKHZvaWQqIHB0cik7CiAgICBzdGF0aWMg bnNyZXN1bHQgSGVhcE1pbmltaXplKFBSQm9vbCBhSW1tZWRpYXRlKTsKICAgIHN0YXRpYyB2b2lk KiBDbG9uZShjb25zdCB2b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKICAgIHN0YXRpYyBuc0lNZW1v cnkqIEdldEdsb2JhbE1lbW9yeVNlcnZpY2UoKTsKfTsKIyAxOTMgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc1N0ci5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAxOTQg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAyCiMgMSAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAxOTUg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAyCiMgMSAiL3dpbmRvd3MvaGRhMTIv bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BsaGFzaC5oIiAxCiMgMjQgIi93aW5k b3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIKIyAx ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0 ZGlvLmgiIDEgMwojIDI1ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcGxoYXNoLmgiIDIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjYgIi93aW5kb3dzL2hkYTEyL21vei1j dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIgMgoKZXh0ZXJuICJDIiB7Cgp0 eXBlZGVmIHN0cnVjdCBQTEhhc2hFbnRyeSBQTEhhc2hFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgUExI YXNoVGFibGUgUExIYXNoVGFibGU7CnR5cGVkZWYgUFJVaW50MzIgUExIYXNoTnVtYmVyOwoKdHlw ZWRlZiBQTEhhc2hOdW1iZXIgKCAqUExIYXNoRnVuY3Rpb24pKGNvbnN0IHZvaWQgKmtleSk7CnR5 cGVkZWYgUFJJbnRuICggKlBMSGFzaENvbXBhcmF0b3IpKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2 b2lkICp2Mik7CgoKCgp0eXBlZGVmIFBSSW50biAoICpQTEhhc2hFbnVtZXJhdG9yKShQTEhhc2hF bnRyeSAqaGUsIFBSSW50biBpLCB2b2lkICphcmcpOwojIDUxICIvd2luZG93cy9oZGExMi9tb3ot Y3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxoYXNoLmgiCnR5cGVkZWYgc3RydWN0IFBM SGFzaEFsbG9jT3BzIHsKICAgIHZvaWQgKiAoICphbGxvY1RhYmxlKSh2b2lkICpwb29sLCBQUlNp emUgc2l6ZSk7CiAgICB2b2lkICggKmZyZWVUYWJsZSkodm9pZCAqcG9vbCwgdm9pZCAqaXRlbSk7 CiAgICBQTEhhc2hFbnRyeSAqICggKmFsbG9jRW50cnkpKHZvaWQgKnBvb2wsIGNvbnN0IHZvaWQg KmtleSk7CiAgICB2b2lkICggKmZyZWVFbnRyeSkodm9pZCAqcG9vbCwgUExIYXNoRW50cnkgKmhl LCBQUlVpbnRuIGZsYWcpOwp9IFBMSGFzaEFsbG9jT3BzOwoKCgoKc3RydWN0IFBMSGFzaEVudHJ5 IHsKICAgIFBMSGFzaEVudHJ5ICpuZXh0OwogICAgUExIYXNoTnVtYmVyIGtleUhhc2g7CiAgICBj b25zdCB2b2lkICprZXk7CiAgICB2b2lkICp2YWx1ZTsKfTsKCnN0cnVjdCBQTEhhc2hUYWJsZSB7 CiAgICBQTEhhc2hFbnRyeSAqKmJ1Y2tldHM7CiAgICBQUlVpbnQzMiBuZW50cmllczsKICAgIFBS VWludDMyIHNoaWZ0OwogICAgUExIYXNoRnVuY3Rpb24ga2V5SGFzaDsKICAgIFBMSGFzaENvbXBh cmF0b3Iga2V5Q29tcGFyZTsKICAgIFBMSGFzaENvbXBhcmF0b3IgdmFsdWVDb21wYXJlOwogICAg Y29uc3QgUExIYXNoQWxsb2NPcHMgKmFsbG9jT3BzOwogICAgdm9pZCAqYWxsb2NQcml2OwoKCgoK Cgp9OwoKCgoKCmV4dGVybiBQTEhhc2hUYWJsZSAqClBMX05ld0hhc2hUYWJsZShQUlVpbnQzMiBu dW1CdWNrZXRzLCBQTEhhc2hGdW5jdGlvbiBrZXlIYXNoLAogICAgICAgICAgICAgICAgUExIYXNo Q29tcGFyYXRvciBrZXlDb21wYXJlLCBQTEhhc2hDb21wYXJhdG9yIHZhbHVlQ29tcGFyZSwKICAg ICAgICAgICAgICAgIGNvbnN0IFBMSGFzaEFsbG9jT3BzICphbGxvY09wcywgdm9pZCAqYWxsb2NQ cml2KTsKCmV4dGVybiB2b2lkClBMX0hhc2hUYWJsZURlc3Ryb3koUExIYXNoVGFibGUgKmh0KTsK CgpleHRlcm4gUExIYXNoRW50cnkgKgpQTF9IYXNoVGFibGVBZGQoUExIYXNoVGFibGUgKmh0LCBj b25zdCB2b2lkICprZXksIHZvaWQgKnZhbHVlKTsKCmV4dGVybiBQUkJvb2wKUExfSGFzaFRhYmxl UmVtb3ZlKFBMSGFzaFRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiB2b2lkICoK UExfSGFzaFRhYmxlTG9va3VwKFBMSGFzaFRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5KTsKCmV4 dGVybiB2b2lkICoKUExfSGFzaFRhYmxlTG9va3VwQ29uc3QoUExIYXNoVGFibGUgKmh0LCBjb25z dCB2b2lkICprZXkpOwoKZXh0ZXJuIFBSSW50bgpQTF9IYXNoVGFibGVFbnVtZXJhdGVFbnRyaWVz KFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW51bWVyYXRvciBmLCB2b2lkICphcmcpOwoKCmV4dGVy biBQTEhhc2hOdW1iZXIKUExfSGFzaFN0cmluZyhjb25zdCB2b2lkICprZXkpOwoKCmV4dGVybiBQ UkludG4KUExfQ29tcGFyZVN0cmluZ3MoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKTsK CgpleHRlcm4gUFJJbnRuClBMX0NvbXBhcmVWYWx1ZXMoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZv aWQgKnYyKTsKCgpleHRlcm4gUExIYXNoRW50cnkgKioKUExfSGFzaFRhYmxlUmF3TG9va3VwKFBM SGFzaFRhYmxlICpodCwgUExIYXNoTnVtYmVyIGtleUhhc2gsIGNvbnN0IHZvaWQgKmtleSk7Cgpl eHRlcm4gUExIYXNoRW50cnkgKioKUExfSGFzaFRhYmxlUmF3TG9va3VwQ29uc3QoUExIYXNoVGFi bGUgKmh0LCBQTEhhc2hOdW1iZXIga2V5SGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiBQTEhhc2hFbnRyeSAqClBMX0hhc2hUYWJsZVJhd0Fk ZChQTEhhc2hUYWJsZSAqaHQsIFBMSGFzaEVudHJ5ICoqaGVwLCBQTEhhc2hOdW1iZXIga2V5SGFz aCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpOwoKZXh0 ZXJuIHZvaWQKUExfSGFzaFRhYmxlUmF3UmVtb3ZlKFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW50 cnkgKipoZXAsIFBMSGFzaEVudHJ5ICpoZSk7CgoKZXh0ZXJuIFBSSW50bgpQTF9IYXNoVGFibGVE dW1wKFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW51bWVyYXRvciBkdW1wLCBGSUxFICpmcCk7Cgp9 CiMgMTk2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIgMgoKCgplbnVtIGVDaGFy U2l6ZSB7ZU9uZUJ5dGU9MCxlVHdvQnl0ZT0xfTsKCgoKCgoKCmNvbnN0IFBSSW50MzIga0RlZmF1 bHRTdHJpbmdTaXplID0gNjQ7CmNvbnN0IFBSSW50MzIga05vdEZvdW5kID0gLTE7CgoKCgpjbGFz cyBDQnVmRGVzY3JpcHRvciB7CnB1YmxpYzoKICBDQnVmRGVzY3JpcHRvcihjaGFyKiBhU3RyaW5n LCBQUkJvb2wgYVN0YWNrQmFzZWQsUFJVaW50MzIgYUNhcGFjaXR5LFBSSW50MzIgYUxlbmd0aD0t MSk7CiAgQ0J1ZkRlc2NyaXB0b3IoY29uc3QgY2hhciogYVN0cmluZywgUFJCb29sIGFTdGFja0Jh c2VkLFBSVWludDMyIGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENCdWZEZXNjcmlw dG9yKFBSVW5pY2hhciogYVN0cmluZywgUFJCb29sIGFTdGFja0Jhc2VkLFBSVWludDMyIGFDYXBh Y2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENCdWZEZXNjcmlwdG9yKGNvbnN0IFBSVW5pY2hh ciogYVN0cmluZyxQUkJvb2wgYVN0YWNrQmFzZWQsUFJVaW50MzIgYUNhcGFjaXR5LFBSSW50MzIg YUxlbmd0aD0tMSk7CgogIGNoYXIqIG1CdWZmZXI7CiAgZUNoYXJTaXplIG1DaGFyU2l6ZTsKICBQ UlVpbnQzMiBtQ2FwYWNpdHk7CiAgUFJJbnQzMiBtTGVuZ3RoOwogIFBSQm9vbCBtU3RhY2tCYXNl ZDsKICBQUkJvb2wgbUlzQ29uc3Q7Cn07CgoKCgpzdHJ1Y3QgbnNTdHIgewoKICBuc1N0cigpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB9CgogIH5uc1N0cigpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICB9CiMgMjQ4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIu aCIKICBzdGF0aWMgdm9pZCBJbml0aWFsaXplKG5zU3RyJiBhRGVzdCxlQ2hhclNpemUgYUNoYXJT aXplKTsKIyAyNTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2 b2lkIEluaXRpYWxpemUobnNTdHImIGFEZXN0LGNoYXIqIGFDU3RyaW5nLFBSVWludDMyIGFDYXBh Y2l0eSxQUlVpbnQzMiBhTGVuZ3RoLGVDaGFyU2l6ZSBhQ2hhclNpemUsUFJCb29sIGFPd25zQnVm ZmVyKTsKIyAyNjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2 b2lkIERlc3Ryb3kobnNTdHImIGFEZXN0KTsKIyAyNzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc1N0ci5oIgogIHN0YXRpYyBQUkJvb2wgRW5zdXJlQ2FwYWNpdHkobnNTdHImIGFTdHJpbmcs UFJVaW50MzIgYU5ld0xlbmd0aCk7CiAgc3RhdGljIFBSQm9vbCBHcm93Q2FwYWNpdHkobnNTdHIm IGFTdHJpbmcsUFJVaW50MzIgYU5ld0xlbmd0aCk7CiMgMjkxICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBTdHJBcHBlbmQobnNTdHImIGFEZXN0LGNvbnN0 IG5zU3RyJiBhU291cmNlLFBSVWludDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKIyAzMDMg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIFN0ckFzc2ln bihuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsUFJVaW50MzIgYW5PZmZzZXQsUFJJ bnQzMiBhQ291bnQpOwojIDMxNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAg c3RhdGljIHZvaWQgU3RySW5zZXJ0KCBuc1N0ciYgYURlc3QsUFJVaW50MzIgYURlc3RPZmZzZXQs Y29uc3QgbnNTdHImIGFTb3VyY2UsUFJVaW50MzIgYVNyY09mZnNldCxQUkludDMyIGFDb3VudCk7 CiMgMzI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBE ZWxldGUobnNTdHImIGFEZXN0LFBSVWludDMyIGFEZXN0T2Zmc2V0LFBSVWludDMyIGFDb3VudCk7 CiMgMzQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBT dHJUcnVuY2F0ZShuc1N0ciYgYURlc3QsUFJVaW50MzIgYURlc3RPZmZzZXQpOwojIDM1MCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgQ2hhbmdlQ2FzZShu c1N0ciYgYURlc3QsUFJCb29sIGFUb1VwcGVyKTsKIyAzNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIFRyaW0obnNTdHImIGFEZXN0LGNvbnN0IGNoYXIq IGFTZXQsUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmcp OwojIDM3NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQg Q29tcHJlc3NTZXQobnNTdHImIGFEZXN0LGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5h dGVMZWFkaW5nLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmcpOwojIDM4NiAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgU3RyaXBDaGFycyhuc1N0ciYgYURl c3QsY29uc3QgY2hhciogYVNldCk7CiMgMzk4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT dHIuaCIKICBzdGF0aWMgUFJJbnQzMiBTdHJDb21wYXJlKGNvbnN0IG5zU3RyJiBhRGVzdCxjb25z dCBuc1N0ciYgYVNvdXJjZSxQUkludDMyIGFDb3VudCxQUkJvb2wgYUlnbm9yZUNhc2UpOwojIDQx MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIFBSSW50MzIgRmlu ZFN1YnN0cihjb25zdCBuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsIFBSQm9vbCBh SWdub3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKICBzdGF0aWMgUFJJ bnQzMiBGaW5kQ2hhcihjb25zdCBuc1N0ciYgYURlc3QsUFJVbmljaGFyIGFDaGFyLCBQUkJvb2wg YUlnbm9yZUNhc2UsUFJJbnQzMiBhbk9mZnNldCxQUkludDMyIGFDb3VudCk7CiAgc3RhdGljIFBS SW50MzIgRmluZENoYXJJblNldChjb25zdCBuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTZXQs UFJCb29sIGFJZ25vcmVDYXNlLFBSSW50MzIgYW5PZmZzZXQpOwoKICBzdGF0aWMgUFJJbnQzMiBS RmluZFN1YnN0cihjb25zdCBuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsIFBSQm9v bCBhSWdub3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKICBzdGF0aWMg UFJJbnQzMiBSRmluZENoYXIoY29uc3QgbnNTdHImIGFEZXN0LFBSVW5pY2hhciBhQ2hhciwgUFJC b29sIGFJZ25vcmVDYXNlLFBSSW50MzIgYW5PZmZzZXQsUFJJbnQzMiBhQ291bnQpOwogIHN0YXRp YyBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IG5zU3RyJiBhRGVzdCxjb25zdCBuc1N0ciYg YVNldCxQUkJvb2wgYUlnbm9yZUNhc2UsUFJJbnQzMiBhbk9mZnNldCk7CgogIHN0YXRpYyB2b2lk IE92ZXJ3cml0ZShuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsUFJJbnQzMiBhbk9m ZnNldCk7CgogIHN0YXRpYyBQUkJvb2wgRGlkQWNxdWlyZU1lbW9yeSh2b2lkKTsKCgoKCiAgc3Rh dGljIFBSVWludDMyIEhhc2hDb2RlKGNvbnN0IG5zU3RyJiBhRGVzdCk7CiMgNDM2ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBQUlVpbnQzMiBtTGVuZ3RoOwogIFBSVWludDMy IG1DYXBhY2l0eTsKICBlQ2hhclNpemUgbUNoYXJTaXplOwogIFBSQm9vbCBtT3duc0J1ZmZlcjsK CiAgdW5pb24gewogICAgY2hhciogbVN0cjsKICAgIFBSVW5pY2hhciogbVVTdHI7CiAgfTsKCnBy aXZhdGU6CiAgc3RhdGljIFBSQm9vbCBBbGxvYyhuc1N0ciYgYVN0cmluZyxQUlVpbnQzMiBhQ291 bnQpOwogIHN0YXRpYyBQUkJvb2wgUmVhbGxvYyhuc1N0ciYgYVN0cmluZyxQUlVpbnQzMiBhQ291 bnQpOwogIHN0YXRpYyBQUkJvb2wgRnJlZShuc1N0ciYgYVN0cmluZyk7Cgp9OwojIDQ2MCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCmlubGluZSBQUkludDMyIE1pbkludChQUklu dDMyIGFuSW50MSxQUkludDMyIGFuSW50Mil7CiAgcmV0dXJuIChhbkludDE8YW5JbnQyKSA/IGFu SW50MSA6IGFuSW50MjsKfQoKaW5saW5lIFBSSW50MzIgTWF4SW50KFBSSW50MzIgYW5JbnQxLFBS SW50MzIgYW5JbnQyKXsKICByZXR1cm4gKGFuSW50MTxhbkludDIpID8gYW5JbnQyIDogYW5JbnQx Owp9CgppbmxpbmUgdm9pZCBBZGROdWxsVGVybWluYXRvcihuc1N0ciYgYURlc3QpIHsKICBpZihl VHdvQnl0ZT09YURlc3QubUNoYXJTaXplKQogICAgYURlc3QubVVTdHJbYURlc3QubUxlbmd0aF09 MDsKICBlbHNlIGFEZXN0Lm1TdHJbYURlc3QubUxlbmd0aF09MDsKfQoKCgoKCgoKaW5saW5lIHZv aWQgUmVjeWNsZSggY2hhciogYUJ1ZmZlcikgeyBuc01lbW9yeTo6RnJlZShhQnVmZmVyKTsgfQpp bmxpbmUgdm9pZCBSZWN5Y2xlKCBQUlVuaWNoYXIqIGFCdWZmZXIpIHsgbnNNZW1vcnk6OkZyZWUo YUJ1ZmZlcik7IH0KIyA0OTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgppbmxp bmUgUFJVbmljaGFyIEdldENoYXJBdChjb25zdCBuc1N0ciYgYURlc3QsUFJVaW50MzIgYW5JbmRl eCkgewogIGlmKGFuSW5kZXg8YURlc3QubUxlbmd0aCkgewogICAgcmV0dXJuIChlVHdvQnl0ZT09 YURlc3QubUNoYXJTaXplKSA/IGFEZXN0Lm1VU3RyW2FuSW5kZXhdIDogKFBSVW5pY2hhcilhRGVz dC5tU3RyW2FuSW5kZXhdOwogIH0KICByZXR1cm4gMDsKfQojIDUzICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND UlQuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIKIyAxICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1n bnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdz LmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0 dXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVk ZS9iaXRzL3dhaXRzdGF0dXMuaCIgMiAzCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVz OwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7 CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGlu dCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0g X193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBp bnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAg ICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsK IyA0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0g ZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcg aW50IHJlbTsKICB9IGxkaXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAg ewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRp dl90OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlw ZV9nZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAo X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFy ICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVu c2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJs ZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBm bG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBs b25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93 ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91 bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAg IHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7Cgpf X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRo cm93ICgpOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsK Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAg ICB0aHJvdyAoKTsKIyAyMTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5j bHVkZS94bG9jYWxlLmgiIDEgMwojIDIxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoK ZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s b2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp OwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVu c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9j KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJu IGZsb2F0IF9fc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVf dCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19z dHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg X19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJv dyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0 cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg dGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n cm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9f c3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJv dyAoKTsKIyAyOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91 YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9f bnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJu YWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2ln bmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7 CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAw KTsKfQoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0 dXJuIF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19p bmxpbmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0 b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4 dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFz ZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg bG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkK ewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us IDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3Ry dG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0 b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9u X18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29u c3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRl cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBk b3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3Ry dG9kIChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRv aSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9s IChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBp bnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9s IChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu IF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJv dyAoKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9 CiMgMzg1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcg aW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAq X19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoK CgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9p ZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hh ciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVy biBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1 Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsK ICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsK ICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQg cmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg ICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRl cm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRh ICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQg X19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFu ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0 ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVk IGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50 ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0 aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi aVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgp OwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10p IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0 ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJv dyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgp OwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBf X3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9y dCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsK ICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19v bGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBp bnQgX19pbml0OwogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4g aW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwK ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg KCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwK ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVz dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQg c2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0 OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9y IChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAg ICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4g aW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg ICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFu ZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAo dW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4 X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwojIDUyOCAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChz aXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwg c2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4 dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2Zy ZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi IDEgMwojIDIyICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh dHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAxICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5o IiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoK CmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KIyA1 NDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChz aXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoK ZXh0ZXJuIGludCBwb3NpeF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGln bm1lbnQsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMp ICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMp IChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVz KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hh ciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBp bnQgX19yZXBsYWNlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29u c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9p ZCkgdGhyb3cgKCk7CiMgNjI0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg Km1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1r c3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY0MSAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAo KTsKIyA2NTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAo Y2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25z dCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2Fs aXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDY3MyAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry aWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2Zu X3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJf Zm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qg dm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoK CgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90 IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpl eHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50 IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19k ZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBs ZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBs bGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK ZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y ZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2ln bikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBf X25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQg Kl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRl cm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAg ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9f c2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwg aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0 LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChs b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQg Kl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBf X3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBf X25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQg Kl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBk b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAg ICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVy biBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAg ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19z aWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf X2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19z LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19y ZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpf X3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3Mg KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBz aXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAg IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVz cG9uc2UpIHRocm93ICgpOwojIDgwOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBp bnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVy biB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQg KGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19i dWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1td LCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNDUlQuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjcgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAyCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96 LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiIDEKIyA0MiAiL3dpbmRvd3Mv aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCiMgMSAiL3dp bmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIg MQojIDQzICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cGxzdHIuaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBQUlVpbnQzMgpQTF9zdHJsZW4o Y29uc3QgY2hhciAqc3RyKTsKIyA2MiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBQUlVpbnQzMgpQTF9zdHJubGVuKGNvbnN0 IGNoYXIgKnN0ciwgUFJVaW50MzIgbWF4KTsKIyA3MyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY3B5 KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CiMgODYgIi93aW5kb3dzL2hkYTEyL21vei1j dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0 cm5jcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBQUlVpbnQzMiBtYXgpOwojIDEwOSAi L3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgi CmV4dGVybiBjaGFyICoKUExfc3RybmNweXooY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBQ UlVpbnQzMiBtYXgpOwojIDEyMyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyZHVwKGNvbnN0IGNoYXIg KnMpOwoKCgoKCgoKZXh0ZXJuIHZvaWQKUExfc3RyZnJlZShjaGFyICpzKTsKIyAxNDcgIi93aW5k b3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRl cm4gY2hhciAqClBMX3N0cm5kdXAoY29uc3QgY2hhciAqcywgUFJVaW50MzIgbWF4KTsKIyAxNTkg Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5o IgpleHRlcm4gY2hhciAqClBMX3N0cmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYyk7CiMg MTc0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxz dHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY2F0KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3Jj LCBQUlVpbnQzMiBtYXgpOwojIDE4OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY2F0bihjaGFyICpk c3QsIFBSVWludDMyIG1heCwgY29uc3QgY2hhciAqc3JjKTsKIyAyMDAgIi93aW5kb3dzL2hkYTEy L21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gUFJJbnRu ClBMX3N0cmNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKIyAyMTQgIi93aW5kb3dz L2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4g UFJJbnRuClBMX3N0cm5jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgUFJVaW50MzIg bWF4KTsKIyAyMjYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wbHN0ci5oIgpleHRlcm4gUFJJbnRuClBMX3N0cmNhc2VjbXAoY29uc3QgY2hhciAqYSwg Y29uc3QgY2hhciAqYik7CiMgMjM4ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJuY2FzZWNtcChjb25z dCBjaGFyICphLCBjb25zdCBjaGFyICpiLCBQUlVpbnQzMiBtYXgpOwojIDI0OSAiL3dpbmRvd3Mv aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBj aGFyICoKUExfc3RyY2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYyk7CiMgMjYwICIvd2luZG93cy9o ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNo YXIgKgpQTF9zdHJyY2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYyk7CiMgMjcyICIvd2luZG93cy9o ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNo YXIgKgpQTF9zdHJuY2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYywgUFJVaW50MzIgbik7CiMgMjg0 ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIu aCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJucmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMsIFBSVWlu dDMyIG4pOwojIDMwMCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RycGJyayhjb25zdCBjaGFyICpzLCBj b25zdCBjaGFyICpsaXN0KTsKIyAzMTEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnByYnJrKGNvbnN0 IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QpOwojIDMyMiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2 cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3Ry bnBicmsoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqbGlzdCwgUFJVaW50MzIgbik7CiMgMzMz ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIu aCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJucHJicmsoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAq bGlzdCwgUFJVaW50MzIgbik7CiMgMzQzICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJzdHIoY29uc3Qg Y2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDM1MyAiL3dpbmRvd3MvaGRhMTIvbW96 LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExf c3RycnN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSk7CiMgMzY0ICIvd2lu ZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0 ZXJuIGNoYXIgKgpQTF9zdHJuc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxl LCBQUlVpbnQzMiBuKTsKIyAzNzUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5yc3RyKGNvbnN0IGNo YXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlLCBQUlVpbnQzMiBtYXgpOwojIDM4NSAiL3dpbmRv d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVy biBjaGFyICoKUExfc3RyY2FzZXN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRs ZSk7CiMgMzk1ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJjYXNlcnN0cihjb25zdCBjaGFyICpiaWcs IGNvbnN0IGNoYXIgKmxpdHRsZSk7CiMgNDA2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY2FzZXN0 cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbWF4KTsKIyA0 MTcgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0 ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5jYXNlcnN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0 IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbWF4KTsKCgoKCgoKCn0KIyAyOCAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zQ1JULmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNj b3JlLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiIDIKIyAxICIv d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5o IiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAyCiMgMSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zQ3BwU2hhcmVkQWxsb2NhdG9yLmgiIDEKCgoKIyAxICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNNZW1vcnkuaCIgMQojIDUgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRvci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zY29yZS5oIiAxCiMgNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ3BwU2hh cmVkQWxsb2NhdG9yLmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrL2JhY2t3YXJkL25l dy5oIiAxIDMKIyA3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxvY2F0 b3IuaCIgMgojIDIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxvY2F0 b3IuaCIKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9p bmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBj LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoK CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1 ZGUvbGltaXRzLmgiIDEgMwojIDEzMCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxp bnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMu aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxNDQgIi91 c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0u aCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2xv Y2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMKIyAzNyAi L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2Jp dHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAxNDkgIi91c3IvaW5j bHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgi IDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5f bGltLmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcgIi91c3IvaW5jbHVkZS9iaXRz L3hvcGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTMx ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xp bWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251 LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp Yi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMjQgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRvci5oIiAyCgoKCnRlbXBsYXRl IDxjbGFzcyBUPgpjbGFzcyBuc0NwcFNoYXJlZEFsbG9jYXRvcgoKCgoKICB7CiAgICBwdWJsaWM6 CiAgICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5 cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVk ZWYgVCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9wb2ludGVyOwoKICAg ICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgVCYgY29uc3RfcmVm ZXJlbmNlOwoKCgogICAgICBuc0NwcFNoYXJlZEFsbG9jYXRvcigpIHsgfQoKCgoKCgogICAgIH5u c0NwcFNoYXJlZEFsbG9jYXRvcigpIHsgfQoKCiAgICAgIHBvaW50ZXIKICAgICAgYWRkcmVzcygg cmVmZXJlbmNlIHIgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAmcjsKICAgICAg ICB9CgogICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3MoIGNvbnN0X3JlZmVyZW5jZSBy ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gJnI7CiAgICAgICAgfQoKICAgICAg cG9pbnRlcgogICAgICBhbGxvY2F0ZSggc2l6ZV90eXBlIG4sIGNvbnN0IHZvaWQqID0wICkKICAg ICAgICB7CiAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgcG9pbnRlciA+KG5zTWVt b3J5OjpBbGxvYyhzdGF0aWNfY2FzdDwgUFJVaW50MzIgPihuKnNpemVvZihUKSkpKTsKICAgICAg ICB9CgogICAgICB2b2lkCiAgICAgIGRlYWxsb2NhdGUoIHBvaW50ZXIgcCwgc2l6ZV90eXBlICkK ICAgICAgICB7CiAgICAgICAgICBuc01lbW9yeTo6RnJlZShwKTsKICAgICAgICB9CgogICAgICB2 b2lkCiAgICAgIGNvbnN0cnVjdCggcG9pbnRlciBwLCBjb25zdCBUJiB2YWwgKQogICAgICAgIHsK ICAgICAgICAgIG5ldyAocCkgVCh2YWwpOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVz dHJveSggcG9pbnRlciBwICkKICAgICAgICB7CiAgICAgICAgICBwLT5+VCgpOwogICAgICAgIH0K CiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0CiAgICAgICAgewoKCgogICAg ICAgICAgcmV0dXJuICgyMTQ3NDgzNjQ3TCAqIDJVTCArIDEpIC8gc2l6ZW9mKFQpOwoKICAgICAg ICB9CiMgMTEwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxvY2F0b3Iu aCIKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBUPgpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnND cHBTaGFyZWRBbGxvY2F0b3I8VD4mLCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYgKQog IHsKICAgIHJldHVybiAxOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgpQUkJvb2wKb3BlcmF0b3Ih PSggY29uc3QgbnNDcHBTaGFyZWRBbGxvY2F0b3I8VD4mLCBjb25zdCBuc0NwcFNoYXJlZEFsbG9j YXRvcjxUPiYgKQogIHsKICAgIHJldHVybiAwOwogIH0KIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zQ1JULmgiIDIKIyA0NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgi CmV4dGVybiBjb25zdCBQUlVuaWNoYXIga0lzb0xhdGluMVRvVUNTMlsyNTZdOwojIDg2ICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIKY2xhc3MgbnNDUlQgewpwdWJsaWM6CiAgZW51 bSB7CiAgICBUQUI9J1x0JyAsCiAgICBMRj0nXG4nICwKICAgIFZUQUI9J1x2JyAsCiAgICBGRj0n XGYnICwKICAgIENSPSdccicKICB9OwoKCgoKCgogIHN0YXRpYyB2b2lkIG1lbWNweSh2b2lkKiBh RGVzdCwgY29uc3Qgdm9pZCogYVNyYywgUFJVaW50MzIgYUNvdW50KSB7CiAgICB7fTsKICAgIDo6 bWVtY3B5KGFEZXN0LCBhU3JjLCAoc2l6ZV90KWFDb3VudCk7CiAgfQoKICBzdGF0aWMgUFJJbnQz MiBtZW1jbXAodm9pZCogYURlc3QsIGNvbnN0IHZvaWQqIGFTcmMsIFBSVWludDMyIGFDb3VudCkg ewogICAge307CiAgICByZXR1cm4gOjptZW1jbXAoYURlc3QsIGFTcmMsIChzaXplX3QpYUNvdW50 KTsKICB9CgogIHN0YXRpYyB2b2lkIG1lbW1vdmUodm9pZCogYURlc3QsIGNvbnN0IHZvaWQqIGFT cmMsIFBSVWludDMyIGFDb3VudCkgewogICAge307CiAgICA6Om1lbW1vdmUoYURlc3QsIGFTcmMs IChzaXplX3QpYUNvdW50KTsKICB9CgogIHN0YXRpYyB2b2lkIG1lbXNldCh2b2lkKiBhRGVzdCwg UFJVaW50OCBhQnl0ZSwgUFJVaW50MzIgYUNvdW50KSB7CiAgICB7fTsKICAgIDo6bWVtc2V0KGFE ZXN0LCBhQnl0ZSwgYUNvdW50KTsKICB9CgogIHN0YXRpYyB2b2lkIHplcm8odm9pZCogYURlc3Qs IFBSVWludDMyIGFDb3VudCkgewogICAge307CiAgICA6Om1lbXNldChhRGVzdCwgMCwgKHNpemVf dClhQ291bnQpOwogIH0KCgoKCgogIHN0YXRpYyBQUlVpbnQzMiBzdHJsZW4oY29uc3QgY2hhciog cykgewogICAgcmV0dXJuIFBSVWludDMyKDo6c3RybGVuKHMpKTsKICB9CgoKICBzdGF0aWMgUFJJ bnQzMiBzdHJjbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyKSB7CiAgICByZXR1cm4g UFJJbnQzMihQTF9zdHJjbXAoczEsIHMyKSk7CiAgfQoKICBzdGF0aWMgUFJJbnQzMiBzdHJuY21w KGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwKICAgICAgICAgICAgICAgICAgICAgICAg IFBSVWludDMyIGFNYXhMZW4pIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0cm5jbXAoczEsIHMy LCBhTWF4TGVuKSk7CiAgfQoKCiAgc3RhdGljIFBSSW50MzIgc3RyY2FzZWNtcChjb25zdCBjaGFy KiBzMSwgY29uc3QgY2hhciogczIpIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0cmNhc2VjbXAo czEsIHMyKSk7CiAgfQoKCiAgc3RhdGljIFBSSW50MzIgc3RybmNhc2VjbXAoY29uc3QgY2hhciog czEsIGNvbnN0IGNoYXIqIHMyLCBQUlVpbnQzMiBhTWF4TGVuKSB7CiAgICBQUkludDMyIHJlc3Vs dD1QUkludDMyKFBMX3N0cm5jYXNlY21wKHMxLCBzMiwgYU1heExlbikpOwoKCiAgICBpZihyZXN1 bHQ8MCkKICAgICAgcmVzdWx0PS0xOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBQ UkludDMyIHN0cm5jbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBQUkludDMyIGFN YXhMZW4pIHsKCiAgICBQUkludDMyIGRpZmYgPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXMxKVsw XSAtICgoY29uc3QgdW5zaWduZWQgY2hhciopczIpWzBdOwogICAgaWYgKGRpZmYgIT0gMCkgcmV0 dXJuIGRpZmY7CiAgICByZXR1cm4gUFJJbnQzMihQTF9zdHJuY21wKHMxLHMyLHVuc2lnbmVkKGFN YXhMZW4pKSk7CiAgfQoKICBzdGF0aWMgY2hhciogc3RyZHVwKGNvbnN0IGNoYXIqIHN0cikgewog ICAgcmV0dXJuIFBMX3N0cmR1cChzdHIpOwogIH0KCiAgc3RhdGljIGNoYXIqIHN0cm5kdXAoY29u c3QgY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pIHsKICAgIHJldHVybiBQTF9zdHJuZHVwKHN0ciwg bGVuKTsKICB9CgogIHN0YXRpYyB2b2lkIGZyZWUoY2hhciogc3RyKSB7CiAgICBQTF9zdHJmcmVl KHN0cik7CiAgfQojIDE5NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiCiAgc3Rh dGljIGNoYXIqIHN0cnRvayhjaGFyKiBzdHIsIGNvbnN0IGNoYXIqIGRlbGltcywgY2hhciogKm5l d1N0cik7CgoKICBzdGF0aWMgUFJVaW50MzIgc3RybGVuKGNvbnN0IFBSVW5pY2hhciogcyk7CgoK ICBzdGF0aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJVbmlj aGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgUFJVbmljaGFyKiBzMSwg Y29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFN YXhMZW4pOwoKCiAgc3RhdGljIFBSSW50MzIgc3RyY2FzZWNtcChjb25zdCBQUlVuaWNoYXIqIHMx LCBjb25zdCBQUlVuaWNoYXIqIHMyKTsKCiAgc3RhdGljIFBSSW50MzIgc3RybmNhc2VjbXAoY29u c3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgogIHN0YXRpYyBQUkludDMyIHN0cmNtcChj b25zdCBQUlVuaWNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMyIHN0 cm5jbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgY2hhciogczIsCiAgICAgICAgICAgICAg ICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgogIHN0YXRpYyBQUkludDMyIHN0cmNhc2Vj bXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgY2hhciogczIpOwoKICBzdGF0aWMgUFJJbnQz MiBzdHJuY2FzZWNtcChjb25zdCBQUlVuaWNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgoKICBzdGF0aWMgUFJV bmljaGFyKiBzdHJkdXAoY29uc3QgUFJVbmljaGFyKiBzdHIpOwoKICBzdGF0aWMgUFJVbmljaGFy KiBzdHJuZHVwKGNvbnN0IFBSVW5pY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pOwoKICBzdGF0aWMg dm9pZCBmcmVlKFBSVW5pY2hhciogc3RyKSB7CiAgICAgICAgbnNDcHBTaGFyZWRBbGxvY2F0b3I8 UFJVbmljaGFyPiBzaGFyZWRfYWxsb2NhdG9yOwogICAgICAgIHNoYXJlZF9hbGxvY2F0b3IuZGVh bGxvY2F0ZShzdHIsIDAgKTsKICB9CgoKICBzdGF0aWMgUFJVaW50MzIgSGFzaENvZGUoY29uc3Qg Y2hhciogc3RyLCBQUlVpbnQzMiogcmVzdWx0aW5nU3RyTGVuID0gMCk7CgoKICBzdGF0aWMgUFJV aW50MzIgSGFzaENvZGUoY29uc3QgUFJVbmljaGFyKiBzdHIsIFBSVWludDMyKiByZXN1bHRpbmdT dHJMZW4gPSAwKTsKCgogIHN0YXRpYyBQUlVpbnQzMiBCdWZmZXJIYXNoQ29kZShjb25zdCBjaGFy KiBzdHIsIFBSVWludDMyIHN0ckxlbik7CgoKICBzdGF0aWMgUFJJbnQzMiBhdG9pKCBjb25zdCBQ UlVuaWNoYXIgKnN0cmluZyApOwoKICBzdGF0aWMgUFJVbmljaGFyIFRvVXBwZXIoUFJVbmljaGFy IGFDaGFyKTsKCiAgc3RhdGljIFBSVW5pY2hhciBUb0xvd2VyKFBSVW5pY2hhciBhQ2hhcik7Cgog IHN0YXRpYyBQUkJvb2wgSXNVcHBlcihQUlVuaWNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29s IElzTG93ZXIoUFJVbmljaGFyIGFDaGFyKTsKCiAgc3RhdGljIGNoYXIgVG9VcHBlcihjaGFyIGFD aGFyKTsKCiAgc3RhdGljIGNoYXIgVG9Mb3dlcihjaGFyIGFDaGFyKTsKCiAgc3RhdGljIFBSQm9v bCBJc1VwcGVyKGNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29sIElzTG93ZXIoY2hhciBhQ2hh cik7CgogIHN0YXRpYyBQUkJvb2wgSXNBc2NpaShQUlVuaWNoYXIgYUNoYXIpOwogIHN0YXRpYyBQ UkJvb2wgSXNBc2NpaShQUlVuaWNoYXIqIGFTdHJpbmcpOwogIHN0YXRpYyBQUkJvb2wgSXNBc2Np aUFscGhhKFBSVW5pY2hhciBhQ2hhcik7CiAgc3RhdGljIFBSQm9vbCBJc0FzY2lpRGlnaXQoUFJV bmljaGFyIGFDaGFyKTsKICBzdGF0aWMgUFJCb29sIElzQXNjaWlTcGFjZShQUlVuaWNoYXIgYUNo YXIpOwp9OwojIDU0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDIKIyA2 MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgpjbGFzcyBuc0lTaXplT2ZI YW5kbGVyOwoKCgoKCmNsYXNzIG5zU3Vic3VtZVN0cjsKCmNsYXNzIG5zU3RyaW5nIDoKICBwdWJs aWMgbnNBRmxhdFN0cmluZywKICBwdWJsaWMgbnNTdHIgewoKcHJvdGVjdGVkOgogIHZpcnR1YWwg Y29uc3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNv bnN0OwogIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1Jl YWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp IGNvbnN0OwogIHZpcnR1YWwgUFJVbmljaGFyKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRh YmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApOwoK cHVibGljOgogIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBnZXQoKSBjb25zdCB7IHJldHVybiBH ZXRVbmljb2RlKCk7IH0KCnB1YmxpYzoKCgoKICBuc1N0cmluZygpOwoKCgoKCiAgbnNTdHJpbmco Y29uc3QgbnNTdHJpbmcmIGFTdHJpbmcpOwoKICBleHBsaWNpdCBuc1N0cmluZyhjb25zdCBuc0FT dHJpbmcmKTsKCiAgZXhwbGljaXQgbnNTdHJpbmcoY29uc3QgUFJVbmljaGFyKik7CiAgbnNTdHJp bmcoY29uc3QgUFJVbmljaGFyKiwgUFJJbnQzMik7CiMgMTA4ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNTdHJpbmcyLmgiCiAgZXhwbGljaXQgbnNTdHJpbmcobnNTdWJzdW1lU3RyJiBhU3Vi c3VtZVN0cik7CgoKCgoKCiAgdmlydHVhbCB+bnNTdHJpbmcoKTsKCgoKCgogIHZpcnR1YWwgUFJV aW50MzIgTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbUxlbmd0aDsgfQoKCgoKCiAgdmlydHVhbCB2 b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQp IGNvbnN0OwoKCgoKCgoKICB2b2lkIFNldExlbmd0aChQUlVpbnQzMiBhTGVuZ3RoKTsKCgoKCgoK ICB2b2lkIFNldENhcGFjaXR5KFBSVWludDMyIGFMZW5ndGgpOwojIDE1MSAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSQm9vbCBJc1VuaWNvZGUodm9pZCkgY29uc3Qg ewogICAgUFJCb29sIHJlc3VsdD1QUkJvb2wobUNoYXJTaXplPT1lVHdvQnl0ZSk7CiAgICByZXR1 cm4gcmVzdWx0OwogIH0KIyAxNjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIu aCIKICBjb25zdCBjaGFyKiBHZXRCdWZmZXIodm9pZCkgY29uc3Q7CiAgY29uc3QgUFJVbmljaGFy KiBHZXRVbmljb2RlKHZvaWQpIGNvbnN0OwoKCgoKICBQUkJvb2wgU2V0Q2hhckF0KFBSVW5pY2hh ciBhQ2hhcixQUlVpbnQzMiBhbkluZGV4KTsKIyAxODIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc1N0cmluZzIuaCIKICB2b2lkIFRvTG93ZXJDYXNlKCk7CiMgMTkxICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgdm9pZCBUb0xvd2VyQ2FzZShuc1N0cmluZyYgYVN0 cmluZykgY29uc3Q7CgoKCgoKICB2b2lkIFRvVXBwZXJDYXNlKCk7CgoKCgoKCgogIHZvaWQgVG9V cHBlckNhc2UobnNTdHJpbmcmIGFTdHJpbmcpIGNvbnN0OwojIDIxNSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQgU3RyaXBDaGFycyggY29uc3QgY2hhciogYVNl dCApOwogIHZvaWQgU3RyaXBDaGFyKCBQUlVuaWNoYXIgYUNoYXIsIFBSSW50MzIgYW5PZmZzZXQ9 MCApOwogIHZvaWQgU3RyaXBDaGFyKCBjaGFyIGFDaGFyLCBQUkludDMyIGFuT2Zmc2V0PTAgKSB7 IFN0cmlwQ2hhcigoUFJVbmljaGFyKSAodW5zaWduZWQgY2hhcilhQ2hhcixhbk9mZnNldCk7IH0K ICB2b2lkIFN0cmlwQ2hhciggUFJJbnQzMiBhbkludCwgUFJJbnQzMiBhbk9mZnNldD0wICkgeyBT dHJpcENoYXIoKFBSVW5pY2hhcilhbkludCxhbk9mZnNldCk7IH0KCgoKCgoKICB2b2lkIFN0cmlw V2hpdGVzcGFjZSgpOwoKCgoKCgogIHZvaWQgUmVwbGFjZUNoYXIoIFBSVW5pY2hhciBhbk9sZENo YXIsIFBSVW5pY2hhciBhTmV3Q2hhciApOwogIHZvaWQgUmVwbGFjZUNoYXIoIGNvbnN0IGNoYXIq IGFTZXQsIFBSVW5pY2hhciBhTmV3Q2hhciApOwoKICB2b2lkIFJlcGxhY2VTdWJzdHJpbmcoIGNv bnN0IG5zU3RyaW5nJiBhVGFyZ2V0LCBjb25zdCBuc1N0cmluZyYgYU5ld1ZhbHVlICk7CiAgdm9p ZCBSZXBsYWNlU3Vic3RyaW5nKCBjb25zdCBQUlVuaWNoYXIqIGFUYXJnZXQsIGNvbnN0IFBSVW5p Y2hhciogYU5ld1ZhbHVlICk7CiMgMjQ5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJp bmcyLmgiCiAgdm9pZCBUcmltKGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5hdGVMZWFk aW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xLFBSQm9vbCBhSWdub3JlUXVvdGVzPTAp OwojIDI2MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQgQ29t cHJlc3NTZXQoY29uc3QgY2hhciogYVNldCwgUFJVbmljaGFyIGFDaGFyLFBSQm9vbCBhRWxpbWlu YXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9MSk7CiMgMjcxICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgdm9pZCBDb21wcmVzc1doaXRlc3BhY2Uo IFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9MSk7 CiMgMjgxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgbnNTdHJpbmcq IFRvTmV3U3RyaW5nKCkgY29uc3Q7CgoKCgoKCgogIGNoYXIqIFRvTmV3Q1N0cmluZygpIGNvbnN0 OwoKCgoKCgoKICBjaGFyKiBUb05ld1VURjhTdHJpbmcoKSBjb25zdDsKCgoKCgoKCiAgUFJVbmlj aGFyKiBUb05ld1VuaWNvZGUoKSBjb25zdDsKIyAzMTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc1N0cmluZzIuaCIKICBjaGFyKiBUb0NTdHJpbmcoY2hhciogYUJ1ZixQUlVpbnQzMiBhQnVm TGVuZ3RoLFBSVWludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwoKCgoKCgogIGZsb2F0IFRvRmxvYXQo UFJJbnQzMiogYUVycm9yQ29kZSkgY29uc3Q7CgoKCgoKCgogIFBSSW50MzIgVG9JbnRlZ2VyKFBS SW50MzIqIGFFcnJvckNvZGUsUFJVaW50MzIgYVJhZGl4PSgxMCkpIGNvbnN0OwojIDM0NSAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIG5zU3RyaW5nJiBvcGVyYXRvcj0o IGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAqdGhp czsgfQogIG5zU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQVN0cmluZyYgYVJlYWRhYmxlICkg eyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogIG5zU3RyaW5nJiBvcGVyYXRv cj0oIGNvbnN0IFBSVW5pY2hhciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7 IH0KICBuc1N0cmluZyYgb3BlcmF0b3I9KCBQUlVuaWNoYXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hh cik7IHJldHVybiAqdGhpczsgfQoKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKGNoYXIpOwog IHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciopOwogIHZvaWQgQXNzaWduV2l0 aENvbnZlcnNpb24oY29uc3QgY2hhciosIFBSSW50MzIpOwojIDM2NCAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQgQXBwZW5kSW50KFBSSW50MzIsIFBSSW50MzI9 MTApOwogIHZvaWQgQXBwZW5kRmxvYXQoZG91YmxlKTsKICB2b2lkIEFwcGVuZFdpdGhDb252ZXJz aW9uKGNvbnN0IGNoYXIqLCBQUkludDMyPS0xKTsKICB2b2lkIEFwcGVuZFdpdGhDb252ZXJzaW9u KGNoYXIpOwoKICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnQoIFBSVW5pY2hhciAp OwoKCgogIHZvaWQgSW5zZXJ0V2l0aENvbnZlcnNpb24oY29uc3QgY2hhciosIFBSVWludDMyLCBQ UkludDMyPS0xKTsKIyAzODkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIK ICBQUkludDMyIEZpbmQoY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNl PTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMy IEZpbmQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBh bk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMyIEZpbmQoY29uc3Qg Y2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJ bnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgRmluZChjb25zdCBQUlVuaWNoYXIqIGFT dHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNv dW50PS0xKSBjb25zdDsKIyA0MDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIu aCIKICBQUkludDMyIEZpbmRDaGFyKFBSVW5pY2hhciBhQ2hhcixQUkJvb2wgYUlnbm9yZUNhc2U9 MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDQxNCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgRmluZENoYXJJblNl dChjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiAgUFJJbnQz MiBGaW5kQ2hhckluU2V0KGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0 PTApIGNvbnN0OwogIFBSSW50MzIgRmluZENoYXJJblNldChjb25zdCBuc1N0ciYgYVN0cmluZyxQ UkludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwojIDQyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zU3RyaW5nMi5oIgogIFBSSW50MzIgUkZpbmQoY29uc3QgY2hhciogYUNTdHJpbmcsUFJCb29s IGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29u c3Q7CiAgUFJJbnQzMiBSRmluZChjb25zdCBuc1N0cmluZyYgYVN0cmluZyxQUkJvb2wgYUlnbm9y ZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQ UkludDMyIFJGaW5kKGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBS SW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgUkZp bmQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIg YW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDQ0MyAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgUkZpbmRDaGFyKFBSVW5pY2hhciBh Q2hhcixQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNv dW50PS0xKSBjb25zdDsKIyA0NTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIu aCIKICBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBh bk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBQUlVuaWNo YXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZENo YXJJblNldChjb25zdCBuc1N0ciYgYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBjb25zdDsK IyA0NzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICBQUkludDMyIENv bXBhcmVXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2Fz ZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMyIENvbXBhcmVXaXRoQ29udmVy c2lvbihjb25zdCBuc1N0cmluZyYgYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMy IGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBDb21wYXJlV2l0aENvbnZlcnNpb24oY29uc3Qg UFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0x KSBjb25zdDsKCiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IG5zU3RyaW5nICZh U3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQ UkJvb2wgRXF1YWxzV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUln bm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJCb29sIEVxdWFsc1dpdGhD b252ZXJzaW9uKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQ UkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJCb29sIEVxdWFsc0F0b20oIG5zSUF0b20qIGFu QXRvbSxQUkJvb2wgYUlnbm9yZUNhc2UpIGNvbnN0OwoKICBQUkJvb2wgRXF1YWxzSWdub3JlQ2Fz ZShjb25zdCBuc1N0cmluZyYgYVN0cmluZykgY29uc3Q7CiAgUFJCb29sIEVxdWFsc0lnbm9yZUNh c2UoY29uc3QgY2hhciogYVN0cmluZyxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJCb29s IEVxdWFsc0lnbm9yZUNhc2UoIG5zSUF0b20gKmFBdG9tKSBjb25zdDsKIyA0OTAgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICBQUkJvb2wgSXNBU0NJSShjb25zdCBQUlVu aWNoYXIqIGFCdWZmZXI9MCk7CgogIHZvaWQgRGVidWdEdW1wKHZvaWQpIGNvbnN0OwoKCgoKCgoK ICBzdGF0aWMgUFJCb29sIElzU3BhY2UoUFJVbmljaGFyIGNoKTsKCgoKCgoKCiAgc3RhdGljIFBS Qm9vbCBJc0FscGhhKFBSVW5pY2hhciBjaCk7CgoKCgoKCgogIHN0YXRpYyBQUkJvb2wgSXNEaWdp dChQUlVuaWNoYXIgY2gpOwoKcHJpdmF0ZToKCgogIHZvaWQgb3BlcmF0b3I9KCBjaGFyICk7CiAg dm9pZCBBc3NpZ25XaXRoQ29udmVyc2lvbiggUFJVbmljaGFyICk7CiAgdm9pZCBBc3NpZ25XaXRo Q29udmVyc2lvbiggY29uc3QgUFJVbmljaGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQgQXBwZW5k V2l0aENvbnZlcnNpb24oIFBSVW5pY2hhciApOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24o IGNvbnN0IFBSVW5pY2hhciosIFBSSW50MzI9LTEgKTsKICB2b2lkIEluc2VydFdpdGhDb252ZXJz aW9uKCBjb25zdCBQUlVuaWNoYXIqLCBQUlVpbnQzMiwgUFJJbnQzMj0tMSApOwp9OwoKCgoKZXh0 ZXJuIGludCBmcHV0cyhjb25zdCBuc1N0cmluZyYgYVN0cmluZywgRklMRSogb3V0KTsKIyA1NDIg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKY2xhc3MgbnNBdXRvU3RyaW5n IDogcHVibGljIG5zU3RyaW5nIHsKcHVibGljOgoKICAgIHZpcnR1YWwgfm5zQXV0b1N0cmluZygp OwogICAgbnNBdXRvU3RyaW5nKCk7CiAgICBuc0F1dG9TdHJpbmcoY29uc3QgbnNBdXRvU3RyaW5n JiBhU3RyaW5nKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhjb25zdCBuc0FTdHJpbmcmIGFT dHJpbmcpOwogICAgZXhwbGljaXQgbnNBdXRvU3RyaW5nKGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5n KTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcpOwog ICAgbnNBdXRvU3RyaW5nKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkludDMyIGFMZW5ndGgp OwogICAgZXhwbGljaXQgbnNBdXRvU3RyaW5nKFBSVW5pY2hhciBhQ2hhcik7CiAgICBleHBsaWNp dCBuc0F1dG9TdHJpbmcoY29uc3QgQ0J1ZkRlc2NyaXB0b3ImIGFCdWZmZXIpOwoKCgoKICAgIGV4 cGxpY2l0IG5zQXV0b1N0cmluZyhuc1N1YnN1bWVTdHImIGFTdWJzdW1lU3RyKTsKCgoKICAgIG5z QXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0F1dG9TdHJpbmcmIGFTdHJpbmcgKSB7IEFz c2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgcHJpdmF0ZToKICAgIHZvaWQgb3BlcmF0 b3I9KCBjaGFyICk7CiAgcHVibGljOgogICAgbnNBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0 IG5zQVN0cmluZyYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlz OyB9CgogICAgbnNBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IFBSVW5pY2hhciogYVB0ciAp IHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICAgIG5zQXV0b1N0cmluZyYgb3BlcmF0 b3I9KCBQUlVuaWNoYXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQoK CgoKCiAgICB2aXJ0dWFsIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5kbGVyLCBQ UlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7CgogICAgY2hhciBtQnVmZmVyW2tEZWZhdWx0U3RyaW5n U2l6ZTw8ZVR3b0J5dGVdOwp9OwoKCgpjbGFzcyBOU19Db252ZXJ0QVNDSUl0b1VDUzIKICAgICAg OiBwdWJsaWMgbnNBdXRvU3RyaW5nCgoKCiAgewogICAgcHVibGljOgogICAgICBleHBsaWNpdCBO U19Db252ZXJ0QVNDSUl0b1VDUzIoIGNvbnN0IGNoYXIqICk7CiAgICAgIE5TX0NvbnZlcnRBU0NJ SXRvVUNTMiggY29uc3QgY2hhciosIFBSVWludDMyICk7CiAgICAgIGV4cGxpY2l0IE5TX0NvbnZl cnRBU0NJSXRvVUNTMiggY2hhciApOwojIDYwMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z U3RyaW5nMi5oIgogICAgcHJpdmF0ZToKCiAgICAgIE5TX0NvbnZlcnRBU0NJSXRvVUNTMiggUFJV bmljaGFyICk7CiAgfTsKCmNsYXNzIE5TX0NvbnZlcnRVVEY4dG9VQ1MyCiAgICAgIDogcHVibGlj IG5zQXV0b1N0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgTlNfQ29u dmVydFVURjh0b1VDUzIoIGNvbnN0IGNoYXIqIGFDU3RyaW5nICkKICAgICAgICB7CiAgICAgICAg ICBJbml0KCBhQ1N0cmluZywgflBSVWludDMyKDApICk7CiAgICAgICAgfQoKICAgICAgTlNfQ29u dmVydFVURjh0b1VDUzIoIGNvbnN0IGNoYXIqIGFDU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoICkK ICAgICAgICB7CiAgICAgICAgICBJbml0KCBhQ1N0cmluZywgYUxlbmd0aCApOwogICAgICAgIH0K CiAgICAgIGV4cGxpY2l0CiAgICAgIE5TX0NvbnZlcnRVVEY4dG9VQ1MyKCBjaGFyIGFDaGFyICkK ICAgICAgICB7CiAgICAgICAgICBJbml0KCAmYUNoYXIsIDEgKTsKICAgICAgICB9CgogICAgcHJv dGVjdGVkOgogICAgICB2b2lkIEluaXQoIGNvbnN0IGNoYXIqIGFDU3RyaW5nLCBQUlVpbnQzMiBh TGVuZ3RoICk7CgogICAgcHJpdmF0ZToKICAgICAgTlNfQ29udmVydFVURjh0b1VDUzIoIFBSVW5p Y2hhciApOwogIH07CiMgNjQ2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgi CmNsYXNzIG5zU3Vic3VtZVN0ciA6IHB1YmxpYyBuc1N0cmluZyB7CnB1YmxpYzoKICBuc1N1YnN1 bWVTdHIoKTsKICBleHBsaWNpdCBuc1N1YnN1bWVTdHIobnNTdHImIGFTdHJpbmcpOwogIG5zU3Vi c3VtZVN0cihQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFzc3VtZU93bmVyc2hpcCxQUkludDMy IGFMZW5ndGg9LTEpOwogIG5zU3Vic3VtZVN0cihjaGFyKiBhU3RyaW5nLFBSQm9vbCBhc3N1bWVP d25lcnNoaXAsUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBpbnQgU3Vic3VtZShQUlVuaWNoYXIqIGFT dHJpbmcsUFJCb29sIGFzc3VtZU93bmVyc2hpcCxQUkludDMyIGFMZW5ndGg9LTEpOwoKICBuc1N1 YnN1bWVTdHImIG9wZXJhdG9yPSggY29uc3QgbnNTdWJzdW1lU3RyJiBhUmVhZGFibGUgKSB7IEFz c2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICBuc1N1YnN1bWVTdHImIG9wZXJhdG9y PSggY29uc3QgbnNBU3RyaW5nJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1 cm4gKnRoaXM7IH0KCiAgbnNTdWJzdW1lU3RyJiBvcGVyYXRvcj0oIGNvbnN0IFBSVW5pY2hhciog YVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICBuc1N1YnN1bWVTdHImIG9w ZXJhdG9yPSggUFJVbmljaGFyIGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7 IH0KcHJpdmF0ZToKICB2b2lkIG9wZXJhdG9yPSggY2hhciApOwp9OwojIDQ3ICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyA0OCAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNjb3JlLmgiIDEKIyA0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIK IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl L3N0ZGlvLmgiIDEgMwojIDUwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIg MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAxCiMgNTEgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSUF0b20uaCIgMQojIDUyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcu aCIgMgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiIDEKIyA1NCAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKIyA2MiAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z QVdyaXRhYmxlU3RyaW5nLmgiIDEKIyA2MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry aW5nLmgiIDIKCgoKY2xhc3MgbnNTdWJzdW1lQ1N0cjsKCmNsYXNzIG5zQ1N0cmluZyA6CiAgcHVi bGljIG5zQUZsYXRDU3RyaW5nLAogIHB1YmxpYyBuc1N0ciB7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVh bCBjb25zdCBuc0J1ZmZlckhhbmRsZTxjaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0 OwogIHZpcnR1YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZy YWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgdmly dHVhbCBjaGFyKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8Y2hhcj4m LCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKTsKCnB1YmxpYzoKICB2aXJ0dWFsIGNvbnN0 IGNoYXIqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1TdHI7IH0KCnB1YmxpYzoKCgoKICBuc0NTdHJp bmcoKTsKCgoKCgogIG5zQ1N0cmluZyhjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcpOwoKICBleHBs aWNpdCBuc0NTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmICk7CgogIGV4cGxpY2l0IG5zQ1N0cmlu Zyhjb25zdCBjaGFyKik7CiAgbnNDU3RyaW5nKGNvbnN0IGNoYXIqLCBQUkludDMyKTsKCgoKCgog IGV4cGxpY2l0IG5zQ1N0cmluZyhuc1N1YnN1bWVDU3RyJiBhU3Vic3VtZVN0cik7CgoKCgoKICB2 aXJ0dWFsIH5uc0NTdHJpbmcoKTsKCgoKCgogIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29u c3QgeyByZXR1cm4gbUxlbmd0aDsgfQoKCgoKCiAgdmlydHVhbCB2b2lkIFNpemVPZihuc0lTaXpl T2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwojIDEyOCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBTZXRMZW5ndGgoUFJVaW50 MzIgYUxlbmd0aCk7CgoKCgoKCiAgdm9pZCBTZXRDYXBhY2l0eShQUlVpbnQzMiBhTGVuZ3RoKTsK CgoKCgogIFBSQm9vbCBTZXRDaGFyQXQoUFJVbmljaGFyIGFDaGFyLFBSVWludDMyIGFuSW5kZXgp OwojIDE1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBUb0xv d2VyQ2FzZSgpOwojIDE2MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAg dm9pZCBUb0xvd2VyQ2FzZShuc0NTdHJpbmcmIGFTdHJpbmcpIGNvbnN0OwoKCgoKCiAgdm9pZCBU b1VwcGVyQ2FzZSgpOwoKCgoKCgoKICB2b2lkIFRvVXBwZXJDYXNlKG5zQ1N0cmluZyYgYVN0cmlu ZykgY29uc3Q7CiMgMTg0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2 b2lkIFN0cmlwQ2hhcnMoY29uc3QgY2hhciogYVNldCk7CiAgdm9pZCBTdHJpcENoYXIoUFJVbmlj aGFyIGFDaGFyLFBSSW50MzIgYW5PZmZzZXQ9MCk7CiAgdm9pZCBTdHJpcENoYXIoY2hhciBhQ2hh cixQUkludDMyIGFuT2Zmc2V0PTApIHsgU3RyaXBDaGFyKChQUlVuaWNoYXIpICh1bnNpZ25lZCBj aGFyKWFDaGFyLGFuT2Zmc2V0KTsgfQoKCgoKCgogIHZvaWQgU3RyaXBXaGl0ZXNwYWNlKCk7CgoK CgoKCiAgdm9pZCBSZXBsYWNlQ2hhcihQUlVuaWNoYXIgYU9sZENoYXIsUFJVbmljaGFyIGFOZXdD aGFyKTsKICB2b2lkIFJlcGxhY2VDaGFyKGNvbnN0IGNoYXIqIGFTZXQsUFJVbmljaGFyIGFOZXdD aGFyKTsKCiAgdm9pZCBSZXBsYWNlU3Vic3RyaW5nKGNvbnN0IG5zQ1N0cmluZyYgYVRhcmdldCxj b25zdCBuc0NTdHJpbmcmIGFOZXdWYWx1ZSk7CiAgdm9pZCBSZXBsYWNlU3Vic3RyaW5nKGNvbnN0 IGNoYXIqIGFUYXJnZXQsY29uc3QgY2hhciogYU5ld1ZhbHVlKTsKIyAyMTcgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIHZvaWQgVHJpbShjb25zdCBjaGFyKiBhU2V0LFBS Qm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9MSxQUkJv b2wgYUlnbm9yZVF1b3Rlcz0wKTsKIyAyMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0 cmluZy5oIgogIHZvaWQgQ29tcHJlc3NTZXQoY29uc3QgY2hhciogYVNldCwgUFJVbmljaGFyIGFD aGFyLFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9 MSk7CiMgMjM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2b2lkIENv bXByZXNzV2hpdGVzcGFjZSggUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJCb29sIGFFbGlt aW5hdGVUcmFpbGluZz0xKTsKCgoKCgogIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3Qge3Jl dHVybiAoY29uc3QgY2hhciopbVN0cjt9CgoKCgoKCgogIG5zQ1N0cmluZyogVG9OZXdTdHJpbmco KSBjb25zdDsKCgoKCgoKCiAgY2hhciogVG9OZXdDU3RyaW5nKCkgY29uc3Q7CgoKCgoKCgogIFBS VW5pY2hhciogVG9OZXdVbmljb2RlKCkgY29uc3Q7CiMgMjc4ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNTdHJpbmcuaCIKICBjaGFyKiBUb0NTdHJpbmcoY2hhciogYUJ1ZixQUlVpbnQzMiBh QnVmTGVuZ3RoLFBSVWludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwoKCgoKCgogIGZsb2F0IFRvRmxv YXQoUFJJbnQzMiogYUVycm9yQ29kZSkgY29uc3Q7CiMgMjk0ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIFRvSW50ZWdlcihQUkludDMyKiBhRXJyb3JDb2Rl LFBSVWludDMyIGFSYWRpeD0oMTApKSBjb25zdDsKIyAzMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc1N0cmluZy5oIgogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0NTdHJpbmcm IGFTdHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgbnNDU3RyaW5n JiBvcGVyYXRvcj0oIGNvbnN0IG5zQUNTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFk YWJsZSk7IHJldHVybiAqdGhpczsgfQoKICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgY2hh ciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICBuc0NTdHJpbmcmIG9w ZXJhdG9yPSggY2hhciBhQ2hhciApIHsgQXNzaWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9Cgog IHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oY29uc3QgUFJVbmljaGFyKixQUkludDMyPS0xKTsK ICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBjb25zdCBuc1N0cmluZyYgYVN0cmluZyApOwog IHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwog IHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oUFJVbmljaGFyKTsKIyAzMzEgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY29u c3QgbnNTdHJpbmcmLCBQUkludDMyPS0xKTsKICB2b2lkIEFwcGVuZFdpdGhDb252ZXJzaW9uKFBS VW5pY2hhciBhQ2hhcik7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbiggY29uc3QgbnNBU3Ry aW5nJiBhU3RyaW5nICk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNo YXIqLCBQUkludDMyPS0xKTsKCiAgdm9pZCBBcHBlbmRJbnQoUFJJbnQzMiBhSW50ZWdlcixQUklu dDMyIGFSYWRpeD0xMCk7CiAgdm9pZCBBcHBlbmRGbG9hdCggZG91YmxlIGFGbG9hdCApOwoKCiAg dm9pZCBJbnNlcnRXaXRoQ29udmVyc2lvbihQUlVuaWNoYXIgYUNoYXIsUFJVaW50MzIgYW5PZmZz ZXQpOwojIDM2MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgUFJJbnQz MiBGaW5kKGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIg YW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kKGNvbnN0 IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBS SW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMyIEZpbmQoY29uc3QgUFJVbmljaGFyKiBh U3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFD b3VudD0tMSkgY29uc3Q7CiMgMzc2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcu aCIKICBQUkludDMyIEZpbmRDaGFyKFBSVW5pY2hhciBhQ2hhcixQUkJvb2wgYUlnbm9yZUNhc2U9 MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDM4NSAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0 KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKICBQUkludDMy IEZpbmRDaGFySW5TZXQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9 MCkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBS SW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiMgMzk3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNTdHJpbmcuaCIKICBQUkludDMyIFJGaW5kKGNvbnN0IGNoYXIqIGFDU3RyaW5nLFBSQm9vbCBh SWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0 OwogIFBSSW50MzIgUkZpbmQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNl PTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQz MiBSRmluZChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJ bnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgNDEwICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIFJGaW5kQ2hhcihQUlVuaWNo YXIgYUNoYXIsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMy IGFDb3VudD0tMSkgY29uc3Q7CiMgNDE5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJp bmcuaCIKICBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQz MiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBQUlVu aWNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmlu ZENoYXJJblNldChjb25zdCBuc1N0ciYgYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBjb25z dDsKIyA0MzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIFBSSW50MzIg Q29tcGFyZVdpdGhDb252ZXJzaW9uKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUln bm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBDb21wYXJlV2l0 aENvbnZlcnNpb24oY29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUklu dDMyIGFDb3VudD0tMSkgY29uc3Q7CgogIFBSQm9vbCBFcXVhbHNXaXRoQ29udmVyc2lvbihjb25z dCBuc1N0cmluZyAmYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0t MSkgY29uc3Q7CiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqIGFTdHJp bmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSQm9v bCBFcXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJ Z25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwoKICBQUkJvb2wgRXF1YWxzSWdu b3JlQ2FzZShjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQ UkJvb2wgRXF1YWxzSWdub3JlQ2FzZShjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQzMiBh Q291bnQ9LTEpIGNvbnN0OwoKCiAgdm9pZCBEZWJ1Z0R1bXAodm9pZCkgY29uc3Q7Cgpwcml2YXRl OgoKCiAgdm9pZCBvcGVyYXRvcj0oIFBSVW5pY2hhciApOwogIHZvaWQgQXNzaWduV2l0aENvbnZl cnNpb24oIGNoYXIgKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBjb25zdCBjaGFyKiwg UFJJbnQzMj0tMSApOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oIGNoYXIgKTsKICB2b2lk IEluc2VydFdpdGhDb252ZXJzaW9uKCBjaGFyLCBQUlVpbnQzMiApOwp9OwoKCgoKZXh0ZXJuIGlu dCBmcHV0cyhjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcsIEZJTEUqIG91dCk7CiMgNDc0ICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKY2xhc3MgbnNDQXV0b1N0cmluZyA6IHB1 YmxpYyBuc0NTdHJpbmcgewpwdWJsaWM6CgogICAgdmlydHVhbCB+bnNDQXV0b1N0cmluZygpOwoK ICAgIG5zQ0F1dG9TdHJpbmcoKTsKICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgbnND U3RyaW5nJiApOwogICAgZXhwbGljaXQgbnNDQXV0b1N0cmluZyhjb25zdCBuc0FDU3RyaW5nJiBh U3RyaW5nKTsKICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgY2hhciogYVN0cmluZyk7 CiAgICBuc0NBdXRvU3RyaW5nKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhTGVuZ3RoKTsK ICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgQ0J1ZkRlc2NyaXB0b3ImIGFCdWZmZXIp OwoKCgoKICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcobnNTdWJzdW1lQ1N0ciYgYVN1YnN1bWVT dHIpOwoKCgogICAgbnNDQXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0NBdXRvU3RyaW5n JiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAqdGhpczsgfQogIHByaXZhdGU6 CiAgICB2b2lkIG9wZXJhdG9yPSggUFJVbmljaGFyICk7CiAgcHVibGljOgogICAgbnNDQXV0b1N0 cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0FDU3RyaW5nJiBhUmVhZGFibGUgKSB7IEFzc2lnbihh UmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgICBuc0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0o IGNvbnN0IGNoYXIqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgICBu c0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNoYXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hhcik7IHJl dHVybiAqdGhpczsgfQoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRs ZXIqIGFIYW5kbGVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7CgogICAgY2hhciBtQnVmZmVy W2tEZWZhdWx0U3RyaW5nU2l6ZV07Cn07CgoKCgoKCmNsYXNzIE5TX0NvbnZlcnRVQ1MydG9VVEY4 CiAgICAgIDogcHVibGljIG5zQ0F1dG9TdHJpbmcKCgoKICB7CiAgICBwdWJsaWM6CiAgICAgIGV4 cGxpY2l0CiAgICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJp bmcgKQogICAgICAgIHsKICAgICAgICAgIEFwcGVuZCggYVN0cmluZywgflBSVWludDMyKDApICk7 CiAgICAgICAgfQoKICAgICAgTlNfQ29udmVydFVDUzJ0b1VURjgoIGNvbnN0IFBSVW5pY2hhciog YVN0cmluZywgUFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgQXBwZW5kKCBh U3RyaW5nLCBhTGVuZ3RoICk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgTlNfQ29u dmVydFVDUzJ0b1VURjgoIFBSVW5pY2hhciBhQ2hhciApCiAgICAgICAgewogICAgICAgICAgQXBw ZW5kKCAmYUNoYXIsIDEgKTsKICAgICAgICB9CgogICAgICBleHBsaWNpdCBOU19Db252ZXJ0VUNT MnRvVVRGOCggY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CgogICAgcHJvdGVjdGVkOgogICAg ICB2b2lkIEFwcGVuZCggY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3Ro ICk7CgogICAgcHJpdmF0ZToKCiAgICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjaGFyICk7CiAg ICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3Q7CiAgfTsKIyA1NjUgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgpjbGFzcyBuc1N1YnN1bWVDU3RyIDogcHVibGljIG5z Q1N0cmluZyB7CnB1YmxpYzoKICBleHBsaWNpdCBuc1N1YnN1bWVDU3RyKG5zU3RyJiBhU3RyaW5n KTsKICBuc1N1YnN1bWVDU3RyKFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYXNzdW1lT3duZXJz aGlwLFBSSW50MzIgYUxlbmd0aD0tMSk7CiAgbnNTdWJzdW1lQ1N0cihjaGFyKiBhU3RyaW5nLFBS Qm9vbCBhc3N1bWVPd25lcnNoaXAsUFJJbnQzMiBhTGVuZ3RoPS0xKTsKCiAgbnNTdWJzdW1lQ1N0 ciYgb3BlcmF0b3I9KCBjb25zdCBuc1N1YnN1bWVDU3RyJiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0 cmluZyk7IHJldHVybiAqdGhpczsgfQogIG5zU3Vic3VtZUNTdHImIG9wZXJhdG9yPSggY29uc3Qg bnNBQ1N0cmluZyYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlz OyB9CgogIG5zU3Vic3VtZUNTdHImIG9wZXJhdG9yPSggY29uc3QgY2hhciogYVB0ciApIHsgQXNz aWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICBuc1N1YnN1bWVDU3RyJiBvcGVyYXRvcj0oIGNo YXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQpwcml2YXRlOgogIHZv aWQgb3BlcmF0b3I9KCBQUlVuaWNoYXIgKTsKfTsKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zRm9udC5oIiAyCgoKCgoKdHlwZWRlZiBQUkJvb2wgKCpuc0ZvbnRGYW1pbHlFbnVtRnVu YykoY29uc3QgbnNTdHJpbmcmIGFGYW1pbHksIFBSQm9vbCBhR2VuZXJpYywgdm9pZCAqYURhdGEp OwoKCnN0cnVjdCBuc0ZvbnQgewoKICBuc1N0cmluZyBuYW1lOwoKCiAgUFJVaW50OCBzdHlsZTsK CgogIFBSVWludDggdmFyaWFudDsKCgogIFBSVWludDE2IHdlaWdodDsKCgoKICBQUlVpbnQ4IGRl Y29yYXRpb25zOwoKCiAgbnNjb29yZCBzaXplOwoKCiAgbnNGb250KGNvbnN0IGNoYXIqIGFOYW1l LCBQUlVpbnQ4IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFudCwKICAgICAgICAgUFJVaW50MTYgYVdl aWdodCwgUFJVaW50OCBhRGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6ZSk7CgoKICBuc0ZvbnQoY29u c3QgbnNTdHJpbmcmIGFOYW1lLCBQUlVpbnQ4IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFudCwKICAg ICAgICAgUFJVaW50MTYgYVdlaWdodCwgUFJVaW50OCBhRGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6 ZSk7CgoKICBuc0ZvbnQoY29uc3QgbnNGb250JiBhRm9udCk7CgogIH5uc0ZvbnQoKTsKCiAgUFJC b29sIG9wZXJhdG9yPT0oY29uc3QgbnNGb250JiBhT3RoZXIpIGNvbnN0IHsKICAgIHJldHVybiBF cXVhbHMoYU90aGVyKTsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNGb250JiBhT3RoZXIp IGNvbnN0IDsKCiAgbnNGb250JiBvcGVyYXRvcj0oY29uc3QgbnNGb250JiBhT3RoZXIpOwoKCgoK CiAgUFJCb29sIEVudW1lcmF0ZUZhbWlsaWVzKG5zRm9udEZhbWlseUVudW1GdW5jIGFGdW5jLCB2 b2lkKiBhRGF0YSkgY29uc3Q7CiAgdm9pZCBHZXRGaXJzdEZhbWlseShuc1N0cmluZyYgYUZhbWls eSkgY29uc3Q7Cn07CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJv bEZyYW1lLmgiIDIKY2xhc3MgbnNGb3JtRnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFz cyBuc1N0cmluZzsKY2xhc3MgbnNJQ29udGVudDsKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSUZvcm1Db250cm9sRnJhbWUuaCIKY2xhc3MgbnNJRm9ybUNvbnRyb2xGcmFtZSA6IHB1 YmxpYyBuc0lTdXBwb3J0cyB7CgpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgzOGViMzk4MCwgMHg0ZDk5LCAweDExZDIs IHsgMHg4MCwgMHgzZiwgMHgwLCAweDYwLCAweDgsIDB4MTUsIDB4YTcsIDB4OTEgfSB9OyByZXR1 cm4gaWlkO30KCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUeXBlKFBSSW50MzIqIGFUeXBlKSBjb25z dCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShuc1N0cmluZyogYU5hbWUpID0gMDsK CiAgdmlydHVhbCB2b2lkIFNldEZvY3VzKFBSQm9vbCBhT24gPSAxLCBQUkJvb2wgYVJlcGFpbnQg PSAwKSA9IDA7CgogIHZpcnR1YWwgdm9pZCBTY3JvbGxJbnRvVmlldyhuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0KSA9IDA7CgogIHZpcnR1YWwgdm9pZCBNb3VzZUNsaWNrZWQobnNJUHJlc0Nv bnRleHQqIGFQcmVzQ29udGV4dCkgPSAwOwoKICB2aXJ0dWFsIHZvaWQgUmVzZXQobnNJUHJlc0Nv bnRleHQqIGFQcmVzQ29udGV4dCkgPSAwOwoKICB2aXJ0dWFsIFBSQm9vbCBJc1N1Y2Nlc3NmdWwo bnNJRm9ybUNvbnRyb2xGcmFtZSogYVN1Ym1pdHRlcikgPSAwOwoKICB2aXJ0dWFsIFBSSW50MzIg R2V0TWF4TnVtVmFsdWVzKCkgPSAwOwoKICB2aXJ0dWFsIFBSQm9vbCBHZXROYW1lc1ZhbHVlcyhQ UkludDMyIGFNYXhOdW1WYWx1ZXMsIFBSSW50MzImIGFOdW1WYWx1ZXMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zU3RyaW5nKiBhVmFsdWVzLCBuc1N0cmluZyogYU5hbWVzKSA9 IDA7CgogIHZpcnR1YWwgdm9pZCBTZXRGb3JtRnJhbWUobnNGb3JtRnJhbWUqIGFGcmFtZSkgPSAw OwojIDc5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2xGcmFtZS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgU2V0U3VnZ2VzdGVkU2l6ZShuc2Nvb3JkIGFXaWR0aCwgbnNjb29y ZCBhSGVpZ2h0KSA9IDA7CiMgOTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29u dHJvbEZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXF1aXJlc1dpZGdldChQUkJvb2wgJmFS ZXF1aXJlc1dpZGdldCkgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udChuc0lQcmVz Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0ZvbnQq JiBhRm9udCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybUNvbnRlbnQobnNJ Q29udGVudComIGFDb250ZW50KSBjb25zdCA9IDA7CiMgMTE2ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJRm9ybUNvbnRyb2xGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJvcGVy dHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJQXRvbSogYU5hbWUsIGNvbnN0IG5z QVJlYWRhYmxlU3RyaW5nJiBhVmFsdWUpID0gMDsKIyAxMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lGb3JtQ29udHJvbEZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0 eShuc0lBdG9tKiBhTmFtZSwgbnNBV3JpdGFibGVTdHJpbmcmIGFWYWx1ZSkgPSAwOwoKCgp9Owoj IDI3ICJuc0Zvcm1Db250cm9sSGVscGVyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJRm9ybU1hbmFnZXIuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ Rm9ybU1hbmFnZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMu aCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybU1hbmFnZXIuaCIgMgpj bGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJRnJhbWU7CiMgMzggIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lGb3JtTWFuYWdlci5oIgpjbGFzcyBuc0lGb3JtTWFuYWdlciA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtz dGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDU5MmRhYTAxLCAweGNiMjMsIDB4MTFkMSwgeyAw eDgwLCAweDJkLCAweDAsIDB4NjAsIDB4OCwgMHgxNSwgMHhhNywgMHg5MSB9IH07IHJldHVybiBp aWQ7fQoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9uUmVzZXQobnNJUHJlc0NvbnRleHQqIGFQcmVz Q29udGV4dCkgPSAwOwojIDU0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybU1hbmFn ZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE9uU3VibWl0KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv bnRleHQsIG5zSUZyYW1lKiBhRnJhbWUpID0gMDsKCn07CiMgMjggIm5zRm9ybUNvbnRyb2xIZWxw ZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMg MjkgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lXaWRnZXQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0 LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zQ29sb3IuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNDb2xvci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3 ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb2xvci5oIiAyCgpjbGFzcyBuc1N0cmluZzsK CgoKdHlwZWRlZiBQUlVpbnQzMiBuc2NvbG9yOwojIDcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNDb2xvci5oIgpleHRlcm4gIkMiIFBSQm9vbCBOU19IZXhUb1JHQihjb25zdCBuc1N0cmlu ZyYgYUJ1ZiwgbnNjb2xvciogYVJlc3VsdCk7CgoKCgpleHRlcm4gIkMiIFBSQm9vbCBOU19Mb29z ZUhleFRvUkdCKGNvbnN0IG5zU3RyaW5nJiBhQnVmLCBuc2NvbG9yKiBhUmVzdWx0KTsKCgoKZXh0 ZXJuICJDIiBQUkJvb2wgTlNfQ29sb3JOYW1lVG9SR0IoY29uc3QgbnNTdHJpbmcmIGFCdWYsIG5z Y29sb3IqIGFSZXN1bHQpOwoKCgpleHRlcm4gIkMiIHZvaWQgTlNfR2V0M0RDb2xvcnMobnNjb2xv ciBhUmVzdWx0WzJdLCBuc2NvbG9yIGFDb2xvcik7CgoKZXh0ZXJuICJDIiB2b2lkIE5TX0dldFNw ZWNpYWwzRENvbG9ycyhuc2NvbG9yIGFSZXN1bHRbMl0sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc2NvbG9yIGFCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc2NvbG9yIGFCb3JkZXJDb2xvcik7CgoKCmV4dGVybiAiQyIgbnNjb2xv ciBOU19CcmlnaHRlbkNvbG9yKG5zY29sb3IgaW5Db2xvcik7CgoKCmV4dGVybiAiQyIgbnNjb2xv ciBOU19EYXJrZW5Db2xvcihuc2NvbG9yIGluQ29sb3IpOwoKCmV4dGVybiAiQyIgaW50IE5TX0dl dEJyaWdodG5lc3MoUFJVaW50OCBhUmVkLCBQUlVpbnQ4IGFHcmVlbiwgUFJVaW50OCBhQmx1ZSk7 CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIgMgojIDEgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNb3VzZUxpc3RlbmVyLmgiIDEKIyAyNyAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSU1vdXNlTGlzdGVuZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0dVSUV2ZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUG9pbnQuaCIgMQoj IDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQb2ludC5oIgojIDEgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zUG9pbnQuaCIgMgoKc3RydWN0IG5zUG9pbnQgewogIG5zY29vcmQgeCwgeTsKCgogIG5zUG9p bnQoKSB7fQogIG5zUG9pbnQoY29uc3QgbnNQb2ludCYgYVBvaW50KSB7eCA9IGFQb2ludC54OyB5 ID0gYVBvaW50Lnk7fQogIG5zUG9pbnQobnNjb29yZCBhWCwgbnNjb29yZCBhWSkge3ggPSBhWDsg eSA9IGFZO30KCiAgdm9pZCBNb3ZlVG8obnNjb29yZCBhWCwgbnNjb29yZCBhWSkge3ggPSBhWDsg eSA9IGFZO30KICB2b2lkIE1vdmVCeShuc2Nvb3JkIGFEeCwgbnNjb29yZCBhRHkpIHt4ICs9IGFE eDsgeSArPSBhRHk7fQoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5zUG9pbnQmIGFQb2lu dCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgoeCA9PSBhUG9pbnQueCkgJiYgKHkgPT0g YVBvaW50LnkpKTsKICB9CiAgUFJCb29sIG9wZXJhdG9yIT0oY29uc3QgbnNQb2ludCYgYVBvaW50 KSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh4ICE9IGFQb2ludC54KSB8fCAoeSAhPSBh UG9pbnQueSkpOwogIH0KICBuc1BvaW50IG9wZXJhdG9yKyhjb25zdCBuc1BvaW50JiBhUG9pbnQp IGNvbnN0IHsKICAgIHJldHVybiBuc1BvaW50KHggKyBhUG9pbnQueCwgeSArIGFQb2ludC55KTsK ICB9CiAgbnNQb2ludCBvcGVyYXRvci0oY29uc3QgbnNQb2ludCYgYVBvaW50KSBjb25zdCB7CiAg ICByZXR1cm4gbnNQb2ludCh4IC0gYVBvaW50LngsIHkgLSBhUG9pbnQueSk7CiAgfQogIG5zUG9p bnQmIG9wZXJhdG9yKz0oY29uc3QgbnNQb2ludCYgYVBvaW50KSB7CiAgICB4ICs9IGFQb2ludC54 OwogICAgeSArPSBhUG9pbnQueTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgbnNQb2ludCYgb3Bl cmF0b3ItPShjb25zdCBuc1BvaW50JiBhUG9pbnQpIHsKICAgIHggLT0gYVBvaW50Lng7CiAgICB5 IC09IGFQb2ludC55OwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsKCgoKCgpzdHJ1Y3QgbnNGbG9h dFBvaW50IHsKICBmbG9hdCB4LCB5OwoKCiAgbnNGbG9hdFBvaW50KCkge30KICBuc0Zsb2F0UG9p bnQoY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIHt4ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQu eTt9CiAgbnNGbG9hdFBvaW50KGZsb2F0IGFYLCBmbG9hdCBhWSkge3ggPSBhWDsgeSA9IGFZO30K CiAgdm9pZCBNb3ZlVG8oZmxvYXQgYVgsIGZsb2F0IGFZKSB7eCA9IGFYOyB5ID0gYVk7fQogIHZv aWQgTW92ZVRvKG5zY29vcmQgYVgsIG5zY29vcmQgYVkpIHt4ID0gKGZsb2F0KWFYOyB5ID0gKGZs b2F0KWFZO30KICB2b2lkIE1vdmVCeShmbG9hdCBhRHgsIGZsb2F0IGFEeSkge3ggKz0gYUR4OyB5 ICs9IGFEeTt9CgoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9p bnQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHggPT0gYVBvaW50LngpICYmICh5ID09 IGFQb2ludC55KSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zRmxvYXRQb2ludCYg YVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh4ICE9IGFQb2ludC54KSB8fCAo eSAhPSBhUG9pbnQueSkpOwogIH0KICBuc0Zsb2F0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IG5zRmxv YXRQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gbnNGbG9hdFBvaW50KHggKyBhUG9p bnQueCwgeSArIGFQb2ludC55KTsKICB9CiAgbnNGbG9hdFBvaW50IG9wZXJhdG9yLShjb25zdCBu c0Zsb2F0UG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIG5zRmxvYXRQb2ludCh4IC0g YVBvaW50LngsIHkgLSBhUG9pbnQueSk7CiAgfQogIG5zRmxvYXRQb2ludCYgb3BlcmF0b3IrPShj b25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgewogICAgeCArPSBhUG9pbnQueDsKICAgIHkgKz0g YVBvaW50Lnk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIG5zRmxvYXRQb2ludCYgb3BlcmF0b3It PShjb25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgewogICAgeCAtPSBhUG9pbnQueDsKICAgIHkg LT0gYVBvaW50Lnk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9OwoKCgoKCgpzdHJ1Y3QgbnNQYXRo UG9pbnQ6IHB1YmxpYyBuc0Zsb2F0UG9pbnR7CgogIFBSQm9vbCBtSXNPbkN1cnZlOwoKCiAgbnNQ YXRoUG9pbnQoKSB7fQogIG5zUGF0aFBvaW50KGNvbnN0IG5zUGF0aFBvaW50JiBhUG9pbnQpIHt4 ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQueTttSXNPbkN1cnZlPWFQb2ludC5tSXNPbkN1cnZlO30K ICBuc1BhdGhQb2ludChmbG9hdCBhWCwgZmxvYXQgYVkpIHt4ID0gYVg7IHkgPSBhWTttSXNPbkN1 cnZlPTE7fQogIG5zUGF0aFBvaW50KGZsb2F0IGFYLCBmbG9hdCBhWSxQUkJvb2wgYUlzT25DdXJ2 ZSkge3ggPSBhWDsgeSA9IGFZO21Jc09uQ3VydmU9YUlzT25DdXJ2ZTt9Cgp9OwojIDI3ICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zUmVjdC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Jl Y3QuaCIKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9p bmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNSZWN0 LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjkgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc1BvaW50LmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVj dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU2l6ZS5oIiAxCiMgMjYgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1NpemUuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNDb29yZC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1NpemUu aCIgMgoKCgoKc3RydWN0IG5zU2l6ZSB7CiAgbnNjb29yZCB3aWR0aCwgaGVpZ2h0OwoKCiAgbnNT aXplKCkge30KICBuc1NpemUoY29uc3QgbnNTaXplJiBhU2l6ZSkge3dpZHRoID0gYVNpemUud2lk dGg7IGhlaWdodCA9IGFTaXplLmhlaWdodDt9CiAgbnNTaXplKG5zY29vcmQgYVdpZHRoLCBuc2Nv b3JkIGFIZWlnaHQpIHt3aWR0aCA9IGFXaWR0aDsgaGVpZ2h0ID0gYUhlaWdodDt9CgogIHZvaWQg U2l6ZVRvKG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHt3aWR0aCA9IGFXaWR0aDsg aGVpZ2h0ID0gYUhlaWdodDt9CiAgdm9pZCBTaXplQnkobnNjb29yZCBhRGVsdGFXaWR0aCwgbnNj b29yZCBhRGVsdGFIZWlnaHQpIHt3aWR0aCArPSBhRGVsdGFXaWR0aDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCArPSBhRGVs dGFIZWlnaHQ7fQoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5zU2l6ZSYgYVNpemUpIGNv bnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHdpZHRoID09IGFTaXplLndpZHRoKSAmJiAoaGVp Z2h0ID09IGFTaXplLmhlaWdodCkpOwogIH0KICBQUkJvb2wgb3BlcmF0b3IhPShjb25zdCBuc1Np emUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh3aWR0aCAhPSBhU2l6ZS53 aWR0aCkgfHwgKGhlaWdodCAhPSBhU2l6ZS5oZWlnaHQpKTsKICB9CiAgbnNTaXplIG9wZXJhdG9y Kyhjb25zdCBuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4gbnNTaXplKHdpZHRoICsg YVNpemUud2lkdGgsIGhlaWdodCArIGFTaXplLmhlaWdodCk7CiAgfQogIG5zU2l6ZSBvcGVyYXRv ci0oY29uc3QgbnNTaXplJiBhU2l6ZSkgY29uc3QgewogICAgcmV0dXJuIG5zU2l6ZSh3aWR0aCAt IGFTaXplLndpZHRoLCBoZWlnaHQgLSBhU2l6ZS5oZWlnaHQpOwogIH0KICBuc1NpemUmIG9wZXJh dG9yKz0oY29uc3QgbnNTaXplJiBhU2l6ZSkge3dpZHRoICs9IGFTaXplLndpZHRoOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ICs9IGFTaXplLmhlaWdo dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAqdGhp czt9CiAgbnNTaXplJiBvcGVyYXRvci09KGNvbnN0IG5zU2l6ZSYgYVNpemUpIHt3aWR0aCAtPSBh U2l6ZS53aWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl aWdodCAtPSBhU2l6ZS5oZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gKnRoaXM7fQp9OwojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNSZWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNNYXJnaW4uaCIgMQoj IDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNNYXJnaW4uaCIKIyAxICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc01hcmdpbi5oIiAyCgpzdHJ1Y3QgbnNNYXJnaW4gewogIG5zY29vcmQgbGVmdCwgdG9wLCBy aWdodCwgYm90dG9tOwoKCiAgbnNNYXJnaW4oKSB7fQogIG5zTWFyZ2luKGNvbnN0IG5zTWFyZ2lu JiBhTWFyZ2luKSB7KnRoaXMgPSBhTWFyZ2luO30KICBuc01hcmdpbihuc2Nvb3JkIGFMZWZ0LCBu c2Nvb3JkIGFUb3AsCiAgICAgICAgICAgbnNjb29yZCBhUmlnaHQsIG5zY29vcmQgYUJvdHRvbSkg e2xlZnQgPSBhTGVmdDsgdG9wID0gYVRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmlnaHQgPSBhUmlnaHQ7IGJvdHRvbSA9IGFCb3R0b207fQoKICB2b2lk IFNpemVUbyhuc2Nvb3JkIGFMZWZ0LCBuc2Nvb3JkIGFUb3AsCiAgICAgICAgICAgICAgbnNjb29y ZCBhUmlnaHQsIG5zY29vcmQgYUJvdHRvbSkge2xlZnQgPSBhTGVmdDsgdG9wID0gYVRvcDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBhUmln aHQ7IGJvdHRvbSA9IGFCb3R0b207fQogIHZvaWQgU2l6ZUJ5KG5zY29vcmQgYUxlZnQsIG5zY29v cmQgYVRvcCwKICAgICAgICAgICAgICBuc2Nvb3JkIGFSaWdodCwgbnNjb29yZCBhQm90dG9tKSB7 bGVmdCArPSBhTGVmdDsgdG9wICs9IGFUb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJpZ2h0ICs9IGFSaWdodDsgYm90dG9tICs9IGFCb3R0b207fQoK CgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAg ICByZXR1cm4gKFBSQm9vbCkgKChsZWZ0ID09IGFNYXJnaW4ubGVmdCkgJiYgKHRvcCA9PSBhTWFy Z2luLnRvcCkgJiYKICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0ID09IGFNYXJnaW4ucmlnaHQp ICYmIChib3R0b20gPT0gYU1hcmdpbi5ib3R0b20pKTsKICB9CiAgUFJCb29sIG9wZXJhdG9yIT0o Y29uc3QgbnNNYXJnaW4mIGFNYXJnaW4pIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKGxl ZnQgIT0gYU1hcmdpbi5sZWZ0KSB8fCAodG9wICE9IGFNYXJnaW4udG9wKSB8fAogICAgICAgICAg ICAgICAgICAgICAocmlnaHQgIT0gYU1hcmdpbi5yaWdodCkgfHwgKGJvdHRvbSAhPSBhTWFyZ2lu LmJvdHRvbSkpOwogIH0KICBuc01hcmdpbiBvcGVyYXRvcisoY29uc3QgbnNNYXJnaW4mIGFNYXJn aW4pIGNvbnN0IHsKICAgIHJldHVybiBuc01hcmdpbihsZWZ0ICsgYU1hcmdpbi5sZWZ0LCB0b3Ag KyBhTWFyZ2luLnRvcCwKICAgICAgICAgICAgICAgICAgICByaWdodCArIGFNYXJnaW4ucmlnaHQs IGJvdHRvbSArIGFNYXJnaW4uYm90dG9tKTsKICB9CiAgbnNNYXJnaW4gb3BlcmF0b3ItKGNvbnN0 IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAgICByZXR1cm4gbnNNYXJnaW4obGVmdCAtIGFN YXJnaW4ubGVmdCwgdG9wIC0gYU1hcmdpbi50b3AsCiAgICAgICAgICAgICAgICAgICAgcmlnaHQg LSBhTWFyZ2luLnJpZ2h0LCBib3R0b20gLSBhTWFyZ2luLmJvdHRvbSk7CiAgfQogIG5zTWFyZ2lu JiBvcGVyYXRvcis9KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSB7bGVmdCArPSBhTWFyZ2luLmxl ZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Ag Kz0gYU1hcmdpbi50b3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByaWdodCArPSBhTWFyZ2luLnJpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tICs9IGFNYXJnaW4uYm90dG9tOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzO30K ICBuc01hcmdpbiYgb3BlcmF0b3ItPShjb25zdCBuc01hcmdpbiYgYU1hcmdpbikge2xlZnQgLT0g YU1hcmdpbi5sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdG9wIC09IGFNYXJnaW4udG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmlnaHQgLT0gYU1hcmdpbi5yaWdodDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbSAtPSBhTWFyZ2luLmJvdHRv bTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAqdGhpczt9Cn07CiMgMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMgoj IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1VuaXRDb252ZXJzaW9uLmgiIDEKIyAyNSAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVW5pdENvbnZlcnNpb24uaCIKIyAxICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zVW5pdENvbnZlcnNpb24uaCIgMgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwoj IDI3ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi IDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0 cy9odWdlX3ZhbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIv dXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAyIDMKIyAzNCAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMwojIDM4ICIvdXNyL2lu Y2x1ZGUvbWF0aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMSAz CiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0eXBlZGVmIGxvbmcgZG91Ymxl IGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90OwojIDQxICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNh bGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2lu IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gp IHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBh dGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19h dGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBj b3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRh biAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBfX3gp IHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19z aW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3Vi bGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f Y29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX19hc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0 YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUg X194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g ZG91YmxlIGV4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDEw IChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgcG93MTAgKGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CgpleHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25l bnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4 cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBk b3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAg KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwg ZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9f eCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGV4cG0xIChkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChkb3VibGUgX194KSB0aHJv dyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxv Z2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGV4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRv dWJsZSBsb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwg ZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f Y2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jZWlsIChkb3VibGUgX194KSB0aHJv dyAoKTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZsb29y IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91 YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4 dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGluZm5h biAoaW50IF9fZXJyb3IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0 ZXJuIGRvdWJsZSBfX2luZm5hbiAoaW50IF9fZXJyb3IpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBf X3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9f eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY29weXNp Z24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmFuIChf X2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCgoKZXh0ZXJuIGludCBfX2lzbmFuIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1 ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUg ajAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMCAoZG91YmxlKSB0aHJvdyAo KTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ox IChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19qbiAoaW50LCBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91 YmxlIHkwIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTAgKGRvdWJsZSkgdGhy b3cgKCk7CmV4dGVybiBkb3VibGUgeTEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X195MSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9feW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gZG91YmxlIGVyZiAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAo ZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmZjIChkb3VibGUpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBsZ2Ft bWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSkgdGhy b3cgKCk7CgoKCmV4dGVybiBkb3VibGUgdGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fdGdhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBnYW1t YSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3VibGUpIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2Ft cCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2ln bmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHRhZnRlciAoZG91 YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKZXh0ZXJuIGRvdWJsZSBuZXh0dG93YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25l eHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3Vi bGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3Vi bGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChk b3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91 YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGRvdWJsZSByb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19y b3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJs ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJs ZSBfX3RydW5jIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCgpleHRlcm4gZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50 ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJp bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludCAoZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUgX194KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGludCBfX2xyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25n IGxvbmcgaW50IGxscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25n IGludCBfX2xscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZk aW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZmRp bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWF4 IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYXgg KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAo ZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWluIChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3Np ZnkgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIGZtYSAoZG91 YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19mbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDY0 ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRl L2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19hY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBm bG9hdCBhc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZs b2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2F0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZs b2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQg Y29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19zaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmYg KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgoKCmV4dGVybiB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwg ZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194 LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZs b2F0IGNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NoZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxv YXQgdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RhbmhmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4g ZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luaGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGZsb2F0IGV4cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4 cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK CmV4dGVybiBmbG9hdCBwb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X3BvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxv YXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mcmV4cGYg KGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbGRl eHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f bGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv YXQgbG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQg X194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZs b2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19tb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGZsb2F0IGV4cG0xZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpl eHRlcm4gZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xv Z2JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9hdCBf X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK CgpleHRlcm4gZmxvYXQgbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X2xvZzJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgcG93ZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3dmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19oeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY2Jy dGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgX19pc2luZmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlZiAoZmxvYXQgX192YWx1ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2lu ZmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgpleHRlcm4gaW50IGZpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBpbmZuYW5mIChpbnQgX19lcnJv cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19p bmZuYW5mIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpl eHRlcm4gZmxvYXQgc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQg Y29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQg X195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxv YXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25h bmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCkgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgajFmIChmbG9h dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4g ZmxvYXQgam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQs IGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX195MGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZs b2F0IHluZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBm bG9hdCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgZXJmY2Yg KGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsK ZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdh bW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgpleHRl cm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAo ZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50 ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwg aW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9h dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVy ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCmV4dGVybiBmbG9hdCBuZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBf X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9f bmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0 IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxvYXQg X194LCBmbG9hdCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9f eCwgZmxvYXQgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBf X3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gs IGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVy biBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoK CgpleHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHJv dW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9hdCBf X3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9h dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBm bG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVv KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRl cm4gbG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25n IGludCBscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91 bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0 IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRmIChm bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQg X196KSB0aHJvdyAoKTsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgOTkgIi91c3Iv aW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAz CiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJs ZSBhY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f YWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNp bmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5s IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcg ZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g bG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRv dWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X190YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3Ns IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nv c3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g bG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg ZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX190YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f YXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0 YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRh bmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBl eHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMTBs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAxMGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cxMGwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxv bmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBv bmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUg X194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cg KCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK CmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGxvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g bG9uZyBkb3VibGUgX19sb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f aHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gbG9uZyBkb3VibGUgY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy biBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9u ZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3Zh bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBf X2Zpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVs IChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgaW5mbmFubCAoaW50IF9fZXJyb3IpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faW5m bmFubCAoaW50IF9fZXJyb3IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgpleHRlcm4gbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25p ZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f c2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29w eXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29u c3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5sIChsb25n IGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CmV4dGVybiBpbnQgaXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAobG9uZyBkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMGwgKGxvbmcgZG91YmxlKSB0aHJv dyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19qMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg ZG91YmxlIGpubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2pubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5 MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTBsIChsb25n IGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKGxvbmcgZG91YmxlKSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7 CmV4dGVybiBsb25nIGRvdWJsZSB5bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4 dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91Ymxl IGVyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNs IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsIChsb25n IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxvbmcgZG91 YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwgKGxvbmcgZG91Ymxl KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBkb3VibGUpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19z aWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAobG9uZyBk b3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJs ZSByaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f cmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5l eHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHRhZnRlcmwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1haW5kZXJsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRv dWJsZSBzY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJubCAobG9uZyBkb3Vi bGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJubCAo bG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsbmwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f c2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RydW5jbCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CgpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1xdW9s IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGludCBfX2xyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJu IGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK CmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGltbCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWF4bCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp OwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWlubCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lm eWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9uZyBkb3VibGUgX192YWx1ZSkg dGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBsb25n IGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3Vi bGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgMTAwICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0 ZXJuIGludCBzaWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAgewog ICAgRlBfTkFOLAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9S TUFMLAoKICAgIEZQX05PUk1BTAoKICB9OwojIDI0MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0 eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJ WF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9O X1RZUEUgX0xJQl9WRVJTSU9OOwojIDI2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3Qg X19leGNlcHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3Vi bGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVy biBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgMzUw ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGlu ZS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGlu ZSBpbnQKX19zaWduYml0ZiAoZmxvYXQgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1 bmlvbiB7IGZsb2F0IF9fZjsgaW50IF9faTsgfSBfX3UgPSB7IF9fZjogX194IH07CiAgcmV0dXJu IF9fdS5fX2kgPCAwOwp9Cl9faW5saW5lIGludApfX3NpZ25iaXQgKGRvdWJsZSBfX3gpIHRocm93 ICgpCnsKICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsgfSBf X3UgPSB7IF9fZDogX194IH07CiAgcmV0dXJuIF9fdS5fX2lbMV0gPCAwOwp9Cl9faW5saW5lIGlu dApfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBfX2V4dGVuc2lvbl9f IHVuaW9uIHsgbG9uZyBkb3VibGUgX19sOyBpbnQgX19pWzNdOyB9IF9fdSA9IHsgX19sOiBfX3gg fTsKICByZXR1cm4gKF9fdS5fX2lbMl0gJiAweDgwMDApICE9IDA7Cn0KIyAyOTEgIi91c3IvaW5j bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSkg dGhyb3cgKCk7IF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy ZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBfX2lu bGluZSBmbG9hdCBfX3NnbmYgKGZsb2F0KSB0aHJvdyAoKTsgX19pbmxpbmUgZmxvYXQgX19zZ25m IChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4g MC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25nIGRv dWJsZSkgdGhyb3cgKCk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEu MCA6IC0xLjApOyB9CiMgNDc1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19p bmxpbmUgZG91YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIg OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVy biBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gp IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGls ZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAi c3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbjJsIChs b25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192 YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsg fQpfX2lubGluZSBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20g X192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIg KF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KCgpfX2lubGluZSBkb3VibGUgZm1v ZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVh eFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAi dSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQg Zm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3Rzdwkl JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCks ICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25n IGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJ ZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChf X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3Zh bHVlOyB9CiMgNDkwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUg ZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVz dWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIg KF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0IF9f eCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9f ICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0 OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz cXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQpf X2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0 IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQoKCl9f aW5saW5lIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0 aW5fZmFicyAoX194KTsgfQpfX2lubGluZSBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAo KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YgKF9feCk7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUg ZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNs IChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpOyB9CiMgNTE2ICIvdXNyL2lu Y2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIGF0YW4gKGRvdWJsZSBf X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEp Iik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0 aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm bGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJl dHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3Zv bGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDog InN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfQoKX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24x bCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbjFsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcgZG91 YmxlIF9feGxkOyB1bnNpZ25lZCBpbnQgX194aVszXTsgfSBfX24gPSB7IF9feGxkOiBfX3ggfTsg X19uLl9feGlbMl0gPSAoX19uLl9feGlbMl0gJiAweDgwMDApIHwgMHgzZmZmOyBfX24uX194aVsx XSA9IDB4ODAwMDAwMDA7IF9fbi5fX3hpWzBdID0gMDsgcmV0dXJuIF9fbi5fX3hsZDsgfQojIDU0 MiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBmbG9v ciAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf X3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9f Y3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGls ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5k aW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZs ZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0 IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1t IiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3Zv bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAo ImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxl ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUg bG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsg X192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAo ImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAw eDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBf X2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7 IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192 YWx1ZTsgfQojIDU1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5l IGRvdWJsZSBjZWlsIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19p bmxpbmUgZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0 aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3 ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsg X19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9f dm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20g X192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9 IF9faW5saW5lIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp bnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192 b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4 ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j d3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw IiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyBy ZXR1cm4gX192YWx1ZTsgfQojIDU3MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAz Cl9faW5saW5lIGRvdWJsZQpsZGV4cCAoZG91YmxlIF9feCwgaW50IF9feSkgdGhyb3cgKCkKewog IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2Fs ZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUpIF9feSkp OyByZXR1cm4gX192YWx1ZTsKfQojIDU4OSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5o IiAzCl9faW5saW5lIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAx LjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2Ug X19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAi PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBf X2lubGluZSBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIx MzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20g X192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChf X3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGlu ZSBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAx LjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2Ug X19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAi PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfQoj IDYwMyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBh c2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBf X2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAq IF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGZs b2F0IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f eSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAo X195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0gX19pbmxp bmUgbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAq IF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFs IChfX3gpKTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAo KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194 ICsgMS4wKSk7IH0gX19pbmxpbmUgZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpIHsg cmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAx LjApKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwg KF9feCArIDEuMCkpOyB9CgoKX19pbmxpbmUgZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB0aHJv dyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAt MC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gp OyB9IF9faW5saW5lIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgt KF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9IF9faW5saW5lIGxv bmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9f eSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCgpfX2lubGluZSBk b3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmV0dXJuIF9f c3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gX19pbmxpbmUgZmxvYXQgaHlwb3RmIChm bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194 ICsgX195ICogX195KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBf X3ggKyBfX3kgKiBfX3kpOyB9CgpfX2lubGluZSBkb3VibGUgbG9nYiAoZG91YmxlIF9feCkgdGhy b3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVu ayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxp bmUgZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVf XyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChf X3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdp c3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0 IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9f dmFsdWU7IH0KIyA2MzMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGlu ZSBmbG9hdApsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9feSkgdGhyb3cgKCkKewogIHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQi IChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUpIF9feSkpOyByZXR1cm4g X192YWx1ZTsKfQoKX19pbmxpbmUgbG9uZyBkb3VibGUKbGRleHBsIChsb25nIGRvdWJsZSBfX3gs IGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1 IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KIyA2NTcgIi91c3IvaW5j bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBsb25nIGludApscmludGYgKGZsb2F0 IF9feCkgdGhyb3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGls ZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7 IHJldHVybiBfX2xyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50IChkb3VibGUgX194 KSB0aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18g KCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0 dXJuIF9fbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVf XyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyBy ZXR1cm4gX19scmludHJlczsKfQojIDY4MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5o IiAzCl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKQp7 CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0 cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4g X19sbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnQgKGRvdWJsZSBfX3gp IHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRp bGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0 Iik7IHJldHVybiBfX2xscmludHJlczsKfQpfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7 IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykg OiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9CgoKCgoKCgpfX2lubGlu ZSBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZWdpc3Rl ciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0 aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFi IiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIg KF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgZHJlbWYgKGZs b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyBy ZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxu XHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSks ICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1 cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJl Z2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5c dCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwg Ij0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVy biBfX3ZhbHVlOyB9CiMgNzE1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19p bmxpbmUgaW50Cl9fZmluaXRlIChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgcmV0dXJuIChfX2V4 dGVuc2lvbl9fCiAgICAgICAgICAoKCgoKHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsg fSkge19fZDogX194fSkuX19pWzFdCiAgICAgICAgICAgICB8IDB4ODAwZmZmZmZ1KSArIDEpID4+ IDMxKSk7Cn0KIyAzNTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDQxMSAiL3Vzci9pbmNs dWRlL21hdGguaCIgMwp9CiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1VuaXRDb252 ZXJzaW9uLmgiIDIKIyAzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVW5pdENvbnZlcnNp b24uaCIKaW5saW5lIG5zY29vcmQgTlNUb0Nvb3JkRmxvb3IoZmxvYXQgYVZhbHVlKQp7CiAgcmV0 dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gbnNjb29yZChhVmFsdWUpIDogbnNjb29yZChhVmFsdWUg LSAwLjk5OTk5OTk5OTk5OTk5OTlmKSk7Cn0KCmlubGluZSBuc2Nvb3JkIE5TVG9Db29yZENlaWwo ZmxvYXQgYVZhbHVlKQp7CiAgcmV0dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gbnNjb29yZChhVmFs dWUgKyAwLjk5OTk5OTk5OTk5OTk5OTlmKSA6IG5zY29vcmQoYVZhbHVlKSk7Cn0KCmlubGluZSBu c2Nvb3JkIE5TVG9Db29yZFJvdW5kKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0g YVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlICsgMC41ZikgOiBuc2Nvb3JkKGFWYWx1ZSAtIDAuNWYp KTsKfQoKaW5saW5lIG5zY29vcmQgTlNUb0Nvb3JkUm91bmRFeGNsdXNpdmUoZmxvYXQgYVZhbHVl KQp7CiAgcmV0dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gbnNjb29yZChhVmFsdWUgKyAwLjQ5OTk5 OTk5OTk5OTk5OTlmKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZChhVmFs dWUgLSAwLjQ5OTk5OTk5OTk5OTk5OTlmKSk7Cn0KCgoKCgppbmxpbmUgUFJJbnQzMiBOU1RvSW50 Rmxvb3IoZmxvYXQgYVZhbHVlKQp7CiAgcmV0dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gUFJJbnQz MihhVmFsdWUpIDogUFJJbnQzMihhVmFsdWUgLSAwLjk5OTk5OTk5OTk5OTk5OTlmKSk7Cn0KCmlu bGluZSBQUkludDMyIE5TVG9JbnRDZWlsKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYg PD0gYVZhbHVlKSA/IFBSSW50MzIoYVZhbHVlICsgMC45OTk5OTk5OTk5OTk5OTk5ZikgOiBQUklu dDMyKGFWYWx1ZSkpOwp9CgppbmxpbmUgUFJJbnQzMiBOU1RvSW50Um91bmQoZmxvYXQgYVZhbHVl KQp7CiAgcmV0dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gUFJJbnQzMihhVmFsdWUgKyAwLjVmKSA6 IFBSSW50MzIoYVZhbHVlIC0gMC41ZikpOwp9CgppbmxpbmUgUFJJbnQzMiBOU1RvSW50Um91bmRF eGNsdXNpdmUoZmxvYXQgYVZhbHVlKQp7CiAgcmV0dXJuICgoMC4wZiA8PSBhVmFsdWUpID8gUFJJ bnQzMihhVmFsdWUgKyAwLjQ5OTk5OTk5OTk5OTk5OTlmKSA6CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJJbnQzMihhVmFsdWUgLSAwLjQ5OTk5OTk5OTk5OTk5OTlmKSk7Cn0KCgoKCgpp bmxpbmUgbnNjb29yZCBOU0Zsb2F0UG9pbnRzVG9Ud2lwcyhmbG9hdCBhUG9pbnRzKQp7CiAgcmV0 dXJuIE5TVG9Db29yZFJvdW5kKGFQb2ludHMgKiAyMC4wZik7Cn0KCmlubGluZSBuc2Nvb3JkIE5T SW50UG9pbnRzVG9Ud2lwcyhQUkludDMyIGFQb2ludHMpCnsKICByZXR1cm4gbnNjb29yZChhUG9p bnRzICogMjApOwp9CgppbmxpbmUgUFJJbnQzMiBOU1R3aXBzVG9JbnRQb2ludHMobnNjb29yZCBh VHdpcHMpCnsKICByZXR1cm4gTlNUb0ludFJvdW5kKGFUd2lwcyAvIDIwLjBmKTsKfQoKaW5saW5l IFBSSW50MzIgTlNUd2lwc1RvRmxvb3JJbnRQb2ludHMobnNjb29yZCBhVHdpcHMpCnsKICByZXR1 cm4gTlNUb0ludEZsb29yKGFUd2lwcyAvIDIwLjBmKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUd2lw c1RvQ2VpbEludFBvaW50cyhuc2Nvb3JkIGFUd2lwcykKewogIHJldHVybiBOU1RvSW50Q2VpbChh VHdpcHMgLyAyMC4wZik7Cn0KCmlubGluZSBmbG9hdCBOU1R3aXBzVG9GbG9hdFBvaW50cyhuc2Nv b3JkIGFUd2lwcykKewogIHJldHVybiAoZmxvYXQoYVR3aXBzKSAvIDIwLjBmKTsKfQoKCgoKaW5s aW5lIG5zY29vcmQgTlNGbG9hdFBpeGVsc1RvVHdpcHMoZmxvYXQgYVBpeGVscywgZmxvYXQgYVR3 aXBzUGVyUGl4ZWwpCnsKICByZXR1cm4gTlNUb0Nvb3JkUm91bmQoYVBpeGVscyAqIGFUd2lwc1Bl clBpeGVsKTsKfQoKaW5saW5lIG5zY29vcmQgTlNJbnRQaXhlbHNUb1R3aXBzKFBSSW50MzIgYVBp eGVscywgZmxvYXQgYVR3aXBzUGVyUGl4ZWwpCnsKICByZXR1cm4gTlNUb0Nvb3JkUm91bmQoZmxv YXQoYVBpeGVscykgKiBhVHdpcHNQZXJQaXhlbCk7Cn0KCmlubGluZSBmbG9hdCBOU1R3aXBzVG9G bG9hdFBpeGVscyhuc2Nvb3JkIGFUd2lwcywgZmxvYXQgYVBpeGVsc1BlclR3aXApCnsKICByZXR1 cm4gKGZsb2F0KGFUd2lwcykgKiBhUGl4ZWxzUGVyVHdpcCk7Cn0KCmlubGluZSBQUkludDMyIE5T VHdpcHNUb0ludFBpeGVscyhuc2Nvb3JkIGFUd2lwcywgZmxvYXQgYVBpeGVsc1BlclR3aXApCnsK ICByZXR1cm4gTlNUb0ludFJvdW5kKGZsb2F0KGFUd2lwcykgKiBhUGl4ZWxzUGVyVHdpcCk7Cn0K CgoKCmlubGluZSBuc2Nvb3JkIE5TVW5pdHNUb1R3aXBzKGZsb2F0IGFWYWx1ZSwgZmxvYXQgYVBv aW50c1BlclVuaXQpCnsKICByZXR1cm4gTlNUb0Nvb3JkUm91bmQoYVZhbHVlICogYVBvaW50c1Bl clVuaXQgKiAyMC4wZik7Cn0KCmlubGluZSBmbG9hdCBOU1R3aXBzVG9Vbml0cyhuc2Nvb3JkIGFU d2lwcywgZmxvYXQgYVVuaXRzUGVyUG9pbnQpCnsKICByZXR1cm4gKGFUd2lwcyAqIChhVW5pdHNQ ZXJQb2ludCAvIDIwLjBmKSk7Cn0KIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVj dC5oIiAyCgpzdHJ1Y3QgbnNSZWN0IHsKICBuc2Nvb3JkIHgsIHk7CiAgbnNjb29yZCB3aWR0aCwg aGVpZ2h0OwoKCiAgbnNSZWN0KCkgOiB4KDApLCB5KDApLCB3aWR0aCgwKSwgaGVpZ2h0KDApIHt9 CiAgbnNSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QpIHsqdGhpcyA9IGFSZWN0O30KICBuc1JlY3Qo Y29uc3QgbnNQb2ludCYgYU9yaWdpbiwgY29uc3QgbnNTaXplICZhU2l6ZSkge3ggPSBhT3JpZ2lu Lng7IHkgPSBhT3JpZ2luLnk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3aWR0aCA9IGFTaXplLndpZHRoOyBoZWlnaHQgPSBhU2l6ZS5oZWln aHQ7fQogIG5zUmVjdChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwgbnNj b29yZCBhSGVpZ2h0KSB7eCA9IGFYOyB5ID0gYVk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGFXaWR0aDsg aGVpZ2h0ID0gYUhlaWdodDt9CgoKCiAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7CiAgICByZXR1 cm4gKFBSQm9vbCkgKCh3aWR0aCA8PSAwKSB8fCAoaGVpZ2h0IDw9IDApKTsKICB9CiAgdm9pZCBF bXB0eSgpIHt3aWR0aCA9IGhlaWdodCA9IDA7fQoKCiAgUFJCb29sIENvbnRhaW5zKGNvbnN0IG5z UmVjdCYgYVJlY3QpIGNvbnN0OwogIFBSQm9vbCBDb250YWlucyhuc2Nvb3JkIGFYLCBuc2Nvb3Jk IGFZKSBjb25zdDsKICBQUkJvb2wgQ29udGFpbnMoY29uc3QgbnNQb2ludCYgYVBvaW50KSBjb25z dCB7cmV0dXJuIENvbnRhaW5zKGFQb2ludC54LCBhUG9pbnQueSk7fQoKCgogIFBSQm9vbCBJbnRl cnNlY3RzKGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNvbnN0OwoKCgoKCgogIFBSQm9vbCBJbnRlcnNl Y3RSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QxLCBjb25zdCBuc1JlY3QmIGFSZWN0Mik7CgoKCgoK CiAgUFJCb29sIFVuaW9uUmVjdChjb25zdCBuc1JlY3QmIGFSZWN0MSwgY29uc3QgbnNSZWN0JiBh UmVjdDIpOwoKCiAgdm9pZCBTZXRSZWN0KG5zY29vcmQgYVgsIG5zY29vcmQgYVksIG5zY29vcmQg YVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHsKICAgIHggPSBhWDsgeSA9IGFZOyB3aWR0aCA9IGFX aWR0aDsgaGVpZ2h0ID0gYUhlaWdodDsKICB9CiAgdm9pZCBNb3ZlVG8obnNjb29yZCBhWCwgbnNj b29yZCBhWSkge3ggPSBhWDsgeSA9IGFZO30KICB2b2lkIE1vdmVUbyhjb25zdCBuc1BvaW50JiBh UG9pbnQpIHt4ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQueTt9CiAgdm9pZCBNb3ZlQnkobnNjb29y ZCBhRHgsIG5zY29vcmQgYUR5KSB7eCArPSBhRHg7IHkgKz0gYUR5O30KICB2b2lkIFNpemVUbyhu c2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSB7d2lkdGggPSBhV2lkdGg7IGhlaWdodCA9 IGFIZWlnaHQ7fQogIHZvaWQgU2l6ZVRvKGNvbnN0IG5zU2l6ZSYgYVNpemUpIHtTaXplVG8oYVNp emUud2lkdGgsIGFTaXplLmhlaWdodCk7fQogIHZvaWQgU2l6ZUJ5KG5zY29vcmQgYURlbHRhV2lk dGgsIG5zY29vcmQgYURlbHRhSGVpZ2h0KSB7d2lkdGggKz0gYURlbHRhV2lkdGg7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQg Kz0gYURlbHRhSGVpZ2h0O30KCgogIHZvaWQgSW5mbGF0ZShuc2Nvb3JkIGFEeCwgbnNjb29yZCBh RHkpOwogIHZvaWQgSW5mbGF0ZShjb25zdCBuc1NpemUmIGFTaXplKSB7SW5mbGF0ZShhU2l6ZS53 aWR0aCwgYVNpemUuaGVpZ2h0KTt9CiAgdm9pZCBJbmZsYXRlKGNvbnN0IG5zTWFyZ2luJiBhTWFy Z2luKTsKCgogIHZvaWQgRGVmbGF0ZShuc2Nvb3JkIGFEeCwgbnNjb29yZCBhRHkpOwogIHZvaWQg RGVmbGF0ZShjb25zdCBuc1NpemUmIGFTaXplKSB7RGVmbGF0ZShhU2l6ZS53aWR0aCwgYVNpemUu aGVpZ2h0KTt9CiAgdm9pZCBEZWZsYXRlKGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKTsKCgoKICBQ UkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc1JlY3QmIGFSZWN0KSBjb25zdCB7CiAgICByZXR1cm4g KFBSQm9vbCkgKChJc0VtcHR5KCkgJiYgYVJlY3QuSXNFbXB0eSgpKSB8fAogICAgICAgICAgICAg ICAgICAgICAoKHggPT0gYVJlY3QueCkgJiYgKHkgPT0gYVJlY3QueSkgJiYKICAgICAgICAgICAg ICAgICAgICAgICh3aWR0aCA9PSBhUmVjdC53aWR0aCkgJiYgKGhlaWdodCA9PSBhUmVjdC5oZWln aHQpKSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNvbnN0 IHsKICAgIHJldHVybiAoUFJCb29sKSAhb3BlcmF0b3I9PShhUmVjdCk7CiAgfQogIG5zUmVjdCBv cGVyYXRvcisoY29uc3QgbnNSZWN0JiBhUmVjdCkgY29uc3QgewogICAgcmV0dXJuIG5zUmVjdCh4 ICsgYVJlY3QueCwgeSArIGFSZWN0LnksCiAgICAgICAgICAgICAgICAgIHdpZHRoICsgYVJlY3Qu d2lkdGgsIGhlaWdodCArIGFSZWN0LmhlaWdodCk7CiAgfQogIG5zUmVjdCBvcGVyYXRvci0oY29u c3QgbnNSZWN0JiBhUmVjdCkgY29uc3QgewogICAgcmV0dXJuIG5zUmVjdCh4IC0gYVJlY3QueCwg eSAtIGFSZWN0LnksCiAgICAgICAgICAgICAgICAgIHdpZHRoIC0gYVJlY3Qud2lkdGgsIGhlaWdo dCAtIGFSZWN0LmhlaWdodCk7CiAgfQogIG5zUmVjdCYgb3BlcmF0b3IrPShjb25zdCBuc1BvaW50 JiBhUG9pbnQpIHt4ICs9IGFQb2ludC54OyB5ICs9IGFQb2ludC55OyByZXR1cm4gKnRoaXM7fQog IG5zUmVjdCYgb3BlcmF0b3ItPShjb25zdCBuc1BvaW50JiBhUG9pbnQpIHt4IC09IGFQb2ludC54 OyB5IC09IGFQb2ludC55OyByZXR1cm4gKnRoaXM7fQoKICBuc1JlY3QmIG9wZXJhdG9yKj0oY29u c3QgZmxvYXQgYVNjYWxlKSB7eCA9IE5TVG9Db29yZFJvdW5kKHggKiBhU2NhbGUpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gTlNUb0Nvb3JkUm91bmQoeSAq IGFTY2FsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo ID0gTlNUb0Nvb3JkUm91bmQod2lkdGggKiBhU2NhbGUpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBOU1RvQ29vcmRSb3VuZChoZWlnaHQgKiBhU2Nh bGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnRo aXM7fQoKICBuc1JlY3QmIFNjYWxlUm91bmRPdXQoY29uc3QgZmxvYXQgYVNjYWxlKTsKICBuc1Jl Y3QmIFNjYWxlUm91bmRJbihjb25zdCBmbG9hdCBhU2NhbGUpOwoKCiAgbnNjb29yZCBYTW9zdCgp IGNvbnN0IHtyZXR1cm4geCArIHdpZHRoO30KICBuc2Nvb3JkIFlNb3N0KCkgY29uc3Qge3JldHVy biB5ICsgaGVpZ2h0O30KfTsKCgpleHRlcm4gRklMRSogb3BlcmF0b3I8PChGSUxFKiBvdXQsIGNv bnN0IG5zUmVjdCYgcmVjdCk7CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2 ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMQoj IDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIKIyAxICIvd2luZG93 cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxoYXNoLmgiIDEKIyAz NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKIyAxICIvd2luZG93 cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAz OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKIyAxICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNDb20uaCIgMQojIDM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNIYXNodGFibGUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUu aCIgMQojIDQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMgojIDEg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgNDEgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgpjbGFzcyBuc0hhc2h0YWJsZTsKY2xhc3Mg bnNTdHJpbmdLZXk7CgpjbGFzcyBuc0hhc2hLZXkgewpwcm90ZWN0ZWQ6CiAgbnNIYXNoS2V5KHZv aWQpOwoKcHVibGljOgogIHZpcnR1YWwgfm5zSGFzaEtleSh2b2lkKTsKICB2aXJ0dWFsIFBSVWlu dDMyIEhhc2hDb2RlKHZvaWQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIFBSQm9vbCBFcXVhbHMoY29u c3QgbnNIYXNoS2V5ICphS2V5KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc0hhc2hLZXkgKkNsb25l KCkgY29uc3QgPSAwOwojIDcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUu aCIKfTsKCgoKdHlwZWRlZiBQUkJvb2wgKCogbnNIYXNodGFibGVFbnVtRnVuYykobnNIYXNoS2V5 ICphS2V5LCB2b2lkICphRGF0YSwgdm9pZCogY2xvc3VyZSk7CgpjbGFzcyBuc0hhc2h0YWJsZSB7 CnByb3RlY3RlZDoKCiAgUFJMb2NrKiBtTG9jazsKICBQTEhhc2hUYWJsZSBtSGFzaHRhYmxlOwog IFBSQm9vbCBtRW51bWVyYXRpbmc7CgpwdWJsaWM6CiAgbnNIYXNodGFibGUoUFJVaW50MzIgYVNp emUgPSAxNiwgUFJCb29sIHRocmVhZFNhZmUgPSAwKTsKICB2aXJ0dWFsIH5uc0hhc2h0YWJsZSgp OwoKICBQUkludDMyIENvdW50KHZvaWQpIHsgcmV0dXJuIG1IYXNodGFibGUubmVudHJpZXM7IH0K ICBQUkJvb2wgRXhpc3RzKG5zSGFzaEtleSAqYUtleSk7CiAgdm9pZCAqUHV0KG5zSGFzaEtleSAq YUtleSwgdm9pZCAqYURhdGEpOwogIHZvaWQgKkdldChuc0hhc2hLZXkgKmFLZXkpOwogIHZvaWQg KlJlbW92ZShuc0hhc2hLZXkgKmFLZXkpOwogIG5zSGFzaHRhYmxlICpDbG9uZSgpOwogIHZvaWQg RW51bWVyYXRlKG5zSGFzaHRhYmxlRW51bUZ1bmMgYUVudW1GdW5jLCB2b2lkKiBjbG9zdXJlID0g X19udWxsKTsKICB2b2lkIFJlc2V0KCk7CiAgdm9pZCBSZXNldChuc0hhc2h0YWJsZUVudW1GdW5j IGRlc3Ryb3lGdW5jLCB2b2lkKiBjbG9zdXJlID0gX19udWxsKTsKfTsKCgoKCgp0eXBlZGVmIHZv aWQqICgqIG5zSGFzaHRhYmxlQ2xvbmVFbGVtZW50RnVuYykobnNIYXNoS2V5ICphS2V5LCB2b2lk ICphRGF0YSwgdm9pZCogY2xvc3VyZSk7CgpjbGFzcyBuc09iamVjdEhhc2h0YWJsZSA6IHB1Ymxp YyBuc0hhc2h0YWJsZSB7CnB1YmxpYzoKICBuc09iamVjdEhhc2h0YWJsZShuc0hhc2h0YWJsZUNs b25lRWxlbWVudEZ1bmMgY2xvbmVFbGVtZW50RnVuLAogICAgICAgICAgICAgICAgICAgIHZvaWQq IGNsb25lRWxlbWVudENsb3N1cmUsCiAgICAgICAgICAgICAgICAgICAgbnNIYXNodGFibGVFbnVt RnVuYyBkZXN0cm95RWxlbWVudEZ1biwKICAgICAgICAgICAgICAgICAgICB2b2lkKiBkZXN0cm95 RWxlbWVudENsb3N1cmUsCiAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVNpemUgPSAxNiwg UFJCb29sIHRocmVhZFNhZmUgPSAwKTsKICB+bnNPYmplY3RIYXNodGFibGUoKTsKCiAgbnNIYXNo dGFibGUgKkNsb25lKCk7CiAgdm9pZCBSZXNldCgpOwogIFBSQm9vbCBSZW1vdmVBbmREZWxldGUo bnNIYXNoS2V5ICphS2V5KTsKCnByb3RlY3RlZDoKICBzdGF0aWMgUFJJbnRuIENvcHlFbGVtZW50 KFBMSGFzaEVudHJ5ICpoZSwgUFJJbnRuIGksIHZvaWQgKmFyZyk7CgogIG5zSGFzaHRhYmxlQ2xv bmVFbGVtZW50RnVuYyBtQ2xvbmVFbGVtZW50RnVuOwogIHZvaWQqIG1DbG9uZUVsZW1lbnRDbG9z dXJlOwogIG5zSGFzaHRhYmxlRW51bUZ1bmMgbURlc3Ryb3lFbGVtZW50RnVuOwogIHZvaWQqIG1E ZXN0cm95RWxlbWVudENsb3N1cmU7Cn07CgoKCgpjbGFzcyBuc0lTdXBwb3J0czsKCmNsYXNzIG5z U3VwcG9ydHNIYXNodGFibGUKIDogcHJpdmF0ZSBuc0hhc2h0YWJsZQp7CnB1YmxpYzoKICB0eXBl ZGVmIFBSQm9vbCAoKiBFbnVtRnVuYykgKG5zSGFzaEtleSAqYUtleSwgdm9pZCAqYURhdGEsIHZv aWQqIGNsb3N1cmUpOwoKICBuc1N1cHBvcnRzSGFzaHRhYmxlKFBSVWludDMyIGFTaXplID0gMTYs IFBSQm9vbCB0aHJlYWRTYWZlID0gMCkKICAgIDogbnNIYXNodGFibGUoYVNpemUsIHRocmVhZFNh ZmUpIHt9CiAgfm5zU3VwcG9ydHNIYXNodGFibGUoKTsKCiAgUFJJbnQzMiBDb3VudCAodm9pZCkK ICB7CiAgICByZXR1cm4gbnNIYXNodGFibGU6OkNvdW50KCk7CiAgfQogIFBSQm9vbCBFeGlzdHMg KG5zSGFzaEtleSAqYUtleSkKICB7CiAgICByZXR1cm4gbnNIYXNodGFibGU6OkV4aXN0cyAoYUtl eSk7CiAgfQogIFBSQm9vbCBQdXQgKG5zSGFzaEtleSAqYUtleSwKICAgICAgICAgICAgICBuc0lT dXBwb3J0cyAqYURhdGEsCiAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKip2YWx1ZSA9IDApOwog IG5zSVN1cHBvcnRzKiBHZXQgKG5zSGFzaEtleSAqYUtleSk7CiAgUFJCb29sIFJlbW92ZSAobnNI YXNoS2V5ICphS2V5LCBuc0lTdXBwb3J0cyAqKnZhbHVlID0gMCk7CiAgbnNIYXNodGFibGUgKkNs b25lKCk7CiAgdm9pZCBFbnVtZXJhdGUgKEVudW1GdW5jIGFFbnVtRnVuYywgdm9pZCogY2xvc3Vy ZSA9IF9fbnVsbCkKICB7CiAgICBuc0hhc2h0YWJsZTo6RW51bWVyYXRlIChhRW51bUZ1bmMsIGNs b3N1cmUpOwogIH0KICB2b2lkIFJlc2V0KCk7CgogcHJpdmF0ZToKICBzdGF0aWMgUFJCb29sIFJl bGVhc2VFbGVtZW50IChuc0hhc2hLZXkgKiwgdm9pZCAqLCB2b2lkICopOwogIHN0YXRpYyBQUklu dG4gRW51bWVyYXRlQ29weSAoUExIYXNoRW50cnkgKiwgUFJJbnRuLCB2b2lkICopOwp9OwoKCgoK IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDE3MSAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKCmNsYXNzIG5zSVN1cHBvcnRz S2V5IDogcHVibGljIG5zSGFzaEtleSB7CnByb3RlY3RlZDoKICBuc0lTdXBwb3J0cyogbUtleTsK CnB1YmxpYzoKICBuc0lTdXBwb3J0c0tleShuc0lTdXBwb3J0cyoga2V5KSB7CgoKCiAgICBtS2V5 ID0ga2V5OwogICAgbnNfaWZfYWRkcmVmKG1LZXkpOwogIH0KCiAgfm5zSVN1cHBvcnRzS2V5KHZv aWQpIHsKICAgIGRvIHsgaWYgKG1LZXkpIHsgKG1LZXkpLT5SZWxlYXNlKCk7IChtS2V5KSA9IDA7 IH0gfSB3aGlsZSAoMCk7CiAgfQoKICBQUlVpbnQzMiBIYXNoQ29kZSh2b2lkKSBjb25zdCB7CiAg ICByZXR1cm4gKFBSVWludDMyKW1LZXk7CiAgfQoKICBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSGFz aEtleSAqYUtleSkgY29uc3QgewogICAge307CiAgICByZXR1cm4gKG1LZXkgPT0gKChuc0lTdXBw b3J0c0tleSAqKSBhS2V5KS0+bUtleSk7CiAgfQoKICBuc0hhc2hLZXkgKkNsb25lKCkgY29uc3Qg ewogICAgcmV0dXJuIG5ldyBuc0lTdXBwb3J0c0tleShtS2V5KTsKICB9Cn07CgoKCgpjbGFzcyBu c1ZvaWRLZXkgOiBwdWJsaWMgbnNIYXNoS2V5IHsKcHJvdGVjdGVkOgogIHZvaWQqIG1LZXk7Cgpw dWJsaWM6CiAgbnNWb2lkS2V5KHZvaWQqIGtleSkgewoKCgogICAgbUtleSA9IGtleTsKICB9Cgog IFBSVWludDMyIEhhc2hDb2RlKHZvaWQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJVaW50MzIpbUtl eTsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5ICphS2V5KSBjb25zdCB7CiAg ICB7fTsKICAgIHJldHVybiAobUtleSA9PSAoKGNvbnN0IG5zVm9pZEtleSAqKSBhS2V5KS0+bUtl eSk7CiAgfQoKICBuc0hhc2hLZXkgKkNsb25lKCkgY29uc3QgewogICAgcmV0dXJuIG5ldyBuc1Zv aWRLZXkobUtleSk7CiAgfQoKICB2b2lkKiBHZXRWYWx1ZSgpIHsgcmV0dXJuIG1LZXk7IH0KfTsK CgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUQuaCIgMQojIDIzOCAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKCmNsYXNzIG5zSURLZXkgOiBwdWJs aWMgbnNIYXNoS2V5IHsKcHJvdGVjdGVkOgogIG5zSUQgbUlEOwoKcHVibGljOgogIG5zSURLZXko Y29uc3QgbnNJRCAmYUlEKSB7CgoKCiAgICBtSUQgPSBhSUQ7CiAgfQoKICBQUlVpbnQzMiBIYXNo Q29kZSh2b2lkKSBjb25zdCB7CiAgICByZXR1cm4gbUlELm0wOwogIH0KCiAgUFJCb29sIEVxdWFs cyhjb25zdCBuc0hhc2hLZXkgKmFLZXkpIGNvbnN0IHsKICAgIHt9OwogICAgcmV0dXJuIChtSUQu RXF1YWxzKCgoY29uc3QgbnNJREtleSAqKSBhS2V5KS0+bUlEKSk7CiAgfQoKICBuc0hhc2hLZXkg KkNsb25lKCkgY29uc3QgewogICAgcmV0dXJuIG5ldyBuc0lES2V5KG1JRCk7CiAgfQp9OwoKCgoj IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjY4ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMgoKCmNsYXNzIG5zQ1N0cmluZ0tleSA6 IHB1YmxpYyBuc0hhc2hLZXkgewpwdWJsaWM6CgogIGVudW0gT3duZXJzaGlwIHsKICAgIE5FVkVS X09XTiwKICAgIE9XTl9DTE9ORSwKICAgIE9XTgogIH07CgogIG5zQ1N0cmluZ0tleShjb25zdCBj aGFyKiBzdHIsIFBSSW50MzIgc3RyTGVuID0gLTEsIE93bmVyc2hpcCBvd24gPSBPV05fQ0xPTkUp OwogIG5zQ1N0cmluZ0tleShjb25zdCBuc0NTdHJpbmcmIHN0cik7CiAgfm5zQ1N0cmluZ0tleSh2 b2lkKTsKCiAgUFJVaW50MzIgSGFzaENvZGUodm9pZCkgY29uc3Q7CiAgUFJCb29sIEVxdWFscyhj b25zdCBuc0hhc2hLZXkqIGFLZXkpIGNvbnN0OwogIG5zSGFzaEtleSogQ2xvbmUoKSBjb25zdDsK CgoKICBjb25zdCBjaGFyKiBHZXRTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtU3RyOyB9CiAgUFJV aW50MzIgR2V0U3RyaW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbVN0ckxlbjsgfQoKcHJvdGVj dGVkOgogIGNoYXIqIG1TdHI7CiAgUFJVaW50MzIgbVN0ckxlbjsKICBPd25lcnNoaXAgbU93bmVy c2hpcDsKfTsKCgpjbGFzcyBuc1N0cmluZ0tleSA6IHB1YmxpYyBuc0hhc2hLZXkgewpwdWJsaWM6 CgogIGVudW0gT3duZXJzaGlwIHsKICAgIE5FVkVSX09XTiwKICAgIE9XTl9DTE9ORSwKICAgIE9X TgogIH07CgogIG5zU3RyaW5nS2V5KGNvbnN0IFBSVW5pY2hhciogc3RyLCBQUkludDMyIHN0ckxl biA9IC0xLCBPd25lcnNoaXAgb3duID0gT1dOX0NMT05FKTsKICBuc1N0cmluZ0tleShjb25zdCBu c0FSZWFkYWJsZVN0cmluZyYgc3RyKTsKICB+bnNTdHJpbmdLZXkodm9pZCk7CgogIFBSVWludDMy IEhhc2hDb2RlKHZvaWQpIGNvbnN0OwogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5KiBh S2V5KSBjb25zdDsKICBuc0hhc2hLZXkqIENsb25lKCkgY29uc3Q7CgoKCiAgY29uc3QgUFJVbmlj aGFyKiBHZXRTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtU3RyOyB9CiAgUFJVaW50MzIgR2V0U3Ry aW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbVN0ckxlbjsgfQoKcHJvdGVjdGVkOgogIFBSVW5p Y2hhciogbVN0cjsKICBQUlVpbnQzMiBtU3RyTGVuOwogIE93bmVyc2hpcCBtT3duZXJzaGlwOwp9 OwoKCmNsYXNzIG5zT3BhcXVlS2V5IDogcHVibGljIG5zSGFzaEtleSB7CnB1YmxpYzoKCiAgZW51 bSBPd25lcnNoaXAgewogICAgTkVWRVJfT1dOLAogICAgT1dOX0NMT05FLAogICAgT1dOCiAgfTsK CiAgbnNPcGFxdWVLZXkoY29uc3QgY2hhciogYnVmLCBQUlVpbnQzMiBidWZMZW4sIE93bmVyc2hp cCBvd24gPSBPV05fQ0xPTkUpOwogIH5uc09wYXF1ZUtleSh2b2lkKTsKCiAgUFJVaW50MzIgSGFz aENvZGUodm9pZCkgY29uc3Q7CiAgUFJCb29sIEVxdWFscyhjb25zdCBuc0hhc2hLZXkqIGFLZXkp IGNvbnN0OwogIG5zSGFzaEtleSogQ2xvbmUoKSBjb25zdDsKCgoKICBjb25zdCBjaGFyKiBHZXRC dWZmZXIoKSBjb25zdCB7IHJldHVybiBtQnVmOyB9CiAgUFJVaW50MzIgR2V0QnVmZmVyTGVuZ3Ro KCkgY29uc3QgeyByZXR1cm4gbUJ1ZkxlbjsgfQoKcHJvdGVjdGVkOgogIGNoYXIqIG1CdWY7CiAg UFJVaW50MzIgbUJ1ZkxlbjsKICBPd25lcnNoaXAgbU93bmVyc2hpcDsKfTsKIyAyOSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIgMgoKCgoKCgoKIyAxICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQuaCIgMQojIDEwICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJRE9NVUlFdmVudC5oIiAxCiMgMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01V SUV2ZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUV2ZW50LmgiIDEK IyAxMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUV2ZW50LmgiCiMgMSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbXN0dWJzLmgiIDEKIyAxNyAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbXN0dWJzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVdyaXRh YmxlU3RyaW5nLmgiIDEKIyAxOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbXN0dWJzLmgi IDIKaW5saW5lIFBSQm9vbCBET01TdHJpbmdJc051bGwoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcm IGFTdHJpbmcpCnsKCiAgcmV0dXJuIDA7Cn0KaW5saW5lIHZvaWQgU2V0RE9NU3RyaW5nVG9OdWxs KG5zQVdyaXRhYmxlU3RyaW5nJiBhU3RyaW5nKQp7CiAgYVN0cmluZy5UcnVuY2F0ZSgpOwoKfQp0 eXBlZGVmIFBSVWludDY0IERPTVRpbWVTdGFtcDsKCmNsYXNzIG5zSURPTUF0dHI7CgpjbGFzcyBu c0lET01DREFUQVNlY3Rpb247CgpjbGFzcyBuc0lET01DaGFyYWN0ZXJEYXRhOwoKY2xhc3MgbnNJ RE9NQ29tbWVudDsKCmNsYXNzIG5zSURPTURPTUltcGxlbWVudGF0aW9uOwoKY2xhc3MgbnNJRE9N RG9jdW1lbnQ7CgpjbGFzcyBuc0lET01Eb2N1bWVudEZyYWdtZW50OwoKY2xhc3MgbnNJRE9NRG9j dW1lbnRUeXBlOwoKY2xhc3MgbnNJRE9NRWxlbWVudDsKCmNsYXNzIG5zSURPTUVudGl0eTsKCmNs YXNzIG5zSURPTUVudGl0eVJlZmVyZW5jZTsKCmNsYXNzIG5zSURPTU5TRG9jdW1lbnQ7CgpjbGFz cyBuc0lET01OYW1lZE5vZGVNYXA7CgpjbGFzcyBuc0lET01Ob2RlOwoKY2xhc3MgbnNJRE9NTm9k ZUxpc3Q7CgpjbGFzcyBuc0lET01Ob3RhdGlvbjsKCmNsYXNzIG5zSURPTVByb2Nlc3NpbmdJbnN0 cnVjdGlvbjsKCmNsYXNzIG5zSURPTVRleHQ7CgpjbGFzcyBET01FeGNlcHRpb247CgpjbGFzcyBu c0lET01TdHlsZVNoZWV0TGlzdDsKCmNsYXNzIG5zSURPTUxpbmtTdHlsZTsKCmNsYXNzIG5zSURP TVN0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01NZWRpYUxpc3Q7CgpjbGFzcyBuc0lET01BYnN0cmFj dFZpZXc7CgpjbGFzcyBuc0lET01Eb2N1bWVudFZpZXc7CgpjbGFzcyBuc0lET01XaW5kb3c7Cgpj bGFzcyBuc0lET01XaW5kb3dJbnRlcm5hbDsKCmNsYXNzIG5zSURPTVdpbmRvd0NvbGxlY3Rpb247 CgpjbGFzcyBuc0lET01QbHVnaW47CgpjbGFzcyBuc0lET01QbHVnaW5BcnJheTsKCmNsYXNzIG5z SURPTU1pbWVUeXBlOwoKY2xhc3MgbnNJRE9NTWltZVR5cGVBcnJheTsKCmNsYXNzIG5zSURPTUJh clByb3A7CgpjbGFzcyBuc0lET01OYXZpZ2F0b3I7CgpjbGFzcyBuc0lET01TY3JlZW47CgpjbGFz cyBuc0lET01IaXN0b3J5OwoKY2xhc3MgbnNJRE9NRXZlbnQ7CgpjbGFzcyBuc0lET01FdmVudFRh cmdldDsKCmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CgpjbGFzcyBuc0lET01IVE1MRWxlbWVu dDsKCmNsYXNzIG5zSURPTUhUTUxGb3JtRWxlbWVudDsKCmNsYXNzIG5zSURPTUhUTUxDb2xsZWN0 aW9uOwoKY2xhc3MgbnNJRE9NQ1NTVmFsdWU7CgpjbGFzcyBuc0lET01DU1NQcmltaXRpdmVWYWx1 ZTsKCmNsYXNzIG5zSURPTUNTU1J1bGU7CgpjbGFzcyBuc0lET01DU1NSdWxlTGlzdDsKCmNsYXNz IG5zSURPTUNTU1N0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01DU1NTdHlsZURlY2xhcmF0aW9uOwoK Y2xhc3MgbnNJRE9NQ291bnRlcjsKCmNsYXNzIG5zSURPTVJlY3Q7CgpjbGFzcyBuc0lET01SR0JD b2xvcjsKCmNsYXNzIG5zSURPTUNTU1N0eWxlUnVsZTsKCmNsYXNzIG5zSURPTUNTU1N0eWxlUnVs ZUNvbGxlY3Rpb247CgpjbGFzcyBuc0lET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudDsKCmNsYXNz IG5zSURPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OwoKY2xhc3MgbnNJRE9NUmFuZ2U7CgpjbGFz cyBuc0lET01DUk1GT2JqZWN0OwoKY2xhc3MgbnNJRE9NQ3J5cHRvOwoKY2xhc3MgbnNJRE9NUGtj czExOwojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NRXZlbnQuaCIgMgoKCgoK CgpjbGFzcyBuc0lET01FdmVudFRhcmdldDsKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSURPTUV2ZW50LmgiCmNsYXNzIG5zSURPTUV2ZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGE2NmI3YjgwLCAweGZmNDYsIDB4YmQ5NywgeyAweDAwLCAweDgwLCAweDVm LCAweDhhLCAweGUzLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7 IENBUFRVUklOR19QSEFTRSA9IDFVIH07CgogIGVudW0geyBBVF9UQVJHRVQgPSAyVSB9OwoKICBl bnVtIHsgQlVCQkxJTkdfUEhBU0UgPSAzVSB9OwoKICBlbnVtIHsgTU9VU0VET1dOID0gMSB9OwoK ICBlbnVtIHsgTU9VU0VVUCA9IDIgfTsKCiAgZW51bSB7IE1PVVNFT1ZFUiA9IDQgfTsKCiAgZW51 bSB7IE1PVVNFT1VUID0gOCB9OwoKICBlbnVtIHsgTU9VU0VNT1ZFID0gMTYgfTsKCiAgZW51bSB7 IE1PVVNFRFJBRyA9IDMyIH07CgogIGVudW0geyBDTElDSyA9IDY0IH07CgogIGVudW0geyBEQkxD TElDSyA9IDEyOCB9OwoKICBlbnVtIHsgS0VZRE9XTiA9IDI1NiB9OwoKICBlbnVtIHsgS0VZVVAg PSA1MTIgfTsKCiAgZW51bSB7IEtFWVBSRVNTID0gMTAyNCB9OwoKICBlbnVtIHsgRFJBR0RST1Ag PSAyMDQ4IH07CgogIGVudW0geyBGT0NVUyA9IDQwOTYgfTsKCiAgZW51bSB7IEJMVVIgPSA4MTky IH07CgogIGVudW0geyBTRUxFQ1QgPSAxNjM4NCB9OwoKICBlbnVtIHsgQ0hBTkdFID0gMzI3Njgg fTsKCiAgZW51bSB7IFJFU0VUID0gNjU1MzYgfTsKCiAgZW51bSB7IFNVQk1JVCA9IDEzMTA3MiB9 OwoKICBlbnVtIHsgU0NST0xMID0gMjYyMTQ0IH07CgogIGVudW0geyBMT0FEID0gNTI0Mjg4IH07 CgogIGVudW0geyBVTkxPQUQgPSAxMDQ4NTc2IH07CgogIGVudW0geyBYRkVSX0RPTkUgPSAyMDk3 MTUyIH07CgogIGVudW0geyBBQk9SVCA9IDQxOTQzMDQgfTsKCiAgZW51bSB7IEVSUk9SID0gODM4 ODYwOCB9OwoKICBlbnVtIHsgTE9DQVRFID0gMTY3NzcyMTYgfTsKCiAgZW51bSB7IE1PVkUgPSAz MzU1NDQzMiB9OwoKICBlbnVtIHsgUkVTSVpFID0gNjcxMDg4NjQgfTsKCiAgZW51bSB7IEZPUldB UkQgPSAxMzQyMTc3MjggfTsKCiAgZW51bSB7IEhFTFAgPSAyNjg0MzU0NTYgfTsKCiAgZW51bSB7 IEJBQ0sgPSA1MzY4NzA5MTIgfTsKCiAgZW51bSB7IFRFWFQgPSAxMDczNzQxODI0IH07CgogIGVu dW0geyBBTFRfTUFTSyA9IDEgfTsKCiAgZW51bSB7IENPTlRST0xfTUFTSyA9IDIgfTsKCiAgZW51 bSB7IFNISUZUX01BU0sgPSA0IH07CgogIGVudW0geyBNRVRBX01BU0sgPSA4IH07CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFR5cGUobnNBV3JpdGFibGVTdHJpbmcgJiBhVHlwZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRUYXJnZXQobnNJRE9NRXZlbnRUYXJnZXQgKiAqYVRhcmdldCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50VGFyZ2V0KG5zSURPTUV2ZW50VGFy Z2V0ICogKmFDdXJyZW50VGFyZ2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9yaWdp bmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFPcmlnaW5hbFRhcmdldCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudFBoYXNlKFBSVWludDE2ICphRXZlbnRQaGFzZSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCdWJibGVzKFBSQm9vbCAqYUJ1YmJsZXMpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FuY2VsYWJsZShQUkJvb2wgKmFDYW5jZWxhYmxlKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRpbWVTdGFtcChET01UaW1lU3RhbXAgKmFUaW1l U3RhbXApID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcFByb3BhZ2F0aW9uKHZvaWQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJldmVudEJ1YmJsZSh2b2lkKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFByZXZlbnRDYXB0dXJlKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgUHJldmVudERlZmF1bHQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0RXZl bnQoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBldmVudFR5cGVBcmcsIFBSQm9vbCBjYW5CdWJi bGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnKSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNJRE9NVUlFdmVudC5oIiAyCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lET01VSUV2ZW50LmgiCmNsYXNzIG5zSURPTVVJRXZlbnQgOiBwdWJsaWMgbnNJRE9N RXZlbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYzMsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4 MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3KG5zSURPTUFic3RyYWN0VmlldyAqICphVmlldykg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZXRhaWwoUFJJbnQzMiAqYURldGFpbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0VUlFdmVudChjb25zdCBuc0FSZWFkYWJsZVN0cmlu ZyAmIHR5cGVBcmcsIFBSQm9vbCBjYW5CdWJibGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnLCBu c0lET01BYnN0cmFjdFZpZXcgKnZpZXdBcmcsIFBSSW50MzIgZGV0YWlsQXJnKSA9IDA7Cgp9Owoj IDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQuaCIgMgojIDI1ICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQuaCIKY2xhc3MgbnNJRE9NS2V5 RXZlbnQgOiBwdWJsaWMgbnNJRE9NVUlFdmVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwMjhlMGU2ZSwgMHg4 YjAxLCAweDExZDMsIHsgMHhhYSwgMHhlNywgMHgwMCwgMHgxMCwgMHg4MywgMHg4YSwgMHgzMSwg MHgyMyB9fTsgcmV0dXJuIGlpZDt9CgogIGVudW0geyBET01fVktfQ0FOQ0VMID0gM1UgfTsKCiAg ZW51bSB7IERPTV9WS19CQUNLX1NQQUNFID0gOFUgfTsKCiAgZW51bSB7IERPTV9WS19UQUIgPSA5 VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0NMRUFSID0gMTJVIH07CgogIGVudW0geyBET01fVktfUkVU VVJOID0gMTNVIH07CgogIGVudW0geyBET01fVktfRU5URVIgPSAxNFUgfTsKCiAgZW51bSB7IERP TV9WS19TSElGVCA9IDE2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0NPTlRST0wgPSAxN1UgfTsKCiAg ZW51bSB7IERPTV9WS19BTFQgPSAxOFUgfTsKCiAgZW51bSB7IERPTV9WS19QQVVTRSA9IDE5VSB9 OwoKICBlbnVtIHsgRE9NX1ZLX0NBUFNfTE9DSyA9IDIwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0VT Q0FQRSA9IDI3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NQQUNFID0gMzJVIH07CgogIGVudW0geyBE T01fVktfUEFHRV9VUCA9IDMzVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BBR0VfRE9XTiA9IDM0VSB9 OwoKICBlbnVtIHsgRE9NX1ZLX0VORCA9IDM1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0hPTUUgPSAz NlUgfTsKCiAgZW51bSB7IERPTV9WS19MRUZUID0gMzdVIH07CgogIGVudW0geyBET01fVktfVVAg PSAzOFUgfTsKCiAgZW51bSB7IERPTV9WS19SSUdIVCA9IDM5VSB9OwoKICBlbnVtIHsgRE9NX1ZL X0RPV04gPSA0MFUgfTsKCiAgZW51bSB7IERPTV9WS19QUklOVFNDUkVFTiA9IDQ0VSB9OwoKICBl bnVtIHsgRE9NX1ZLX0lOU0VSVCA9IDQ1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0RFTEVURSA9IDQ2 VSB9OwoKICBlbnVtIHsgRE9NX1ZLXzAgPSA0OFUgfTsKCiAgZW51bSB7IERPTV9WS18xID0gNDlV IH07CgogIGVudW0geyBET01fVktfMiA9IDUwVSB9OwoKICBlbnVtIHsgRE9NX1ZLXzMgPSA1MVUg fTsKCiAgZW51bSB7IERPTV9WS180ID0gNTJVIH07CgogIGVudW0geyBET01fVktfNSA9IDUzVSB9 OwoKICBlbnVtIHsgRE9NX1ZLXzYgPSA1NFUgfTsKCiAgZW51bSB7IERPTV9WS183ID0gNTVVIH07 CgogIGVudW0geyBET01fVktfOCA9IDU2VSB9OwoKICBlbnVtIHsgRE9NX1ZLXzkgPSA1N1UgfTsK CiAgZW51bSB7IERPTV9WS19TRU1JQ09MT04gPSA1OVUgfTsKCiAgZW51bSB7IERPTV9WS19FUVVB TFMgPSA2MVUgfTsKCiAgZW51bSB7IERPTV9WS19BID0gNjVVIH07CgogIGVudW0geyBET01fVktf QiA9IDY2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0MgPSA2N1UgfTsKCiAgZW51bSB7IERPTV9WS19E ID0gNjhVIH07CgogIGVudW0geyBET01fVktfRSA9IDY5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Yg PSA3MFUgfTsKCiAgZW51bSB7IERPTV9WS19HID0gNzFVIH07CgogIGVudW0geyBET01fVktfSCA9 IDcyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0kgPSA3M1UgfTsKCiAgZW51bSB7IERPTV9WS19KID0g NzRVIH07CgogIGVudW0geyBET01fVktfSyA9IDc1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0wgPSA3 NlUgfTsKCiAgZW51bSB7IERPTV9WS19NID0gNzdVIH07CgogIGVudW0geyBET01fVktfTiA9IDc4 VSB9OwoKICBlbnVtIHsgRE9NX1ZLX08gPSA3OVUgfTsKCiAgZW51bSB7IERPTV9WS19QID0gODBV IH07CgogIGVudW0geyBET01fVktfUSA9IDgxVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1IgPSA4MlUg fTsKCiAgZW51bSB7IERPTV9WS19TID0gODNVIH07CgogIGVudW0geyBET01fVktfVCA9IDg0VSB9 OwoKICBlbnVtIHsgRE9NX1ZLX1UgPSA4NVUgfTsKCiAgZW51bSB7IERPTV9WS19WID0gODZVIH07 CgogIGVudW0geyBET01fVktfVyA9IDg3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1ggPSA4OFUgfTsK CiAgZW51bSB7IERPTV9WS19ZID0gODlVIH07CgogIGVudW0geyBET01fVktfWiA9IDkwVSB9OwoK ICBlbnVtIHsgRE9NX1ZLX05VTVBBRDAgPSA5NlUgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQx ID0gOTdVIH07CgogIGVudW0geyBET01fVktfTlVNUEFEMiA9IDk4VSB9OwoKICBlbnVtIHsgRE9N X1ZLX05VTVBBRDMgPSA5OVUgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQ0ID0gMTAwVSB9OwoK ICBlbnVtIHsgRE9NX1ZLX05VTVBBRDUgPSAxMDFVIH07CgogIGVudW0geyBET01fVktfTlVNUEFE NiA9IDEwMlUgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQ3ID0gMTAzVSB9OwoKICBlbnVtIHsg RE9NX1ZLX05VTVBBRDggPSAxMDRVIH07CgogIGVudW0geyBET01fVktfTlVNUEFEOSA9IDEwNVUg fTsKCiAgZW51bSB7IERPTV9WS19NVUxUSVBMWSA9IDEwNlUgfTsKCiAgZW51bSB7IERPTV9WS19B REQgPSAxMDdVIH07CgogIGVudW0geyBET01fVktfU0VQQVJBVE9SID0gMTA4VSB9OwoKICBlbnVt IHsgRE9NX1ZLX1NVQlRSQUNUID0gMTA5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0RFQ0lNQUwgPSAx MTBVIH07CgogIGVudW0geyBET01fVktfRElWSURFID0gMTExVSB9OwoKICBlbnVtIHsgRE9NX1ZL X0YxID0gMTEyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YyID0gMTEzVSB9OwoKICBlbnVtIHsgRE9N X1ZLX0YzID0gMTE0VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y0ID0gMTE1VSB9OwoKICBlbnVtIHsg RE9NX1ZLX0Y1ID0gMTE2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y2ID0gMTE3VSB9OwoKICBlbnVt IHsgRE9NX1ZLX0Y3ID0gMTE4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y4ID0gMTE5VSB9OwoKICBl bnVtIHsgRE9NX1ZLX0Y5ID0gMTIwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxMCA9IDEyMVUgfTsK CiAgZW51bSB7IERPTV9WS19GMTEgPSAxMjJVIH07CgogIGVudW0geyBET01fVktfRjEyID0gMTIz VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxMyA9IDEyNFUgfTsKCiAgZW51bSB7IERPTV9WS19GMTQg PSAxMjVVIH07CgogIGVudW0geyBET01fVktfRjE1ID0gMTI2VSB9OwoKICBlbnVtIHsgRE9NX1ZL X0YxNiA9IDEyN1UgfTsKCiAgZW51bSB7IERPTV9WS19GMTcgPSAxMjhVIH07CgogIGVudW0geyBE T01fVktfRjE4ID0gMTI5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxOSA9IDEzMFUgfTsKCiAgZW51 bSB7IERPTV9WS19GMjAgPSAxMzFVIH07CgogIGVudW0geyBET01fVktfRjIxID0gMTMyVSB9OwoK ICBlbnVtIHsgRE9NX1ZLX0YyMiA9IDEzM1UgfTsKCiAgZW51bSB7IERPTV9WS19GMjMgPSAxMzRV IH07CgogIGVudW0geyBET01fVktfRjI0ID0gMTM1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTV9M T0NLID0gMTQ0VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NDUk9MTF9MT0NLID0gMTQ1VSB9OwoKICBl bnVtIHsgRE9NX1ZLX0NPTU1BID0gMTg4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BFUklPRCA9IDE5 MFUgfTsKCiAgZW51bSB7IERPTV9WS19TTEFTSCA9IDE5MVUgfTsKCiAgZW51bSB7IERPTV9WS19C QUNLX1FVT1RFID0gMTkyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX09QRU5fQlJBQ0tFVCA9IDIxOVUg fTsKCiAgZW51bSB7IERPTV9WS19CQUNLX1NMQVNIID0gMjIwVSB9OwoKICBlbnVtIHsgRE9NX1ZL X0NMT1NFX0JSQUNLRVQgPSAyMjFVIH07CgogIGVudW0geyBET01fVktfUVVPVEUgPSAyMjJVIH07 CgogIGVudW0geyBET01fVktfTUVUQSA9IDIyNFUgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 Q2hhckNvZGUoUFJVaW50MzIgKmFDaGFyQ29kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRLZXlDb2RlKFBSVWludDMyICphS2V5Q29kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRBbHRLZXkoUFJCb29sICphQWx0S2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN0 cmxLZXkoUFJCb29sICphQ3RybEtleSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaGlm dEtleShQUkJvb2wgKmFTaGlmdEtleSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRh S2V5KFBSQm9vbCAqYU1ldGFLZXkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdEtleUV2 ZW50KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgdHlwZUFyZywgUFJCb29sIGNhbkJ1YmJsZUFy ZywgUFJCb29sIGNhbmNlbGFibGVBcmcsIG5zSURPTUFic3RyYWN0VmlldyAqdmlld0FyZywgUFJC b29sIGN0cmxLZXlBcmcsIFBSQm9vbCBhbHRLZXlBcmcsIFBSQm9vbCBzaGlmdEtleUFyZywgUFJC b29sIG1ldGFLZXlBcmcsIFBSVWludDMyIGtleUNvZGVBcmcsIFBSVWludDMyIGNoYXJDb2RlQXJn KSA9IDA7Cgp9OwojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAy CgpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpjbGFzcyBuc0lSZWdpb247CmNsYXNzIG5zSVdp ZGdldDsKY2xhc3MgbnNJTWVudUl0ZW07CmNsYXNzIG5zSUFjY2Vzc2libGU7CmNsYXNzIG5zSUNv bnRlbnQ7CgoKCgoKZW51bSBuc0V2ZW50U3RhdHVzIHsKCiAgbnNFdmVudFN0YXR1c19lSWdub3Jl LAoKICBuc0V2ZW50U3RhdHVzX2VDb25zdW1lTm9EZWZhdWx0LAoKICBuc0V2ZW50U3RhdHVzX2VD b25zdW1lRG9EZWZhdWx0Cn07CgoKCgplbnVtIG5zU2l6ZU1vZGUgewogIG5zU2l6ZU1vZGVfTm9y bWFsID0gMCwKICBuc1NpemVNb2RlX01pbmltaXplZCwKICBuc1NpemVNb2RlX01heGltaXplZAp9 OwoKCgoKZW51bSBuc1dpbmRvd1ogewogIG5zV2luZG93WlRvcCA9IDAsCiAgbnNXaW5kb3daQm90 dG9tLAogIG5zV2luZG93WlJlbGF0aXZlCn07CgoKCgoKc3RydWN0IG5zRXZlbnQgewoKICBQUlVp bnQ4IGV2ZW50U3RydWN0VHlwZTsKCiAgUFJVaW50MzIgbWVzc2FnZTsKCiAgbnNQb2ludCBwb2lu dDsKCiAgbnNQb2ludCByZWZQb2ludDsKCiAgUFJVaW50MzIgdGltZTsKCiAgUFJVaW50MzIgZmxh Z3M7CgogIFBSVWludDMyIGludGVybmFsQXBwRmxhZ3M7CgogIG5zSGFzaEtleSogdXNlclR5cGU7 Cn07CgoKCgoKc3RydWN0IG5zR1VJRXZlbnQgOiBwdWJsaWMgbnNFdmVudCB7CgogIG5zSVdpZGdl dCogd2lkZ2V0OwoKICB2b2lkKiBuYXRpdmVNc2c7Cn07CgoKCgoKc3RydWN0IG5zU2l6ZUV2ZW50 IDogcHVibGljIG5zR1VJRXZlbnQgewoKICAgIG5zUmVjdCAqd2luZG93U2l6ZTsKCiAgICBQUklu dDMyIG1XaW5XaWR0aDsKCiAgICBQUkludDMyIG1XaW5IZWlnaHQ7Cn07CgoKCgoKc3RydWN0IG5z U2l6ZU1vZGVFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsKCiAgICBuc1NpemVNb2RlIG1TaXpl TW9kZTsKfTsKCgoKCgpzdHJ1Y3QgbnNaTGV2ZWxFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsK CiAgbnNXaW5kb3daIG1QbGFjZW1lbnQ7CiAgbnNJV2lkZ2V0ICptUmVxQmVsb3csCiAgICAgICAg ICAgICptQWN0dWFsQmVsb3c7CiAgUFJCb29sIG1JbW1lZGlhdGUsCiAgICAgICAgICAgICBtQWRq dXN0ZWQ7Cn07CgoKCgoKc3RydWN0IG5zUGFpbnRFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsK CiAgICBuc0lSZW5kZXJpbmdDb250ZXh0ICpyZW5kZXJpbmdDb250ZXh0OwoKICAgIG5zSVJlZ2lv biAqcmVnaW9uOwoKICAgIG5zUmVjdCAqcmVjdDsKfTsKCgoKCgpzdHJ1Y3QgbnNTY3JvbGxiYXJF dmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsKCiAgICBQUlVpbnQzMiBwb3NpdGlvbjsKfTsKCnN0 cnVjdCBuc1Njcm9sbFBvcnRFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsKICBlbnVtIG9yaWVu dFR5cGUgewogICAgdmVydGljYWwgPSAwLAogICAgaG9yaXpvbnRhbCA9IDEsCiAgICBib3RoID0g MgogIH07CgogIG9yaWVudFR5cGUgb3JpZW50Owp9OwoKc3RydWN0IG5zSW5wdXRFdmVudCA6IHB1 YmxpYyBuc0dVSUV2ZW50IHsKCiAgICBQUkJvb2wgaXNTaGlmdDsKCiAgICBQUkJvb2wgaXNDb250 cm9sOwoKICAgIFBSQm9vbCBpc0FsdDsKCgogICAgUFJCb29sIGlzTWV0YTsKfTsKCgoKCgpzdHJ1 Y3QgbnNNb3VzZUV2ZW50IDogcHVibGljIG5zSW5wdXRFdmVudCB7CgogICAgUFJVaW50MzIgY2xp Y2tDb3VudDsKCgogICAgUFJCb29sIGFjY2VwdEFjdGl2YXRpb247Cn07CgoKCgoKc3RydWN0IG5z QWNjZXNzaWJsZUV2ZW50IDogcHVibGljIG5zSW5wdXRFdmVudCB7CiAgICBuc0lBY2Nlc3NpYmxl KiBhY2Nlc3NpYmxlOwp9OwoKCgoKCnN0cnVjdCBuc0tleUV2ZW50IDogcHVibGljIG5zSW5wdXRF dmVudCB7CgogICAgUFJVaW50MzIga2V5Q29kZTsKCiAgICBQUlVpbnQzMiBjaGFyQ29kZTsKCiAg ICBQUkJvb2wgaXNDaGFyOwp9OwoKCgoKc3RydWN0IG5zVGV4dFJhbmdlIHsKICAgICAgICBQUlVp bnQzMiBtU3RhcnRPZmZzZXQ7CiAgICAgICAgUFJVaW50MzIgbUVuZE9mZnNldDsKICAgICAgICBQ UlVpbnQzMiBtUmFuZ2VUeXBlOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgbnNUZXh0UmFuZ2UgbnNUZXh0 UmFuZ2U7CnR5cGVkZWYgbnNUZXh0UmFuZ2UqIG5zVGV4dFJhbmdlQXJyYXk7CgpzdHJ1Y3QgbnNU ZXh0RXZlbnRSZXBseSB7CiAgICAgICAgbnNSZWN0IG1DdXJzb3JQb3NpdGlvbjsKICAgICAgICBQ UkJvb2wgbUN1cnNvcklzQ29sbGFwc2VkOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgbnNUZXh0RXZlbnRS ZXBseSBuc1RleHRFdmVudFJlcGx5OwoKc3RydWN0IG5zVGV4dEV2ZW50IDogcHVibGljIG5zSW5w dXRFdmVudCB7CiAgICAgICAgUFJVbmljaGFyKiB0aGVUZXh0OwogICAgICAgIG5zVGV4dEV2ZW50 UmVwbHkgdGhlUmVwbHk7CiAgICAgICAgUFJVaW50MzIgcmFuZ2VDb3VudDsKICAgICAgICBuc1Rl eHRSYW5nZUFycmF5IHJhbmdlQXJyYXk7CiAgUFJCb29sIGlzQ2hhcjsKfTsKCnN0cnVjdCBuc0Nv bXBvc2l0aW9uRXZlbnQgOiBwdWJsaWMgbnNJbnB1dEV2ZW50IHsKICAgICAgICBQUlVpbnQzMiBj b21wb3NpdGlvbk1lc3NhZ2U7CiAgICAgICAgbnNUZXh0RXZlbnRSZXBseSB0aGVSZXBseTsKfTsK CnN0cnVjdCBuc01vdXNlU2Nyb2xsRXZlbnQgOiBwdWJsaWMgbnNJbnB1dEV2ZW50IHsKCiAgZW51 bSBuc01vdXNlU2Nyb2xsRmxhZ3MgewogICAga0lzRnVsbFBhZ2UgPSAxIDw8IDAsCiAgICBrSXNW ZXJ0aWNhbCA9IDEgPDwgMSwKICAgIGtJc0hvcml6b250YWwgPSAxIDw8IDIKICB9OwoKICBQUklu dDMyIHNjcm9sbEZsYWdzOwogIFBSSW50MzIgZGVsdGE7Cn07CgpzdHJ1Y3QgbnNSZWNvbnZlcnNp b25FdmVudFJlcGx5IHsKICBQUlVuaWNoYXIgKm1SZWNvbnZlcnNpb25TdHJpbmc7Cn07CgpzdHJ1 Y3QgbnNSZWNvbnZlcnNpb25FdmVudCA6IHB1YmxpYyBuc0lucHV0RXZlbnQgewogIG5zUmVjb252 ZXJzaW9uRXZlbnRSZXBseSB0aGVSZXBseTsKfTsKIyAyODMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0dVSUV2ZW50LmgiCnN0cnVjdCBuc01lbnVFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50 IHsKICBuc0lNZW51SXRlbSAqIG1NZW51SXRlbTsKICBQUlVpbnQzMiBtQ29tbWFuZDsKfTsKIyAy OTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiCnN0cnVjdCBuc0Zvcm1F dmVudCA6IHB1YmxpYyBuc0V2ZW50IHsKICBuc0lDb250ZW50ICpvcmlnaW5hdG9yOwp9OwoKCgoK c3RydWN0IG5zRm9jdXNFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsKICBQUkJvb2wgaXNNb3pX aW5kb3dUYWtpbmdGb2N1czsKfTsKCgoKCgplbnVtIG5zRHJhZ0Ryb3BFdmVudFN0YXR1cyB7Cgog IG5zRHJhZ0Ryb3BFdmVudFN0YXR1c19lRHJhZ0VudGVyZWQsCgogIG5zRHJhZ0Ryb3BFdmVudFN0 YXR1c19lRHJhZ0V4aXRlZCwKCiAgbnNEcmFnRHJvcEV2ZW50U3RhdHVzX2VEcm9wCn07CiMgMjgg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNb3VzZUxpc3RlbmVyLmgiIDIKIyAxICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNJTW91c2VMaXN0ZW5lci5oIiAyCiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lNb3VzZUxpc3RlbmVyLmgiCmNsYXNzIG5zSU1vdXNlTGlzdGVuZXIgOiBwdWJs aWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweGM4M2Y2YjgxLCAweGQ3Y2UsIDB4MTFkMiwg eyAweDgzLCAweDYwLCAweGM0LCAweGM4LCAweDk0LCAweGM0LCAweDkxLCAweDdjIH0gfTsgcmV0 dXJuIGlpZDt9CgoKCgoKCiAgICB2aXJ0dWFsIG5zRXZlbnRTdGF0dXMgTW91c2VQcmVzc2VkKGNv bnN0IG5zR1VJRXZlbnQgJiBhTW91c2VFdmVudCkgPSAwOwoKCgoKCgogICAgdmlydHVhbCBuc0V2 ZW50U3RhdHVzIE1vdXNlUmVsZWFzZWQoY29uc3QgbnNHVUlFdmVudCAmIGFNb3VzZUV2ZW50KSA9 IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc0V2ZW50U3RhdHVzIE1vdXNlQ2xpY2tlZChjb25zdCBu c0dVSUV2ZW50ICYgYU1vdXNlRXZlbnQpID0gMDsKCgoKCgoKICAgIHZpcnR1YWwgbnNFdmVudFN0 YXR1cyBNb3VzZU1vdmVkKGNvbnN0IG5zR1VJRXZlbnQgJiBhTW91c2VFdmVudCkgPSAwOwoKfTsK IyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAyCiMgMSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSU1lbnVMaXN0ZW5lci5oIiAxCiMgMjYgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lNZW51TGlzdGVuZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNHVUlFdmVudC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lN ZW51TGlzdGVuZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0 cy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW51TGlzdGVuZXIuaCIg MgojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTWVudUxpc3RlbmVyLmgiCmNsYXNz IG5zSU1lbnVMaXN0ZW5lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CgogIHB1YmxpYzoKICAgIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4 ZjJlNzk2MDIsIDB4MTcwMCwgMHgxMWQ1LCB7IDB4YmIsIDB4NmYsIDB4OTAsIDB4ZjIsIDB4NDAs IDB4ZmUsIDB4NDksIDB4M2MgfSB9OzsgcmV0dXJuIGlpZDt9CgoKCgoKCiAgICB2aXJ0dWFsIG5z RXZlbnRTdGF0dXMgTWVudUl0ZW1TZWxlY3RlZChjb25zdCBuc01lbnVFdmVudCAmIGFNZW51RXZl bnQpID0gMDsKCgoKCgoKICAgIHZpcnR1YWwgbnNFdmVudFN0YXR1cyBNZW51U2VsZWN0ZWQoY29u c3QgbnNNZW51RXZlbnQgJiBhTWVudUV2ZW50KSA9IDA7CgoKCgoKCiAgICB2aXJ0dWFsIG5zRXZl bnRTdGF0dXMgTWVudURlc2VsZWN0ZWQoY29uc3QgbnNNZW51RXZlbnQgJiBhTWVudUV2ZW50KSA9 IDA7CgogICAgdmlydHVhbCBuc0V2ZW50U3RhdHVzIE1lbnVDb25zdHJ1Y3QoIGNvbnN0IG5zTWVu dUV2ZW50ICYgYU1lbnVFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJV2lkZ2V0KiBhUGFyZW50V2luZG93LCB2b2lkKiBhTm9kZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYVdlYlNoZWxsKSA9IDA7CgogICAg dmlydHVhbCBuc0V2ZW50U3RhdHVzIE1lbnVEZXN0cnVjdChjb25zdCBuc01lbnVFdmVudCAmIGFN ZW51RXZlbnQpID0gMDsKCiAgICB2aXJ0dWFsIG5zRXZlbnRTdGF0dXMgQ2hlY2tSZWJ1aWxkKFBS Qm9vbCAmIGFNZW51RXZlbnQpID0gMDsKICAgIHZpcnR1YWwgbnNFdmVudFN0YXR1cyBTZXRSZWJ1 aWxkKFBSQm9vbCBhTWVudUV2ZW50KSA9IDA7Cn07CiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lXaWRnZXQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFn ZS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgojIDEgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zUmVjdC5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIiAy CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMQoj IDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgojIDEg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0NvbG9yLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0Nv bnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAz MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMgojIDEg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5oIiAxCiMgMjYgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5oIgojIDEgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJRHJhd2luZ1N1cmZhY2UuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lTdXBwb3J0cy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5n U3VyZmFjZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIiAxCiMg MjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5oIiAyCgoKCnR5 cGVkZWYgc3RydWN0CnsKICBQUlVpbnQzMiBtUmVkWmVyb01hc2s7CiAgUFJVaW50MzIgbUdyZWVu WmVyb01hc2s7CiAgUFJVaW50MzIgbUJsdWVaZXJvTWFzazsKICBQUlVpbnQzMiBtQWxwaGFaZXJv TWFzazsKICBQUlVpbnQzMiBtUmVkTWFzazsKICBQUlVpbnQzMiBtR3JlZW5NYXNrOwogIFBSVWlu dDMyIG1CbHVlTWFzazsKICBQUlVpbnQzMiBtQWxwaGFNYXNrOwogIFBSVWludDggbVJlZENvdW50 OwogIFBSVWludDggbUdyZWVuQ291bnQ7CiAgUFJVaW50OCBtQmx1ZUNvdW50OwogIFBSVWludDgg bUFscGhhQ291bnQ7CiAgUFJVaW50OCBtUmVkU2hpZnQ7CiAgUFJVaW50OCBtR3JlZW5TaGlmdDsK ICBQUlVpbnQ4IG1CbHVlU2hpZnQ7CiAgUFJVaW50OCBtQWxwaGFTaGlmdDsKfSBuc1BpeGVsRm9y bWF0OwoKCgoKCgoKY2xhc3MgbnNJRHJhd2luZ1N1cmZhY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMK ewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsgMHg2MWNjNzdlMCwgMHhjYWFjLCAweDExZDIsIHsgMHhhOCwgMHg0OSwgMHgw MCwgMHg0MCwgMHg5NSwgMHg5YSwgMHgyOCwgMHhjOSB9IH07IHJldHVybiBpaWQ7fQojIDc5ICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRHJhd2luZ1N1cmZhY2UuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IExvY2soUFJJbnQzMiBhWCwgUFJJbnQzMiBhWSwgUFJVaW50MzIgYVdpZHRoLCBQUlVp bnQzMiBhSGVpZ2h0LAogICAgICAgICAgICAgICAgICB2b2lkICoqYUJpdHMsIFBSSW50MzIgKmFT dHJpZGUsIFBSSW50MzIgKmFXaWR0aEJ5dGVzLAogICAgICAgICAgICAgICAgICBQUlVpbnQzMiBh RmxhZ3MpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVbmxvY2sodm9pZCkgPSAwOwoj IDk4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRHJhd2luZ1N1cmZhY2UuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldERpbWVuc2lvbnMoUFJVaW50MzIgKmFXaWR0aCwgUFJVaW50MzIgKmFI ZWlnaHQpID0gMDsKIyAxMDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3Vy ZmFjZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNPZmZzY3JlZW4oUFJCb29sICphT2ZmU2NyZWVu KSA9IDA7CiMgMTIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRHJhd2luZ1N1cmZhY2Uu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGl4ZWxBZGRyZXNzYWJsZShQUkJvb2wgKmFBZGRyZXNz YWJsZSkgPSAwOwojIDEzMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURyYXdpbmdTdXJm YWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQaXhlbEZvcm1hdChuc1BpeGVsRm9ybWF0ICph Rm9ybWF0KSA9IDA7Cn07CiMgMzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJp bmdDb250ZXh0LmgiIDIKCmNsYXNzIG5zSVdpZGdldDsKY2xhc3MgbnNJRm9udE1ldHJpY3M7CmNs YXNzIG5zSUltYWdlOwpjbGFzcyBuc1RyYW5zZm9ybTJEOwpjbGFzcyBuc1N0cmluZzsKY2xhc3Mg bnNJRGV2aWNlQ29udGV4dDsKY2xhc3MgbnNJUmVnaW9uOwoKc3RydWN0IG5zRm9udDsKc3RydWN0 IG5zUG9pbnQ7CnN0cnVjdCBuc1JlY3Q7CgoKCgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9nZnh0eXBlcy5oIiAxCiMgMTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZnh0eXBl cy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngydHlwZXMuaCIgMQojIDE3ICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4MnR5cGVzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2dmeGNvbXBhdC5oIiAxCiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9n Znhjb21wYXQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMg MzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZnhjb21wYXQuaCIgMgojIDE4ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvZ2Z4MnR5cGVzLmgiIDIKCgoKCnR5cGVkZWYgZmxvYXQgZ2Z4X2Rp bWVuc2lvbjsKCgoKCgp0eXBlZGVmIGZsb2F0IGdmeF9jb29yZDsKCgoKCgp0eXBlZGVmIGZsb2F0 IGdmeF9hbmdsZTsKCgoKCgoKCnR5cGVkZWYgUFJVaW50MzIgZ2Z4X2NvbG9yOwoKCgoKCnR5cGVk ZWYgUFJVaW50MTYgZ2Z4X2RlcHRoOwoKCgoKCgp0eXBlZGVmIFBSSW50MzIgZ2Z4X2Zvcm1hdDsK CgoKCgp0eXBlZGVmIGZsb2F0IGdmeF9nYW1tYTsKIyAxNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2dmeHR5cGVzLmgiIDIKCgoKCgoKdHlwZWRlZiBQUkludDMyIG5zY29vcmQ7CiMgNTEgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiIDIKY2xhc3MgaW1n SUNvbnRhaW5lcjsKCgoKCnR5cGVkZWYgZW51bQp7CiAgbnNDbGlwQ29tYmluZV9rSW50ZXJzZWN0 ID0gMCwKICBuc0NsaXBDb21iaW5lX2tVbmlvbiA9IDEsCiAgbnNDbGlwQ29tYmluZV9rU3VidHJh Y3QgPSAyLAogIG5zQ2xpcENvbWJpbmVfa1JlcGxhY2UgPSAzCn0gbnNDbGlwQ29tYmluZTsKCgp0 eXBlZGVmIGVudW0KewogIG5zTGluZVN0eWxlX2tOb25lID0gMCwKICBuc0xpbmVTdHlsZV9rU29s aWQgPSAxLAogIG5zTGluZVN0eWxlX2tEYXNoZWQgPSAyLAogIG5zTGluZVN0eWxlX2tEb3R0ZWQg PSAzCn0gbnNMaW5lU3R5bGU7CiMgODAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5k ZXJpbmdDb250ZXh0LmgiCnR5cGVkZWYgdm9pZCAqIG5zRHJhd2luZ1N1cmZhY2U7CgoKY2xhc3Mg bnNJUmVuZGVyaW5nQ29udGV4dCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweGE2 Y2Y5MDY4LCAweDE1YjMsIDB4MTFkMix7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4 YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO30KIyA5NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJRGV2 aWNlQ29udGV4dCogYUNvbnRleHQsIG5zSVdpZGdldCAqYVdpZGdldCkgPSAwOwoKCgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJRGV2aWNlQ29udGV4dCogYUNvbnRleHQsIG5zRHJhd2lu Z1N1cmZhY2UgYVN1cmZhY2UpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldCh2b2lk KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERldmljZUNvbnRleHQobnNJRGV2aWNl Q29udGV4dCAqJiBhRGV2aWNlQ29udGV4dCkgPSAwOwojIDEyOCAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IExvY2tEcmF3 aW5nU3VyZmFjZShQUkludDMyIGFYLCBQUkludDMyIGFZLCBQUlVpbnQzMiBhV2lkdGgsIFBSVWlu dDMyIGFIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFCaXRz LCBQUkludDMyICphU3RyaWRlLCBQUkludDMyICphV2lkdGhCeXRlcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IFVubG9ja0RyYXdpbmdTdXJmYWNlKHZvaWQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBTZWxlY3RPZmZTY3JlZW5EcmF3aW5nU3VyZmFjZShuc0RyYXdpbmdTdXJmYWNlIGFT dXJmYWNlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERyYXdpbmdTdXJmYWNlKG5z RHJhd2luZ1N1cmZhY2UgKmFTdXJmYWNlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEhpbnRzKFBSVWludDMyJiBhUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHVz aFN0YXRlKHZvaWQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBvcFN0YXRlKFBSQm9v bCAmYUNsaXBFbXB0eSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlUmVj dChjb25zdCBuc1JlY3QmIGFSZWN0LCBQUkJvb2wgJmFJc1Zpc2libGUpID0gMDsKIyAxODUgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRDbGlwUmVjdChjb25zdCBuc1JlY3QmIGFSZWN0LCBuc0NsaXBDb21iaW5lIGFD b21iaW5lLCBQUkJvb2wgJmFDbGlwRW1wdHkpID0gMDsKIyAxOTQgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGlw UmVjdChuc1JlY3QgJmFSZWN0LCBQUkJvb2wgJmFIYXNMb2NhbENsaXApID0gMDsKCgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldExpbmVTdHlsZShuc0xpbmVTdHlsZSBhTGluZVN0eWxlKSA9IDA7 CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaW5lU3R5bGUobnNMaW5lU3R5bGUgJmFMaW5l U3R5bGUpID0gMDsKIyAyMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdD b250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDbGlwUmVnaW9uKGNvbnN0IG5zSVJlZ2lv biYgYVJlZ2lvbiwgbnNDbGlwQ29tYmluZSBhQ29tYmluZSwgUFJCb29sICZhQ2xpcEVtcHR5KSA9 IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29weUNsaXBSZWdpb24obnNJUmVnaW9uICZh UmVnaW9uKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xpcFJlZ2lvbihuc0lS ZWdpb24gKiphUmVnaW9uKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbG9yKG5z Y29sb3IgYUNvbG9yKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbG9yKG5zY29s b3IgJmFDb2xvcikgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb250KGNv bnN0IG5zRm9udCYgYUZvbnQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbnQo bnNJRm9udE1ldHJpY3MgKmFGb250TWV0cmljcykgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRGb250TWV0cmljcyhuc0lGb250TWV0cmljcyAqJmFGb250TWV0cmljcykgPSAwOwoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgVHJhbnNsYXRlKG5zY29vcmQgYVgsIG5zY29vcmQgYVkpID0g MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNjYWxlKGZsb2F0IGFTeCwgZmxvYXQgYVN5KSA9 IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRUcmFuc2Zvcm0obnNUcmFuc2Zv cm0yRCAqJmFUcmFuc2Zvcm0pID0gMDsKIyAyOTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVEcmF3aW5nU3Vy ZmFjZShuc1JlY3QgKmFCb3VuZHMsIFBSVWludDMyIGFTdXJmRmxhZ3MsIG5zRHJhd2luZ1N1cmZh Y2UgJmFTdXJmYWNlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3lEcmF3aW5n U3VyZmFjZShuc0RyYXdpbmdTdXJmYWNlIGFEUykgPSAwOwojIDMxMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdM aW5lKG5zY29vcmQgYVgwLCBuc2Nvb3JkIGFZMCwgbnNjb29yZCBhWDEsIG5zY29vcmQgYVkxKSA9 IDA7CiMgMzIxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5o IgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1N0ZExpbmUobnNjb29yZCBhWDAsIG5zY29vcmQgYVkw LCBuc2Nvb3JkIGFYMSwgbnNjb29yZCBhWTEpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IERyYXdQb2x5bGluZShjb25zdCBuc1BvaW50IGFQb2ludHNbXSwgUFJJbnQzMiBhTnVtUG9pbnRz KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdSZWN0KGNvbnN0IG5zUmVjdCYgYVJl Y3QpID0gMDsKIyAzNDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250 ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3UmVjdChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZ LCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IEZpbGxSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QpID0gMDsKIyAzNTggIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBGaWxsUmVjdChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29y ZCBhSGVpZ2h0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEludmVydFJlY3QoY29uc3Qg bnNSZWN0JiBhUmVjdCkgPSAwOwojIDM3MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJl bmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEludmVydFJlY3QobnNjb29yZCBh WCwgbnNjb29yZCBhWSwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCkgPSAwOwoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1BvbHlnb24oY29uc3QgbnNQb2ludCBhUG9pbnRzW10s IFBSSW50MzIgYU51bVBvaW50cykgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRmlsbFBv bHlnb24oY29uc3QgbnNQb2ludCBhUG9pbnRzW10sIFBSSW50MzIgYU51bVBvaW50cykgPSAwOwoK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmFzdGVyUG9seWdvbihjb25zdCBuc1BvaW50IGFQb2lu dHNbXSwgUFJJbnQzMiBhTnVtUG9pbnRzKT0wOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRmls bFN0ZFBvbHlnb24oY29uc3QgbnNQb2ludCBhUG9pbnRzW10sIFBSSW50MzIgYU51bVBvaW50cykg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3RWxsaXBzZShjb25zdCBuc1JlY3QmIGFS ZWN0KSA9IDA7CiMgNDE2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29u dGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd0VsbGlwc2UobnNjb29yZCBhWCwgbnNjb29y ZCBhWSwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCkgPSAwOwoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBGaWxsRWxsaXBzZShjb25zdCBuc1JlY3QmIGFSZWN0KSA9IDA7CiMgNDMxICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwg bnNyZXN1bHQgRmlsbEVsbGlwc2UobnNjb29yZCBhWCwgbnNjb29yZCBhWSwgbnNjb29yZCBhV2lk dGgsIG5zY29vcmQgYUhlaWdodCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdB cmMoY29uc3QgbnNSZWN0JiBhUmVjdCwKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVN0YXJ0 QW5nbGUsIGZsb2F0IGFFbmRBbmdsZSkgPSAwOwojIDQ1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdBcmMobnNj b29yZCBhWCwgbnNjb29yZCBhWSwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCwKICAg ICAgICAgICAgICAgICAgICAgZmxvYXQgYVN0YXJ0QW5nbGUsIGZsb2F0IGFFbmRBbmdsZSkgPSAw OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZpbGxBcmMoY29uc3QgbnNSZWN0JiBhUmVjdCwK ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVN0YXJ0QW5nbGUsIGZsb2F0IGFFbmRBbmdsZSkg PSAwOwojIDQ3MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEZpbGxBcmMobnNjb29yZCBhWCwgbnNjb29yZCBhWSwgbnNj b29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgZmxvYXQg YVN0YXJ0QW5nbGUsIGZsb2F0IGFFbmRBbmdsZSkgPSAwOwojIDQ4MiAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdp ZHRoKGNoYXIgYUMsIG5zY29vcmQgJmFXaWR0aCkgPSAwOwojIDQ5NCAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdp ZHRoKFBSVW5pY2hhciBhQywgbnNjb29yZCAmYVdpZHRoLAogICAgICAgICAgICAgICAgICAgICAg UFJJbnQzMiAqYUZvbnRJRCA9IDApID0gMDsKIyA1MDcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaWR0aChjb25z dCBuc1N0cmluZyYgYVN0cmluZywgbnNjb29yZCAmYVdpZHRoLAogICAgICAgICAgICAgICAgICAg ICAgUFJJbnQzMiAqYUZvbnRJRCA9IDApID0gMDsKIyA1MTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaWR0aChj b25zdCBjaGFyKiBhU3RyaW5nLCBuc2Nvb3JkJiBhV2lkdGgpID0gMDsKIyA1MjcgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRXaWR0aChjb25zdCBjaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoLAogICAgICAg ICAgICAgICAgICAgICAgbnNjb29yZCYgYVdpZHRoKSA9IDA7CiMgNTQxICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 V2lkdGgoY29uc3QgUFJVbmljaGFyICphU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoLAogICAgICAg ICAgICAgICAgICAgICAgbnNjb29yZCAmYVdpZHRoLCBQUkludDMyICphRm9udElEID0gMCkgPSAw OwojIDYxMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdTdHJpbmcoY29uc3QgY2hhciAqYVN0cmluZywgUFJVaW50 MzIgYUxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhWCwgbnNjb29yZCBh WSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb29yZCogYVNwYWNpbmcgPSAwKSA9 IDA7CiMgNjI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5o IgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1N0cmluZyhjb25zdCBQUlVuaWNoYXIgKmFTdHJpbmcs IFBSVWludDMyIGFMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYVgsIG5z Y29vcmQgYVksCiAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUZvbnRJRCA9IC0xLAog ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc2Nvb3JkKiBhU3BhY2luZyA9IDApID0gMDsK IyA2NDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBEcmF3U3RyaW5nKGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLCBuc2Nv b3JkIGFYLCBuc2Nvb3JkIGFZLAogICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFGb250 SUQgPSAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb29yZCogYVNwYWNpbmcg PSAwKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3SW1hZ2UobnNJSW1hZ2UgKmFJ bWFnZSwgbnNjb29yZCBhWCwgbnNjb29yZCBhWSkgPSAwOwojIDY2MCAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdJ bWFnZShuc0lJbWFnZSAqYUltYWdlLCBuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLAogICAgICAgICAg ICAgICAgICAgICAgIG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpID0gMDsKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgRHJhd0ltYWdlKG5zSUltYWdlICphSW1hZ2UsIGNvbnN0IG5zUmVj dCYgYVJlY3QpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdJbWFnZShuc0lJbWFn ZSAqYUltYWdlLCBjb25zdCBuc1JlY3QmIGFTUmVjdCwgY29uc3QgbnNSZWN0JiBhRFJlY3QpPTA7 CiMgNjg4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgRHJhd1RpbGUobnNJSW1hZ2UgKmFJbWFnZSxuc2Nvb3JkIGFYMCxu c2Nvb3JkIGFZMCxuc2Nvb3JkIGFYMSxuc2Nvb3JkIGFZMSwKICAgICAgICAgICAgICAgICAgICAg ICAgbnNjb29yZCBhV2lkdGgsbnNjb29yZCBhSGVpZ2h0KSA9IDA7CiMgNzAyICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg RHJhd1BhdGgobnNQYXRoUG9pbnQgYVBvaW50QXJyYXlbXSxQUkludDMyIGFOdW1QdHMpID0gMDsK IyA3MTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBGaWxsUGF0aChuc1BhdGhQb2ludCBhUG9pbnRBcnJheVtdLFBSSW50 MzIgYU51bVB0cykgPSAwOwojIDcyMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRl cmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvcHlPZmZTY3JlZW5CaXRzKG5zRHJh d2luZ1N1cmZhY2UgYVNyY1N1cmYsIFBSSW50MzIgYVNyY1gsIFBSSW50MzIgYVNyY1ksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QgJmFEZXN0Qm91bmRzLCBQUlVp bnQzMiBhQ29weUZsYWdzKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmV0cmlldmVDdXJyZW50 TmF0aXZlR3JhcGhpY0RhdGEoUFJVaW50MzIgKiBuZ2QpID0gMDsKIyA3MzQgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBE cmF3VGlsZShuc0lJbWFnZSAqYUltYWdlLCBuc2Nvb3JkIGFTcmNYT2Zmc2V0LAogICAgICAgICAg ICAgICAgICAgICAgbnNjb29yZCBhU3JjWU9mZnNldCwgY29uc3QgbnNSZWN0ICZhVGlsZVJlY3Qp ID0gMDsKIyA3NzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0 LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSaWdodFRvTGVmdFRleHQoUFJCb29sIGFJc1JUTCkg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3SW1hZ2UoaW1nSUNvbnRhaW5lciAqYUlt YWdlLCBjb25zdCBuc1JlY3QgKiBhU3JjUmVjdCwgY29uc3QgbnNQb2ludCAqIGFEZXN0UG9pbnQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1NjYWxlZEltYWdlKGltZ0lDb250YWluZXIg KmFJbWFnZSwgY29uc3QgbnNSZWN0ICogYVNyY1JlY3QsIGNvbnN0IG5zUmVjdCAqIGFEZXN0UmVj dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3VGlsZShpbWdJQ29udGFpbmVyICphSW1h Z2UsIG5zY29vcmQgYVhPZmZzZXQsIG5zY29vcmQgYVlPZmZzZXQsIGNvbnN0IG5zUmVjdCAqIGFU YXJnZXRSZWN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdTY2FsZWRUaWxlKGltZ0lD b250YWluZXIgKmFJbWFnZSwgbnNjb29yZCBhWE9mZnNldCwgbnNjb29yZCBhWU9mZnNldCwgbnNj b29yZCBhVGlsZVdpZHRoLCBuc2Nvb3JkIGFUaWxlSGVpZ2h0LCBjb25zdCBuc1JlY3QgKiBhVGFy Z2V0UmVjdCkgPSAwOwoKfTsKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdl LmgiIDIKCnR5cGVkZWYgc3RydWN0CnsKCgoKICBQUkludDMyIE51bUNvbG9yczsKCgoKICBQUlVp bnQ4ICpJbmRleDsKCn0gbnNDb2xvck1hcDsKCnR5cGVkZWYgZW51bSB7CiAgICBuc01hc2tSZXF1 aXJlbWVudHNfa05vTWFzaywKICAgIG5zTWFza1JlcXVpcmVtZW50c19rTmVlZHMxQml0LAogICAg bnNNYXNrUmVxdWlyZW1lbnRzX2tOZWVkczhCaXQKfSBuc01hc2tSZXF1aXJlbWVudHM7CiMgNTkg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgpjbGFzcyBuc0lJbWFnZSA6IHB1 YmxpYyBuc0lTdXBwb3J0cwp7CgpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgwYjRmYWFhMCwgMHhhYTNhLCAweDExZDEs IHsgMHhhOCwgMHgyNCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5YSwgMHgyOCwgMHhjOSB9IH07IHJl dHVybiBpaWQ7fQojIDcyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW1hZ2UuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IEluaXQoUFJJbnQzMiBhV2lkdGgsIFBSSW50MzIgYUhlaWdodCwgUFJJ bnQzMiBhRGVwdGgsIG5zTWFza1JlcXVpcmVtZW50cyBhTWFza1JlcXVpcmVtZW50cykgPSAwOwoK CgoKCgogIHZpcnR1YWwgUFJJbnQzMiBHZXRCeXRlc1BpeCgpID0gMDsKCgoKCgoKICB2aXJ0dWFs IFBSQm9vbCBHZXRJc1Jvd09yZGVyVG9wVG9Cb3R0b20oKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQ UkludDMyIEdldFdpZHRoKCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgUFJJbnQzMiBHZXRIZWlnaHQo KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlY29kZWRSZWN0KFBSSW50MzIsIFBS SW50MzIsIFBSSW50MzIsIFBSSW50MzIpID0gMDsKICB2aXJ0dWFsIFBSSW50MzIgR2V0RGVjb2Rl ZFgxKCkgPSAwOwogIHZpcnR1YWwgUFJJbnQzMiBHZXREZWNvZGVkWTEoKSA9IDA7CiAgdmlydHVh bCBQUkludDMyIEdldERlY29kZWRYMigpID0gMDsKICB2aXJ0dWFsIFBSSW50MzIgR2V0RGVjb2Rl ZFkyKCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hdHVyYWxXaWR0aChQUkludDMyKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROYXR1cmFsSGVpZ2h0KFBSSW50MzIpID0gMDsKICB2 aXJ0dWFsIFBSSW50MzIgR2V0TmF0dXJhbFdpZHRoKCkgPSAwOwogIHZpcnR1YWwgUFJJbnQzMiBH ZXROYXR1cmFsSGVpZ2h0KCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgUFJVaW50OCAqIEdldEJpdHMo KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUkludDMyIEdldExpbmVTdHJpZGUoKSA9IDA7CgoKCgoK CgogIHZpcnR1YWwgUFJCb29sIEdldEhhc0FscGhhTWFzaygpID0gMDsKCgoKCgoKICB2aXJ0dWFs IFBSVWludDggKiBHZXRBbHBoYUJpdHMoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUkludDMyIEdl dEFscGhhV2lkdGgoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUkludDMyIEdldEFscGhhSGVpZ2h0 KCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgUFJJbnQzMiBHZXRBbHBoYUxpbmVTdHJpZGUoKSA9IDA7 CgoKCgoKCgogIHZpcnR1YWwgdm9pZCBJbWFnZVVwZGF0ZWQobnNJRGV2aWNlQ29udGV4dCAqYUNv bnRleHQsIFBSVWludDggYUZsYWdzLCBuc1JlY3QgKmFVcGRhdGVSZWN0KSA9IDA7CgoKCgoKCiAg dmlydHVhbCBQUkJvb2wgSXNPcHRpbWl6ZWQoKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgT3B0aW1pemUobnNJRGV2aWNlQ29udGV4dCogYUNvbnRleHQpID0gMDsKCgoKCgoKICB2aXJ0 dWFsIG5zQ29sb3JNYXAgKiBHZXRDb2xvck1hcCgpID0gMDsKIyAyMDcgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lJbWFnZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhdyhuc0lSZW5kZXJp bmdDb250ZXh0ICZhQ29udGV4dCwgbnNEcmF3aW5nU3VyZmFjZSBhU3VyZmFjZSwgUFJJbnQzMiBh WCwgUFJJbnQzMiBhWSwgUFJJbnQzMiBhV2lkdGgsIFBSSW50MzIgYUhlaWdodCkgPSAwOwojIDIy MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdlLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBEcmF3KG5zSVJlbmRlcmluZ0NvbnRleHQgJmFDb250ZXh0LCBuc0RyYXdpbmdTdXJmYWNlIGFT dXJmYWNlLCBQUkludDMyIGFTWCwgUFJJbnQzMiBhU1ksIFBSSW50MzIgYVNXaWR0aCwgUFJJbnQz MiBhU0hlaWdodCwKICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhRFgsIFBSSW50MzIgYURZLCBQ UkludDMyIGFEV2lkdGgsIFBSSW50MzIgYURIZWlnaHQpID0gMDsKIyAyMzcgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1RvSW1hZ2Uo bnNJSW1hZ2UqIGFEc3RJbWFnZSwgUFJJbnQzMiBhRFgsIFBSSW50MzIgYURZLCBQUkludDMyIGFE V2lkdGgsIFBSSW50MzIgYURIZWlnaHQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCB2b2lkIFNldEFs cGhhTGV2ZWwoUFJJbnQzMiBhQWxwaGFMZXZlbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgUFJJbnQz MiBHZXRBbHBoYUxldmVsKCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgdm9pZCogR2V0Qml0SW5mbygp ID0gMDsKIyAyNzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgTG9ja0ltYWdlUGl4ZWxzKFBSQm9vbCBhTWFza1BpeGVscykgPSAwOwojIDI4 NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdlLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBVbmxvY2tJbWFnZVBpeGVscyhQUkJvb2wgYU1hc2tQaXhlbHMpID0gMDsKIyAyOTcgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgp9OwojIDMxICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNJV2lkZ2V0LmgiIDIKCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiIDEKIyA1OSAiL3dpbmRvd3MvaGRhMTIv bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCiMgMSAiL3dpbmRv d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQoj IDYwICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0 aHJlYWQuaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgNjEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIiAyCgpleHRlcm4gIkMiIHsKCnR5cGVkZWYg c3RydWN0IFBSVGhyZWFkIFBSVGhyZWFkOwp0eXBlZGVmIHN0cnVjdCBQUlRocmVhZFN0YWNrIFBS VGhyZWFkU3RhY2s7Cgp0eXBlZGVmIGVudW0gUFJUaHJlYWRUeXBlIHsKICAgIFBSX1VTRVJfVEhS RUFELAogICAgUFJfU1lTVEVNX1RIUkVBRAp9IFBSVGhyZWFkVHlwZTsKCnR5cGVkZWYgZW51bSBQ UlRocmVhZFNjb3BlIHsKICAgIFBSX0xPQ0FMX1RIUkVBRCwKICAgIFBSX0dMT0JBTF9USFJFQUQs CiAgICBQUl9HTE9CQUxfQk9VTkRfVEhSRUFECn0gUFJUaHJlYWRTY29wZTsKCnR5cGVkZWYgZW51 bSBQUlRocmVhZFN0YXRlIHsKICAgIFBSX0pPSU5BQkxFX1RIUkVBRCwKICAgIFBSX1VOSk9JTkFC TEVfVEhSRUFECn0gUFJUaHJlYWRTdGF0ZTsKCnR5cGVkZWYgZW51bSBQUlRocmVhZFByaW9yaXR5 CnsKICAgIFBSX1BSSU9SSVRZX0ZJUlNUID0gMCwKICAgIFBSX1BSSU9SSVRZX0xPVyA9IDAsCiAg ICBQUl9QUklPUklUWV9OT1JNQUwgPSAxLAogICAgUFJfUFJJT1JJVFlfSElHSCA9IDIsCiAgICBQ Ul9QUklPUklUWV9VUkdFTlQgPSAzLAogICAgUFJfUFJJT1JJVFlfTEFTVCA9IDMKfSBQUlRocmVh ZFByaW9yaXR5OwojIDExOCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVybiBQUlRocmVhZCogUFJfQ3JlYXRlVGhyZWFkKFBS VGhyZWFkVHlwZSB0eXBlLAogICAgICAgICAgICAgICAgICAgICB2b2lkICggKnN0YXJ0KSh2b2lk ICphcmcpLAogICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcsCiAgICAgICAgICAgICAgICAg ICAgIFBSVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgIFBSVGhy ZWFkU2NvcGUgc2NvcGUsCiAgICAgICAgICAgICAgICAgICAgIFBSVGhyZWFkU3RhdGUgc3RhdGUs CiAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIHN0YWNrU2l6ZSk7CiMgMTM5ICIvd2luZG93 cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aHJlYWQuaCIKZXh0 ZXJuIFBSU3RhdHVzIFBSX0pvaW5UaHJlYWQoUFJUaHJlYWQgKnRocmVhZCk7CgoKCgoKZXh0ZXJu IFBSVGhyZWFkKiBQUl9HZXRDdXJyZW50VGhyZWFkKHZvaWQpOwoKCgoKCmV4dGVybiBQUlRocmVh ZFByaW9yaXR5IFBSX0dldFRocmVhZFByaW9yaXR5KGNvbnN0IFBSVGhyZWFkICp0aHJlYWQpOwoK CgoKZXh0ZXJuIHZvaWQgUFJfU2V0VGhyZWFkUHJpb3JpdHkoUFJUaHJlYWQgKnRocmVhZCwgUFJU aHJlYWRQcmlvcml0eSBwcmlvcml0eSk7CiMgMTgyICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aHJlYWQuaCIKdHlwZWRlZiB2b2lkICggKlBSVGhy ZWFkUHJpdmF0ZURUT1IpKHZvaWQgKnByaXYpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX05ld1RocmVh ZFByaXZhdGVJbmRleCgKICAgIFBSVWludG4gKm5ld0luZGV4LCBQUlRocmVhZFByaXZhdGVEVE9S IGRlc3RydWN0b3IpOwojIDE5OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9TZXRUaHJlYWRQcml2 YXRlKFBSVWludG4gdHBkSW5kZXgsIHZvaWQgKnByaXYpOwojIDIwOSAiL3dpbmRvd3MvaGRhMTIv bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVybiB2b2lk KiBQUl9HZXRUaHJlYWRQcml2YXRlKFBSVWludG4gdHBkSW5kZXgpOwojIDIyMSAiL3dpbmRvd3Mv aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVy biBQUlN0YXR1cyBQUl9JbnRlcnJ1cHQoUFJUaHJlYWQgKnRocmVhZCk7CgoKCgoKZXh0ZXJuIHZv aWQgUFJfQ2xlYXJJbnRlcnJ1cHQodm9pZCk7CgoKCgpleHRlcm4gdm9pZCBQUl9CbG9ja0ludGVy cnVwdCh2b2lkKTsKCgoKCmV4dGVybiB2b2lkIFBSX1VuYmxvY2tJbnRlcnJ1cHQodm9pZCk7CiMg MjQ2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0 aHJlYWQuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1NsZWVwKFBSSW50ZXJ2YWxUaW1lIHRpY2tzKTsK CgoKCmV4dGVybiBQUlRocmVhZFNjb3BlIFBSX0dldFRocmVhZFNjb3BlKGNvbnN0IFBSVGhyZWFk ICp0aHJlYWQpOwoKCgoKZXh0ZXJuIFBSVGhyZWFkVHlwZSBQUl9HZXRUaHJlYWRUeXBlKGNvbnN0 IFBSVGhyZWFkICp0aHJlYWQpOwoKCgoKZXh0ZXJuIFBSVGhyZWFkU3RhdGUgUFJfR2V0VGhyZWFk U3RhdGUoY29uc3QgUFJUaHJlYWQgKnRocmVhZCk7Cgp9CiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lXaWRnZXQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dV SUV2ZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAy CgoKY2xhc3MgbnNJQXBwU2hlbGw7CmNsYXNzIG5zSVRvb2xraXQ7CmNsYXNzIG5zSUZvbnRNZXRy aWNzOwpjbGFzcyBuc0lUb29sa2l0OwpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpjbGFzcyBu c0lFbnVtZXJhdG9yOwpjbGFzcyBuc0lEZXZpY2VDb250ZXh0OwpzdHJ1Y3QgbnNSZWN0OwpzdHJ1 Y3QgbnNGb250OwpjbGFzcyBuc0lNZW51QmFyOwpjbGFzcyBuc0lFdmVudExpc3RlbmVyOwpjbGFz cyBuc0lSb2xsdXBMaXN0ZW5lcjsKIyA1NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdp ZGdldC5oIgp0eXBlZGVmIG5zRXZlbnRTdGF0dXMgKCogRVZFTlRfQ0FMTEJBQ0spKG5zR1VJRXZl bnQgKmV2ZW50KTsKIyA4MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgp0 eXBlZGVmIHZvaWQqIG5zTmF0aXZlV2lkZ2V0OwoKCgoKCmVudW0gbnNXaW5kb3dUeXBlIHsKCiAg ZVdpbmRvd1R5cGVfdG9wbGV2ZWwsCgogIGVXaW5kb3dUeXBlX2RpYWxvZywKCiAgZVdpbmRvd1R5 cGVfcG9wdXAsCgogIGVXaW5kb3dUeXBlX2NoaWxkLAoKICBlV2luZG93VHlwZV9pbnZpc2libGUK fTsKCgplbnVtIG5zQm9yZGVyU3R5bGUKewoKICBlQm9yZGVyU3R5bGVfbm9uZSA9IDAsCgoKICBl Qm9yZGVyU3R5bGVfYWxsID0gMSA8PCAwLAoKCiAgZUJvcmRlclN0eWxlX2JvcmRlciA9IDEgPDwg MSwKCgogIGVCb3JkZXJTdHlsZV9yZXNpemVoID0gMSA8PCAyLAoKCiAgZUJvcmRlclN0eWxlX3Rp dGxlID0gMSA8PCAzLAoKCiAgZUJvcmRlclN0eWxlX21lbnUgPSAxIDw8IDQsCgoKCiAgZUJvcmRl clN0eWxlX21pbmltaXplID0gMSA8PCA1LAoKCiAgZUJvcmRlclN0eWxlX21heGltaXplID0gMSA8 PCA2LAoKCiAgZUJvcmRlclN0eWxlX2Nsb3NlID0gMSA8PCA3LAoKCiAgZUJvcmRlclN0eWxlX2Rl ZmF1bHQgPSAtMQp9OwoKCgoKCmVudW0gbnNDdXJzb3IgewogICAgICAgICAgICAgICAgZUN1cnNv cl9zdGFuZGFyZCwKCiAgICAgICAgICAgICAgICBlQ3Vyc29yX3dhaXQsCgogICAgICAgICAgICAg ICAgZUN1cnNvcl9zZWxlY3QsCgogICAgICAgICAgICAgICAgZUN1cnNvcl9oeXBlcmxpbmssCgog ICAgICAgICAgICAgICAgZUN1cnNvcl9zaXplV0UsCgogICAgICAgICAgICAgICAgZUN1cnNvcl9z aXplTlMsCgogICAgICAgICAgICAgICAgZUN1cnNvcl9zaXplTlcsCiAgICAgICAgICAgICAgICBl Q3Vyc29yX3NpemVTRSwKICAgICAgICAgICAgICAgIGVDdXJzb3Jfc2l6ZU5FLAogICAgICAgICAg ICAgICAgZUN1cnNvcl9zaXplU1csCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2Fycm93X25vcnRo LAogICAgICAgICAgICAgICAgZUN1cnNvcl9hcnJvd19ub3J0aF9wbHVzLAogICAgICAgICAgICAg ICAgZUN1cnNvcl9hcnJvd19zb3V0aCwKICAgICAgICAgICAgICAgIGVDdXJzb3JfYXJyb3dfc291 dGhfcGx1cywKICAgICAgICAgICAgICAgIGVDdXJzb3JfYXJyb3dfd2VzdCwKICAgICAgICAgICAg ICAgIGVDdXJzb3JfYXJyb3dfd2VzdF9wbHVzLAogICAgICAgICAgICAgICAgZUN1cnNvcl9hcnJv d19lYXN0LAogICAgICAgICAgICAgICAgZUN1cnNvcl9hcnJvd19lYXN0X3BsdXMsCiAgICAgICAg ICAgICAgICBlQ3Vyc29yX2Nyb3NzaGFpciwKCiAgICAgICAgICAgICAgICBlQ3Vyc29yX21vdmUs CiAgICAgICAgICAgICAgICBlQ3Vyc29yX2hlbHAsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2Nv cHksCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2FsaWFzLAogICAgICAgICAgICAgICAgZUN1cnNv cl9jb250ZXh0X21lbnUsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2NlbGwsCiAgICAgICAgICAg ICAgICBlQ3Vyc29yX2dyYWIsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2dyYWJiaW5nLAogICAg ICAgICAgICAgICAgZUN1cnNvcl9zcGlubmluZywKICAgICAgICAgICAgICAgIGVDdXJzb3JfY291 bnRfdXAsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2NvdW50X2Rvd24sCiAgICAgICAgICAgICAg ICBlQ3Vyc29yX2NvdW50X3VwX2Rvd24KICAgICAgICAgICAgICAgIH07CgoKCgoKCgpzdHJ1Y3Qg bnNXaWRnZXRJbml0RGF0YSB7CiAgbnNXaWRnZXRJbml0RGF0YSgpCiAgICA6IGNsaXBDaGlsZHJl bigwKSwgY2xpcFNpYmxpbmdzKDApLAogICAgICBtV2luZG93VHlwZShlV2luZG93VHlwZV9jaGls ZCksCiAgICAgIG1Cb3JkZXJTdHlsZShlQm9yZGVyU3R5bGVfZGVmYXVsdCkKICB7CiAgfQoKCiAg UFJQYWNrZWRCb29sIGNsaXBDaGlsZHJlbiwgY2xpcFNpYmxpbmdzOwogIG5zV2luZG93VHlwZSBt V2luZG93VHlwZTsKICBuc0JvcmRlclN0eWxlIG1Cb3JkZXJTdHlsZTsKfTsKCgoKCgpjbGFzcyBu c0lXaWRnZXQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewoKICBwdWJsaWM6CgogICAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgxODAzMmFk NSwgMHhiMjY1LCAweDExZDEsIHsgMHhhYSwgMHgyYSwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAs IDB4MCB9IH07IHJldHVybiBpaWQ7fQojIDI0MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGUobnNJV2lkZ2V0ICphUGFyZW50 LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QgJmFSZWN0LAogICAgICAgICAg ICAgICAgICAgICAgICBFVkVOVF9DQUxMQkFDSyBhSGFuZGxlRXZlbnRGdW5jdGlvbiwKICAgICAg ICAgICAgICAgICAgICAgICAgbnNJRGV2aWNlQ29udGV4dCAqYUNvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgICAgIG5zSUFwcFNoZWxsICphQXBwU2hlbGwgPSAwLAogICAgICAgICAgICAgICAg ICAgICAgICBuc0lUb29sa2l0ICphVG9vbGtpdCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAg IG5zV2lkZ2V0SW5pdERhdGEgKmFJbml0RGF0YSA9IDApID0gMDsKIyAyNjcgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlKG5z TmF0aXZlV2lkZ2V0IGFQYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVj dCAmYVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UX0NBTExCQUNLIGFIYW5kbGVF dmVudEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBuc0lEZXZpY2VDb250ZXh0ICph Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXBwU2hlbGwgKmFBcHBTaGVsbCA9 IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSVRvb2xraXQgKmFUb29sa2l0ID0gMCwKICAg ICAgICAgICAgICAgICAgICAgICAgbnNXaWRnZXRJbml0RGF0YSAqYUluaXREYXRhID0gMCkgPSAw OwoKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xpZW50RGF0YSh2b2lkKiYgYUNsaWVu dERhdGEpID0gMDsKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2xpZW50RGF0YSh2b2lkKiBhQ2xp ZW50RGF0YSkgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgRGVzdHJveSh2b2lkKSA9 IDA7CiMgMjk5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0 dWFsIG5zSVdpZGdldCogR2V0UGFyZW50KHZvaWQpID0gMDsKIyAzMDggIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNJRW51bWVyYXRvciogR2V0Q2hp bGRyZW4odm9pZCkgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2hvdyhQUkJvb2wg YVN0YXRlKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW9kYWwoUFJCb29sIGFN b2RhbCkgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IElzVmlzaWJsZShQUkJvb2wgJiBh U3RhdGUpID0gMDsKIyAzNDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIK ICAgIHZpcnR1YWwgbnNyZXN1bHQgQ29uc3RyYWluUG9zaXRpb24oUFJJbnQzMiAqYVgsIFBSSW50 MzIgKmFZKSA9IDA7CiMgMzUwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0Lmgi CiAgICB2aXJ0dWFsIG5zcmVzdWx0IE1vdmUoUFJJbnQzMiBhWCwgUFJJbnQzMiBhWSkgPSAwOwoj IDM2MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBu c3Jlc3VsdCBSZXNpemUoUFJJbnQzMiBhV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICBQUklu dDMyIGFIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGFpbnQpID0gMDsK IyAzNzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwg bnNyZXN1bHQgUmVzaXplKFBSSW50MzIgYVgsCiAgICAgICAgICAgICAgICAgICAgICBQUkludDMy IGFZLAogICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhV2lkdGgsCiAgICAgICAgICAgICAg ICAgICAgICBQUkludDMyIGFIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJl cGFpbnQpID0gMDsKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldFpJbmRleChQUkludDMyIGFa SW5kZXgpID0gMDsKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldFpJbmRleChQUkludDMyKiBh WkluZGV4KSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBQbGFjZUJlaGluZChuc0lX aWRnZXQgKmFXaWRnZXQsIFBSQm9vbCBhQWN0aXZhdGUpID0gMDsKCgoKCgogICAgdmlydHVhbCBu c3Jlc3VsdCBTZXRTaXplTW9kZShQUkludDMyIGFNb2RlKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwg bnNyZXN1bHQgR2V0U2l6ZU1vZGUoUFJJbnQzMiogYU1vZGUpID0gMDsKCgoKCgoKCiAgICB2aXJ0 dWFsIG5zcmVzdWx0IEVuYWJsZShQUkJvb2wgYVN0YXRlKSA9IDA7CgoKCgogICAgdmlydHVhbCBu c3Jlc3VsdCBTZXRGb2N1cyhQUkJvb2wgYVJhaXNlID0gMCkgPSAwOwoKCgoKCgoKICAgIHZpcnR1 YWwgbnNyZXN1bHQgR2V0Qm91bmRzKG5zUmVjdCAmYVJlY3QpID0gMDsKIyA0NDEgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2Ny ZWVuQm91bmRzKG5zUmVjdCAmYVJlY3QpID0gMDsKIyA0NTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xpZW50Qm91bmRzKG5z UmVjdCAmYVJlY3QpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJvcmRlclNp emUoUFJJbnQzMiAmYVdpZHRoLCBQUkludDMyICZhSGVpZ2h0KSA9IDA7CgoKCgoKCgogICAgdmly dHVhbCBuc2NvbG9yIEdldEZvcmVncm91bmRDb2xvcih2b2lkKSA9IDA7CiMgNDc2ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZv cmVncm91bmRDb2xvcihjb25zdCBuc2NvbG9yICZhQ29sb3IpID0gMDsKIyA0ODUgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNjb2xvciBHZXRCYWNr Z3JvdW5kQ29sb3Iodm9pZCkgPSAwOwojIDQ5NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg bnNjb2xvciAmYUNvbG9yKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc0lGb250TWV0cmljcyog R2V0Rm9udCh2b2lkKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb250KGNv bnN0IG5zRm9udCAmYUZvbnQpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zQ3Vyc29yIEdldEN1 cnNvcih2b2lkKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDdXJzb3IobnND dXJzb3IgYUN1cnNvcikgPSAwOwoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3dU eXBlKG5zV2luZG93VHlwZSYgYVdpbmRvd1R5cGUpID0gMDsKCgoKCgogICAgdmlydHVhbCBuc3Jl c3VsdCBWYWxpZGF0ZSgpID0gMDsKIyA1NDggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lX aWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgSW52YWxpZGF0ZShQUkJvb2wgYUlzU3luY2hy b25vdXMpID0gMDsKIyA1NTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIK ICAgIHZpcnR1YWwgbnNyZXN1bHQgSW52YWxpZGF0ZShjb25zdCBuc1JlY3QgJiBhUmVjdCwgUFJC b29sIGFJc1N5bmNocm9ub3VzKSA9IDA7CiMgNTY2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEludmFsaWRhdGVSZWdpb24oY29uc3Qg bnNJUmVnaW9uKiBhUmVnaW9uLCBQUkJvb2wgYUlzU3luY2hyb25vdXMpID0gMDsKCgoKCgoKCiAg ICAgdmlydHVhbCBuc3Jlc3VsdCBVcGRhdGUoKSA9IDA7CiMgNTgzICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEFkZE1vdXNlTGlzdGVu ZXIobnNJTW91c2VMaXN0ZW5lciAqIGFMaXN0ZW5lcikgPSAwOwojIDU5MiAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBBZGRFdmVudExp c3RlbmVyKG5zSUV2ZW50TGlzdGVuZXIgKiBhTGlzdGVuZXIpID0gMDsKIyA2MDEgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgQWRkTWVu dUxpc3RlbmVyKG5zSU1lbnVMaXN0ZW5lciAqIGFMaXN0ZW5lcikgPSAwOwoKCgoKCgoKICAgIHZp cnR1YWwgbnNJVG9vbGtpdCogR2V0VG9vbGtpdCgpID0gMDsKIyA2MTggIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29sb3JNYXAo bnNDb2xvck1hcCAqYUNvbG9yTWFwKSA9IDA7CiMgNjMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbChQUkludDMyIGFEeCwg UFJJbnQzMiBhRHksIG5zUmVjdCAqYUNsaXBSZWN0KSA9IDA7CiMgNjQyICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbFdpZGdl dHMoUFJJbnQzMiBhRHgsIFBSSW50MzIgYUR5KSA9IDA7CiMgNjU0ICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbFJlY3QobnNS ZWN0ICZhU3JjUmVjdCwgUFJJbnQzMiBhRHgsIFBSSW50MzIgYUR5KSA9IDA7CgoKCgoKCiAgICB2 aXJ0dWFsIHZvaWQgQWRkQ2hpbGQobnNJV2lkZ2V0KiBhQ2hpbGQpID0gMDsKICAgIHZpcnR1YWwg dm9pZCBSZW1vdmVDaGlsZChuc0lXaWRnZXQqIGFDaGlsZCkgPSAwOwogICAgdmlydHVhbCB2b2lk KiBHZXROYXRpdmVEYXRhKFBSVWludDMyIGFEYXRhVHlwZSkgPSAwOwogICAgdmlydHVhbCB2b2lk IEZyZWVOYXRpdmVEYXRhKHZvaWQgKiBkYXRhLCBQUlVpbnQzMiBhRGF0YVR5cGUpID0gMDsKICAg IHZpcnR1YWwgbnNJUmVuZGVyaW5nQ29udGV4dCogR2V0UmVuZGVyaW5nQ29udGV4dCgpID0gMDsK ICAgIHZpcnR1YWwgbnNJRGV2aWNlQ29udGV4dCogR2V0RGV2aWNlQ29udGV4dCgpID0gMDsKICAg IHZpcnR1YWwgbnNJQXBwU2hlbGwgKkdldEFwcFNoZWxsKCkgPSAwOwojIDY3NiAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3Jk ZXJTdHlsZShuc0JvcmRlclN0eWxlIGFCb3JkZXJTdHlsZSkgPSAwOwojIDY4NSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUaXRs ZShjb25zdCBuc1N0cmluZyYgYVRpdGxlKSA9IDA7CiMgNjk2ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEljb24oY29uc3QgbnNB UmVhZGFibGVTdHJpbmcmIGFuSWNvblNwZWMpID0gMDsKIyA3MDUgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWVudUJhcihuc0lN ZW51QmFyICogYU1lbnVCYXIpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNob3dN ZW51QmFyKFBSQm9vbCBhU2hvdykgPSAwOwojIDcyMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBXaWRnZXRUb1NjcmVlbihjb25zdCBu c1JlY3QmIGFPbGRSZWN0LCBuc1JlY3QmIGFOZXdSZWN0KSA9IDA7CiMgNzMxICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNjcmVlblRv V2lkZ2V0KGNvbnN0IG5zUmVjdCYgYU9sZFJlY3QsIG5zUmVjdCYgYU5ld1JlY3QpID0gMDsKIyA3 NDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNy ZXN1bHQgQmVnaW5SZXNpemluZ0NoaWxkcmVuKHZvaWQpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFs IG5zcmVzdWx0IEVuZFJlc2l6aW5nQ2hpbGRyZW4odm9pZCkgPSAwOwoKCgoKCiAgICB2aXJ0dWFs IG5zcmVzdWx0IEdldFByZWZlcnJlZFNpemUoUFJJbnQzMiYgYVdpZHRoLCBQUkludDMyJiBhSGVp Z2h0KSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJlZmVycmVkU2l6ZShQUklu dDMyIGFXaWR0aCwgUFJJbnQzMiBhSGVpZ2h0KSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1 bHQgRGlzcGF0Y2hFdmVudChuc0dVSUV2ZW50KiBldmVudCwgbnNFdmVudFN0YXR1cyAmIGFTdGF0 dXMpID0gMDsKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgUGFpbnQobnNJUmVuZGVyaW5nQ29u dGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVj dCYgYURpcnR5UmVjdCkgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEVuYWJsZURyYWdE cm9wKFBSQm9vbCBhRW5hYmxlKSA9IDA7CgogICAgdmlydHVhbCB2b2lkIENvbnZlcnRUb0Rldmlj ZUNvb3JkaW5hdGVzKG5zY29vcmQgJmFYLG5zY29vcmQgJmFZKSA9IDA7CgoKCgoKCiAgICB2aXJ0 dWFsIG5zcmVzdWx0IENhcHR1cmVNb3VzZShQUkJvb2wgYUNhcHR1cmUpID0gMDsKIyA4MDAgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQg Q2FwdHVyZVJvbGx1cEV2ZW50cyhuc0lSb2xsdXBMaXN0ZW5lciAqIGFMaXN0ZW5lciwgUFJCb29s IGFEb0NhcHR1cmUsIFBSQm9vbCBhQ29uc3VtZVJvbGx1cEV2ZW50KSA9IDA7CiMgODEzICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBNb2Rh bEV2ZW50RmlsdGVyKFBSQm9vbCBhUmVhbEV2ZW50LCB2b2lkICphRXZlbnQsIFBSQm9vbCAqYUZv cldpbmRvdykgPSAwOwojIDgyMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5o IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0ZW50aW9uKCkgPSAwOwoKfTsKIyAzMCAibnNGb3Jt Q29udHJvbEhlbHBlci5oIiAyCiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNMZWFmRnJhbWUuaCIgMQoj IDI1ICIuLi8uLi9iYXNlL3NyYy9uc0xlYWZGcmFtZS5oIgojIDEgIi4uLy4uL2Jhc2Uvc3JjL25z RnJhbWUuaCIgMQojIDI2ICIuLi8uLi9iYXNlL3NyYy9uc0ZyYW1lLmgiCiMgMSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSUZyYW1lLmgiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4 LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQu aCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIKIyAxICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zbGF5b3V0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3Vw cG9ydHMuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMgoj IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1RyYWNlUmVmY250LmgiIDEKIyAyOCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDIKIyAyNyAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ U3VwcG9ydHMuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIg MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1NpemUuaCIgMQojIDI5ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0dVSUV2ZW50LmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZy YW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvbnN0cy5oIiAx CiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlQ29uc3RzLmgiCiMgMSAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRm9udC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc1N0eWxlQ29uc3RzLmgiIDIKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVj dC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiCiMg MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29sb3IuaCIgMQojIDI2ICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zQ29vcmQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHls ZVN0cnVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWFyZ2luLmgiIDEK IyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zRm9udC5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0 LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMQojIDI2 ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIKIyAxICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zVm9pZEFycmF5LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFi bGVTdHJpbmcuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXku aCIgMgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKCnR5cGVkZWYgUFJCb29sICgqIG5zVm9pZEFy cmF5RW51bUZ1bmMpKHZvaWQqIGFFbGVtZW50LCB2b2lkICphRGF0YSk7CgoKY2xhc3MgbnNWb2lk QXJyYXkgewpwdWJsaWM6CiAgbnNWb2lkQXJyYXkoKTsKICBuc1ZvaWRBcnJheShQUkludDMyIGFD b3VudCk7CiAgdmlydHVhbCB+bnNWb2lkQXJyYXkoKTsKCiAgbnNWb2lkQXJyYXkmIG9wZXJhdG9y PShjb25zdCBuc1ZvaWRBcnJheSYgb3RoZXIpOwoKICB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5k bGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwoKICBQUkludDMyIENvdW50 KCkgY29uc3QgewogICAgcmV0dXJuIG1JbXBsID8gbUltcGwtPm1Db3VudCA6IDA7CiAgfQoKICB2 b2lkKiBFbGVtZW50QXQoUFJJbnQzMiBhSW5kZXgpIGNvbnN0OwogIHZvaWQqIG9wZXJhdG9yW10o UFJJbnQzMiBhSW5kZXgpIGNvbnN0IHsgcmV0dXJuIEVsZW1lbnRBdChhSW5kZXgpOyB9CgogIFBS SW50MzIgSW5kZXhPZih2b2lkKiBhUG9zc2libGVFbGVtZW50KSBjb25zdDsKCiAgUFJCb29sIElu c2VydEVsZW1lbnRBdCh2b2lkKiBhRWxlbWVudCwgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wg UmVwbGFjZUVsZW1lbnRBdCh2b2lkKiBhRWxlbWVudCwgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJv b2wgQXBwZW5kRWxlbWVudCh2b2lkKiBhRWxlbWVudCkgewogICAgcmV0dXJuIEluc2VydEVsZW1l bnRBdChhRWxlbWVudCwgQ291bnQoKSk7CiAgfQoKICBQUkJvb2wgUmVtb3ZlRWxlbWVudCh2b2lk KiBhRWxlbWVudCk7CiAgUFJCb29sIFJlbW92ZUVsZW1lbnRBdChQUkludDMyIGFJbmRleCk7CiAg dm9pZCBDbGVhcigpOwoKICB2b2lkIENvbXBhY3QoKTsKCiAgUFJCb29sIEVudW1lcmF0ZUZvcndh cmRzKG5zVm9pZEFycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKICBQUkJvb2wgRW51 bWVyYXRlQmFja3dhcmRzKG5zVm9pZEFycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsK CnByb3RlY3RlZDoKICBzdHJ1Y3QgSW1wbCB7CgoKCgoKCiAgICBQUlVpbnQzMiBtQml0czsKCgoK CiAgICBQUkludDMyIG1Db3VudDsKCgoKCiAgICB2b2lkKiBtQXJyYXlbMV07CiAgfTsKCiAgSW1w bCogbUltcGw7CgogIGVudW0gewogICAga0FycmF5T3duZXJNYXNrID0gMSA8PCAzMSwKICAgIGtB cnJheVNpemVNYXNrID0gfmtBcnJheU93bmVyTWFzawogIH07CgoKCiAgUFJJbnQzMiBHZXRBcnJh eVNpemUoKSBjb25zdDsKICB2b2lkIFNldEFycmF5U2l6ZShQUkludDMyIGFTaXplKTsKICBQUkJv b2wgSXNBcnJheU93bmVyKCkgY29uc3Q7CiAgdm9pZCBTZXRBcnJheU93bmVyKFBSQm9vbCBhT3du ZXIpOwoKcHJpdmF0ZToKCiAgbnNWb2lkQXJyYXkoY29uc3QgbnNWb2lkQXJyYXkmIG90aGVyKTsK fTsKCgoKY2xhc3MgbnNBdXRvVm9pZEFycmF5IDogcHVibGljIG5zVm9pZEFycmF5IHsKcHVibGlj OgogIG5zQXV0b1ZvaWRBcnJheSgpOwoKcHJvdGVjdGVkOgoKCiAgZW51bSB7IGtBdXRvQnVmU2l6 ZSA9IDggfTsKICBjaGFyIG1BdXRvQnVmW3NpemVvZihJbXBsKSArIChrQXV0b0J1ZlNpemUgLSAx KSAqIHNpemVvZih2b2lkKildOwp9OwoKCmNsYXNzIG5zU3RyaW5nOwoKdHlwZWRlZiBQUkJvb2wg KCpuc1N0cmluZ0FycmF5RW51bUZ1bmMpKG5zU3RyaW5nJiBhRWxlbWVudCwgdm9pZCAqYURhdGEp OwoKY2xhc3MgbnNTdHJpbmdBcnJheTogcHJvdGVjdGVkIG5zVm9pZEFycmF5CnsKcHVibGljOgog IG5zU3RyaW5nQXJyYXkodm9pZCk7CiAgdmlydHVhbCB+bnNTdHJpbmdBcnJheSh2b2lkKTsKCiAg bnNTdHJpbmdBcnJheSYgb3BlcmF0b3I9KGNvbnN0IG5zU3RyaW5nQXJyYXkmIG90aGVyKTsKCiAg dm9pZCBTaXplT2YobnNJU2l6ZU9mSGFuZGxlciogYUhhbmRsZXIsIFBSVWludDMyKiBhUmVzdWx0 KSBjb25zdDsKCiAgUFJJbnQzMiBDb3VudCh2b2lkKSBjb25zdCB7CiAgICByZXR1cm4gbnNWb2lk QXJyYXk6OkNvdW50KCk7CiAgfQoKICB2b2lkIFN0cmluZ0F0KFBSSW50MzIgYUluZGV4LCBuc0FX cml0YWJsZVN0cmluZyYgYVN0cmluZykgY29uc3Q7CiAgbnNTdHJpbmcqIFN0cmluZ0F0KFBSSW50 MzIgYUluZGV4KSBjb25zdDsKICBuc1N0cmluZyogb3BlcmF0b3JbXShQUkludDMyIGFJbmRleCkg Y29uc3QgeyByZXR1cm4gU3RyaW5nQXQoYUluZGV4KTsgfQoKICBQUkludDMyIEluZGV4T2YoY29u c3QgbnNBUmVhZGFibGVTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7CiAgUFJJbnQzMiBJ bmRleE9mSWdub3JlQ2FzZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVBvc3NpYmxlU3RyaW5n KSBjb25zdDsKCiAgUFJCb29sIEluc2VydFN0cmluZ0F0KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5n JiBhU3RyaW5nLCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBSZXBsYWNlU3RyaW5nQXQoY29u c3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHJpbmcsIFBSSW50MzIgYUluZGV4KTsKCiAgUFJCb29s IEFwcGVuZFN0cmluZyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZykgewogICAgcmV0 dXJuIEluc2VydFN0cmluZ0F0KGFTdHJpbmcsIENvdW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92 ZVN0cmluZyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZyk7CiAgUFJCb29sIFJlbW92 ZVN0cmluZ0lnbm9yZUNhc2UoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHJpbmcpOwogIFBS Qm9vbCBSZW1vdmVTdHJpbmdBdChQUkludDMyIGFJbmRleCk7CiAgdm9pZCBDbGVhcih2b2lkKTsK CiAgdm9pZCBDb21wYWN0KHZvaWQpIHsKICAgIG5zVm9pZEFycmF5OjpDb21wYWN0KCk7CiAgfQoK ICBQUkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNTdHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2 b2lkKiBhRGF0YSk7CiAgUFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc1N0cmluZ0FycmF5RW51 bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6CgogIG5zU3RyaW5nQXJyYXkoY29u c3QgbnNTdHJpbmdBcnJheSYgb3RoZXIpOwp9OwoKCmNsYXNzIG5zQ1N0cmluZzsKCnR5cGVkZWYg UFJCb29sICgqbnNDU3RyaW5nQXJyYXlFbnVtRnVuYykobnNDU3RyaW5nJiBhRWxlbWVudCwgdm9p ZCAqYURhdGEpOwoKY2xhc3MgbnNDU3RyaW5nQXJyYXk6IHByb3RlY3RlZCBuc1ZvaWRBcnJheQp7 CnB1YmxpYzoKICBuc0NTdHJpbmdBcnJheSh2b2lkKTsKICB2aXJ0dWFsIH5uc0NTdHJpbmdBcnJh eSh2b2lkKTsKCiAgbnNDU3RyaW5nQXJyYXkmIG9wZXJhdG9yPShjb25zdCBuc0NTdHJpbmdBcnJh eSYgb3RoZXIpOwoKICB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJV aW50MzIqIGFSZXN1bHQpIGNvbnN0OwoKICBQUkludDMyIENvdW50KHZvaWQpIGNvbnN0IHsKICAg IHJldHVybiBuc1ZvaWRBcnJheTo6Q291bnQoKTsKICB9CgogIHZvaWQgQ1N0cmluZ0F0KFBSSW50 MzIgYUluZGV4LCBuc0NTdHJpbmcmIGFDU3RyaW5nKSBjb25zdDsKICBuc0NTdHJpbmcqIENTdHJp bmdBdChQUkludDMyIGFJbmRleCkgY29uc3Q7CiAgbnNDU3RyaW5nKiBvcGVyYXRvcltdKFBSSW50 MzIgYUluZGV4KSBjb25zdCB7IHJldHVybiBDU3RyaW5nQXQoYUluZGV4KTsgfQoKICBQUkludDMy IEluZGV4T2YoY29uc3QgbnNDU3RyaW5nJiBhUG9zc2libGVTdHJpbmcpIGNvbnN0OwogIFBSSW50 MzIgSW5kZXhPZklnbm9yZUNhc2UoY29uc3QgbnNDU3RyaW5nJiBhUG9zc2libGVTdHJpbmcpIGNv bnN0OwoKICBQUkJvb2wgSW5zZXJ0Q1N0cmluZ0F0KGNvbnN0IG5zQ1N0cmluZyYgYUNTdHJpbmcs IFBSSW50MzIgYUluZGV4KTsKCiAgUFJCb29sIFJlcGxhY2VDU3RyaW5nQXQoY29uc3QgbnNDU3Ry aW5nJiBhQ1N0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgQXBwZW5kQ1N0cmluZyhj b25zdCBuc0NTdHJpbmcmIGFDU3RyaW5nKSB7CiAgICByZXR1cm4gSW5zZXJ0Q1N0cmluZ0F0KGFD U3RyaW5nLCBDb3VudCgpKTsKICB9CgogIFBSQm9vbCBSZW1vdmVDU3RyaW5nKGNvbnN0IG5zQ1N0 cmluZyYgYUNTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVDU3RyaW5nSWdub3JlQ2FzZShjb25zdCBu c0NTdHJpbmcmIGFDU3RyaW5nKTsKICBQUkJvb2wgUmVtb3ZlQ1N0cmluZ0F0KFBSSW50MzIgYUlu ZGV4KTsKICB2b2lkIENsZWFyKHZvaWQpOwoKICB2b2lkIENvbXBhY3Qodm9pZCkgewogICAgbnNW b2lkQXJyYXk6OkNvbXBhY3QoKTsKICB9CgogIFBSQm9vbCBFbnVtZXJhdGVGb3J3YXJkcyhuc0NT dHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7CiAgUFJCb29sIEVudW1lcmF0 ZUJhY2t3YXJkcyhuc0NTdHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7Cgpw cml2YXRlOgoKICBuc0NTdHJpbmdBcnJheShjb25zdCBuc0NTdHJpbmdBcnJheSYgb3RoZXIpOwp9 OwojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb29yZC5oIiAxCiMgMjUgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlQ29vcmQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVD b29yZC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI3 ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvb3JkLmgiIDIKIyAxICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNTdHlsZUNvb3JkLmgiIDIKY2xhc3MgbnNTdHJpbmc7CgplbnVtIG5zU3R5bGVVbml0IHsK ICBlU3R5bGVVbml0X051bGwgPSAwLAogIGVTdHlsZVVuaXRfTm9ybWFsID0gMSwKICBlU3R5bGVV bml0X0F1dG8gPSAyLAogIGVTdHlsZVVuaXRfSW5oZXJpdCA9IDMsCiAgZVN0eWxlVW5pdF9QZXJj ZW50ID0gMTAsCiAgZVN0eWxlVW5pdF9GYWN0b3IgPSAxMSwKICBlU3R5bGVVbml0X0Nvb3JkID0g MjAsCiAgZVN0eWxlVW5pdF9JbnRlZ2VyID0gMzAsCiAgZVN0eWxlVW5pdF9Qcm9wb3J0aW9uYWwg PSAzMSwKICBlU3R5bGVVbml0X0VudW1lcmF0ZWQgPSAzMiwKICBlU3R5bGVVbml0X0NoYXJzID0g MzMKfTsKCnR5cGVkZWYgdW5pb24gewogIFBSSW50MzIgbUludDsKICBmbG9hdCBtRmxvYXQ7Cn0g bnNTdHlsZVVuaW9uOwoKY2xhc3MgbnNTdHlsZUNvb3JkIHsKcHVibGljOgogIG5zU3R5bGVDb29y ZChuc1N0eWxlVW5pdCBhVW5pdCA9IGVTdHlsZVVuaXRfTnVsbCk7CiAgbnNTdHlsZUNvb3JkKG5z Y29vcmQgYVZhbHVlKTsKICBuc1N0eWxlQ29vcmQoUFJJbnQzMiBhVmFsdWUsIG5zU3R5bGVVbml0 IGFVbml0KTsKICBuc1N0eWxlQ29vcmQoZmxvYXQgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7 CiAgbnNTdHlsZUNvb3JkKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvcHkpOwoKICBuc1N0eWxlQ29v cmQmIG9wZXJhdG9yPShjb25zdCBuc1N0eWxlQ29vcmQmIGFDb3B5KTsKICBQUkJvb2wgb3BlcmF0 b3I9PShjb25zdCBuc1N0eWxlQ29vcmQmIGFPdGhlcikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9y IT0oY29uc3QgbnNTdHlsZUNvb3JkJiBhT3RoZXIpIGNvbnN0OwoKICBuc1N0eWxlVW5pdCBHZXRV bml0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Vbml0OyB9CiAgbnNjb29yZCBHZXRDb29yZFZhbHVl KHZvaWQpIGNvbnN0OwogIFBSSW50MzIgR2V0SW50VmFsdWUodm9pZCkgY29uc3Q7CiAgZmxvYXQg R2V0UGVyY2VudFZhbHVlKHZvaWQpIGNvbnN0OwogIGZsb2F0IEdldEZhY3RvclZhbHVlKHZvaWQp IGNvbnN0OwogIHZvaWQgR2V0VW5pb25WYWx1ZShuc1N0eWxlVW5pb24mIGFWYWx1ZSkgY29uc3Q7 CgogIHZvaWQgUmVzZXQodm9pZCk7CiAgdm9pZCBTZXRDb29yZFZhbHVlKG5zY29vcmQgYVZhbHVl KTsKICB2b2lkIFNldEludFZhbHVlKFBSSW50MzIgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7 CiAgdm9pZCBTZXRQZXJjZW50VmFsdWUoZmxvYXQgYVZhbHVlKTsKICB2b2lkIFNldEZhY3RvclZh bHVlKGZsb2F0IGFWYWx1ZSk7CiAgdm9pZCBTZXROb3JtYWxWYWx1ZSh2b2lkKTsKICB2b2lkIFNl dEF1dG9WYWx1ZSh2b2lkKTsKICB2b2lkIFNldEluaGVyaXRWYWx1ZSh2b2lkKTsKICB2b2lkIFNl dFVuaW9uVmFsdWUoY29uc3QgbnNTdHlsZVVuaW9uJiBhVmFsdWUsIG5zU3R5bGVVbml0IGFVbml0 KTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9p ZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CgpwdWJsaWM6CiAgbnNTdHlsZVVu aXQgbVVuaXQ7CiAgbnNTdHlsZVVuaW9uIG1WYWx1ZTsKfTsKCgpjbGFzcyBuc1N0eWxlU2lkZXMg ewpwdWJsaWM6CiAgbnNTdHlsZVNpZGVzKHZvaWQpOwoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29u c3QgbnNTdHlsZVNpZGVzJiBhT3RoZXIpIGNvbnN0OwogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0 IG5zU3R5bGVTaWRlcyYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVVuaXQgR2V0TGVmdFVuaXQo dm9pZCkgY29uc3Q7CiAgbnNTdHlsZVVuaXQgR2V0VG9wVW5pdCh2b2lkKSBjb25zdDsKICBuc1N0 eWxlVW5pdCBHZXRSaWdodFVuaXQodm9pZCkgY29uc3Q7CiAgbnNTdHlsZVVuaXQgR2V0Qm90dG9t VW5pdCh2b2lkKSBjb25zdDsKCiAgbnNTdHlsZUNvb3JkJiBHZXRMZWZ0KG5zU3R5bGVDb29yZCYg YUNvb3JkKSBjb25zdDsKICBuc1N0eWxlQ29vcmQmIEdldFRvcChuc1N0eWxlQ29vcmQmIGFDb29y ZCkgY29uc3Q7CiAgbnNTdHlsZUNvb3JkJiBHZXRSaWdodChuc1N0eWxlQ29vcmQmIGFDb29yZCkg Y29uc3Q7CiAgbnNTdHlsZUNvb3JkJiBHZXRCb3R0b20obnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNv bnN0OwoKICB2b2lkIFJlc2V0KHZvaWQpOwogIHZvaWQgU2V0TGVmdChjb25zdCBuc1N0eWxlQ29v cmQmIGFDb29yZCk7CiAgdm9pZCBTZXRUb3AoY29uc3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpOwog IHZvaWQgU2V0UmlnaHQoY29uc3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpOwogIHZvaWQgU2V0Qm90 dG9tKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3JkKTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhu c1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9pZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZl cikgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgUFJVaW50OCBtTGVmdFVuaXQ7CiAgUFJVaW50OCBtVG9w VW5pdDsKICBQUlVpbnQ4IG1SaWdodFVuaXQ7CiAgUFJVaW50OCBtQm90dG9tVW5pdDsKICBuc1N0 eWxlVW5pb24gbUxlZnRWYWx1ZTsKICBuc1N0eWxlVW5pb24gbVRvcFZhbHVlOwogIG5zU3R5bGVV bmlvbiBtUmlnaHRWYWx1ZTsKICBuc1N0eWxlVW5pb24gbUJvdHRvbVZhbHVlOwp9OwoKCgoKaW5s aW5lIFBSQm9vbCBuc1N0eWxlQ29vcmQ6Om9wZXJhdG9yIT0oY29uc3QgbnNTdHlsZUNvb3JkJiBh T3RoZXIpIGNvbnN0CnsKICByZXR1cm4gUFJCb29sKCEgKCgqdGhpcykgPT0gYU90aGVyKSk7Cn0K CmlubGluZSBQUkludDMyIG5zU3R5bGVDb29yZDo6R2V0Q29vcmRWYWx1ZSh2b2lkKSBjb25zdAp7 CiAge307CiAgaWYgKG1Vbml0ID09IGVTdHlsZVVuaXRfQ29vcmQpIHsKICAgIHJldHVybiBtVmFs dWUubUludDsKICB9CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBQUkludDMyIG5zU3R5bGVDb29yZDo6 R2V0SW50VmFsdWUodm9pZCkgY29uc3QKewogIHt9OwoKCgogIGlmICgobVVuaXQgPT0gZVN0eWxl VW5pdF9Qcm9wb3J0aW9uYWwpIHx8CiAgICAgIChtVW5pdCA9PSBlU3R5bGVVbml0X0VudW1lcmF0 ZWQpIHx8CiAgICAgIChtVW5pdCA9PSBlU3R5bGVVbml0X0NoYXJzKSB8fAogICAgICAobVVuaXQg PT0gZVN0eWxlVW5pdF9JbnRlZ2VyKSkgewogICAgcmV0dXJuIG1WYWx1ZS5tSW50OwogIH0KICBy ZXR1cm4gMDsKfQoKaW5saW5lIGZsb2F0IG5zU3R5bGVDb29yZDo6R2V0UGVyY2VudFZhbHVlKHZv aWQpIGNvbnN0CnsKICB7fTsKICBpZiAobVVuaXQgPT0gZVN0eWxlVW5pdF9QZXJjZW50KSB7CiAg ICByZXR1cm4gbVZhbHVlLm1GbG9hdDsKICB9CiAgcmV0dXJuIDAuMGY7Cn0KCmlubGluZSBmbG9h dCBuc1N0eWxlQ29vcmQ6OkdldEZhY3RvclZhbHVlKHZvaWQpIGNvbnN0CnsKICB7fTsKICBpZiAo bVVuaXQgPT0gZVN0eWxlVW5pdF9GYWN0b3IpIHsKICAgIHJldHVybiBtVmFsdWUubUZsb2F0Owog IH0KICByZXR1cm4gMC4wZjsKfQoKaW5saW5lIHZvaWQgbnNTdHlsZUNvb3JkOjpHZXRVbmlvblZh bHVlKG5zU3R5bGVVbmlvbiYgYVZhbHVlKSBjb25zdAp7CiAgbnNDUlQ6Om1lbWNweSgmYVZhbHVl LCAmbVZhbHVlLCBzaXplb2YobnNTdHlsZVVuaW9uKSk7Cn0KCgoKCmlubGluZSBQUkJvb2wgbnNT dHlsZVNpZGVzOjpvcGVyYXRvciE9KGNvbnN0IG5zU3R5bGVTaWRlcyYgYU90aGVyKSBjb25zdAp7 CiAgcmV0dXJuIFBSQm9vbCghICgoKnRoaXMpID09IGFPdGhlcikpOwp9CgppbmxpbmUgbnNTdHls ZVVuaXQgbnNTdHlsZVNpZGVzOjpHZXRMZWZ0VW5pdCh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIChu c1N0eWxlVW5pdCltTGVmdFVuaXQ7Cn0KCmlubGluZSBuc1N0eWxlVW5pdCBuc1N0eWxlU2lkZXM6 OkdldFRvcFVuaXQodm9pZCkgY29uc3QKewogIHJldHVybiAobnNTdHlsZVVuaXQpbVRvcFVuaXQ7 Cn0KCmlubGluZSBuc1N0eWxlVW5pdCBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0VW5pdCh2b2lkKSBj b25zdAp7CiAgcmV0dXJuIChuc1N0eWxlVW5pdCltUmlnaHRVbml0Owp9CgppbmxpbmUgbnNTdHls ZVVuaXQgbnNTdHlsZVNpZGVzOjpHZXRCb3R0b21Vbml0KHZvaWQpIGNvbnN0CnsKICByZXR1cm4g KG5zU3R5bGVVbml0KW1Cb3R0b21Vbml0Owp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxl U2lkZXM6OkdldExlZnQobnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNvbnN0CnsKICBhQ29vcmQuU2V0 VW5pb25WYWx1ZShtTGVmdFZhbHVlLCAobnNTdHlsZVVuaXQpbUxlZnRVbml0KTsKICByZXR1cm4g YUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldFRvcChuc1N0 eWxlQ29vcmQmIGFDb29yZCkgY29uc3QKewogIGFDb29yZC5TZXRVbmlvblZhbHVlKG1Ub3BWYWx1 ZSwgKG5zU3R5bGVVbml0KW1Ub3BVbml0KTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNT dHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0KG5zU3R5bGVDb29yZCYgYUNvb3JkKSBj b25zdAp7CiAgYUNvb3JkLlNldFVuaW9uVmFsdWUobVJpZ2h0VmFsdWUsIChuc1N0eWxlVW5pdClt UmlnaHRVbml0KTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0 eWxlU2lkZXM6OkdldEJvdHRvbShuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29uc3QKewogIGFDb29y ZC5TZXRVbmlvblZhbHVlKG1Cb3R0b21WYWx1ZSwgKG5zU3R5bGVVbml0KW1Cb3R0b21Vbml0KTsK ICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldExlZnQoY29u c3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpCnsKICBtTGVmdFVuaXQgPSBhQ29vcmQuR2V0VW5pdCgp OwogIGFDb29yZC5HZXRVbmlvblZhbHVlKG1MZWZ0VmFsdWUpOwp9CgppbmxpbmUgdm9pZCBuc1N0 eWxlU2lkZXM6OlNldFRvcChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIG1Ub3BVbml0 ID0gYUNvb3JkLkdldFVuaXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtVG9wVmFsdWUpOwp9 CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldFJpZ2h0KGNvbnN0IG5zU3R5bGVDb29yZCYg YUNvb3JkKQp7CiAgbVJpZ2h0VW5pdCA9IGFDb29yZC5HZXRVbml0KCk7CiAgYUNvb3JkLkdldFVu aW9uVmFsdWUobVJpZ2h0VmFsdWUpOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldEJv dHRvbShjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIG1Cb3R0b21Vbml0ID0gYUNvb3Jk LkdldFVuaXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtQm90dG9tVmFsdWUpOwp9CiMgMzIg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiIDIKIyAxICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAxCiMgMzMgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNTdHlsZUNvbnN0cy5oIiAxCiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0 eWxlU3RydWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQu aCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIKIyAxICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlv LmgiIDEgMwojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIgMgoj IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNldC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zbGF5b3V0LmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SVN0eWxlU2V0LmgiIDIKCmNsYXNzIG5zSUF0b207CmNsYXNzIG5zSVN0eWxlUnVsZTsKY2xhc3Mg bnNJU3R5bGVTaGVldDsKY2xhc3MgbnNJU3R5bGVDb250ZXh0OwpjbGFzcyBuc0lTdHlsZVJ1bGVT dXBwbGllcjsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5z SUZyYW1lOwpjbGFzcyBuc0lEb2N1bWVudDsKY2xhc3MgbnNJRnJhbWVNYW5hZ2VyOwpjbGFzcyBu c0lTdXBwb3J0c0FycmF5OwpjbGFzcyBuc0lSdWxlTm9kZTsKc3RydWN0IG5zRmluZEZyYW1lSGlu dDsKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVm9pZEFycmF5LmgiIDEKIyA0NCAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlU2V0LmgiIDIKY2xhc3MgbnNJU2l6ZU9m SGFuZGxlcjsKCmNsYXNzIG5zSUNTU1BzZXVkb0NvbXBhcmF0b3I7CgoKCgoKY2xhc3MgbnNJU3R5 bGVTZXQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlE JiBHZXRJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7MHhlNTkzOTZiMCwgMHhiMjQ0LCAweDEx ZDEsIHsweDgwLCAweDMxLCAweDAwLCAweDYwLCAweDA4LCAweDE1LCAweDliLCAweDVhfX07IHJl dHVybiBpaWQ7IH0KCgoKICB2aXJ0dWFsIHZvaWQgQXBwZW5kT3ZlcnJpZGVTdHlsZVNoZWV0KG5z SVN0eWxlU2hlZXQqIGFTaGVldCkgPSAwOwogIHZpcnR1YWwgdm9pZCBJbnNlcnRPdmVycmlkZVN0 eWxlU2hlZXRBZnRlcihuc0lTdHlsZVNoZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlU2hlZXQqIGFBZnRlclNoZWV0KSA9IDA7 CiAgdmlydHVhbCB2b2lkIEluc2VydE92ZXJyaWRlU3R5bGVTaGVldEJlZm9yZShuc0lTdHlsZVNo ZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lTdHlsZVNoZWV0KiBhQmVmb3JlU2hlZXQpID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVtb3Zl T3ZlcnJpZGVTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFTaGVldCkgPSAwOwogIHZpcnR1YWwg UFJJbnQzMiBHZXROdW1iZXJPZk92ZXJyaWRlU3R5bGVTaGVldHMoKSA9IDA7CiAgdmlydHVhbCBu c0lTdHlsZVNoZWV0KiBHZXRPdmVycmlkZVN0eWxlU2hlZXRBdChQUkludDMyIGFJbmRleCkgPSAw OwoKCiAgdmlydHVhbCB2b2lkIEFkZERvY1N0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0 LCBuc0lEb2N1bWVudCogYURvY3VtZW50KSA9IDA7CiAgdmlydHVhbCB2b2lkIFJlbW92ZURvY1N0 eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmlydHVhbCBQUkludDMyIEdl dE51bWJlck9mRG9jU3R5bGVTaGVldHMoKSA9IDA7CiAgdmlydHVhbCBuc0lTdHlsZVNoZWV0KiBH ZXREb2NTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5kZXgpID0gMDsKCiAgdmlydHVhbCB2b2lkIEFw cGVuZEJhY2tzdG9wU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0 dWFsIHZvaWQgSW5zZXJ0QmFja3N0b3BTdHlsZVNoZWV0QWZ0ZXIobnNJU3R5bGVTaGVldCogYVNo ZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHls ZVNoZWV0KiBhQWZ0ZXJTaGVldCkgPSAwOwogIHZpcnR1YWwgdm9pZCBJbnNlcnRCYWNrc3RvcFN0 eWxlU2hlZXRCZWZvcmUobnNJU3R5bGVTaGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYUJlZm9yZVNoZWV0KSA9 IDA7CiAgdmlydHVhbCB2b2lkIFJlbW92ZUJhY2tzdG9wU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0 KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIFBSSW50MzIgR2V0TnVtYmVyT2ZCYWNrc3RvcFN0eWxl U2hlZXRzKCkgPSAwOwogIHZpcnR1YWwgbnNJU3R5bGVTaGVldCogR2V0QmFja3N0b3BTdHlsZVNo ZWV0QXQoUFJJbnQzMiBhSW5kZXgpID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVwbGFjZUJhY2tzdG9w U3R5bGVTaGVldHMobnNJU3VwcG9ydHNBcnJheSogYU5ld1NoZWV0cykgPSAwOwoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFJ1bGVUcmVlKG5zSVJ1bGVOb2RlKiogYVJlc3VsdCkgPSAwOwoKCgogIHZp cnR1YWwgbnNyZXN1bHQgRW5hYmxlUXVpcmtTdHlsZVNoZWV0KFBSQm9vbCBhRW5hYmxlKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeVN0eWxlU2hlZXRTdGF0ZUNoYW5nZWQoUFJCb29s IGFEaXNhYmxlZCkgPSAwOwoKCiAgdmlydHVhbCBuc0lTdHlsZUNvbnRleHQqIFJlc29sdmVTdHls ZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFQYXJlbnRDb250 ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFG b3JjZVVuaXF1ZSA9IDApID0gMDsKCgogIHZpcnR1YWwgbnNJU3R5bGVDb250ZXh0KiBSZXNvbHZl UHNldWRvU3R5bGVGb3IobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFQYXJlbnRD b250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUZvcmNlVW5pcXVl ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SUNTU1BzZXVkb0NvbXBhcmF0b3IqIGFDb21wYXJhdG9yID0gMCkgPSAwOwoKCgoKICB2aXJ0dWFs IG5zSVN0eWxlQ29udGV4dCogUHJvYmVQc2V1ZG9TdHlsZUZvcihuc0lQcmVzQ29udGV4dCogYVBy ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29u dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv b2wgYUZvcmNlVW5pcXVlID0gMCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNodXRkb3duKCk9 MDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlUGFyZW50U3R5bGVDb250ZXh0KG5zSVByZXNDb250 ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ U3R5bGVDb250ZXh0KiBhU3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSVN0eWxlQ29udGV4dCogYU5ld1BhcmVudENvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYU5ld1N0eWxlQ29udGV4dCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNTdGF0ZURlcGVuZGVudFN0eWxlKG5zSVByZXND b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lDb250ZW50KiBhQ29udGVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb25zdHJ1 Y3RSb290RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYURvY0VsZW1lbnQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiYgYUZyYW1lU3ViVHJlZSkgPSAwOwoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IFJlY29uc3RydWN0RG9jRWxlbWVudEhpZXJhcmNoeShuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRBcHBl bmRlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUNvbnRlbnQqIGFDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJJbnQzMiBhTmV3SW5kZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg Q29udGVudEluc2VydGVkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJJbnQzMiBhSW5kZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg Q29udGVudFJlcGxhY2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lDb250ZW50KiBhT2xkQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJQ29udGVudCogYU5ld0NoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBSSW50MzIgYUluZGV4SW5Db250YWluZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IENv bnRlbnRSZW1vdmVkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGFpbmVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg UFJJbnQzMiBhSW5kZXhJbkNvbnRhaW5lcikgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRl bnRDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVN1cHBvcnRzKiBhU3ViQ29udGVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29u dGVudFN0YXRlc0NoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50MikgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250 ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU5hbWVTcGFjZUlELAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQUkludDMyIGFIaW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IFN0eWxlUnVsZUNoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYVN0eWxlU2hlZXQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlUnVsZSogYVN0eWxlUnVsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU3R5bGVSdWxlQWRkZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlU2hlZXQqIGFTdHlsZVNoZWV0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJU3R5bGVSdWxlKiBhU3R5bGVSdWxlKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTdHlsZVJ1bGVSZW1vdmVkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlU2hlZXQqIGFTdHlsZVNoZWV0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVJ1bGUqIGFTdHlsZVJ1bGUp ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbnRSZW5kZXJSZXBsYWNlZEVsZW1lbnQo bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBD cmVhdGVDb250aW51aW5nRnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUGFyZW50RnJhbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhQ29udGludWluZ0ZyYW1lKSA9 IDA7CiMgMjA1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEZpbmRQcmltYXJ5RnJhbWVGb3IobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWVNYW5hZ2VyKiBh RnJhbWVNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50 KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBh RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmluZEZyYW1lSGludCog YUhpbnQ9MCkgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3R5bGVSdWxlU3VwcGxpZXIo bnNJU3R5bGVSdWxlU3VwcGxpZXIqIGFTdXBwbGllcik9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFN0eWxlUnVsZVN1cHBsaWVyKG5zSVN0eWxlUnVsZVN1cHBsaWVyKiogYVN1cHBsaWVyKT0wOwoK ICB2aXJ0dWFsIHZvaWQgTGlzdChGSUxFKiBvdXQgPSBzdGRvdXQsIFBSSW50MzIgYUluZGVudCA9 IDApID0gMDsKICB2aXJ0dWFsIHZvaWQgTGlzdENvbnRleHRzKG5zSVN0eWxlQ29udGV4dCogYVJv b3RDb250ZXh0LCBGSUxFKiBvdXQgPSBzdGRvdXQsIFBSSW50MzIgYUluZGVudCA9IDApID0gMDsK CiAgdmlydHVhbCB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyICphU2l6ZW9mSGFuZGxlciwg UFJVaW50MzIgJmFTaXplKSA9IDA7CiAgdmlydHVhbCB2b2lkIFJlc2V0VW5pcXVlU3R5bGVJdGVt cyh2b2lkKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVBZmZlY3RzU3R5bGUo bnNJQXRvbSAqYUF0dHJpYnV0ZSwgbnNJQ29udGVudCAqYUNvbnRlbnQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUFJCb29sICZhQWZmZWN0cykgPSAwOwp9OwoKZXh0ZXJuIG5z cmVzdWx0CiAgTlNfTmV3U3R5bGVTZXQobnNJU3R5bGVTZXQqKiBhSW5zdGFuY2VQdHJSZXN1bHQp OwoKCmNsYXNzIG5zVW5pcXVlU3R5bGVJdGVtcyA6IHByaXZhdGUgbnNWb2lkQXJyYXkKewpwdWJs aWMgOgoKICBzdGF0aWMgbnNVbmlxdWVTdHlsZUl0ZW1zICpHZXRVbmlxdWVTdHlsZUl0ZW1zKCB2 b2lkICl7CiAgICBpZihtSW5zdGFuY2UgPT0gMCl7CgoKCiAgICAgIG5ldyBuc1VuaXF1ZVN0eWxl SXRlbXM7CgogICAgICB7fTsKCgoKICAgIH0KICAgIHJldHVybiBtSW5zdGFuY2U7CiAgfQoKICB2 b2lkICpHZXRJdGVtKHZvaWQgKmFQdHIpewogICAgUFJJbnQzMiBpbmRleCA9IG5zVm9pZEFycmF5 OjpJbmRleE9mKGFQdHIpOwogICAgaWYoIGluZGV4ICE9IC0xKXsKICAgICAgcmV0dXJuIG5zVm9p ZEFycmF5OjpFbGVtZW50QXQoaW5kZXgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIDA7CiAg ICB9CiAgfQoKICBQUkJvb2wgQWRkSXRlbSh2b2lkICphUHRyKXsKICAgIGlmKG5zVm9pZEFycmF5 OjpJbmRleE9mKGFQdHIpID09IC0xKXsKICAgICAgcmV0dXJuIG5zVm9pZEFycmF5OjpBcHBlbmRF bGVtZW50KGFQdHIpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfQoKICBQ UkJvb2wgUmVtb3ZlSXRlbSh2b2lkICphUHRyKXsKICAgIHJldHVybiBuc1ZvaWRBcnJheTo6UmVt b3ZlRWxlbWVudChhUHRyKTsKICB9CgogIFBSSW50MzIgQ291bnQodm9pZCl7CiAgICByZXR1cm4g bnNWb2lkQXJyYXk6OkNvdW50KCk7CiAgfQoKICB2b2lkIENsZWFyKHZvaWQpewogICAgbnNWb2lk QXJyYXk6OkNsZWFyKCk7CiAgfQpwcm90ZWN0ZWQ6CgogIG5zVW5pcXVlU3R5bGVJdGVtcyggY29u c3QgbnNVbmlxdWVTdHlsZUl0ZW1zJiBzcmMpOwogIG5zVW5pcXVlU3R5bGVJdGVtcyYgb3BlcmF0 b3IgPShjb25zdCBuc1VuaXF1ZVN0eWxlSXRlbXMmIHNyYyk7CgoKICBuc1VuaXF1ZVN0eWxlSXRl bXModm9pZCkgOiBuc1ZvaWRBcnJheSgpewogICAge307CiAgICBtSW5zdGFuY2U9dGhpczsKICB9 CgogIHN0YXRpYyBuc1VuaXF1ZVN0eWxlSXRlbXMgKm1JbnN0YW5jZTsKfTsKIyAzMDEgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNldC5oIgpzdHJ1Y3QgbnNGaW5kRnJhbWVIaW50 CnsKICBuc0lGcmFtZSAqbVByaW1hcnlGcmFtZUZvclByZXZTaWJsaW5nOwogIG5zRmluZEZyYW1l SGludCgpIHsKICAgIG1QcmltYXJ5RnJhbWVGb3JQcmV2U2libGluZyA9IDA7CiAgfTsKfTsKIyAz NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc2xheW91dC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVz Q29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgi IDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiIDIKIyAx ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNSZWN0LmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNDb2xvci5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVz Q29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lSW1hZ2VM b2FkZXIuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVJbWFnZUxv YWRlci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAxCiMgMjYg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZUltYWdlTG9hZGVyLmgiIDIKIyAxICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI3ICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJRnJhbWVJbWFnZUxvYWRlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zQ29sb3IuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJRnJhbWVJbWFnZUxvYWRlci5oIiAyCgpjbGFzcyBuc0lGcmFtZTsKY2xhc3MgbnNJSW1hZ2U7 CmNsYXNzIG5zSUltYWdlR3JvdXA7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc1N0cmlu ZzsKc3RydWN0IG5zU2l6ZTsKCgoKCgplbnVtIG5zSW1hZ2VBbmltYXRpb24gewogICAgZUltYWdl QW5pbWF0aW9uX05vcm1hbCA9IDAsCiAgICBlSW1hZ2VBbmltYXRpb25fTm9uZSA9IDEsCiAgICBl SW1hZ2VBbmltYXRpb25fTG9vcE9uY2UgPSAyCn07CgoKCgpjbGFzcyBuc0lGcmFtZUltYWdlTG9h ZGVyOwp0eXBlZGVmIG5zcmVzdWx0ICgqbnNJRnJhbWVJbWFnZUxvYWRlckNCKShuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lGcmFtZUltYWdlTG9hZGVyKiBhTG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhQ2xvc3VyZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVN0YXR1cyk7CgoKCgoKCgpjbGFzcyBu c0lGcmFtZUltYWdlTG9hZGVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBuc0lJRCBpaWQgPSB7IDB4YTZjZjkwZWMs IDB4MTViMywgMHgxMWQyLHsweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRk LCAweDMyfX07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJUHJlc0Nv bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgbnNJSW1hZ2VHcm91cCogYUdy b3VwLAogICAgICAgICAgICAgICAgICBjb25zdCBuc1N0cmluZyYgYVVSTCwKICAgICAgICAgICAg ICAgICAgY29uc3QgbnNjb2xvciogYUJhY2tncm91bmRDb2xvciwKICAgICAgICAgICAgICAgICAg Y29uc3QgbnNTaXplKiBhRGVzaXJlZFNpemUsCiAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBh RnJhbWUsCiAgICAgICAgICAgICAgICAgIG5zSW1hZ2VBbmltYXRpb24gYUFuaW1hdGlvbk1vZGUs CiAgICAgICAgICAgICAgICAgIG5zSUZyYW1lSW1hZ2VMb2FkZXJDQiBhQ2FsbEJhY2ssCiAgICAg ICAgICAgICAgICAgIHZvaWQqIGFDbG9zdXJlLCB2b2lkKiBhS2V5KSA9IDA7CgogIHZpcnR1YWwg bnNyZXN1bHQgU3RvcEltYWdlTG9hZChQUkJvb2wgYVN0b3BDaHJvbWUgPSAxKSA9IDA7CgogIHZp cnR1YWwgbnNyZXN1bHQgQWJvcnRJbWFnZUxvYWQoKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQg SXNTYW1lSW1hZ2VSZXF1ZXN0KGNvbnN0IG5zU3RyaW5nJiBhVVJMLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IG5zY29sb3IqIGFCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTaXplKiBhRGVzaXJlZFNpemUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhUmVzdWx0KSA9IDA7CgogIHZpcnR1 YWwgbnNyZXN1bHQgQWRkRnJhbWUobnNJRnJhbWUqIGFGcmFtZSwgbnNJRnJhbWVJbWFnZUxvYWRl ckNCIGFDYWxsQmFjaywKICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFDbG9zdXJlLCB2b2lk KiBhS2V5KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlRnJhbWUodm9pZCogYUtleSkg PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNhZmVUb0Rlc3Ryb3koUFJCb29sKiBhUmVzdWx0KSA9 IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VVJMKG5zU3RyaW5nJiBhUmVzdWx0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVzQ29udGV4dChuc0lQcmVzQ29udGV4dCoqIGFQcmVzQ29u dGV4dCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlKG5zSUltYWdlKiogYVJlc3Vs dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaXplKG5zU2l6ZSYgYVJlc3VsdCkgPSAw OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlTG9hZFN0YXR1cyhQUlVpbnQzMiogYUxvYWRT dGF0dXMpID0gMDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludHJpbnNpY1NpemUobnNTaXpl JiBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYXR1cmFsSW1hZ2VTaXplKFBS VWludDMyKiBuYXR1cmFsV2lkdGgsIFBSVWludDMyICpuYXR1cmFsSGVpZ2h0KSA9IDA7Cn07CiMg MzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIiAyCiMgMSAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxhbmd1YWdlQXRvbS5oIiAxCiMgMjkgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lMYW5ndWFnZUF0b20uaCIKY2xhc3MgbnNJTGFuZ3VhZ2VBdG9t IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MTFlLCAweDE1YjMsIDB4 MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19 OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3VhZ2UoUFJVbmljaGFy ICogKmFMYW5ndWFnZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5ndWFnZUdyb3Vw KG5zSUF0b20gKiAqYUxhbmd1YWdlR3JvdXApID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGFu Z3VhZ2VJcyhjb25zdCBQUlVuaWNoYXIgKmFMYW5ndWFnZSwgUFJCb29sICpfcmV0dmFsKSA9IDA7 Cgp9OwojIDMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMgoK Y2xhc3MgbnNBdXRvU3RyaW5nOwpjbGFzcyBuc0JpZGlQcmVzVXRpbHM7CgoKc3RydWN0IG5zRm9u dDsKCmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lEZXZpY2VD b250ZXh0OwpjbGFzcyBuc0lGb250TWV0cmljczsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSUlt YWdlOwpjbGFzcyBuc0lJbWFnZUdyb3VwOwpjbGFzcyBuc0lMaW5rSGFuZGxlcjsKY2xhc3MgbnNJ UHJlc1NoZWxsOwpjbGFzcyBuc0lQcmVmOwpjbGFzcyBuc0lTdHlsZUNvbnRleHQ7CmNsYXNzIG5z SUF0b207CmNsYXNzIG5zU3RyaW5nOwpjbGFzcyBuc0lFdmVudFN0YXRlTWFuYWdlcjsKY2xhc3Mg bnNJVVJJOwpjbGFzcyBuc0lMb29rQW5kRmVlbDsKY2xhc3MgbnNJQ1NTUHNldWRvQ29tcGFyYXRv cjsKIyA2NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiCmVudW0g bnNDb21wYXRpYmlsaXR5IHsKICBlQ29tcGF0aWJpbGl0eV9TdGFuZGFyZCA9IDEsCiAgZUNvbXBh dGliaWxpdHlfTmF2UXVpcmtzID0gMgp9OwoKZW51bSBuc1dpZGdldFJlbmRlcmluZyB7CiAgZVdp ZGdldFJlbmRlcmluZ19OYXRpdmUgPSAxLAogIGVXaWRnZXRSZW5kZXJpbmdfR2Z4ID0gMiwKICBl V2lkZ2V0UmVuZGVyaW5nX1BhcnRpYWxHZnggPSAzCn07CgplbnVtIG5zV2lkZ2V0VHlwZSB7CiAg ZVdpZGdldFR5cGVfQnV0dG9uID0gMSwKICBlV2lkZ2V0VHlwZV9DaGVja2JveCA9IDIsCiAgZVdp ZGdldFR5cGVfUmFkaW8gPSAzLAogIGVXaWRnZXRUeXBlX1RleHQgPSA0Cn07CgplbnVtIG5zTGFu Z3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGUgewogIGVMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3Jt VHlwZV9Vbmtub3duID0gLTEsCiAgZUxhbmd1YWdlU3BlY2lmaWNUcmFuc2Zvcm1UeXBlX05vbmUg PSAwLAogIGVMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZV9KYXBhbmVzZSwKICBlTGFuZ3Vh Z2VTcGVjaWZpY1RyYW5zZm9ybVR5cGVfS29yZWFuCn07CgoKY29uc3QgUFJVaW50MzIga1ByZXND b250ZXh0X1VzZURvY3VtZW50Q29sb3JzID0gMHgwMTsKY29uc3QgUFJVaW50MzIga1ByZXNDb250 ZXh0X1VzZURvY3VtZW50Rm9udHMgPSAweDAyOwpjb25zdCBQUlVpbnQzMiBrUHJlc0NvbnRleHRf VW5kZXJsaW5lTGlua3MgPSAweDAzOwoKCgpjbGFzcyBuc0lQcmVzQ29udGV4dCA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3Rh dGljIG5zSUlEIGlpZCA9IHsgMHgwYTVkMTJlMCwgMHg5NDRlLCAweDExZDEsIHsweDkzLCAweDIz LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4gaWlkOyB9CgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lEZXZpY2VDb250ZXh0KiBhRGV2aWNlQ29udGV4 dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdG9wKFBSQm9vbCBhU3RvcENocm9tZSA9 IDEpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2hlbGwobnNJUHJlc1NoZWxsKiBh U2hlbGwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaGVsbChuc0lQcmVzU2hlbGwq KiBhUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tcGF0aWJpbGl0eU1v ZGUobnNDb21wYXRpYmlsaXR5KiBhTW9kZVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0Q29tcGF0aWJpbGl0eU1vZGUobnNDb21wYXRpYmlsaXR5IGFNb2RlKSA9IDA7CgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0V2lkZ2V0UmVuZGVyaW5nTW9kZShuc1dpZGdldFJlbmRlcmluZyog YU1vZGVSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpZGdldFJlbmRlcmluZ01v ZGUobnNXaWRnZXRSZW5kZXJpbmcgYU1vZGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRJbWFnZUFuaW1hdGlvbk1vZGUobnNJbWFnZUFuaW1hdGlvbiogYU1vZGVSZXN1bHQpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEltYWdlQW5pbWF0aW9uTW9kZShuc0ltYWdlQW5pbWF0aW9u IGFNb2RlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9va0FuZEZlZWwobnNJTG9v a0FuZEZlZWwqKiBhTG9va0FuZEZlZWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRC YXNlVVJMKG5zSVVSSSoqIGFVUkxSZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRNZWRpdW0obnNJQXRvbSoqIGFNZWRpdW1SZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBSZW1hcFN0eWxlQW5kUmVmbG93KHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgUmVzb2x2ZVN0eWxlQ29udGV4dEZvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFGb3JjZVVuaXF1 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0Kiog YVJlc3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZVBzZXVkb1N0eWxl Q29udGV4dEZvcihuc0lDb250ZW50KiBhUGFyZW50Q29udGVudCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29u dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFG b3JjZVVuaXF1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ U3R5bGVDb250ZXh0KiogYVJlc3VsdCkgPSAwOwojIDE4OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNvbHZlUHNldWRvU3R5 bGVXaXRoQ29tcGFyYXRvcihuc0lDb250ZW50KiBhUGFyZW50Q29udGVudCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRl eHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJCb29sIGFGb3JjZVVuaXF1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSUNTU1BzZXVkb0NvbXBhcmF0b3IqIGFDb21wYXJhdG9yLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250 ZXh0KiogYVJlc3VsdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByb2JlUHNldWRv U3R5bGVDb250ZXh0Rm9yKG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENv bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUZv cmNlVW5pcXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5 bGVDb250ZXh0KiogYVJlc3VsdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZVBhcmVu dFN0eWxlQ29udGV4dChuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhTmV3UGFyZW50Q29udGV4dCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZUZyb21TaGVsbChzaXplX3QgYVNpemUsIHZvaWQqKiBhUmVz dWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBGcmVlVG9TaGVsbChzaXplX3QgYVNpemUsIHZv aWQqIGFGcmVlQ2h1bmspID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRyaWNzRm9y KGNvbnN0IG5zRm9udCYgYUZvbnQsIG5zSUZvbnRNZXRyaWNzKiogYVJlc3VsdCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0Rm9udChuc0ZvbnQmIGFSZXN1bHQpID0gMDsKCiAg dmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0Rm9udChjb25zdCBuc0ZvbnQmIGFGb250KSA9IDA7 CiAgdmlydHVhbCBjb25zdCBuc0ZvbnQmIEdldERlZmF1bHRGb250RGVwcmVjYXRlZCgpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEZpeGVkRm9udChuc0ZvbnQmIGFSZXN1bHQp ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0Rml4ZWRGb250KGNvbnN0IG5zRm9u dCYgYUZvbnQpID0gMDsKICB2aXJ0dWFsIGNvbnN0IG5zRm9udCYgR2V0RGVmYXVsdEZpeGVkRm9u dERlcHJlY2F0ZWQoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDYWNoZWRCb29s UHJlZihQUlVpbnQzMiBwcmVmVHlwZSwgUFJCb29sICZhVmFsdWUpID0gMDsKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRGb250U2NhbGVyKFBSSW50MzIqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldEZvbnRTY2FsZXIoUFJJbnQzMiBhU2NhbGVyKSA9IDA7CgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RGVmYXVsdENvbG9yKG5zY29sb3IqIGFDb2xvcikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91bmRDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRCYWNrZ3JvdW5kSW1hZ2UobnNTdHJpbmcm IGFJbWFnZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91bmRJbWFn ZVJlcGVhdChQUlVpbnQ4KiBhUmVwZWF0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZh dWx0QmFja2dyb3VuZEltYWdlT2Zmc2V0KG5zY29vcmQqIGFYLCBuc2Nvb3JkKiBhWSkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91bmRJbWFnZUF0dGFjaG1lbnQoUFJV aW50OCogYVJlcGVhdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdExpbmtDb2xv cihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRWaXNp dGVkTGlua0NvbG9yKG5zY29sb3IqIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 Rm9jdXNCYWNrZ3JvdW5kQ29sb3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRGb2N1c1RleHRDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFVzZUZvY3VzQ29sb3JzKFBSQm9vbCYgdXNlRm9jdXNDb2xvcnMpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEZvY3VzUmluZ1dpZHRoKFBSVWludDggKmZvY3VzUmluZ1dpZHRo KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2N1c1JpbmdPbkFueXRoaW5nKFBSQm9vbCYg Zm9jdXNSaW5nT25Bbnl0aGluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0 Q29sb3IobnNjb2xvciBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRC YWNrZ3JvdW5kQ29sb3IobnNjb2xvciBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dERlZmF1bHRCYWNrZ3JvdW5kSW1hZ2UoY29uc3QgbnNTdHJpbmcmIGFJbWFnZSkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdEJhY2tncm91bmRJbWFnZVJlcGVhdChQUlVpbnQ4IGFS ZXBlYXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRCYWNrZ3JvdW5kSW1hZ2VP ZmZzZXQobnNjb29yZCBhWCwgbnNjb29yZCBhWSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 RGVmYXVsdEJhY2tncm91bmRJbWFnZUF0dGFjaG1lbnQoUFJVaW50OCBhUmVwZWF0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0TGlua0NvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0VmlzaXRlZExpbmtDb2xvcihuc2NvbG9yIGFD b2xvcikgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlR3JvdXAobnNJSW1hZ2VHcm91 cCoqIGFHcm91cFJlc3VsdCkgPSAwOwojIDI5MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTdGFydExvYWRJbWFnZShjb25zdCBu c1N0cmluZyYgYVVSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29sb3Iq IGFCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1Np emUqIGFEZXNpcmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBh VGFyZ2V0RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZUltYWdlTG9h ZGVyQ0IgYUNhbGxCYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUNsb3N1 cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhS2V5LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnNJRnJhbWVJbWFnZUxvYWRlcioqIGFSZXN1bHQpID0gMDsKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBTdG9wTG9hZEltYWdlKHZvaWQqIGFLZXksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zSUZyYW1lSW1hZ2VMb2FkZXIqIGFMb2FkZXIpID0gMDsKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBTdG9wQWxsTG9hZEltYWdlc0Zvcihuc0lGcmFtZSogYVRhcmdldEZyYW1l LCB2b2lkKiBhS2V5KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29udGFpbmVyKG5zSVN1 cHBvcnRzKiBhQ29udGFpbmVyKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGFpbmVy KG5zSVN1cHBvcnRzKiogYVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaW5r SGFuZGxlcihuc0lMaW5rSGFuZGxlciogYUhhbmRsZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldExpbmtIYW5kbGVyKG5zSUxpbmtIYW5kbGVyKiogYVJlc3VsdCkgPSAwOwoKCgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFZpc2libGVBcmVhKG5zUmVjdCYgYVJlc3VsdCkgPSAwOwoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaXNpYmxlQXJlYShjb25zdCBuc1JlY3QmIHIpID0gMDsK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNQYWdpbmF0ZWQoUFJCb29sKiBhUmVzdWx0KSA9IDA7 CiMgMzUwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFBhZ2VEaW0obnNSZWN0KiBhQWN0dWFsUmVjdCwgbnNSZWN0KiBhQWRq UmVjdCkgPSAwOwojIDM1OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0 LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYWdlRGltKG5zUmVjdCogYVJlY3QpID0gMDsKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRQaXhlbHNUb1R3aXBzKGZsb2F0KiBhUmVzdWx0KSBjb25zdCA9 IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHdpcHNUb1BpeGVscyhmbG9hdCogYVJlc3VsdCkg Y29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NhbGVkUGl4ZWxzVG9Ud2lw cyhmbG9hdCogYVNjYWxlKSBjb25zdCA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERldmlj ZUNvbnRleHQobnNJRGV2aWNlQ29udGV4dCoqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRFdmVudFN0YXRlTWFuYWdlcihuc0lFdmVudFN0YXRlTWFuYWdlcioqIGFN YW5hZ2VyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5ndWFnZShuc0lMYW5ndWFnZUF0 b20qKiBhTGFuZ3VhZ2UpID0gMDsKIyAzODYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQ cmVzQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3VhZ2VTcGVjaWZpY1RyYW5z Zm9ybVR5cGUoCiAgICAgICAgICAgICAgbnNMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZSog YVR5cGUpID0gMDsKIyAzOTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4 dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaUVuYWJsZWQoUFJCb29sKiBhQmlkaUVuYWJs ZWQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJpZGlFbmFibGVkKFBS Qm9vbCBhQmlkaUVuYWJsZWQpIGNvbnN0ID0gMDsKIyA0MjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lQcmVzQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmlzdWFsTW9kZShQ UkJvb2wgYUlzVmlzdWFsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc3VhbE1v ZGUoUFJCb29sJiBhSXNWaXN1YWwpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldEJpZGlVdGlscyhuc0JpZGlQcmVzVXRpbHMqKiBhQmlkaVV0aWxzKSA9IDA7CgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgU2V0QmlkaShQUlVpbnQzMiBhQmlkaU9wdGlvbnMsIFBSQm9vbCBhRm9y Y2VSZWZsb3cgPSAwKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaShQUlVpbnQz MiogYUJpZGlPcHRpb25zKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc1JUTChQ UkJvb2wgJmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNBcmFiaWNFbmNv ZGluZyhQUkJvb2wgJmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SXNC aWRpU3lzdGVtKFBSQm9vbCBhSXNCaWRpKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dElzQmlkaVN5c3RlbShQUkJvb2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRCaWRpQ2hhcnNldChuc0F1dG9TdHJpbmcgJmFDaGFyU2V0KSA9IDA7CgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldElzUmVuZGVyaW5nT25seVNlbGVjdGlvbihQUkJvb2wgYVJl c3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgSXNSZW5kZXJpbmdPbmx5U2VsZWN0aW9uKFBS Qm9vbCogYVJlc3VsdCkgPSAwOwoKCgoKCn07CiMgNDk2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJUHJlc0NvbnRleHQuaCIKZXh0ZXJuIG5zcmVzdWx0CiAgTlNfTmV3R2FsbGV5Q29udGV4 dChuc0lQcmVzQ29udGV4dCoqIGFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCmV4dGVybiBuc3Jlc3Vs dAogIE5TX05ld1ByaW50UHJldmlld0NvbnRleHQobnNJUHJlc0NvbnRleHQqKiBhSW5zdGFuY2VQ dHJSZXN1bHQpOwojIDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5o IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAxCiMgNDAg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIKIyAxICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJUHJlc1NoZWxsLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3Vw cG9ydHMuaCIgMQojIDQyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgi IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgNDMgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lTZWxlY3Rpb24uaCIgMQojIDE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJU2VsZWN0aW9uLmgiCmNsYXNzIG5zSURPTU5vZGU7CgpjbGFzcyBuc0lET01SYW5nZTsK IyAzNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbi5oIgpjbGFzcyBuc0lT ZWxlY3Rpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YjJjN2VkNTksIDB4 ODYzNCwgMHg0MzUyLCB7IDB4OWUsIDB4MzcsIDB4NTQsIDB4ODQsIDB4YzgsIDB4YjYsIDB4ZTQs IDB4ZTEgfX07IHJldHVybiBpaWQ7fQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbmNob3JO b2RlKG5zSURPTU5vZGUgKiAqYUFuY2hvck5vZGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0QW5jaG9yT2Zmc2V0KFBSSW50MzIgKmFBbmNob3JPZmZzZXQpID0gMDsKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNOb2RlKG5zSURPTU5vZGUgKiAqYUZvY3VzTm9kZSkgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2N1c09mZnNldChQUkludDMyICphRm9jdXNP ZmZzZXQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXNDb2xsYXBzZWQoUFJCb29s ICphSXNDb2xsYXBzZWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmFuZ2VDb3Vu dChQUkludDMyICphUmFuZ2VDb3VudCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRS YW5nZUF0KFBSSW50MzIgaW5kZXgsIG5zSURPTVJhbmdlICoqX3JldHZhbCkgPSAwOwojIDkxICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBDb2xsYXBzZShuc0lET01Ob2RlICpwYXJlbnROb2RlLCBQUkludDMyIG9mZnNldCkgPSAwOwoj IDEwMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbi5oIgogIHZpcnR1YWwg bnNyZXN1bHQgRXh0ZW5kKG5zSURPTU5vZGUgKnBhcmVudE5vZGUsIFBSSW50MzIgb2Zmc2V0KSA9 IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29sbGFwc2VUb1N0YXJ0KHZvaWQpID0gMDsK CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb2xsYXBzZVRvRW5kKHZvaWQpID0gMDsKIyAxMjcg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVz dWx0IENvbnRhaW5zTm9kZShuc0lET01Ob2RlICpub2RlLCBQUkJvb2wgZW50aXJlbHlDb250YWlu ZWQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0 QWxsQ2hpbGRyZW4obnNJRE9NTm9kZSAqcGFyZW50Tm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBBZGRSYW5nZShuc0lET01SYW5nZSAqcmFuZ2UpID0gMDsKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgUmVtb3ZlUmFuZ2UobnNJRE9NUmFuZ2UgKnJhbmdlKSA9IDA7CgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFJlbW92ZUFsbFJhbmdlcyh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IERlbGV0ZUZyb21Eb2N1bWVudCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgU2VsZWN0aW9uTGFuZ3VhZ2VDaGFuZ2UoUFJCb29sIGxhbmdSVEwpID0gMDsKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcoUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKfTsK IyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAyCiMgMSAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlZmxvd0NvbW1hbmQuaCIgMQojIDI1ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lSZWZsb3dDb21tYW5kLmgiIDIKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYt cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI3ICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIiAyCgpjbGFzcyBuc0lBdG9tOwpjbGFzcyBu c0lGcmFtZTsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7 CnN0cnVjdCBuc0hUTUxSZWZsb3dNZXRyaWNzOwpzdHJ1Y3QgbnNTaXplOwojIDY1ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIgpjbGFzcyBuc0lSZWZsb3dDb21t YW5kIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0geyAweGMzNjU4ZTQwLCAweGZmMjAsIDB4MTFk MSwgezB4ODUsIDB4YmMsIDB4MCwgMHhhMCwgMHgyNCwgMHg2OCwgMHhmYSwgMHhiNn19OyByZXR1 cm4gaWlkOyB9CgogIGVudW0gUmVmbG93VHlwZSB7CgoKCgoKICAgIENvbnRlbnRDaGFuZ2VkLAoK CgoKCiAgICBTdHlsZUNoYW5nZWQsCgoKCgogICAgUHVsbHVwUmVmbG93LAogICAgUHVzaFJlZmxv dywKCgoKCiAgICBDaGVja1B1bGx1cFJlZmxvdywKCgogICAgUmVmbG93RGlydHksCgoKICAgIFRp bWVvdXQsCgoKICAgIFVzZXJEZWZpbmVkCiAgfTsKIyAxMTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lSZWZsb3dDb21tYW5kLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEaXNwYXRjaChuc0lQ cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgbnNIVE1MUmVm bG93TWV0cmljcyYgYURlc2lyZWRTaXplLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNT aXplJiBhTWF4U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQm IGFSZW5kQ29udGV4dCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dChuc0lG cmFtZSomIGFOZXh0RnJhbWUsIFBSQm9vbCBhUmVtb3ZlID0gMSkgPSAwOwoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFRhcmdldChuc0lGcmFtZSomIGFUYXJnZXRGcmFtZSkgY29uc3QgPSAwOwoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRhcmdldChuc0lGcmFtZSogYVRhcmdldEZyYW1lKSA9 IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShSZWZsb3dUeXBlJiBhUmVmbG93VHlw ZSkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkRnJhbWUobnNJRnJh bWUqJiBhQ2hpbGRGcmFtZSkgY29uc3QgPSAwOwojIDE1MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSVJlZmxvd0NvbW1hbmQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkTGlzdE5h bWUobnNJQXRvbSomIGFMaXN0TmFtZSkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0Q2hpbGRMaXN0TmFtZShuc0lBdG9tKiBhTGlzdE5hbWUpID0gMDsKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UHJldlNpYmxpbmdGcmFtZShuc0lGcmFtZSomIGFTaWJsaW5nRnJhbWUp IGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMaXN0KEZJTEUqIG91dCkgY29uc3Qg PSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZsYWdzKFBSSW50MzIqIGFGbGFncykgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmxhZ3MoUFJJbnQzMiBhRmxhZ3MpID0gMDsKfTsKIyA0 NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAyCiMgMSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIgMQojIDQ2ICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiIDIKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIgMQojIDIxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgpjbGFzcyBuc0lTZWxlY3Rpb247CnR5cGVkZWYg c2hvcnQgU2VsZWN0aW9uVHlwZTsKdHlwZWRlZiBzaG9ydCBTZWxlY3Rpb25SZWdpb247CmNsYXNz IG5zSURPTU5vZGU7CiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25D b250cm9sbGVyLmgiCmNsYXNzIG5zSVNlbGVjdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgbnNJU3Vw cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4ZDJkMWQxNzksIDB4ODVhNywgMHgxMWQzLCB7IDB4OTksIDB4 MzIsIDB4MDAsIDB4MTAsIDB4ODMsIDB4MDEsIDB4MjMsIDB4M2MgfX07IHJldHVybiBpaWQ7fQoK ICBlbnVtIHsgU0VMRUNUSU9OX05PTkUgPSAwIH07CgogIGVudW0geyBTRUxFQ1RJT05fTk9STUFM ID0gMSB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX1NQRUxMQ0hFQ0sgPSAyIH07CgogIGVudW0geyBT RUxFQ1RJT05fSU1FX1JBV0lOUFVUID0gNCB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX0lNRV9TRUxF Q1RFRFJBV1RFWFQgPSA4IH07CgogIGVudW0geyBTRUxFQ1RJT05fSU1FX0NPTlZFUlRFRFRFWFQg PSAxNiB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX0lNRV9TRUxFQ1RFRENPTlZFUlRFRFRFWFQgPSAz MiB9OwoKICBlbnVtIHsgTlVNX1NFTEVDVElPTlRZUEVTID0gNiB9OwoKICBlbnVtIHsgU0VMRUNU SU9OX0FOQ0hPUl9SRUdJT04gPSAwIH07CgogIGVudW0geyBTRUxFQ1RJT05fRk9DVVNfUkVHSU9O ID0gMSB9OwoKICBlbnVtIHsgTlVNX1NFTEVDVElPTl9SRUdJT05TID0gMiB9OwoKICBlbnVtIHsg U0VMRUNUSU9OX09GRiA9IDAgfTsKCiAgZW51bSB7IFNFTEVDVElPTl9ISURERU4gPSAxIH07Cgog IGVudW0geyBTRUxFQ1RJT05fT04gPSAyIH07CgogIGVudW0geyBTRUxFQ1RJT05fRElTQUJMRUQg PSAzIH07CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERpc3BsYXlTZWxlY3Rpb24oUFJJbnQx NiB0b2dnbGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlzcGxheVNlbGVjdGlv bihQUkludDE2ICpfcmV0dmFsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXNw bGF5Tm9uVGV4dFNlbGVjdGlvbihQUkJvb2wgdG9nZ2xlKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXREaXNwbGF5Tm9uVGV4dFNlbGVjdGlvbihQUkJvb2wgKl9yZXR2YWwpID0gMDsK IyAxMDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25Db250cm9sbGVyLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb24oUFJJbnQxNiB0eXBlLCBuc0lTZWxlY3Rp b24gKipfcmV0dmFsKSA9IDA7CiMgMTEzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2Vs ZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsU2VsZWN0aW9uSW50 b1ZpZXcoUFJJbnQxNiB0eXBlLCBQUkludDE2IHJlZ2lvbikgPSAwOwoKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IFJlcGFpbnRTZWxlY3Rpb24oUFJJbnQxNiB0eXBlKSA9IDA7CiMgMTMxICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwg bnNyZXN1bHQgU2V0Q2FyZXRFbmFibGVkKFBSQm9vbCBlbmFibGVkKSA9IDA7CiMgMTQwICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwg bnNyZXN1bHQgU2V0Q2FyZXRXaWR0aChQUkludDE2IHBpeGVscykgPSAwOwojIDE0OSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IFNldENhcmV0UmVhZE9ubHkoUFJCb29sIHJlYWRPbmx5KSA9IDA7CiMgMTU4ICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0Q2FyZXRFbmFibGVkKFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDE2OCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFs IG5zcmVzdWx0IENoYXJhY3Rlck1vdmUoUFJCb29sIGZvcndhcmQsIFBSQm9vbCBleHRlbmQpID0g MDsKIyAxNzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25Db250cm9sbGVy LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBXb3JkTW92ZShQUkJvb2wgZm9yd2FyZCwgUFJCb29sIGV4 dGVuZCkgPSAwOwojIDE4OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNv bnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IExpbmVNb3ZlKFBSQm9vbCBmb3J3YXJkLCBQ UkJvb2wgZXh0ZW5kKSA9IDA7CiMgMTk5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2Vs ZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW50cmFMaW5lTW92ZShQUkJv b2wgZm9yd2FyZCwgUFJCb29sIGV4dGVuZCkgPSAwOwojIDIwOSAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFBhZ2VN b3ZlKFBSQm9vbCBmb3J3YXJkLCBQUkJvb2wgZXh0ZW5kKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IENvbXBsZXRlU2Nyb2xsKFBSQm9vbCBmb3J3YXJkKSA9IDA7CiMgMjI1ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgQ29tcGxldGVNb3ZlKFBSQm9vbCBmb3J3YXJkLCBQUkJvb2wgZXh0ZW5kKSA9IDA7CgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbFBhZ2UoUFJCb29sIGZvcndhcmQpID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsTGluZShQUkJvb2wgZm9yd2FyZCkgPSAwOwoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxIb3Jpem9udGFsKFBSQm9vbCBsZWZ0KSA9IDA7CgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0QWxsKHZvaWQpID0gMDsKIyAyNTggIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBDaGVja1Zpc2liaWxpdHkobnNJRE9NTm9kZSAqbm9kZSwgUFJJbnQxNiBzdGFydE9mZnNl dCwgUFJJbnQxNiBlbmRPZmZzZXQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyA0OCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAyCgoKY2xhc3MgbnNJQ29udGVu dDsKY2xhc3MgbnNJQ29udGVudEl0ZXJhdG9yOwpjbGFzcyBuc0lEb2N1bWVudDsKY2xhc3MgbnNJ RG9jdW1lbnRPYnNlcnZlcjsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0Owpj bGFzcyBuc0lTdHlsZVNldDsKY2xhc3MgbnNJVmlld01hbmFnZXI7CmNsYXNzIG5zSURldmljZUNv bnRleHQ7CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNzIG5zSVBhZ2VTZXF1ZW5jZUZy YW1lOwpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNTdHJpbmdBcnJheTsKY2xhc3MgbnNJQ2FyZXQ7 CmNsYXNzIG5zSVN0eWxlQ29udGV4dDsKY2xhc3MgbnNJRnJhbWVTZWxlY3Rpb247CmNsYXNzIG5z SUZyYW1lTWFuYWdlcjsKY2xhc3MgbnNJTGF5b3V0SGlzdG9yeVN0YXRlOwpjbGFzcyBuc0lBcmVu YTsKY2xhc3MgbnNJUmVmbG93Q2FsbGJhY2s7CmNsYXNzIG5zSVN1cHBvcnRzQXJyYXk7CiMgMTA2 ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCmVudW0gbnNBdHRyaWJ1 dGVDaGFuZ2VUeXBlIHsKICBlQ2hhbmdlVHlwZV9TZXQgPSAwLAogIGVDaGFuZ2VUeXBlX1JlbW92 ZSA9IDEKfTsKIyAxMjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIK Y2xhc3MgbnNJUHJlc1NoZWxsIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0geyAweDc2ZTc5YzYw LCAweDk0NGUsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4 ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7IH0KCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSURv Y3VtZW50KiBhRG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJl c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgIG5zSVZpZXdNYW5hZ2VyKiBhVmlld01hbmFnZXIs CiAgICAgICAgICAgICAgICAgIG5zSVN0eWxlU2V0KiBhU3R5bGVTZXQpID0gMDsKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZUZyYW1lKHNpemVfdCBhU2l6ZSwgdm9pZCoqIGFSZXN1bHQp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEZyZWVGcmFtZShzaXplX3QgYVNpemUsIHZvaWQqIGFG cmVlQ2h1bmspID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHVzaFN0YWNrTWVtb3J5KCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgUG9wU3RhY2tNZW1vcnkoKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBBbGxvY2F0ZVN0YWNrTWVtb3J5KHNpemVfdCBhU2l6ZSwgdm9pZCoqIGFSZXN1bHQpID0g MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudChuc0lEb2N1bWVudCoqIGFSZXN1bHQp ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVzQ29udGV4dChuc0lQcmVzQ29udGV4dCoq IGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3TWFuYWdlcihuc0lWaWV3 TWFuYWdlcioqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZVNldChu c0lTdHlsZVNldCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBY3RpdmVB bHRlcm5hdGVTdHlsZVNoZWV0KG5zU3RyaW5nJiBhU2hlZXRUaXRsZSkgPSAwOwoKICB2aXJ0dWFs IG5zcmVzdWx0IFNlbGVjdEFsdGVybmF0ZVN0eWxlU2hlZXQoY29uc3QgbnNTdHJpbmcmIGFTaGVl dFRpdGxlKSA9IDA7CiMgMTYyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxs LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmVmZXJlbmNlU3R5bGVSdWxlcyhQUkJvb2wgYUZv cmNlUmVmbG93KSA9IDA7CiMgMTcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1No ZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVQcmVmU3R5bGVSdWxlcyhQUkJvb2wgYUVu YWJsZSwgUFJVaW50OCBhUHJlZlR5cGU9MHhGRikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQXJl UHJlZlN0eWxlUnVsZXNFbmFibGVkKFBSQm9vbCYgYUVuYWJsZWQpID0gMDsKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgTGlzdEFsdGVybmF0ZVN0eWxlU2hlZXRzKG5zU3RyaW5nQXJyYXkmIGFUaXRs ZUxpc3QpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVTZWxlY3Rpb24obnNJ RnJhbWVTZWxlY3Rpb24qKiBhU2VsZWN0aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJl Z2luT2JzZXJ2aW5nRG9jdW1lbnQoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZE9ic2Vy dmluZ0RvY3VtZW50KCkgPSAwOwojIDE5OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBy ZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlhbFJlZmxvdyhuc2Nvb3JkIGFXaWR0 aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc2l6ZVJl Zmxvdyhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgU3R5bGVDaGFuZ2VSZWZsb3coKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 Um9vdEZyYW1lKG5zSUZyYW1lKiogYUZyYW1lKSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFBhZ2VTZXF1ZW5jZUZyYW1lKG5zSVBhZ2VTZXF1ZW5jZUZyYW1lKiogYVJlc3Vs dCkgY29uc3QgPSAwOwojIDIzNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVs bC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJpbWFyeUZyYW1lRm9yKG5zSUNvbnRlbnQqIGFD b250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYVByaW1h cnlGcmFtZSkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZUNvbnRl eHRGb3IobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdHlsZUNvbnRleHQqKiBhU3R5bGVDb250ZXh0KSBjb25zdCA9IDA7CgoKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TGF5b3V0T2JqZWN0Rm9yKG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiogYVJlc3VsdCkgY29uc3Qg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdWJTaGVsbEZvcihuc0lDb250ZW50KiBh Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiogYVJlc3Vs dCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdWJTaGVsbEZvcihuc0lD b250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRz KiBhU3ViU2hlbGwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGxhY2Vob2xkZXJG cmFtZUZvcihuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lGcmFtZSoqIGFQbGFjZWhvbGRlckZyYW1lKSBjb25zdCA9IDA7CgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgQXBwZW5kUmVmbG93Q29tbWFuZChuc0lSZWZsb3dDb21tYW5kKiBhUmVmbG93 Q29tbWFuZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2VsUmVmbG93Q29tbWFuZChuc0lG cmFtZSogYVRhcmdldEZyYW1lLCBuc0lSZWZsb3dDb21tYW5kOjpSZWZsb3dUeXBlKiBhQ21kVHlw ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2VsQWxsUmVmbG93Q29tbWFuZHMoKSA9IDA7 CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTYWZlVG9GbHVzaChQUkJvb2wmIGFJc1NhZmVU b0ZsdXNoKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoUGVuZGluZ05vdGlmaWNh dGlvbnMoKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUG9zdERPTUV2ZW50KG5zSUNvbnRl bnQqIGFDb250ZW50LCBuc0V2ZW50KiBhRXZlbnQpPTA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg UG9zdEF0dHJpYnV0ZUNoYW5nZShuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNwYWNlSUQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zSUF0b20qIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBuc1N0cmluZyYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQUkJvb2wgYU5vdGlmeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNBdHRyaWJ1dGVDaGFuZ2VUeXBlIGFUeXBlKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUG9z dFJlZmxvd0NhbGxiYWNrKG5zSVJlZmxvd0NhbGxiYWNrKiBhQ2FsbGJhY2spID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IENhbmNlbFJlZmxvd0NhbGxiYWNrKG5zSVJlZmxvd0NhbGxiYWNrKiBhQ2Fs bGJhY2spID0gMDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJlZ2luUmVmbG93QmF0Y2hpbmcoKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBFbmRSZWZsb3dCYXRjaGluZyhQUkJvb2wgYUZsdXNoUGVu ZGluZ1JlZmxvd3MpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlZmxvd0JhdGNoaW5nU3Rh dHVzKFBSQm9vbCogYUlzQmF0Y2hpbmcpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhckZy YW1lUmVmcyhuc0lGcmFtZSogYUZyYW1lKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENy ZWF0ZVJlbmRlcmluZ0NvbnRleHQobnNJRnJhbWUgKmFGcmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCoqIGFDb250ZXh0KSA9IDA7CiMg MzM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBDYW50UmVuZGVyUmVwbGFjZWRFbGVtZW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBh RnJhbWUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdvVG9BbmNob3IoY29uc3QgbnNT dHJpbmcmIGFBbmNob3JOYW1lKSA9IDA7CiMgMzczICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxGcmFtZUludG9WaWV3KG5z SUZyYW1lICphRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50biBh VlBlcmNlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50biBhSFBlcmNl bnQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeURlc3Ryb3lpbmdG cmFtZShuc0lGcmFtZSogYUZyYW1lKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJh bWVNYW5hZ2VyKG5zSUZyYW1lTWFuYWdlcioqIGFGcmFtZU1hbmFnZXIpIGNvbnN0ID0gMDsKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBEb0NvcHkoKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg RG9Db3B5TGlua0xvY2F0aW9uKG5zSURPTU5vZGUqIGFOb2RlKSA9IDA7CgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgRG9Db3B5SW1hZ2VMb2NhdGlvbihuc0lET01Ob2RlKiBhTm9kZSkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgRG9Db3B5SW1hZ2VDb250ZW50cyhuc0lET01Ob2RlKiBhTm9kZSkgPSAw OwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhcmV0KG5zSUNhcmV0ICoqYU91dENhcmV0KSA9 IDA7CiMgNDE5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBTZXREaXNwbGF5Tm9uVGV4dFNlbGVjdGlvbihQUkJvb2wgYUluRW5hYmxl KSA9IDA7CiMgNDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXREaXNwbGF5Tm9uVGV4dFNlbGVjdGlvbihQUkJvb2wgKmFPdXRF bmFibGVkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnRXaXRoVGFyZ2V0 KG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG cmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRl bnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy IGFGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50U3RhdHVz KiBhU3RhdHVzKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRE9NRXZlbnRXaXRo VGFyZ2V0KG5zSUNvbnRlbnQqIGFUYXJnZXRDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNFdmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVu dFN0YXR1cyogYVN0YXR1cykgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEV2ZW50VGFy Z2V0RnJhbWUobnNJRnJhbWUqKiBhRnJhbWUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg Q2FwdHVyZUhpc3RvcnlTdGF0ZShuc0lMYXlvdXRIaXN0b3J5U3RhdGUqKiBhTGF5b3V0SGlzdG9y eVN0YXRlLCBQUkJvb2wgYUxlYXZpbmdQYWdlID0gMCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg R2V0SGlzdG9yeVN0YXRlKG5zSUxheW91dEhpc3RvcnlTdGF0ZSoqIGFMYXlvdXRIaXN0b3J5U3Rh dGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhpc3RvcnlTdGF0ZShuc0lMYXlvdXRIaXN0 b3J5U3RhdGUqIGFMYXlvdXRIaXN0b3J5U3RhdGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgSXNSZWZsb3dMb2NrZWQoUFJCb29sKiBhSXNMb2NrZWQpID0gMDsKIyA0NzIgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIKICBlbnVtIEdlbmVyYXRlZENvbnRlbnRU eXBlIHtCZWZvcmUsIEFmdGVyfTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEdlbmVyYXRlZENvbnRl bnRJdGVyYXRvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHZW5lcmF0ZWRDb250ZW50VHlwZSBhVHlwZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50SXRlcmF0b3IqKiBhSXRlcmF0 b3IpIGNvbnN0ID0gMDsKIyA0ODcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hl bGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFub255bW91c0NvbnRlbnRGb3IobnNJQ29udGVu dCogYUNvbnRlbnQsIG5zSVN1cHBvcnRzQXJyYXkqIGFBbm9ueW1vdXNFbGVtZW50cykgPSAwOwoj IDQ5OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0QW5vbnltb3VzQ29udGVudEZvcihuc0lDb250ZW50KiBhQ29udGVudCwgbnNJ U3VwcG9ydHNBcnJheSoqIGFBbm9ueW1vdXNFbGVtZW50cykgPSAwOwoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBSZWxlYXNlQW5vbnltb3VzQ29udGVudCgpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IElzUGFpbnRpbmdTdXBwcmVzc2VkKFBSQm9vbCogYVJlc3VsdCk9MDsKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBVbnN1cHByZXNzUGFpbnRpbmcoKSA9IDA7CgogIGVudW0gSW50ZXJydXB0 VHlwZSB7VGltZW91dH07CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZW5kSW50ZXJydXB0Tm90aWZp Y2F0aW9uVG8obnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJbnRlcnJ1cHRUeXBlIGFJbnRlcnJ1cHRUeXBlKSA9IDA7CgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDYW5jZWxJbnRlcnJ1cHROb3RpZmljYXRpb25Ubyhuc0lGcmFtZSogYUZyYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0VHlw ZSBhSW50ZXJydXB0VHlwZSkgPSAwOwojIDUzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SVByZXNTaGVsbC5oIgogIHN0YXRpYyBQUkJvb2wgR2V0VmVyaWZ5UmVmbG93RW5hYmxlKCk7CgoK CgogIHN0YXRpYyB2b2lkIFNldFZlcmlmeVJlZmxvd0VuYWJsZShQUkJvb2wgYUVuYWJsZWQpOwoK CgoKICBzdGF0aWMgUFJJbnQzMiBHZXRWZXJpZnlSZWZsb3dGbGFncygpOwojIDU2NSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 Q3Vyc29yQmlkaUxldmVsKFBSVWludDggYUxldmVsKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Q3Vyc29yQmlkaUxldmVsKFBSVWludDggKmFPdXRMZXZlbCkgPSAwOwoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFVuZGVmaW5lQ3Vyc29yQmlkaUxldmVsKHZvaWQpID0gMDsKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBCaWRpU3R5bGVDaGFuZ2VSZWZsb3codm9pZCkgPSAwOwoKCn07CgoKCgoK ZXh0ZXJuIG5zcmVzdWx0CiAgTlNfTmV3UHJlc1NoZWxsKG5zSVByZXNTaGVsbCoqIGFJbnN0YW5j ZVB0clJlc3VsdCk7CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0 LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIgMQojIDM4ICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSUxhbmd1YWdlQXRvbS5oIiAxCiMgMzkgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiIDIKCmNsYXNzIG5zSUZyYW1lOwojIDczICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIgplbnVtIG5zU3R5bGVTdHJ1Y3RJ RCB7CiAgZVN0eWxlU3RydWN0X0ZvbnQgPSAxLAogIGVTdHlsZVN0cnVjdF9Db2xvciA9IDIsCiAg ZVN0eWxlU3RydWN0X0JhY2tncm91bmQgPSAzLAogIGVTdHlsZVN0cnVjdF9MaXN0ID0gNCwKICBl U3R5bGVTdHJ1Y3RfUG9zaXRpb24gPSA1LAogIGVTdHlsZVN0cnVjdF9UZXh0ID0gNiwKICBlU3R5 bGVTdHJ1Y3RfVGV4dFJlc2V0ID0gNywKICBlU3R5bGVTdHJ1Y3RfRGlzcGxheSA9IDgsCiAgZVN0 eWxlU3RydWN0X1Zpc2liaWxpdHkgPSA5LAogIGVTdHlsZVN0cnVjdF9Db250ZW50ID0gMTAsCiAg ZVN0eWxlU3RydWN0X1F1b3RlcyA9IDExLAogIGVTdHlsZVN0cnVjdF9Vc2VySW50ZXJmYWNlID0g MTIsCiAgZVN0eWxlU3RydWN0X1VJUmVzZXQgPSAxMywKICBlU3R5bGVTdHJ1Y3RfVGFibGUgPSAx NCwKICBlU3R5bGVTdHJ1Y3RfVGFibGVCb3JkZXIgPSAxNSwKICBlU3R5bGVTdHJ1Y3RfTWFyZ2lu ID0gMTYsCiAgZVN0eWxlU3RydWN0X1BhZGRpbmcgPSAxNywKICBlU3R5bGVTdHJ1Y3RfQm9yZGVy ID0gMTgsCiAgZVN0eWxlU3RydWN0X091dGxpbmUgPSAxOSwKICBlU3R5bGVTdHJ1Y3RfWFVMID0g MjAsCiAgZVN0eWxlU3RydWN0X01heCA9IGVTdHlsZVN0cnVjdF9YVUwsCiAgZVN0eWxlU3RydWN0 X0JvcmRlclBhZGRpbmdTaG9ydGN1dCA9IDIxCn07CgoKc3RydWN0IG5zU3R5bGVTdHJ1Y3Qgewp9 OwoKCgpzdHJ1Y3QgbnNTdHlsZUZvbnQgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls ZUZvbnQodm9pZCk7CiAgfm5zU3R5bGVGb250KHZvaWQpIHt9OwoKICBQUkludDMyIENhbGNEaWZm ZXJlbmNlKGNvbnN0IG5zU3R5bGVGb250JiBhT3RoZXIpIGNvbnN0OwogIHN0YXRpYyBQUkludDMy IENhbGNGb250RGlmZmVyZW5jZShjb25zdCBuc0ZvbnQmIGFGb250MSwgY29uc3QgbnNGb250JiBh Rm9udDIpOwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCog YUNvbnRleHQpOwogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpOwoKICBu c0ZvbnQgbUZvbnQ7CiAgbnNGb250IG1GaXhlZEZvbnQ7CiAgUFJVaW50OCBtRmxhZ3M7CgogIG5z U3R5bGVGb250KGNvbnN0IG5zRm9udCYgYVZhcmlhYmxlRm9udCwgY29uc3QgbnNGb250JiBhRml4 ZWRGb250KTsKICBuc1N0eWxlRm9udChjb25zdCBuc1N0eWxlRm9udCYgYVN0eWxlRm9udCk7CiAg bnNTdHlsZUZvbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7Cn07CgpzdHJ1Y3QgbnNT dHlsZUNvbG9yIDogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVDb2xvcihuc0lQcmVz Q29udGV4dCogYVByZXNDb250ZXh0KTsKICBuc1N0eWxlQ29sb3IoY29uc3QgbnNTdHlsZUNvbG9y JiBhT3RoZXIpOwogIH5uc1N0eWxlQ29sb3Iodm9pZCkge307CgogIFBSSW50MzIgQ2FsY0RpZmZl cmVuY2UoY29uc3QgbnNTdHlsZUNvbG9yJiBhT3RoZXIpIGNvbnN0OwoKICB2b2lkKiBvcGVyYXRv ciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJl c3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwog ICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29u dGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVDb2xvcigpOwogICAgYUNvbnRleHQtPkZyZWVUb1No ZWxsKHNpemVvZihuc1N0eWxlQ29sb3IpLCB0aGlzKTsKICB9OwoKCgogIG5zY29sb3IgbUNvbG9y Owp9OwoKc3RydWN0IG5zU3R5bGVCYWNrZ3JvdW5kIDogcHVibGljIG5zU3R5bGVTdHJ1Y3Qgewog IG5zU3R5bGVCYWNrZ3JvdW5kKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwogIG5zU3R5 bGVCYWNrZ3JvdW5kKGNvbnN0IG5zU3R5bGVCYWNrZ3JvdW5kJiBhT3RoZXIpOwogIH5uc1N0eWxl QmFja2dyb3VuZCgpIHt9OwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVz Q29udGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+ QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAg dm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5 bGVCYWNrZ3JvdW5kKCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVC YWNrZ3JvdW5kKSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBDYWxjRGlmZmVyZW5jZShjb25zdCBu c1N0eWxlQmFja2dyb3VuZCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtQmFja2dyb3VuZEF0 dGFjaG1lbnQ7CiAgUFJVaW50OCBtQmFja2dyb3VuZEZsYWdzOwogIFBSVWludDggbUJhY2tncm91 bmRSZXBlYXQ7CgogIG5zY29sb3IgbUJhY2tncm91bmRDb2xvcjsKICBuc2Nvb3JkIG1CYWNrZ3Jv dW5kWFBvc2l0aW9uOwogIG5zY29vcmQgbUJhY2tncm91bmRZUG9zaXRpb247CiAgbnNTdHJpbmcg bUJhY2tncm91bmRJbWFnZTsKCiAgUFJCb29sIEJhY2tncm91bmRJc1RyYW5zcGFyZW50KCkgY29u c3Qge3JldHVybiAobUJhY2tncm91bmRGbGFncyAmCiAgICAoMHgwMSB8IDB4MDIpKSA9PQogICAg KDB4MDEgfCAweDAyKTt9Cn07CiMgMTg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHls ZVN0cnVjdC5oIgpzdHJ1Y3QgbnNTdHlsZU1hcmdpbjogcHVibGljIG5zU3R5bGVTdHJ1Y3Qgewog IG5zU3R5bGVNYXJnaW4odm9pZCk7CiAgbnNTdHlsZU1hcmdpbihjb25zdCBuc1N0eWxlTWFyZ2lu JiBhTWFyZ2luKTsKICB+bnNTdHlsZU1hcmdpbih2b2lkKSB7fTsKCiAgdm9pZCogb3BlcmF0b3Ig bmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KTsKICB2b2lkIERlc3Ryb3ko bnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KTsKCiAgdm9pZCBSZWNhbGNEYXRhKCk7CiAgUFJJbnQz MiBDYWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxlTWFyZ2luJiBhT3RoZXIpIGNvbnN0OwoKICBu c1N0eWxlU2lkZXMgbU1hcmdpbjsKCiAgUFJCb29sIEdldE1hcmdpbihuc01hcmdpbiYgYU1hcmdp bikgY29uc3QKICB7CiAgICBpZiAobUhhc0NhY2hlZE1hcmdpbikgewogICAgICBhTWFyZ2luID0g bUNhY2hlZE1hcmdpbjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgoK ICB2b2lkIENhbGNNYXJnaW5Gb3IoY29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4mIGFN YXJnaW4pIGNvbnN0OwoKcHJvdGVjdGVkOgogIFBSUGFja2VkQm9vbCBtSGFzQ2FjaGVkTWFyZ2lu OwogIG5zTWFyZ2luIG1DYWNoZWRNYXJnaW47Cn07CgoKc3RydWN0IG5zU3R5bGVQYWRkaW5nOiBw dWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVBhZGRpbmcodm9pZCk7CiAgbnNTdHlsZVBh ZGRpbmcoY29uc3QgbnNTdHlsZVBhZGRpbmcmIGFQYWRkaW5nKTsKICB+bnNTdHlsZVBhZGRpbmco dm9pZCkge307CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0 KiBhQ29udGV4dCk7CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCk7Cgog IHZvaWQgUmVjYWxjRGF0YSgpOwogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHls ZVBhZGRpbmcmIGFPdGhlcikgY29uc3Q7CgogIG5zU3R5bGVTaWRlcyBtUGFkZGluZzsKCiAgUFJC b29sIEdldFBhZGRpbmcobnNNYXJnaW4mIGFQYWRkaW5nKSBjb25zdAogIHsKICAgIGlmIChtSGFz Q2FjaGVkUGFkZGluZykgewogICAgICBhUGFkZGluZyA9IG1DYWNoZWRQYWRkaW5nOwogICAgICBy ZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCgogIHZvaWQgQ2FsY1BhZGRpbmdGb3Io Y29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4mIGFQYWRkaW5nKSBjb25zdDsKCnByb3Rl Y3RlZDoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZFBhZGRpbmc7CiAgbnNNYXJnaW4gbUNhY2hl ZFBhZGRpbmc7Cn07CgoKc3RydWN0IG5zU3R5bGVCb3JkZXI6IHB1YmxpYyBuc1N0eWxlU3RydWN0 IHsKICBuc1N0eWxlQm9yZGVyKCkge307CiAgbnNTdHlsZUJvcmRlcihuc0lQcmVzQ29udGV4dCog YUNvbnRleHQpOwogIG5zU3R5bGVCb3JkZXIoY29uc3QgbnNTdHlsZUJvcmRlciYgYUJvcmRlcik7 CiAgfm5zU3R5bGVCb3JkZXIodm9pZCkge307CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qg c3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCk7CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250 ZXh0KiBhQ29udGV4dCk7CgogIFBSQm9vbCBJc0JvcmRlclNpZGVWaXNpYmxlKFBSVWludDggYVNp ZGUpIGNvbnN0OwogIHZvaWQgUmVjYWxjRGF0YSgpOwogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2Uo Y29uc3QgbnNTdHlsZUJvcmRlciYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVNpZGVzIG1Cb3Jk ZXI7CiAgbnNTdHlsZVNpZGVzIG1Cb3JkZXJSYWRpdXM7CiAgUFJVaW50OCBtRmxvYXRFZGdlOwoK ICBQUkJvb2wgR2V0Qm9yZGVyKG5zTWFyZ2luJiBhQm9yZGVyKSBjb25zdAogIHsKICAgIGlmICht SGFzQ2FjaGVkQm9yZGVyKSB7CiAgICAgIGFCb3JkZXIgPSBtQ2FjaGVkQm9yZGVyOwogICAgICBy ZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgUFJVaW50OCBHZXRCb3JkZXJTdHls ZShQUlVpbnQ4IGFTaWRlKSBjb25zdAogIHsKICAgIHt9OwogICAgcmV0dXJuIChtQm9yZGVyU3R5 bGVbYVNpZGVdICYgMHgxRik7CiAgfQoKICB2b2lkIFNldEJvcmRlclN0eWxlKFBSVWludDggYVNp ZGUsIFBSVWludDggYVN0eWxlKQogIHsKICAgIHt9OwogICAgbUJvcmRlclN0eWxlW2FTaWRlXSAm PSB+MHgxRjsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gfD0gKGFTdHlsZSAmIDB4MUYpOwoKICB9 CgogIHZvaWQgR2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSwgbnNjb2xvciYgYUNvbG9yLAog ICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhVHJhbnNwYXJlbnQsIFBSQm9vbCYgYUZvcmVn cm91bmQpIGNvbnN0CiAgewogICAgYVRyYW5zcGFyZW50ID0gYUZvcmVncm91bmQgPSAwOwogICAg e307CiAgICBpZiAoKG1Cb3JkZXJTdHlsZVthU2lkZV0gJiAweDYwKSA9PSAwKQogICAgICBhQ29s b3IgPSBtQm9yZGVyQ29sb3JbYVNpZGVdOwogICAgZWxzZSBpZiAobUJvcmRlclN0eWxlW2FTaWRl XSAmIDB4MjApCiAgICAgIGFGb3JlZ3JvdW5kID0gMTsKICAgIGVsc2UKICAgICAgYVRyYW5zcGFy ZW50ID0gMTsKICB9CgogIHZvaWQgU2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSwgbnNjb2xv ciBhQ29sb3IpCiAgewogICAge307CiAgICBtQm9yZGVyQ29sb3JbYVNpZGVdID0gYUNvbG9yOwog ICAgbUJvcmRlclN0eWxlW2FTaWRlXSAmPSB+MHg2MDsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0g fD0gMHg4MDsKICB9CgogIHZvaWQgU2V0Qm9yZGVyVHJhbnNwYXJlbnQoUFJVaW50OCBhU2lkZSkK ICB7CiAgICB7fTsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gJj0gfjB4NjA7CiAgICBtQm9yZGVy U3R5bGVbYVNpZGVdIHw9ICgweDgwIHwgMHg0MCk7CiAgfQoKICB2b2lkIFNldEJvcmRlclRvRm9y ZWdyb3VuZChQUlVpbnQ4IGFTaWRlKQogIHsKICAgIHt9OwogICAgbUJvcmRlclN0eWxlW2FTaWRl XSAmPSB+MHg2MDsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gfD0gKDB4ODAgfCAweDIwKTsKICB9 CgogIHZvaWQgVW5zZXRCb3JkZXJDb2xvcihQUlVpbnQ4IGFTaWRlKQogIHsKICAgIHt9OwogICAg bUJvcmRlclN0eWxlW2FTaWRlXSAmPSAweDFGOwogIH0KCgogIHZvaWQgQ2FsY0JvcmRlckZvcihj b25zdCBuc0lGcmFtZSogYUZyYW1lLCBuc01hcmdpbiYgYUJvcmRlcikgY29uc3Q7Cgpwcm90ZWN0 ZWQ6CiAgUFJQYWNrZWRCb29sIG1IYXNDYWNoZWRCb3JkZXI7CiAgbnNNYXJnaW4gbUNhY2hlZEJv cmRlcjsKCiAgUFJVaW50OCBtQm9yZGVyU3R5bGVbNF07CiAgbnNjb2xvciBtQm9yZGVyQ29sb3Jb NF07CgoKICBuc2Nvb3JkIG1Cb3JkZXJXaWR0aHNbM107Cn07CgoKc3RydWN0IG5zU3R5bGVCb3Jk ZXJQYWRkaW5nOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZUJvcmRlclBhZGRpbmco dm9pZCkgeyBtSGFzQ2FjaGVkQm9yZGVyUGFkZGluZyA9IDA7IH07CiAgfm5zU3R5bGVCb3JkZXJQ YWRkaW5nKHZvaWQpIHt9OwoKICBQUkJvb2wgR2V0Qm9yZGVyUGFkZGluZyhuc01hcmdpbiYgYUJv cmRlclBhZGRpbmcpIGNvbnN0IHsKICAgIGlmIChtSGFzQ2FjaGVkQm9yZGVyUGFkZGluZykgewog ICAgICBhQm9yZGVyUGFkZGluZyA9IG1DYWNoZWRCb3JkZXJQYWRkaW5nOwogICAgICByZXR1cm4g MTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJQYWRkaW5nKG5zTWFy Z2luIGFCb3JkZXJQYWRkaW5nKSB7CiAgICBtQ2FjaGVkQm9yZGVyUGFkZGluZyA9IGFCb3JkZXJQ YWRkaW5nOwogICAgbUhhc0NhY2hlZEJvcmRlclBhZGRpbmcgPSAxOwogIH0KCnByb3RlY3RlZDoK ICBuc01hcmdpbiBtQ2FjaGVkQm9yZGVyUGFkZGluZzsKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hl ZEJvcmRlclBhZGRpbmc7Cn07CgoKc3RydWN0IG5zU3R5bGVPdXRsaW5lOiBwdWJsaWMgbnNTdHls ZVN0cnVjdCB7CiAgbnNTdHlsZU91dGxpbmUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7 CiAgbnNTdHlsZU91dGxpbmUoY29uc3QgbnNTdHlsZU91dGxpbmUmIGFPdXRsaW5lKTsKICB+bnNT dHlsZU91dGxpbmUodm9pZCkge307CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5z SVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250 ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0Owog IH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+ bnNTdHlsZU91dGxpbmUoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHls ZU91dGxpbmUpLCB0aGlzKTsKICB9OwoKICB2b2lkIFJlY2FsY0RhdGEoKTsKICBQUkludDMyIENh bGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVPdXRsaW5lJiBhT3RoZXIpIGNvbnN0OwoKICBuc1N0 eWxlU2lkZXMgbU91dGxpbmVSYWRpdXM7CgoKICBuc1N0eWxlQ29vcmQgbU91dGxpbmVXaWR0aDsK CiAgUFJCb29sIEdldE91dGxpbmVXaWR0aChuc2Nvb3JkJiBhV2lkdGgpIGNvbnN0CiAgewogICAg aWYgKG1IYXNDYWNoZWRPdXRsaW5lKSB7CiAgICAgIGFXaWR0aCA9IG1DYWNoZWRPdXRsaW5lV2lk dGg7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICBQUlVpbnQ4IEdl dE91dGxpbmVTdHlsZSh2b2lkKSBjb25zdAogIHsKICAgIHJldHVybiAobU91dGxpbmVTdHlsZSAm IDB4MUYpOwogIH0KCiAgdm9pZCBTZXRPdXRsaW5lU3R5bGUoUFJVaW50OCBhU3R5bGUpCiAgewog ICAgbU91dGxpbmVTdHlsZSAmPSB+MHgxRjsKICAgIG1PdXRsaW5lU3R5bGUgfD0gKGFTdHlsZSAm IDB4MUYpOwogIH0KCgogIFBSQm9vbCBHZXRPdXRsaW5lQ29sb3IobnNjb2xvciYgYUNvbG9yKSBj b25zdAogIHsKICAgIGlmICgobU91dGxpbmVTdHlsZSAmIDB4NjApID09IDApIHsKICAgICAgYUNv bG9yID0gbU91dGxpbmVDb2xvcjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsK ICB9CgogIHZvaWQgU2V0T3V0bGluZUNvbG9yKG5zY29sb3IgYUNvbG9yKQogIHsKICAgIG1PdXRs aW5lQ29sb3IgPSBhQ29sb3I7CiAgICBtT3V0bGluZVN0eWxlICY9IH4weDYwOwogICAgbU91dGxp bmVTdHlsZSB8PSAweDgwOwogIH0KCiAgdm9pZCBTZXRPdXRsaW5lSW52ZXJ0KHZvaWQpCiAgewog ICAgbU91dGxpbmVTdHlsZSB8PSAoMHg4MCB8IDB4NjApOwogIH0KCnByb3RlY3RlZDoKICBQUlBh Y2tlZEJvb2wgbUhhc0NhY2hlZE91dGxpbmU7CiAgbnNjb29yZCBtQ2FjaGVkT3V0bGluZVdpZHRo OwoKICBQUlVpbnQ4IG1PdXRsaW5lU3R5bGU7CiAgbnNjb2xvciBtT3V0bGluZUNvbG9yOwoKCiAg bnNjb29yZCBtQm9yZGVyV2lkdGhzWzNdOwp9OwoKCnN0cnVjdCBuc1N0eWxlTGlzdCA6IHB1Ymxp YyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlTGlzdCh2b2lkKTsKICBuc1N0eWxlTGlzdChjb25z dCBuc1N0eWxlTGlzdCYgYVN0eWxlTGlzdCk7CiAgfm5zU3R5bGVMaXN0KHZvaWQpOwoKICB2b2lk KiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAg IHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZy ZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250 ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVMaXN0KCk7CiAgICBhQ29udGV4dC0+ RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVMaXN0KSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBD YWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxlTGlzdCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50 OCBtTGlzdFN0eWxlVHlwZTsKICBQUlVpbnQ4IG1MaXN0U3R5bGVQb3NpdGlvbjsKICBuc1N0cmlu ZyBtTGlzdFN0eWxlSW1hZ2U7Cn07CgpzdHJ1Y3QgbnNTdHlsZVBvc2l0aW9uIDogcHVibGljIG5z U3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVQb3NpdGlvbih2b2lkKTsKICBuc1N0eWxlUG9zaXRpb24o Y29uc3QgbnNTdHlsZVBvc2l0aW9uJiBhT3RoZXIpOwogIH5uc1N0eWxlUG9zaXRpb24odm9pZCk7 CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4 dCkgewogICAgdm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVs bChzeiwgJnJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJ UHJlc0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVBvc2l0aW9uKCk7CiAg ICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVQb3NpdGlvbiksIHRoaXMpOwog IH07CgogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVBvc2l0aW9uJiBhT3Ro ZXIpIGNvbnN0OwoKICBuc1N0eWxlU2lkZXMgbU9mZnNldDsKICBuc1N0eWxlQ29vcmQgbVdpZHRo OwogIG5zU3R5bGVDb29yZCBtTWluV2lkdGg7CiAgbnNTdHlsZUNvb3JkIG1NYXhXaWR0aDsKICBu c1N0eWxlQ29vcmQgbUhlaWdodDsKICBuc1N0eWxlQ29vcmQgbU1pbkhlaWdodDsKICBuc1N0eWxl Q29vcmQgbU1heEhlaWdodDsKICBQUlVpbnQ4IG1Cb3hTaXppbmc7CgogIG5zU3R5bGVDb29yZCBt WkluZGV4Owp9OwoKc3RydWN0IG5zU3R5bGVUZXh0UmVzZXQgOiBwdWJsaWMgbnNTdHlsZVN0cnVj dCB7CiAgbnNTdHlsZVRleHRSZXNldCh2b2lkKTsKICBuc1N0eWxlVGV4dFJlc2V0KGNvbnN0IG5z U3R5bGVUZXh0UmVzZXQmIGFPdGhlcik7CiAgfm5zU3R5bGVUZXh0UmVzZXQodm9pZCk7CgogIHZv aWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewog ICAgdm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwg JnJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0Nv bnRleHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVRleHRSZXNldCgpOwogICAgYUNv bnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVGV4dFJlc2V0KSwgdGhpcyk7CiAgfTsK CiAgUFJJbnQzMiBDYWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxlVGV4dFJlc2V0JiBhT3RoZXIp IGNvbnN0OwoKICBQUlVpbnQ4IG1UZXh0RGVjb3JhdGlvbjsKICBuc1N0eWxlQ29vcmQgbVZlcnRp Y2FsQWxpZ247Cn07CgpzdHJ1Y3QgbnNTdHlsZVRleHQgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7 CiAgbnNTdHlsZVRleHQodm9pZCk7CiAgbnNTdHlsZVRleHQoY29uc3QgbnNTdHlsZVRleHQmIGFP dGhlcik7CiAgfm5zU3R5bGVUZXh0KHZvaWQpOwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90 IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAg ICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJl c3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAg dGhpcy0+fm5zU3R5bGVUZXh0KCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5z U3R5bGVUZXh0KSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBDYWxjRGlmZmVyZW5jZShjb25zdCBu c1N0eWxlVGV4dCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtVGV4dEFsaWduOwogIFBSVWlu dDggbVRleHRUcmFuc2Zvcm07CiAgUFJVaW50OCBtV2hpdGVTcGFjZTsKCiAgUFJVaW50OCBtVW5p Y29kZUJpZGk7CgoKICBuc1N0eWxlQ29vcmQgbUxldHRlclNwYWNpbmc7CiAgbnNTdHlsZUNvb3Jk IG1MaW5lSGVpZ2h0OwogIG5zU3R5bGVDb29yZCBtVGV4dEluZGVudDsKICBuc1N0eWxlQ29vcmQg bVdvcmRTcGFjaW5nOwoKICBQUkJvb2wgV2hpdGVTcGFjZUlzU2lnbmlmaWNhbnQoKSBjb25zdCB7 CiAgICByZXR1cm4gbVdoaXRlU3BhY2UgPT0gMTsKICB9Cn07CgpzdHJ1Y3QgbnNTdHlsZVZpc2li aWxpdHkgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVZpc2liaWxpdHkobnNJUHJl c0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CiAgbnNTdHlsZVZpc2liaWxpdHkoY29uc3QgbnNTdHls ZVZpc2liaWxpdHkmIGFWaXNpYmlsaXR5KTsKICB+bnNTdHlsZVZpc2liaWxpdHkoKSB7fTsKCiAg dm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7 CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6 LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVz Q29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVmlzaWJpbGl0eSgpOwogICAg YUNvbnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVmlzaWJpbGl0eSksIHRoaXMpOwog IH07CgogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVZpc2liaWxpdHkmIGFP dGhlcikgY29uc3Q7CgogIFBSVWludDggbURpcmVjdGlvbjsKICBQUlVpbnQ4IG1WaXNpYmxlOwog IG5zQ09NUHRyPG5zSUxhbmd1YWdlQXRvbT4gbUxhbmd1YWdlOwogIGZsb2F0IG1PcGFjaXR5OwoK ICBQUkJvb2wgSXNWaXNpYmxlKCkgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuIChtVmlz aWJsZSA9PSAxKTsKICAgICAgICB9CgogICAgICAgIFBSQm9vbCBJc1Zpc2libGVPckNvbGxhcHNl ZCgpIGNvbnN0IHsKICAgICAgICAgICAgICAgIHJldHVybiAoKG1WaXNpYmxlID09IDEpIHx8CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtVmlzaWJsZSA9 PSAyKSk7CiAgICAgICAgfQp9OwoKc3RydWN0IG5zU3R5bGVEaXNwbGF5IDogcHVibGljIG5zU3R5 bGVTdHJ1Y3QgewogIG5zU3R5bGVEaXNwbGF5KCk7CiAgbnNTdHlsZURpc3BsYXkoY29uc3QgbnNT dHlsZURpc3BsYXkmIGFPdGhlcik7CiAgfm5zU3R5bGVEaXNwbGF5KCkge307CgogIHZvaWQqIG9w ZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdm9p ZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3Vs dCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQq IGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZURpc3BsYXkoKTsKICAgIGFDb250ZXh0LT5G cmVlVG9TaGVsbChzaXplb2YobnNTdHlsZURpc3BsYXkpLCB0aGlzKTsKICB9OwoKICBQUkludDMy IENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVEaXNwbGF5JiBhT3RoZXIpIGNvbnN0OwoKICBQ UlVpbnQ4IG1EaXNwbGF5OwogIG5zU3RyaW5nIG1CaW5kaW5nOwogIFBSVWludDggbVBvc2l0aW9u OwogIFBSVWludDggbUZsb2F0czsKICBQUlVpbnQ4IG1CcmVha1R5cGU7CiAgUFJQYWNrZWRCb29s IG1CcmVha0JlZm9yZTsKICBQUlBhY2tlZEJvb2wgbUJyZWFrQWZ0ZXI7CiAgUFJVaW50OCBtT3Zl cmZsb3c7CgogIFBSVWludDggbUNsaXBGbGFnczsKCgoKCgoKICBuc1JlY3QgbUNsaXA7CgoKICBQ UkJvb2wgSXNCbG9ja0xldmVsKCkgY29uc3Qge3JldHVybiAoMSA9PSBtRGlzcGxheSkgfHwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCA9PSBtRGlzcGxheSkgfHwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOCA9PSBtRGlzcGxheSk7fQoKICBQ UkJvb2wgSXNGbG9hdGluZygpIGNvbnN0IHsKICAgIHJldHVybiAwICE9IG1GbG9hdHM7CiAgfQoK ICBQUkJvb2wgSXNBYnNvbHV0ZWx5UG9zaXRpb25lZCgpIGNvbnN0IHtyZXR1cm4gKDIgPT0gbVBv c2l0aW9uKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoMyA9PSBtUG9zaXRpb24pO30KCiAgUFJCb29sIElzUG9zaXRpb25lZCgpIGNvbnN0IHtyZXR1 cm4gSXNBYnNvbHV0ZWx5UG9zaXRpb25lZCgpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDEgPT0gbVBvc2l0aW9uKTt9Cn07CgpzdHJ1Y3QgbnNTdHlsZVRhYmxlOiBw dWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVRhYmxlKHZvaWQpOwogIG5zU3R5bGVUYWJs ZShjb25zdCBuc1N0eWxlVGFibGUmIGFPdGhlcik7CiAgfm5zU3R5bGVUYWJsZSh2b2lkKTsKCiAg dm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7 CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6 LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVz Q29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVGFibGUoKTsKICAgIGFDb250 ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVRhYmxlKSwgdGhpcyk7CiAgfTsKCiAgUFJJ bnQzMiBDYWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxlVGFibGUmIGFPdGhlcikgY29uc3Q7Cgog IFBSVWludDggbUxheW91dFN0cmF0ZWd5OwogIFBSVWludDggbUZyYW1lOwogIFBSVWludDggbVJ1 bGVzOwogIFBSSW50MzIgbUNvbHM7CiAgUFJJbnQzMiBtU3BhbjsKfTsKCnN0cnVjdCBuc1N0eWxl VGFibGVCb3JkZXI6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlVGFibGVCb3JkZXIo bnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KTsKICBuc1N0eWxlVGFibGVCb3JkZXIoY29uc3QgbnNT dHlsZVRhYmxlQm9yZGVyJiBhT3RoZXIpOwogIH5uc1N0eWxlVGFibGVCb3JkZXIodm9pZCk7Cgog IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkg ewogICAgdm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChz eiwgJnJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJl c0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVRhYmxlQm9yZGVyKCk7CiAg ICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVUYWJsZUJvcmRlciksIHRoaXMp OwogIH07CgogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVRhYmxlQm9yZGVy JiBhT3RoZXIpIGNvbnN0OwoKICBQUlVpbnQ4IG1Cb3JkZXJDb2xsYXBzZTsKICBuc1N0eWxlQ29v cmQgbUJvcmRlclNwYWNpbmdYOwogIG5zU3R5bGVDb29yZCBtQm9yZGVyU3BhY2luZ1k7CiAgUFJV aW50OCBtQ2FwdGlvblNpZGU7CiAgUFJVaW50OCBtRW1wdHlDZWxsczsKfTsKCmVudW0gbnNTdHls ZUNvbnRlbnRUeXBlIHsKICBlU3R5bGVDb250ZW50VHlwZV9TdHJpbmcgPSAxLAogIGVTdHlsZUNv bnRlbnRUeXBlX1VSTCA9IDEwLAogIGVTdHlsZUNvbnRlbnRUeXBlX0F0dHIgPSAyMCwKICBlU3R5 bGVDb250ZW50VHlwZV9Db3VudGVyID0gMzAsCiAgZVN0eWxlQ29udGVudFR5cGVfQ291bnRlcnMg PSAzMSwKICBlU3R5bGVDb250ZW50VHlwZV9PcGVuUXVvdGUgPSA0MCwKICBlU3R5bGVDb250ZW50 VHlwZV9DbG9zZVF1b3RlID0gNDEsCiAgZVN0eWxlQ29udGVudFR5cGVfTm9PcGVuUXVvdGUgPSA0 MiwKICBlU3R5bGVDb250ZW50VHlwZV9Ob0Nsb3NlUXVvdGUgPSA0Mwp9OwoKc3RydWN0IG5zU3R5 bGVDb250ZW50RGF0YSB7CiAgbnNTdHlsZUNvbnRlbnRUeXBlIG1UeXBlOwogIG5zU3RyaW5nIG1D b250ZW50Owp9OwoKc3RydWN0IG5zU3R5bGVDb3VudGVyRGF0YSB7CiAgbnNTdHJpbmcgbUNvdW50 ZXI7CiAgUFJJbnQzMiBtVmFsdWU7Cn07CgoKCgpzdHJ1Y3QgbnNTdHlsZVF1b3RlcyA6IHB1Ymxp YyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlUXVvdGVzKCk7CiAgbnNTdHlsZVF1b3Rlcyhjb25z dCBuc1N0eWxlUXVvdGVzJiBhUXVvdGVzKTsKICB+bnNTdHlsZVF1b3RlcygpOwoKICB2b2lkKiBv cGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHZv aWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1 bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0 KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVRdW90ZXMoKTsKICAgIGFDb250ZXh0LT5G cmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVF1b3RlcyksIHRoaXMpOwogIH07CgogIFBSSW50MzIg Q2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVF1b3RlcyYgYU90aGVyKSBjb25zdDsKCgogIFBS VWludDMyIFF1b3Rlc0NvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1RdW90ZXNDb3VudDsgfQog IG5zcmVzdWx0IEdldFF1b3Rlc0F0KFBSVWludDMyIGFJbmRleCwgbnNTdHJpbmcmIGFPcGVuLCBu c1N0cmluZyYgYUNsb3NlKSBjb25zdCB7CiAgICBpZiAoYUluZGV4IDwgbVF1b3Rlc0NvdW50KSB7 CiAgICAgIGFJbmRleCAqPSAyOwogICAgICBhT3BlbiA9IG1RdW90ZXNbYUluZGV4XTsKICAgICAg YUNsb3NlID0gbVF1b3Rlc1srK2FJbmRleF07CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0 dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsKICB9CgogIG5zcmVzdWx0IEFsbG9jYXRlUXVv dGVzKFBSVWludDMyIGFDb3VudCkgewogICAgaWYgKGFDb3VudCAhPSBtUXVvdGVzQ291bnQpIHsK ICAgICAgaWYgKG1RdW90ZXMpIHsgZGVsZXRlW10gbVF1b3RlczsgbVF1b3RlcyA9IDA7IH07CiAg ICAgIGlmIChhQ291bnQpIHsKICAgICAgICBtUXVvdGVzID0gbmV3IG5zU3RyaW5nW2FDb3VudCAq IDJdOwogICAgICAgIGlmICghIG1RdW90ZXMpIHsKICAgICAgICAgIG1RdW90ZXNDb3VudCA9IDA7 CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOwogICAgICAgIH0KICAg ICAgfQogICAgICBtUXVvdGVzQ291bnQgPSBhQ291bnQ7CiAgICB9CiAgICByZXR1cm4gMDsKICB9 CgogIG5zcmVzdWx0IFNldFF1b3Rlc0F0KFBSVWludDMyIGFJbmRleCwgY29uc3QgbnNTdHJpbmcm IGFPcGVuLCBjb25zdCBuc1N0cmluZyYgYUNsb3NlKSB7CiAgICBpZiAoYUluZGV4IDwgbVF1b3Rl c0NvdW50KSB7CiAgICAgIGFJbmRleCAqPSAyOwogICAgICBtUXVvdGVzW2FJbmRleF0gPSBhT3Bl bjsKICAgICAgbVF1b3Rlc1srK2FJbmRleF0gPSBhQ2xvc2U7CiAgICAgIHJldHVybiAwOwogICAg fQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsKICB9Cgpwcm90ZWN0ZWQ6CiAg UFJVaW50MzIgbVF1b3Rlc0NvdW50OwogIG5zU3RyaW5nKiBtUXVvdGVzOwp9OwoKc3RydWN0IG5z U3R5bGVDb250ZW50OiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZUNvbnRlbnQodm9p ZCk7CiAgbnNTdHlsZUNvbnRlbnQoY29uc3QgbnNTdHlsZUNvbnRlbnQmIGFDb250ZW50KTsKICB+ bnNTdHlsZUNvbnRlbnQodm9pZCk7CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5z SVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250 ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0Owog IH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+ bnNTdHlsZUNvbnRlbnQoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHls ZUNvbnRlbnQpLCB0aGlzKTsKICB9OwoKICBQUkludDMyIENhbGNEaWZmZXJlbmNlKGNvbnN0IG5z U3R5bGVDb250ZW50JiBhT3RoZXIpIGNvbnN0OwoKICBQUlVpbnQzMiBDb250ZW50Q291bnQodm9p ZCkgY29uc3QgeyByZXR1cm4gbUNvbnRlbnRDb3VudDsgfQogIG5zcmVzdWx0IEdldENvbnRlbnRB dChQUlVpbnQzMiBhSW5kZXgsIG5zU3R5bGVDb250ZW50VHlwZSYgYVR5cGUsIG5zU3RyaW5nJiBh Q29udGVudCkgY29uc3QgewogICAgaWYgKGFJbmRleCA8IG1Db250ZW50Q291bnQpIHsKICAgICAg YVR5cGUgPSBtQ29udGVudHNbYUluZGV4XS5tVHlwZTsKICAgICAgYUNvbnRlbnQgPSBtQ29udGVu dHNbYUluZGV4XS5tQ29udGVudDsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChu c3Jlc3VsdCkgMHg4MDA3MDA1N0wpOwogIH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVDb250ZW50cyhQ UlVpbnQzMiBhQ291bnQpIHsKICAgIGlmIChhQ291bnQgIT0gbUNvbnRlbnRDb3VudCkgewogICAg ICBpZiAobUNvbnRlbnRzKSB7IGRlbGV0ZVtdIG1Db250ZW50czsgbUNvbnRlbnRzID0gMDsgfTsK ICAgICAgaWYgKGFDb3VudCkgewogICAgICAgIG1Db250ZW50cyA9IG5ldyBuc1N0eWxlQ29udGVu dERhdGFbYUNvdW50XTsKICAgICAgICBpZiAoISBtQ29udGVudHMpIHsKICAgICAgICAgIG1Db250 ZW50Q291bnQgPSAwOwogICAgICAgICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsK ICAgICAgICB9CiAgICAgIH0KICAgICAgbUNvbnRlbnRDb3VudCA9IGFDb3VudDsKICAgIH0KICAg IHJldHVybiAwOwogIH0KCiAgbnNyZXN1bHQgU2V0Q29udGVudEF0KFBSVWludDMyIGFJbmRleCwg bnNTdHlsZUNvbnRlbnRUeXBlIGFUeXBlLCBjb25zdCBuc1N0cmluZyYgYUNvbnRlbnQpIHsKICAg IGlmIChhSW5kZXggPCBtQ29udGVudENvdW50KSB7CiAgICAgIG1Db250ZW50c1thSW5kZXhdLm1U eXBlID0gYVR5cGU7CiAgICAgIGlmIChhVHlwZSA8IGVTdHlsZUNvbnRlbnRUeXBlX09wZW5RdW90 ZSkgewogICAgICAgIG1Db250ZW50c1thSW5kZXhdLm1Db250ZW50ID0gYUNvbnRlbnQ7CiAgICAg IH0KICAgICAgZWxzZSB7CiAgICAgICAgbUNvbnRlbnRzW2FJbmRleF0ubUNvbnRlbnQuVHJ1bmNh dGUoKTsKICAgICAgfQogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDcwMDU3TCk7CiAgfQoKICBQUlVpbnQzMiBDb3VudGVySW5jcmVtZW50Q291bnQodm9p ZCkgY29uc3QgeyByZXR1cm4gbUluY3JlbWVudENvdW50OyB9CiAgbnNyZXN1bHQgR2V0Q291bnRl ckluY3JlbWVudEF0KFBSVWludDMyIGFJbmRleCwgbnNTdHJpbmcmIGFDb3VudGVyLCBQUkludDMy JiBhSW5jcmVtZW50KSBjb25zdCB7CiAgICBpZiAoYUluZGV4IDwgbUluY3JlbWVudENvdW50KSB7 CiAgICAgIGFDb3VudGVyID0gbUluY3JlbWVudHNbYUluZGV4XS5tQ291bnRlcjsKICAgICAgYUlu Y3JlbWVudCA9IG1JbmNyZW1lbnRzW2FJbmRleF0ubVZhbHVlOwogICAgICByZXR1cm4gMDsKICAg IH0KICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBuc3Jlc3VsdCBB bGxvY2F0ZUNvdW50ZXJJbmNyZW1lbnRzKFBSVWludDMyIGFDb3VudCkgewogICAgaWYgKGFDb3Vu dCAhPSBtSW5jcmVtZW50Q291bnQpIHsKICAgICAgaWYgKG1JbmNyZW1lbnRzKSB7IGRlbGV0ZVtd IG1JbmNyZW1lbnRzOyBtSW5jcmVtZW50cyA9IDA7IH07CiAgICAgIGlmIChhQ291bnQpIHsKICAg ICAgICBtSW5jcmVtZW50cyA9IG5ldyBuc1N0eWxlQ291bnRlckRhdGFbYUNvdW50XTsKICAgICAg ICBpZiAoISBtSW5jcmVtZW50cykgewogICAgICAgICAgbUluY3JlbWVudENvdW50ID0gMDsKICAg ICAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICAgICAgfQogICAgICB9 CiAgICAgIG1JbmNyZW1lbnRDb3VudCA9IGFDb3VudDsKICAgIH0KICAgIHJldHVybiAwOwogIH0K CiAgbnNyZXN1bHQgU2V0Q291bnRlckluY3JlbWVudEF0KFBSVWludDMyIGFJbmRleCwgY29uc3Qg bnNTdHJpbmcmIGFDb3VudGVyLCBQUkludDMyIGFJbmNyZW1lbnQpIHsKICAgIGlmIChhSW5kZXgg PCBtSW5jcmVtZW50Q291bnQpIHsKICAgICAgbUluY3JlbWVudHNbYUluZGV4XS5tQ291bnRlciA9 IGFDb3VudGVyOwogICAgICBtSW5jcmVtZW50c1thSW5kZXhdLm1WYWx1ZSA9IGFJbmNyZW1lbnQ7 CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdM KTsKICB9CgogIFBSVWludDMyIENvdW50ZXJSZXNldENvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJu IG1SZXNldENvdW50OyB9CiAgbnNyZXN1bHQgR2V0Q291bnRlclJlc2V0QXQoUFJVaW50MzIgYUlu ZGV4LCBuc1N0cmluZyYgYUNvdW50ZXIsIFBSSW50MzImIGFWYWx1ZSkgY29uc3QgewogICAgaWYg KGFJbmRleCA8IG1SZXNldENvdW50KSB7CiAgICAgIGFDb3VudGVyID0gbVJlc2V0c1thSW5kZXhd Lm1Db3VudGVyOwogICAgICBhVmFsdWUgPSBtUmVzZXRzW2FJbmRleF0ubVZhbHVlOwogICAgICBy ZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoK ICBuc3Jlc3VsdCBBbGxvY2F0ZUNvdW50ZXJSZXNldHMoUFJVaW50MzIgYUNvdW50KSB7CiAgICBp ZiAoYUNvdW50ICE9IG1SZXNldENvdW50KSB7CiAgICAgIGlmIChtUmVzZXRzKSB7IGRlbGV0ZVtd IG1SZXNldHM7IG1SZXNldHMgPSAwOyB9OwogICAgICBpZiAoYUNvdW50KSB7CiAgICAgICAgbVJl c2V0cyA9IG5ldyBuc1N0eWxlQ291bnRlckRhdGFbYUNvdW50XTsKICAgICAgICBpZiAoISBtUmVz ZXRzKSB7CiAgICAgICAgICBtUmVzZXRDb3VudCA9IDA7CiAgICAgICAgICByZXR1cm4gKChuc3Jl c3VsdCkgMHg4MDA3MDAwZUwpOwogICAgICAgIH0KICAgICAgfQogICAgICBtUmVzZXRDb3VudCA9 IGFDb3VudDsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgbnNyZXN1bHQgU2V0Q291bnRlclJl c2V0QXQoUFJVaW50MzIgYUluZGV4LCBjb25zdCBuc1N0cmluZyYgYUNvdW50ZXIsIFBSSW50MzIg YVZhbHVlKSB7CiAgICBpZiAoYUluZGV4IDwgbVJlc2V0Q291bnQpIHsKICAgICAgbVJlc2V0c1th SW5kZXhdLm1Db3VudGVyID0gYUNvdW50ZXI7CiAgICAgIG1SZXNldHNbYUluZGV4XS5tVmFsdWUg PSBhVmFsdWU7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4 ODAwNzAwNTdMKTsKICB9CgogIG5zU3R5bGVDb29yZCBtTWFya2VyT2Zmc2V0OwoKcHJvdGVjdGVk OgogIFBSVWludDMyIG1Db250ZW50Q291bnQ7CiAgbnNTdHlsZUNvbnRlbnREYXRhKiBtQ29udGVu dHM7CgogIFBSVWludDMyIG1JbmNyZW1lbnRDb3VudDsKICBuc1N0eWxlQ291bnRlckRhdGEqIG1J bmNyZW1lbnRzOwoKICBQUlVpbnQzMiBtUmVzZXRDb3VudDsKICBuc1N0eWxlQ291bnRlckRhdGEq IG1SZXNldHM7Cn07CgpzdHJ1Y3QgbnNTdHlsZVVJUmVzZXQ6IHB1YmxpYyBuc1N0eWxlU3RydWN0 IHsKICBuc1N0eWxlVUlSZXNldCh2b2lkKTsKICBuc1N0eWxlVUlSZXNldChjb25zdCBuc1N0eWxl VUlSZXNldCYgYU90aGVyKTsKICB+bnNTdHlsZVVJUmVzZXQodm9pZCk7CgogIHZvaWQqIG9wZXJh dG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdm9pZCog cmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7 CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFD b250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVVJUmVzZXQoKTsKICAgIGFDb250ZXh0LT5GcmVl VG9TaGVsbChzaXplb2YobnNTdHlsZVVJUmVzZXQpLCB0aGlzKTsKICB9OwoKICBQUkludDMyIENh bGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVVSVJlc2V0JiBhT3RoZXIpIGNvbnN0OwoKICBQUlVp bnQ4IG1Vc2VyU2VsZWN0OwogIFBSVW5pY2hhciBtS2V5RXF1aXZhbGVudDsKICBQUlVpbnQ4IG1S ZXNpemVyOwp9OwoKc3RydWN0IG5zU3R5bGVVc2VySW50ZXJmYWNlOiBwdWJsaWMgbnNTdHlsZVN0 cnVjdCB7CiAgbnNTdHlsZVVzZXJJbnRlcmZhY2Uodm9pZCk7CiAgbnNTdHlsZVVzZXJJbnRlcmZh Y2UoY29uc3QgbnNTdHlsZVVzZXJJbnRlcmZhY2UmIGFPdGhlcik7CiAgfm5zU3R5bGVVc2VySW50 ZXJmYWNlKHZvaWQpOwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29u dGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxs b2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9p ZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVV c2VySW50ZXJmYWNlKCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVV c2VySW50ZXJmYWNlKSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBDYWxjRGlmZmVyZW5jZShjb25z dCBuc1N0eWxlVXNlckludGVyZmFjZSYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtVXNlcklu cHV0OwogIFBSVWludDggbVVzZXJNb2RpZnk7CiAgUFJVaW50OCBtVXNlckZvY3VzOwoKICBQUlVp bnQ4IG1DdXJzb3I7CiAgbnNTdHJpbmcgbUN1cnNvckltYWdlOwp9OwoKCnN0cnVjdCBuc1N0eWxl WFVMIDogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVYVUwoKTsKICBuc1N0eWxlWFVM KGNvbnN0IG5zU3R5bGVYVUwmIGFTb3VyY2UpOwogIH5uc1N0eWxlWFVMKCk7CgogIHZvaWQqIG9w ZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdm9p ZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3Vs dCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQq IGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVhVTCgpOwogICAgYUNvbnRleHQtPkZyZWVU b1NoZWxsKHNpemVvZihuc1N0eWxlWFVMKSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBDYWxjRGlm ZmVyZW5jZShjb25zdCBuc1N0eWxlWFVMJiBhT3RoZXIpIGNvbnN0OwoKCgoKCiAgUFJVaW50OCBt Qm94T3JpZW50Owp9OwoKCgoKCgpzdHJ1Y3QgbnNCb3JkZXJFZGdlczsKCgpzdHJ1Y3QgbnNCb3Jk ZXJFZGdlCnsKCiAgbnNjb29yZCBtV2lkdGg7CgogIG5zY29vcmQgbUxlbmd0aDsKICBQUlVpbnQ4 IG1TdHlsZTsKICBuc2NvbG9yIG1Db2xvcjsKCiAgUFJVaW50OCBtU2lkZTsKCiAgbnNCb3JkZXJF ZGdlcyAqIG1JbnNpZGVOZWlnaGJvcjsKCiAgbnNCb3JkZXJFZGdlKCk7Cn07CgppbmxpbmUgbnNC b3JkZXJFZGdlOjpuc0JvcmRlckVkZ2UoKQp7CiAgbVdpZHRoPTA7CiAgbUxlbmd0aD0wOwogIG1T dHlsZT0wOwogIG1Db2xvcj0wOwogIG1TaWRlPTM7CiAgbUluc2lkZU5laWdoYm9yID0gMDsKfTsK CgoKCnN0cnVjdCBuc0JvcmRlckVkZ2VzCnsKICBuc1ZvaWRBcnJheSBtRWRnZXNbNF07CiAgbnNN YXJnaW4gbU1heEJvcmRlcldpZHRoOwogIFBSUGFja2VkQm9vbCBtT3V0c2lkZUVkZ2U7CgogIG5z Qm9yZGVyRWRnZXMoKTsKfTsKCmlubGluZSBuc0JvcmRlckVkZ2VzOjpuc0JvcmRlckVkZ2VzKCkK ewogIG1NYXhCb3JkZXJXaWR0aC5TaXplVG8oMCwwLDAsMCk7CiAgbU91dHNpZGVFZGdlID0gMTsK fTsKIyAzMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvb3JkLmgiIDEKIyAzMyAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNIVE1MUmVmbG93U3RhdGUuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNI VE1MUmVmbG93U3RhdGUuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQu aCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUmVmbG93U3RhdGUuaCIg MgoKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lSZWZsb3dD b21tYW5kOwpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpjbGFzcyBuc0lTcGFjZU1hbmFnZXI7 CmNsYXNzIG5zTGluZUxheW91dDsKCnN0cnVjdCBuc1N0eWxlRGlzcGxheTsKc3RydWN0IG5zU3R5 bGVWaXNpYmlsaXR5OwpzdHJ1Y3QgbnNTdHlsZVBvc2l0aW9uOwpzdHJ1Y3QgbnNTdHlsZUJvcmRl cjsKc3RydWN0IG5zU3R5bGVNYXJnaW47CnN0cnVjdCBuc1N0eWxlUGFkZGluZzsKc3RydWN0IG5z U3R5bGVUZXh0OwpzdHJ1Y3QgbnNIeXBvdGhldGljYWxCb3g7CiMgNTggIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgplbnVtIG5zUmVmbG93UmVhc29uIHsKICBl UmVmbG93UmVhc29uX0luaXRpYWwgPSAwLAogIGVSZWZsb3dSZWFzb25fSW5jcmVtZW50YWwgPSAx LAogIGVSZWZsb3dSZWFzb25fUmVzaXplID0gMiwKICBlUmVmbG93UmVhc29uX1N0eWxlQ2hhbmdl ID0gMywKCiAgZVJlZmxvd1JlYXNvbl9EaXJ0eSA9IDQKfTsKCgoKCnR5cGVkZWYgUFJVaW50MzIg bnNDU1NGcmFtZVR5cGU7CiMgMTE0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUmVm bG93U3RhdGUuaCIKc3RydWN0IG5zSFRNTFJlZmxvd1N0YXRlIHsKCgogIGNvbnN0IG5zSFRNTFJl Zmxvd1N0YXRlKiBwYXJlbnRSZWZsb3dTdGF0ZTsKCgogIG5zSUZyYW1lKiBmcmFtZTsKCgogIG5z UmVmbG93UmVhc29uIHJlYXNvbjsKCgogIG5zSVJlZmxvd0NvbW1hbmQqIHJlZmxvd0NvbW1hbmQ7 CiMgMTM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUmVmbG93U3RhdGUuaCIKICBu c2Nvb3JkIGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQ7CgoKICBuc0lSZW5kZXJpbmdD b250ZXh0KiByZW5kQ29udGV4dDsKCgogIFBSUGFja2VkQm9vbCBpc1RvcE9mUGFnZTsKCgoKICBu c0NTU0ZyYW1lVHlwZSBtRnJhbWVUeXBlOwoKCiAgbnNJU3BhY2VNYW5hZ2VyKiBtU3BhY2VNYW5h Z2VyOwoKCiAgbnNMaW5lTGF5b3V0KiBtTGluZUxheW91dDsKIyAxNjQgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgogIG5zY29vcmQgbUNvbXB1dGVkV2lkdGg7 CiMgMTc5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUmVmbG93U3RhdGUuaCIKICBu c2Nvb3JkIG1Db21wdXRlZEhlaWdodDsKCgogIG5zTWFyZ2luIG1Db21wdXRlZE1hcmdpbjsKCgog IG5zTWFyZ2luIG1Db21wdXRlZEJvcmRlclBhZGRpbmc7CgoKICBuc01hcmdpbiBtQ29tcHV0ZWRQ YWRkaW5nOwoKCgogIG5zTWFyZ2luIG1Db21wdXRlZE9mZnNldHM7CgoKICBuc2Nvb3JkIG1Db21w dXRlZE1pbldpZHRoLCBtQ29tcHV0ZWRNYXhXaWR0aDsKICBuc2Nvb3JkIG1Db21wdXRlZE1pbkhl aWdodCwgbUNvbXB1dGVkTWF4SGVpZ2h0OwoKCiAgbnNjb29yZCBtQ29tcGFjdE1hcmdpbldpZHRo OwoKCgoKCgogIG5zY29vcmQgbUFsaWduQ2hhck9mZnNldDsKCgoKICBQUlBhY2tlZEJvb2wgbVVz ZUFsaWduQ2hhck9mZnNldDsKCgogIGNvbnN0IG5zU3R5bGVEaXNwbGF5KiBtU3R5bGVEaXNwbGF5 OwogIGNvbnN0IG5zU3R5bGVWaXNpYmlsaXR5KiBtU3R5bGVWaXNpYmlsaXR5OwogIGNvbnN0IG5z U3R5bGVQb3NpdGlvbiogbVN0eWxlUG9zaXRpb247CiAgY29uc3QgbnNTdHlsZUJvcmRlciogbVN0 eWxlQm9yZGVyOwogIGNvbnN0IG5zU3R5bGVNYXJnaW4qIG1TdHlsZU1hcmdpbjsKICBjb25zdCBu c1N0eWxlUGFkZGluZyogbVN0eWxlUGFkZGluZzsKICBjb25zdCBuc1N0eWxlVGV4dCogbVN0eWxl VGV4dDsKCgoKICBQUkludDMyIG1SZWZsb3dEZXB0aDsKCgogIG5zY29vcmQgbVJpZ2h0RWRnZTsK IyAyNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgogIG5z SFRNTFJlZmxvd1N0YXRlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1Jl YXNvbiBhUmVhc29uLAogICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQqIGFS ZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU2l6ZSYgYUF2YWls YWJsZVNwYWNlKTsKCgoKICBuc0hUTUxSZWZsb3dTdGF0ZShuc0lQcmVzQ29udGV4dCogYVByZXND b250ZXh0LAogICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAg ICAgICAgICAgbnNJUmVmbG93Q29tbWFuZCYgYVJlZmxvd0NvbW1hbmQsCiAgICAgICAgICAgICAg ICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCogYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgY29uc3QgbnNTaXplJiBhQXZhaWxhYmxlU3BhY2UpOwoKCgoKICBuc0hUTUxSZWZs b3dTdGF0ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg IGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUGFyZW50UmVmbG93U3RhdGUsCiAgICAgICAgICAg ICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1Np emUmIGFBdmFpbGFibGVTcGFjZSwKICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1JlYXNvbiBh UmVhc29uKTsKCgoKICBuc0hUTUxSZWZsb3dTdGF0ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250 ZXh0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUGFyZW50 UmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAg ICAgICAgICAgICAgICBjb25zdCBuc1NpemUmIGFBdmFpbGFibGVTcGFjZSk7CgoKCiAgbnNIVE1M UmVmbG93U3RhdGUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg ICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVBhcmVudFJlZmxvd1N0YXRlLAogICAgICAg ICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg bnNTaXplJiBhQXZhaWxhYmxlU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29u dGFpbmluZ0Jsb2NrV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmlu Z0Jsb2NrSGVpZ2h0KTsKCgoKCgoKICBzdGF0aWMgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqCiAg ICBHZXRDb250YWluaW5nQmxvY2tSZWZsb3dTdGF0ZShjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSog YVBhcmVudFJTKTsKCgoKCgoKICBzdGF0aWMgbnNjb29yZAogICAgR2V0Q29udGFpbmluZ0Jsb2Nr Q29udGVudFdpZHRoKGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBhUGFyZW50UlMpOwoKCgoKCgog IHN0YXRpYyBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSoKICAgIEdldFBhZ2VCb3hSZWZsb3dTdGF0 ZShjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSogYVBhcmVudFJTKTsKIyAzMTEgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgogIHN0YXRpYyB2b2lkIENvbXB1dGVC b3JkZXJQYWRkaW5nRm9yKG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFQYXJlbnRSUywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc01hcmdpbiYgYVJlc3VsdCk7CgoKCgoK CiAgc3RhdGljIG5zY29vcmQgQ2FsY0xpbmVIZWlnaHQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0 KiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG cmFtZSogYUZyYW1lKTsKCiAgc3RhdGljIFBSQm9vbCBVc2VDb21wdXRlZEhlaWdodCgpOwoKICBz dGF0aWMgbnNDU1NGcmFtZVR5cGUgRGV0ZXJtaW5lRnJhbWVUeXBlKG5zSUZyYW1lKiBhRnJhbWUp OwoKICB2b2lkIENvbXB1dGVDb250YWluaW5nQmxvY2tSZWN0YW5nbGUobnNJUHJlc0NvbnRleHQq IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbnNIVE1MUmVmbG93U3RhdGUqIGFDb250YWluaW5nQmxvY2tSUywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCYgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkJiBhQ29udGFpbmlu Z0Jsb2NrSGVpZ2h0KTsKCiAgdm9pZCBDYWxjdWxhdGVCbG9ja1NpZGVNYXJnaW5zKG5zY29vcmQg YUF2YWlsV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNv bXB1dGVkV2lkdGgpOwoKCnByb3RlY3RlZDoKCgogIHZvaWQgSW5pdChuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0LAogICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCA9 IC0xLAogICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tIZWlnaHQgPSAtMSk7Cgog IHZvaWQgSW5pdENvbnN0cmFpbnRzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg ICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGgsCiAgICAgICAg ICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKCiAgdm9pZCBD YWxjdWxhdGVIeXBvdGhldGljYWxCb3gobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVBsYWNlaG9sZGVyRnJhbWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFCbG9ja0ZyYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTWFyZ2luJiBhQmxvY2tDb250ZW50QXJl YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUFic29sdXRlQ29u dGFpbmluZ0Jsb2NrRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNIeXBv dGhldGljYWxCb3gmIGFIeXBvdGhldGljYWxCb3gpOwoKICB2b2lkIEluaXRBYnNvbHV0ZUNvbnN0 cmFpbnRzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSogY2JycywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKCiAg dm9pZCBDb21wdXRlUmVsYXRpdmVPZmZzZXRzKGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBjYnJz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tX aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Js b2NrSGVpZ2h0KTsKCiAgdm9pZCBDb21wdXRlQmxvY2tCb3hEYXRhKG5zSVByZXNDb250ZXh0KiBh UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxv d1N0YXRlKiBjYnJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc1N0eWxlVW5pdCBhV2lk dGhVbml0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc1N0eWxlVW5pdCBhSGVpZ2h0VW5p dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrV2lk dGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja0hl aWdodCk7CgogIHZvaWQgQ29tcHV0ZUhvcml6b250YWxWYWx1ZShuc2Nvb3JkIGFDb250YWluaW5n QmxvY2tXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3R5bGVV bml0IGFVbml0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNT dHlsZUNvb3JkJiBhQ29vcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c2Nvb3JkJiBhUmVzdWx0KTsKCiAgdm9pZCBDb21wdXRlVmVydGljYWxWYWx1ZShuc2Nvb3JkIGFD b250YWluaW5nQmxvY2tIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNTdHlsZVVuaXQgYVVuaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNjb29yZCYgYVJlc3VsdCk7CgogIHN0YXRpYyBuc0NTU0ZyYW1lVHlwZSBEZXRlcm1pbmVG cmFtZVR5cGUobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVEaXNwbGF5KiBhRGlzcGxheSk7CgoKCiAgdm9pZCBD b21wdXRlTWFyZ2luKG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAogICAgICAgICAgICAg ICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSogYUNvbnRhaW5pbmdCbG9ja1JTKTsKCgoK ICB2b2lkIENvbXB1dGVQYWRkaW5nKG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAogICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFDb250YWluaW5nQmxv Y2tSUyk7CgoKCgogIHZvaWQgQ29tcHV0ZU1pbk1heFZhbHVlcyhuc2Nvb3JkIGFDb250YWluaW5n QmxvY2tXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmlu Z0Jsb2NrSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZs b3dTdGF0ZSogYUNvbnRhaW5pbmdCbG9ja1JTKTsKCiAgbnNjb29yZCBDYWxjdWxhdGVIb3JpekJv cmRlclBhZGRpbmdNYXJnaW4obnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGgpOwoKCgoKCiAg dm9pZCBBZGp1c3RDb21wdXRlZEhlaWdodCh2b2lkKTsKICB2b2lkIEFkanVzdENvbXB1dGVkV2lk dGgodm9pZCk7Cn07CiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIiAy CiMgNTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgpjbGFzcyBuc0lBdG9t OwpjbGFzcyBuc0lDb250ZW50OwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJUHJlc1No ZWxsOwpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwpj bGFzcyBuc0lTdHlsZUNvbnRleHQ7CmNsYXNzIG5zSVZpZXc7CmNsYXNzIG5zSVdpZGdldDsKY2xh c3MgbnNBdXRvU3RyaW5nOwpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNJRm9jdXNUcmFja2VyOwpj bGFzcyBuc1N0eWxlQ2hhbmdlTGlzdDsKY2xhc3MgbnNCbG9ja0ZyYW1lOwpjbGFzcyBuc0xpbmVM YXlvdXQ7CgpzdHJ1Y3QgbnNQZWVrT2Zmc2V0U3RydWN0OwpzdHJ1Y3QgbnNQb2ludDsKc3RydWN0 IG5zUmVjdDsKc3RydWN0IG5zU3R5bGVTdHJ1Y3Q7CmNsYXNzIG5zSURPTVJhbmdlOwpjbGFzcyBu c0lDYXJldDsKY2xhc3MgbnNJU2VsZWN0aW9uQ29udHJvbGxlcjsKc3RydWN0IFBSTG9nTW9kdWxl SW5mbzsKCmNsYXNzIG5zSUFjY2Vzc2libGU7CiMgMTAwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJRnJhbWUuaCIKdHlwZWRlZiBQUlVpbnQzMiBuc1NwbGl0dGFibGVUeXBlOwojIDExOCAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCnR5cGVkZWYgUFJVaW50MzIgbnNG cmFtZVN0YXRlOwojIDIxMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCmVu dW0gbnNGcmFtZVBhaW50TGF5ZXIgewogIGVGcmFtZVBhaW50TGF5ZXJfVW5kZXJsYXkgPSAwLAog IGVGcmFtZVBhaW50TGF5ZXJfQ29udGVudCA9IDEsCiAgZUZyYW1lUGFpbnRMYXllcl9PdmVybGF5 ID0gMgp9OwoKZW51bSBuc1NlbGVjdGlvbkFtb3VudCB7CiAgZVNlbGVjdENoYXJhY3RlciA9IDAs CiAgZVNlbGVjdFdvcmQgPSAxLAogIGVTZWxlY3RMaW5lID0gMiwKICBlU2VsZWN0QmVnaW5MaW5l ID0gMywKICBlU2VsZWN0RW5kTGluZSA9IDQsCiAgZVNlbGVjdE5vQW1vdW50ID0gNSwKICBlU2Vs ZWN0RGlyID0gNiwKICBlU2VsZWN0UGFyYWdyYXBoID0gNwp9OwoKZW51bSBuc0RpcmVjdGlvbiB7 CiAgZURpck5leHQgPSAwLAogIGVEaXJQcmV2aW91cz0gMQp9OwoKZW51bSBuc1NwcmVhZCB7CiAg ZVNwcmVhZE5vbmUgPSAwLAogIGVTcHJlYWRBY3Jvc3MgPSAxLAogIGVTcHJlYWREb3duID0gMgp9 OwoKZW51bSBuc0NvbnRleHRQcm92aWRlclJlbGF0aW9uc2hpcCB7CiAgZUNvbnRleHRQcm92aWRl cl9BbmNlc3RvciA9IDAsCiAgZUNvbnRleHRQcm92aWRlcl9EZXNjZW5kYW50ID0gMQp9OwojIDI1 NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCnN0cnVjdCBuc0hUTUxSZWZs b3dNZXRyaWNzIHsKICBuc2Nvb3JkIHdpZHRoLCBoZWlnaHQ7CiAgbnNjb29yZCBhc2NlbnQsIGRl c2NlbnQ7CgoKICBuc1NpemUqIG1heEVsZW1lbnRTaXplOwoKCgogIG5zY29vcmQgbU1heGltdW1X aWR0aDsKIyAyODAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIG5zY29v cmQgbUNhcnJpZWRPdXRCb3R0b21NYXJnaW47CiMgMjkwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJRnJhbWUuaCIKICBuc1JlY3QgbU92ZXJmbG93QXJlYTsKCiAgUFJVaW50MzIgbUZsYWdz OwoKCiAgUFJCb29sIG1Ob3RoaW5nQ2hhbmdlZDsKCiAgbnNIVE1MUmVmbG93TWV0cmljcyhuc1Np emUqIGFNYXhFbGVtZW50U2l6ZSwgUFJVaW50MzIgYUZsYWdzID0gMCkgewogICAgbWF4RWxlbWVu dFNpemUgPSBhTWF4RWxlbWVudFNpemU7CiAgICBtTWF4aW11bVdpZHRoID0gMDsKICAgIG1GbGFn cyA9IGFGbGFnczsKICAgIG1DYXJyaWVkT3V0Qm90dG9tTWFyZ2luID0gMDsKICAgIG1PdmVyZmxv d0FyZWEueCA9IDA7CiAgICBtT3ZlcmZsb3dBcmVhLnkgPSAwOwogICAgbU92ZXJmbG93QXJlYS53 aWR0aCA9IDA7CiAgICBtT3ZlcmZsb3dBcmVhLmhlaWdodCA9IDA7CiAgICBtTm90aGluZ0NoYW5n ZWQgPSAwOwoKCgoKCgoKICAgIHdpZHRoID0gaGVpZ2h0ID0gMDsKICAgIGFzY2VudCA9IGRlc2Nl bnQgPSAwOwogIH0KCiAgdm9pZCBBZGRCb3JkZXJQYWRkaW5nVG9NYXhFbGVtZW50U2l6ZShjb25z dCBuc01hcmdpbiYgYUJvcmRlclBhZGRpbmcpIHsKICAgIG1heEVsZW1lbnRTaXplLT53aWR0aCAr PSBhQm9yZGVyUGFkZGluZy5sZWZ0ICsgYUJvcmRlclBhZGRpbmcucmlnaHQ7CiAgICBtYXhFbGVt ZW50U2l6ZS0+aGVpZ2h0ICs9IGFCb3JkZXJQYWRkaW5nLnRvcCArIGFCb3JkZXJQYWRkaW5nLmJv dHRvbTsKICB9CgogIG5zSFRNTFJlZmxvd01ldHJpY3MmIG9wZXJhdG9yPShjb25zdCBuc0hUTUxS ZWZsb3dNZXRyaWNzJiBhT3RoZXIpCiAgewogICAgaWYgKG1heEVsZW1lbnRTaXplICYmIGFPdGhl ci5tYXhFbGVtZW50U2l6ZSkgewogICAgICBtYXhFbGVtZW50U2l6ZS0+d2lkdGggPSBhT3RoZXIu bWF4RWxlbWVudFNpemUtPndpZHRoOwogICAgICBtYXhFbGVtZW50U2l6ZS0+aGVpZ2h0ID0gYU90 aGVyLm1heEVsZW1lbnRTaXplLT5oZWlnaHQ7CiAgICB9CiAgICBtTWF4aW11bVdpZHRoID0gYU90 aGVyLm1NYXhpbXVtV2lkdGg7CiAgICBtRmxhZ3MgPSBhT3RoZXIubUZsYWdzOwogICAgbUNhcnJp ZWRPdXRCb3R0b21NYXJnaW4gPSBhT3RoZXIubUNhcnJpZWRPdXRCb3R0b21NYXJnaW47CiAgICBt T3ZlcmZsb3dBcmVhLnggPSBhT3RoZXIubU92ZXJmbG93QXJlYS54OwogICAgbU92ZXJmbG93QXJl YS55ID0gYU90aGVyLm1PdmVyZmxvd0FyZWEueTsKICAgIG1PdmVyZmxvd0FyZWEud2lkdGggPSBh T3RoZXIubU92ZXJmbG93QXJlYS53aWR0aDsKICAgIG1PdmVyZmxvd0FyZWEuaGVpZ2h0ID0gYU90 aGVyLm1PdmVyZmxvd0FyZWEuaGVpZ2h0OwogICAgbU5vdGhpbmdDaGFuZ2VkID0gYU90aGVyLm1O b3RoaW5nQ2hhbmdlZDsKCgoKCiAgICB3aWR0aCA9IGFPdGhlci53aWR0aDsKICAgIGhlaWdodCA9 IGFPdGhlci5oZWlnaHQ7CiAgICBhc2NlbnQgPSBhT3RoZXIuYXNjZW50OwogICAgZGVzY2VudCA9 IGFPdGhlci5kZXNjZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KCn07CiMgMzgyICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKdHlwZWRlZiBQUlVpbnQzMiBuc1JlZmxvd1N0 YXR1czsKIyA0NTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgp0eXBlZGVm IFBSQm9vbCBuc0RpZFJlZmxvd1N0YXR1czsKIyA0NzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lGcmFtZS5oIgpjbGFzcyBuc0lGcmFtZSA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1Ymxp YzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0geyAweGE2Y2Y5MDUwLCAweDE1YjMsIDB4MTFkMix7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwg MHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO30KIyA0OTUgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lQcmVz Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNv bnRlbnQsCiAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVBhcmVudCwKICAgICAgICAgICAg ICAgICAgIG5zSVN0eWxlQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICBuc0lG cmFtZSogYVByZXZJbkZsb3cpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRGVzdHJveShu c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CiMgNTI1ICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEluaXRpYWxDaGlsZExp c3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUZyYW1lKiBhQ2hpbGRMaXN0KSA9IDA7CiMgNTQzICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZEZyYW1lcyhuc0lQ cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVBy ZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBh TGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZUxpc3Qp ID0gMDsKIyA1NjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgSW5zZXJ0RnJhbWVzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAogICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lGcmFtZSogYVByZXZGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lGcmFtZSogYUZyYW1lTGlzdCkgPSAwOwojIDU4NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVGcmFtZShuc0lQcmVzQ29udGV4 dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBh UHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPbGRGcmFtZSkgPSAwOwojIDYwNyAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZXBsYWNlRnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy YW1lKiBhT2xkRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFOZXdG cmFtZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnQobnNJQ29udGVu dCoqIGFDb250ZW50KSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNl dHMoUFJJbnQzMiAmc3RhcnQsIFBSSW50MzIgJmVuZCkgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFN0eWxlQ29udGV4dChuc0lTdHlsZUNvbnRleHQqKiBhU3R5bGVDb250 ZXh0KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdHlsZUNvbnRleHQobnNJUHJl c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ U3R5bGVDb250ZXh0KiBhQ29udGV4dCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0 eWxlRGF0YShuc1N0eWxlU3RydWN0SUQgYVNJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgbnNTdHlsZVN0cnVjdComIGFTdHlsZVN0cnVjdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBjb25zdCBuc1N0eWxlU3Ry dWN0KiogYVN0cnVjdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbGNCb3JkZXJQ YWRkaW5nKG5zTWFyZ2luJiBhQm9yZGVyUGFkZGluZykgY29uc3QgPSAwOwojIDY1NyAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBZGRp dGlvbmFsU3R5bGVDb250ZXh0KFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYVN0eWxlQ29udGV4dCkgY29uc3Qg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWRkaXRpb25hbFN0eWxlQ29udGV4dChQUkludDMy IGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxl Q29udGV4dCogYVN0eWxlQ29udGV4dCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBh cmVudChuc0lGcmFtZSoqIGFQYXJlbnQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dFBhcmVudChjb25zdCBuc0lGcmFtZSogYVBhcmVudCkgPSAwOwojIDY3NiAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWN0KG5zUmVj dCYgYVJlY3QpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9yaWdpbihuc1BvaW50 JiBhUG9pbnQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUobnNTaXplJiBh U2l6ZSkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVjdChuc0lQcmVzQ29udGV4 dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhUmVj dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVRvKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv bnRleHQsCiAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYVgsCiAgICAgICAgICAgICAgICAg ICAgIG5zY29vcmQgYVkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNpemVUbyhuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFXaWR0aCwK ICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CiMgNjk4ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFkZGl0 aW9uYWxDaGlsZExpc3ROYW1lKFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qKiBhTGlzdE5hbWUpIGNvbnN0ID0gMDsKIyA3MDkg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg Rmlyc3RDaGlsZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJ RnJhbWUqKiBhRmlyc3RDaGlsZCkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dE5leHRTaWJsaW5nKG5zSUZyYW1lKiogYU5leHRTaWJsaW5nKSBjb25zdCA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXROZXh0U2libGluZyhuc0lGcmFtZSogYU5leHRTaWJsaW5nKSA9IDA7CgoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0 LAogICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250 ZXh0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAg ICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllcikgPSAwOwojIDc0NCAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBI YW5kbGVFdmVudChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgIG5zR1VJRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBu c0V2ZW50U3RhdHVzKiBhRXZlbnRTdGF0dXMpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD b250ZW50Rm9yRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNFdmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lDb250ZW50KiogYUNvbnRlbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDb250ZW50QW5kT2Zmc2V0c0Zyb21Qb2ludChuc0lQcmVzQ29udGV4dCogYUNYLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNQb2ludCYg YVBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29u dGVudCAqKiBhTmV3Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSSW50MzImIGFDb250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJJbnQzMiYgYUNvbnRlbnRPZmZzZXRFbmQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wmIGFCZWdpbkZyYW1lQ29udGVu dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJzb3IobnNJUHJlc0NvbnRleHQq IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNQb2ludCYgYVBvaW50LAog ICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyJiBhQ3Vyc29yKSA9IDA7CiMgNzc0ICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZy YW1lRm9yUG9pbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IG5zUG9pbnQmIGFQb2ludCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhRnJhbWUpID0gMDsKCgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRQb2ludEZyb21PZmZzZXQobnNJUHJlc0NvbnRleHQqIGluUHJlc0NvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQq IGluUmVuZENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIg aW5PZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUG9pbnQqIG91dFBv aW50KSA9IDA7CiMgNzk4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkRnJhbWVDb250YWluaW5nT2Zmc2V0KFBSSW50MzIgaW5D b250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgaW5I aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyKiBvdXRGcmFtZUNv bnRlbnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiAq b3V0Q2hpbGRGcmFtZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVTdGF0 ZShuc0ZyYW1lU3RhdGUqIGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 RnJhbWVTdGF0ZShuc0ZyYW1lU3RhdGUgYU5ld1N0YXRlKSA9IDA7CiMgODI1ICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRDaGFu Z2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SVN1cHBvcnRzKiBhU3ViQ29udGVudCkgPSAwOwojIDgzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSVBy ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy IGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFB dHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFIaW50KSA9 IDA7CiMgODU0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFs IG5zcmVzdWx0IENvbnRlbnRTdGF0ZUNoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUhpbnQpID0gMDsKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJc1NwbGl0dGFibGUobnNTcGxpdHRhYmxlVHlwZSYgYUlzU3Bs aXR0YWJsZSkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXZJbkZsb3co bnNJRnJhbWUqKiBhUHJldkluRmxvdykgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 UHJldkluRmxvdyhuc0lGcmFtZSopID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5leHRJbkZs b3cobnNJRnJhbWUqKiBhTmV4dEluRmxvdykgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0TmV4dEluRmxvdyhuc0lGcmFtZSopID0gMDsKIyA4ODAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgV2lsbFJlZmxvdyhuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0KSA9IDA7CiMgOTIyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVBy ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgIG5zSFRNTFJlZmxvd01ldHJpY3MmIGFSZWZs b3dNZXRyaWNzLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBh UmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgbnNSZWZsb3dTdGF0dXMmIGFTdGF0dXMp ID0gMDsKIyA5NDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgRGlkUmVmbG93KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg ICAgICAgICAgICAgICAgICAgIG5zRGlkUmVmbG93U3RhdHVzIGFTdGF0dXMpID0gMDsKIyA5NTgg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg Q2FuQ29udGludWVUZXh0UnVuKFBSQm9vbCYgYUNvbnRpbnVlVGV4dFJ1bikgY29uc3QgPSAwOwoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkanVzdEZyYW1lU2l6ZShuc2Nvb3JkIGFFeHRyYVNwYWNl LCBuc2Nvb3JkJiBhVXNlZFNwYWNlKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUcmltVHJh aWxpbmdXaGl0ZVNwYWNlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSQywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCYgYURlbHRhV2lkdGgpID0gMDsK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3KiogYVZpZXcpIGNvbnN0ID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldFZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgIG5zSVZpZXcqIGFWaWV3KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0UGFyZW50V2l0aFZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFQYXJlbnQpIGNvbnN0ID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T2Zmc2V0RnJvbVZpZXcobnNJUHJlc0NvbnRl eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50 JiBhT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVZpZXcqKiBhVmll dykgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpbmRvdyhuc0lQcmVz Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc0lXaWRnZXQq KiBhV2lkZ2V0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZVR5 cGUobnNJQXRvbSoqIGFUeXBlKSBjb25zdCA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNQ ZXJjZW50YWdlQmFzZShQUkJvb2wmIGFCYXNlKSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IFNjcm9sbGVkKG5zSVZpZXcgKmFWaWV3KSA9IDA7CiMgMTAzMCAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTZWxlY3RlZChu c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5z SURPTVJhbmdlKiBhUmFuZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFTZWxl Y3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NwcmVhZCBhU3ByZWFkKSA9IDA7Cgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0ZWQoUFJCb29sICphU2VsZWN0ZWQpIGNvbnN0ID0g MDsKIyAxMDQ2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFs IG5zcmVzdWx0IElzU2VsZWN0YWJsZShQUkJvb2wqIGFJc1NlbGVjdGFibGUsIFBSVWludDgqIGFT ZWxlY3RTdHlsZSkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0 aW9uQ29udHJvbGxlcihuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lTZWxlY3Rpb25D b250cm9sbGVyICoqYVNlbENvbikgPSAwOwojIDEwNjQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FwdHVyZU1vdXNlKG5zSVByZXNDb250 ZXh0KiBhUHJlc0NvbnRleHQsIFBSQm9vbCBhR3JhYk1vdXNlRXZlbnRzKSA9IDA7CiMgMTA3MyAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQ ZWVrT2Zmc2V0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zUGVla09mZnNldFN0cnVj dCAqYVBvcykgPSAwOwojIDEwODYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5o IgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tWaXNpYmlsaXR5KG5zSVByZXNDb250ZXh0KiBhQ29u dGV4dCwgUFJJbnQzMiBhU3RhcnRJbmRleCwgUFJJbnQzMiBhRW5kSW5kZXgsIFBSQm9vbCBhUmVj dXJzZSwgUFJCb29sICphRmluaXNoZWQsIFBSQm9vbCAqX3JldHZhbCk9MDsKCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBSZWZsb3dEaXJ0eUNoaWxkKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwg bnNJRnJhbWUqIGFDaGlsZCkgPSAwOwojIDExMDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWNjZXNzaWJsZShuc0lBY2Nlc3NpYmxl KiogYUFjY2Vzc2libGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVmbG93Q29tbWFu ZE5vdGlmeShuc0lQcmVzU2hlbGwqIGFTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJUmVmbG93Q29tbWFuZCogYVJDLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUkJvb2wgYUNvbW1hbmRBZGRlZCkgPSAwOwojIDExMzEgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50U3R5bGVDb250 ZXh0UHJvdmlkZXIobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYVByb3ZpZGVyRnJhbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NvbnRleHRQcm92aWRl clJlbGF0aW9uc2hpcCYgYVJlbGF0aW9uc2hpcCkgPSAwOwojIDExNDQgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlRm9yUGFp bnRpbmcobnNJUHJlc0NvbnRleHQgKiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhQ2hlY2tWaXMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFJc1Zpc2libGUpID0gMDsKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaVByb3BlcnR5KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVByb3BlcnR5TmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogYVByb3BlcnR5VmFsdWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhU2l6ZSA9IHNpemVvZih2b2lkKikgKSBj b25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCaWRpUHJvcGVydHkobnNJUHJlc0NvbnRl eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBh UHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFQcm9wZXJ0 eVZhbHVlKSBjb25zdCA9IDA7CgoKcHJpdmF0ZToKICB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2 b2lkKSA9IDA7CiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpID0gMDsKfTsKIyAyNyAi Li4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zUmVjdC5oIiAxCiMgMjggIi4uLy4uL2Jhc2Uvc3JjL25zRnJhbWUuaCIgMgojIDEgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjkgIi4uLy4uL2Jhc2Uvc3JjL25z RnJhbWUuaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmxvZy5oIiAxCiMgMjIgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmxvZy5oIgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyMyAiL3dpbmRvd3MvaGRhMTIv bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9nLmgiIDIKCmV4dGVybiAiQyIg ewojIDExOSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3BybG9nLmgiCnR5cGVkZWYgZW51bSBQUkxvZ01vZHVsZUxldmVsIHsKICAgIFBSX0xPR19OT05F ID0gMCwKICAgIFBSX0xPR19BTFdBWVMgPSAxLAogICAgUFJfTE9HX0VSUk9SID0gMiwKICAgIFBS X0xPR19XQVJOSU5HID0gMywKICAgIFBSX0xPR19ERUJVRyA9IDQsCgogICAgUFJfTE9HX05PVElD RSA9IFBSX0xPR19ERUJVRywKICAgIFBSX0xPR19XQVJOID0gUFJfTE9HX1dBUk5JTkcsCiAgICBQ Ul9MT0dfTUlOID0gUFJfTE9HX0RFQlVHLAogICAgUFJfTE9HX01BWCA9IFBSX0xPR19ERUJVRwp9 IFBSTG9nTW9kdWxlTGV2ZWw7CgoKCgoKCnR5cGVkZWYgc3RydWN0IFBSTG9nTW9kdWxlSW5mbyB7 CiAgICBjb25zdCBjaGFyICpuYW1lOwogICAgUFJMb2dNb2R1bGVMZXZlbCBsZXZlbDsKICAgIHN0 cnVjdCBQUkxvZ01vZHVsZUluZm8gKm5leHQ7Cn0gUFJMb2dNb2R1bGVJbmZvOwoKCgoKZXh0ZXJu IFBSTG9nTW9kdWxlSW5mbyogUFJfTmV3TG9nTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpOwoKCgoK CmV4dGVybiBQUkJvb2wgUFJfU2V0TG9nRmlsZShjb25zdCBjaGFyICpuYW1lKTsKCgoKCgpleHRl cm4gdm9pZCBQUl9TZXRMb2dCdWZmZXJpbmcoUFJJbnRuIGJ1ZmZlcl9zaXplKTsKCgoKCgoKCmV4 dGVybiB2b2lkIFBSX0xvZ1ByaW50KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKCgoKCmV4dGVybiB2 b2lkIFBSX0xvZ0ZsdXNoKHZvaWQpOwojIDIzNSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9nLmgiCn0KIyAzMCAiLi4vLi4vYmFzZS9zcmMvbnNG cmFtZS5oIiAyCgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwu aCIgMQojIDM1ICIuLi8uLi9iYXNlL3NyYy9uc0ZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIiAxCiMgMzYgIi4uLy4uL2Jhc2Uvc3JjL25z RnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlv bi5oIiAxCiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5o IgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMzQgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIiAyCiMgMSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDEKIyAzNSAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJRm9jdXNUcmFja2VyLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SUZvY3VzVHJhY2tlci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0 cy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb2N1c1RyYWNrZXIuaCIg MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIiAxCiMgMjkgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb2N1c1RyYWNrZXIuaCIgMgoKCmNsYXNzIG5zSVByZXND b250ZXh0OwoKCgoKCgoKY2xhc3MgbnNJRm9jdXNUcmFja2VyIDogcHVibGljIG5zSVN1cHBvcnRz CnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQg aWlkID0geyAweDgxYWM1MWQxLCAweDkyM2IsIDB4MTFkMiwgeyAweDkxLCAweDhmLCAweDAsIDB4 ODAsIDB4YzgsIDB4ZTQsIDB4NGQsIDB4YjUgfSB9OyByZXR1cm4gaWlkOyB9CgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFNjcm9sbEZyYW1lSW50b1ZpZXcobnNJRnJhbWUgKmFGcmFtZSkgPSAwOwoj IDYzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9jdXNUcmFja2VyLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRQcmltYXJ5RnJhbWVGb3IobnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhUHJpbWFyeUZyYW1lKSBjb25z dCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVzQ29udGV4dChuc0lQcmVzQ29u dGV4dCAqKmFDb250ZXh0KSA9IDA7Cn07CiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lGcmFtZVNlbGVjdGlvbi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNl bGVjdGlvbi5oIiAxCiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVj dGlvbi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAx CiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIiAyCiMg MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIgMQojIDI1ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1s aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjYgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ Q29udGVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgi IDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIgMgojIDEgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0FXcml0YWJsZVN0cmluZy5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lDb250ZW50LmgiIDIKCgpjbGFzcyBuc0lBdG9tOwpjbGFzcyBuc0lEb2N1bWVudDsKY2xhc3Mg bnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zVm9pZEFycmF5OwpjbGFzcyBuc0lET01FdmVudDsKY2xh c3MgbnNJQ29udGVudDsKY2xhc3MgbnNJU3VwcG9ydHNBcnJheTsKY2xhc3MgbnNJRE9NUmFuZ2U7 CmNsYXNzIG5zSVNpemVPZkhhbmRsZXI7CmNsYXNzIG5zSU5vZGVJbmZvOwpjbGFzcyBuc0lFdmVu dExpc3RlbmVyTWFuYWdlcjsKIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRl bnQuaCIKY2xhc3MgbnNJQ29udGVudCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAw eDc4MDMwMjIwLCAweDk0NDcsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAsIDB4NWYs IDB4OGEsIDB4ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dERvY3VtZW50KG5zSURvY3VtZW50KiYgYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5z cmVzdWx0IFNldERvY3VtZW50KG5zSURvY3VtZW50KiBhRG9jdW1lbnQsIFBSQm9vbCBhRGVlcCwg UFJCb29sIGFDb21waWxlRXZlbnRIYW5kbGVycykgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFBhcmVudChuc0lDb250ZW50KiYgYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zcmVz dWx0IFNldFBhcmVudChuc0lDb250ZW50KiBhUGFyZW50KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0TmFtZVNwYWNlSUQoUFJJbnQzMiYgYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFRhZyhuc0lBdG9tKiYgYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE5vZGVJbmZvKG5zSU5vZGVJbmZvKiYgYVJlc3VsdCkgY29uc3QgPSAw OwoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkNvbnRhaW5DaGlsZHJlbihQUkJvb2wmIGFSZXN1bHQp IGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGlsZENvdW50KFBSSW50MzImIGFSZXN1 bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGlsZEF0KFBSSW50MzIgYUluZGV4 LCBuc0lDb250ZW50KiYgYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IElu ZGV4T2YobnNJQ29udGVudCogYVBvc3NpYmxlQ2hpbGQsIFBSSW50MzImIGFJbmRleCkgY29uc3Qg PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydENoaWxkQXQobnNJQ29udGVudCogYUtpZCwg UFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5 LCBQUkJvb2wgYURlZXBTZXREb2N1bWVudCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlcGxh Y2VDaGlsZEF0KG5zSUNvbnRlbnQqIGFLaWQsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgUFJCb29sIGFOb3RpZnksIFBSQm9vbCBhRGVlcFNldERvY3VtZW50KSA9 IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kQ2hpbGRUbyhuc0lDb250ZW50KiBhS2lkLCBQ UkJvb2wgYU5vdGlmeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEZWVwU2V0 RG9jdW1lbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVDaGlsZEF0KFBSSW50MzIg YUluZGV4LCBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDEwMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5vcm1hbGl6ZUF0dHJpYnV0ZVN0 cmluZyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lOb2RlSW5mbyomIGFOb2RlSW5mbykgPSAwOwojIDExOCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dEF0dHJpYnV0ZShQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFWYWx1ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDEzNiAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEF0dHJp YnV0ZShuc0lOb2RlSW5mbyogYU5vZGVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg UFJCb29sIGFOb3RpZnkpID0gMDsKIyAxNTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lD b250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZVNw YWNlSUQsIG5zSUF0b20qIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVdyaXRh YmxlU3RyaW5nJiBhUmVzdWx0KSBjb25zdCA9IDA7CiMgMTgwICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlKFBSSW50 MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lBdG9tKiYgYVByZWZpeCwgbnNBV3JpdGFibGVTdHJpbmcmIGFSZXN1bHQpIGNvbnN0ID0g MDsKIyAxOTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBVbnNldEF0dHJpYnV0ZShQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSog YUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5KSA9 IDA7CiMgMjA0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlTmFtZUF0KFBSSW50MzIgYUluZGV4LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzImIGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiYgYU5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJQXRvbSomIGFQcmVmaXgpIGNvbnN0ID0gMDsKIyAyMTYgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdHRy aWJ1dGVDb3VudChQUkludDMyJiBhQ291bnRSZXN1bHQpIGNvbnN0ID0gMDsKIyAyMzMgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTaXpl T2YobnNJU2l6ZU9mSGFuZGxlciogYVNpemVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3QgPSAw OwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGlzdChGSUxFKiBvdXQgPSBzdGRvdXQsIFBSSW50 MzIgYUluZGVudCA9IDApIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IER1bXBD b250ZW50KEZJTEUqIG91dCA9IHN0ZG91dCwgUFJJbnQzMiBhSW5kZW50ID0gMCxQUkJvb2wgYUR1 bXBBbGw9MSkgY29uc3QgPSAwOwojIDI1OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNv bnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJhbmdlQWRkKG5zSURPTVJhbmdlJiBhUmFuZ2Up ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFJhbmdlUmVtb3ZlKG5zSURPTVJhbmdlJiBhUmFuZ2Up ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJhbmdlTGlzdChuc1ZvaWRBcnJheSomIGFSZXN1 bHQpIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVET01FdmVudChuc0lQ cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNF dmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NRXZlbnQqKiBh RE9NRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50U3RhdHVzKiBhRXZlbnRTdGF0dXMpID0g MDsKIyAyODEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRDb250ZW50SUQoUFJVaW50MzIqIGFJRCkgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0Q29udGVudElEKFBSVWludDMyIGFJRCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0Rm9jdXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgUmVtb3ZlRm9jdXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCkgPSAw OwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmluZGluZ1BhcmVudChuc0lDb250ZW50KiBh Q29udGVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmluZGluZ1BhcmVudChuc0lDb250 ZW50KiogYUNvbnRlbnQpID0gMDsKCgoKCiAgZW51bSB7CiAgICBlVEVYVCA9IDB4MDAwMDAwMDEs CiAgICBlRUxFTUVOVCA9IDB4MDAwMDAwMDIsCiAgICBlSFRNTCA9IDB4MDAwMDAwMDQsCiAgICBl SFRNTF9GT1JNX0NPTlRST0wgPSAweDAwMDAwMDA4LAogICAgZVhVTCA9IDB4MDAwMDAwMTAKICB9 OwoKCgoKCiAgdmlydHVhbCBQUkJvb2wgSXNDb250ZW50T2ZUeXBlKFBSVWludDMyIGFGbGFncykg PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpc3RlbmVyTWFuYWdlcihuc0lFdmVudExpc3Rl bmVyTWFuYWdlcioqIGFSZXN1bHQpID0gMDsKfTsKIyAzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNDT01QdHIuaCIgMQojIDQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxl Y3Rpb24uaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQu aCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiCiMg MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDEKIyAyNiAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29s b3IuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0Lmgi IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjkgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc01hcmdpbi5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Jl Y3QuaCIgMQojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0Lmgi IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGb250LmgiIDEKIyAzMiAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zVm9pZEFycmF5LmgiIDEKIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z U3R5bGVDb29yZC5oIiAxCiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNv bnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0Lmgi IDEKIyAzNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMg MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb25zdHMuaCIgMQojIDM2ICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIgMQojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJUHJlc0NvbnRleHQuaCIgMQojIDM4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5 bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIg MQojIDM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAx ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTGFuZ3VhZ2VBdG9tLmgiIDEKIyA0MCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDEKIyA0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKY2xhc3Mg bnNJRnJhbWU7CmNsYXNzIG5zSVN1cHBvcnRzQXJyYXk7CmNsYXNzIG5zSVN0eWxlQ29udGV4dDsK Y2xhc3MgbnNJUnVsZU5vZGU7CgoKCgoKCgpjbGFzcyBuc0lTdHlsZUNvbnRleHQgOiBwdWJsaWMg bnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0 YXRpYyBuc0lJRCBpaWQgPSB7IDB4MjZhNGQ5NzAsIDB4YTM0MiwgMHgxMWQxLCB7MHg4OSwgMHg3 NCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5MSwgMHgxYiwgMHg4MX0gfTsgcmV0dXJuIGlpZDsgfQoK ICB2aXJ0dWFsIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNJU3R5bGVDb250ZXh0KiBhT3RoZXIpIGNv bnN0ID0gMDsKCiAgdmlydHVhbCBuc0lTdHlsZUNvbnRleHQqIEdldFBhcmVudCh2b2lkKSBjb25z dCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaXJzdENoaWxkKG5zSVN0eWxlQ29udGV4dCoq IGFDb250ZXh0KT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBzZXVkb1R5cGUobnNJQXRvbSom IGFQc2V1ZG9UYWcpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kQ2hpbGRXaXRo UnVsZXMoY29uc3QgbnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lSdWxlTm9kZSogYVJ1bGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVN0eWxlQ29udGV4dComIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBQUkJvb2wgSGFz VGV4dERlY29yYXRpb25zKCk9MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyUGFkZGlu Z0Zvcihuc1N0eWxlQm9yZGVyUGFkZGluZyYgYUJvcmRlclBhZGRpbmcpPTA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IENhbGNTdHlsZURpZmZlcmVuY2UobnNJU3R5bGVDb250ZXh0KiBhT3RoZXIsIFBS SW50MzImIGFIaW50LCBQUkJvb2wgYVN0b3BBdEZpcnN0ID0gMCkgPSAwOwoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFJ1bGVOb2RlKG5zSVJ1bGVOb2RlKiogYVJlc3VsdCk9MDsKICB2aXJ0dWFsIG5z cmVzdWx0IEFkZFN0eWxlQml0KGNvbnN0IFBSVWludDMyJiBhQml0KT0wOwogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0U3R5bGVCaXRzKFBSVWludDMyKiBhQml0cyk9MDsKCgogIHZpcnR1YWwgdm9pZCBM aXN0KEZJTEUqIG91dCwgUFJJbnQzMiBhSW5kZW50KSA9IDA7CiAgdmlydHVhbCB2b2lkIFNpemVP Zihuc0lTaXplT2ZIYW5kbGVyICphU2l6ZU9mSGFuZGxlciwgUFJVaW50MzIgJmFTaXplKSA9IDA7 CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3R5bGUobnNTdHlsZVN0cnVjdElEIGFTSUQs IGNvbnN0IG5zU3R5bGVTdHJ1Y3QmIGFTdHJ1Y3QpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0U3R5bGUobnNTdHlsZVN0cnVjdElEIGFTSUQsIGNvbnN0IG5zU3R5bGVTdHJ1Y3QqKiBhU3Ry dWN0KSA9IDA7CgogIHZpcnR1YWwgY29uc3QgbnNTdHlsZVN0cnVjdCogR2V0U3R5bGVEYXRhKG5z U3R5bGVTdHJ1Y3RJRCBhU0lEKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNTdHlsZVN0cnVjdCogR2V0 VW5pcXVlU3R5bGVEYXRhKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIGNvbnN0IG5zU3R5 bGVTdHJ1Y3RJRCYgYVNJRCkgPSAwOwoKCiAgdmlydHVhbCB2b2lkIEZvcmNlVW5pcXVlKHZvaWQp ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1hcFN0eWxlKG5zSVByZXNDb250ZXh0KiBhUHJl c0NvbnRleHQsIFBSQm9vbCBhUmVjdXJzZSA9IDEpID0gMDsKfTsKCgoKZXh0ZXJuIG5zcmVzdWx0 CiAgTlNfTmV3U3R5bGVDb250ZXh0KG5zSVN0eWxlQ29udGV4dCoqIGFJbnN0YW5jZVB0clJlc3Vs dCwKICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29udGV4dCwK ICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBzZXVkb1R5cGUsCiAgICAgICAgICAgICAg ICAgICAgIG5zSVJ1bGVOb2RlKiBhUnVsZU5vZGUsCiAgICAgICAgICAgICAgICAgICAgIG5zSVBy ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJRnJhbWVTZWxlY3Rpb24uaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT ZWxlY3Rpb25Db250cm9sbGVyLmgiIDEKIyA0MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SUZyYW1lU2VsZWN0aW9uLmgiIDIKIyA1NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZy YW1lU2VsZWN0aW9uLmgiCnN0cnVjdCBTZWxlY3Rpb25EZXRhaWxzCnsKICBQUkludDMyIG1TdGFy dDsKICBQUkludDMyIG1FbmQ7CiAgU2VsZWN0aW9uVHlwZSBtVHlwZTsKICBTZWxlY3Rpb25EZXRh aWxzICptTmV4dDsKfTsKIyA3NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2Vs ZWN0aW9uLmgiCnN0cnVjdCBuc1BlZWtPZmZzZXRTdHJ1Y3QKewogIHZvaWQgU2V0RGF0YShuc0lG b2N1c1RyYWNrZXIgKmFUcmFja2VyLAogICAgICAgICAgICAgICBuc2Nvb3JkIGFEZXNpcmVkWCwK ICAgICAgICAgICAgICAgbnNTZWxlY3Rpb25BbW91bnQgYUFtb3VudCwKICAgICAgICAgICAgICAg bnNEaXJlY3Rpb24gYURpcmVjdGlvbiwKICAgICAgICAgICAgICAgUFJJbnQzMiBhU3RhcnRPZmZz ZXQsCiAgICAgICAgICAgICAgIFBSQm9vbCBhRWF0aW5nV1MsCiAgICAgICAgICAgICAgIFBSQm9v bCBhUHJlZmVyTGVmdCwKICAgICAgICAgICAgICAgUFJCb29sIGFKdW1wTGluZXMpCiAgICAgIHsK ICAgICAgIG1UcmFja2VyPWFUcmFja2VyO21EZXNpcmVkWD1hRGVzaXJlZFg7bUFtb3VudD1hQW1v dW50OwogICAgICAgbURpcmVjdGlvbj1hRGlyZWN0aW9uO21TdGFydE9mZnNldD1hU3RhcnRPZmZz ZXQ7bUVhdGluZ1dTPWFFYXRpbmdXUzsKICAgICAgIG1QcmVmZXJMZWZ0PWFQcmVmZXJMZWZ0O21K dW1wTGluZXMgPSBhSnVtcExpbmVzOwogICAgICB9CiAgbnNJRm9jdXNUcmFja2VyICptVHJhY2tl cjsKICBuc2Nvb3JkIG1EZXNpcmVkWDsKICBuc1NlbGVjdGlvbkFtb3VudCBtQW1vdW50OwogIG5z RGlyZWN0aW9uIG1EaXJlY3Rpb247CiAgUFJJbnQzMiBtU3RhcnRPZmZzZXQ7CiAgbnNDT01QdHI8 bnNJQ29udGVudD4gbVJlc3VsdENvbnRlbnQ7CiAgUFJJbnQzMiBtQ29udGVudE9mZnNldDsKICBQ UkludDMyIG1Db250ZW50T2Zmc2V0RW5kOwogIG5zSUZyYW1lICptUmVzdWx0RnJhbWU7CiAgUFJC b29sIG1FYXRpbmdXUzsKICBQUkJvb2wgbVByZWZlckxlZnQ7CiAgUFJCb29sIG1KdW1wTGluZXM7 Cn07CgpjbGFzcyBuc0lTY3JvbGxhYmxlVmlldzsKCgpjbGFzcyBuc0lGcmFtZVNlbGVjdGlvbiA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHhmNDZlNDE3MSwgMHhkZWFhLCAweDExZDEsIHsg MHg5NywgMHhmYywgMHgwLCAweDYwLCAweDk3LCAweDMsIDB4YzEsIDB4NGUgfSB9OyByZXR1cm4g aWlkOyB9CiAgZW51bSBISU5UIHtISU5UTEVGVD0wLEhJTlRSSUdIVD0xfW1IaW50OwoKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lGb2N1c1RyYWNrZXIgKmFUcmFja2VyLCBuc0lDb250 ZW50ICphTGltaXRlcikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcm9sbGFibGVW aWV3KG5zSVNjcm9sbGFibGVWaWV3ICphU2Nyb2xsVmlldykgPTA7CgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0U2Nyb2xsYWJsZVZpZXcobnNJU2Nyb2xsYWJsZVZpZXcgKiphU2Nyb2xsVmlldykg PTA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNodXREb3duKCkgPSAwOwoKCgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEhhbmRsZVRleHRFdmVudChuc0dVSUV2ZW50ICphR3VpRXZlbnQpID0gMDsK CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVLZXlFdmVudChuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0LCBuc0dVSUV2ZW50ICphR3VpRXZlbnQpID0gMDsKIyAxNjQgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQg SGFuZGxlQ2xpY2sobnNJQ29udGVudCAqYU5ld0ZvY3VzLCBQUlVpbnQzMiBhQ29udGVudE9mZnNl dCwgUFJVaW50MzIgYUNvbnRlbnRFbmRPZmZzZXQgLAogICAgICAgICAgICAgICAgICAgICAgIFBS Qm9vbCBhQ29udGludWVTZWxlY3Rpb24sIFBSQm9vbCBhTXVsdGlwbGVTZWxlY3Rpb24sIFBSQm9v bCBhSGludCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRHJhZyhuc0lQcmVz Q29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqYUZyYW1lLCBuc1BvaW50JiBhUG9pbnQp ID0gMDsKIyAxODYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5o IgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlVGFibGVTZWxlY3Rpb24obnNJQ29udGVudCAqYVBh cmVudENvbnRlbnQsIFBSSW50MzIgYUNvbnRlbnRPZmZzZXQsIFBSSW50MzIgYVRhcmdldCwgbnNN b3VzZUV2ZW50ICphTW91c2VFdmVudCkgPSAwOwojIDE5NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTdGFydEF1dG9TY3Jv bGxUaW1lcihuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqYUZyYW1lLCBu c1BvaW50JiBhUG9pbnQsIFBSVWludDMyIGFEZWxheSkgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgU3RvcEF1dG9TY3JvbGxUaW1lcigpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5h YmxlRnJhbWVOb3RpZmljYXRpb24oUFJCb29sIGFFbmFibGUpID0gMDsKIyAyMTYgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQg TG9va1VwU2VsZWN0aW9uKG5zSUNvbnRlbnQgKmFDb250ZW50LCBQUkludDMyIGFDb250ZW50T2Zm c2V0LCBQUkludDMyIGFDb250ZW50TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNlbGVjdGlvbkRldGFpbHMgKiphUmV0dXJuRGV0YWlscywgUFJCb29sIGFTbG93Q2hlY2spID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW91c2VEb3duU3RhdGUoUFJCb29sIGFTdGF0 ZSk9MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW91c2VEb3duU3RhdGUoUFJCb29sICph U3RhdGUpPTA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFibGVDZWxsU2VsZWN0aW9uKFBS Qm9vbCAqYVN0YXRlKT0wOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb24oU2Vs ZWN0aW9uVHlwZSBhU2VsZWN0aW9uVHlwZSwgbnNJU2VsZWN0aW9uICoqYVNlbGVjdGlvbik9MDsK IyAyNDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZp cnR1YWwgbnNyZXN1bHQgU2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcoU2VsZWN0aW9uVHlwZSBhU2Vs ZWN0aW9uVHlwZSwgU2VsZWN0aW9uUmVnaW9uIGFSZWdpb24pPTA7CgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IFJlcGFpbnRTZWxlY3Rpb24obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgU2Vs ZWN0aW9uVHlwZSBhU2VsZWN0aW9uVHlwZSk9MDsKIyAyNjQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVGb3JO b2RlT2Zmc2V0KG5zSUNvbnRlbnQgKmFOb2RlLCBQUkludDMyIGFPZmZzZXQsIEhJTlQgYUhpbnQs IG5zSUZyYW1lICoqYVJldHVybkZyYW1lLCBQUkludDMyICphUmV0dXJuT2Zmc2V0KT0wOwojIDI3 NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBBZGp1c3RPZmZzZXRzRnJvbVN0eWxlKG5zSUZyYW1lICphRnJhbWUsIFBSQm9v bCAqY2hhbmdlU2VsZWN0aW9uLAogICAgICAgIG5zSUNvbnRlbnQqKiBvdXRDb250ZW50LCBQUklu dDMyKiBvdXRTdGFydE9mZnNldCwgUFJJbnQzMiogb3V0RW5kT2Zmc2V0KT0wOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRIaW50KEhJTlQgKmFIaW50KT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 SGludChISU5UIGFIaW50KT0wOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hhcmFjdGVyTW92 ZShQUkJvb2wgYUZvcndhcmQsIFBSQm9vbCBhRXh0ZW5kKT0wOwoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgV29yZE1vdmUoUFJCb29sIGFGb3J3YXJkLCBQUkJvb2wgYUV4dGVuZCk9MDsKCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IExpbmVNb3ZlKFBSQm9vbCBhRm9yd2FyZCwgUFJCb29sIGFFeHRl bmQpPTA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnRyYUxpbmVNb3ZlKFBSQm9vbCBhRm9y d2FyZCwgUFJCb29sIGFFeHRlbmQpPTA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0QWxs KCk9MDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERpc3BsYXlTZWxlY3Rpb24oUFJJbnQxNiBh U3RhdGUpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNwbGF5U2VsZWN0aW9uKFBSSW50MTYg KmFTdGF0ZSk9MDsKIyAzMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVj dGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVsYXlDYXJldE92ZXJFeGlzdGluZ1NlbGVj dGlvbihQUkJvb2wgYURlbGF5KT0wOwojIDMzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWxheUNhcmV0T3ZlckV4 aXN0aW5nU2VsZWN0aW9uKFBSQm9vbCAqYURlbGF5KT0wOwojIDM0OSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWxh eWVkQ2FyZXREYXRhKG5zTW91c2VFdmVudCAqYU1vdXNlRXZlbnQpPTA7CgoKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RGVsYXllZENhcmV0RGF0YShuc01vdXNlRXZlbnQgKiphTW91c2VFdmVu dCk9MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaW1pdGVyKG5zSUNvbnRlbnQgKiph TGltaXRlckNvbnRlbnQpPTA7CiMgMzgxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJh bWVTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXZOZXh0QmlkaUxldmVscyhu c0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lDb250ZW50ICphTm9kZSwgUFJVaW50MzIg YUNvbnRlbnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJh bWUgKiphUHJldkZyYW1lLCBuc0lGcmFtZSAqKmFOZXh0RnJhbWUsIFBSVWludDggKmFQcmV2TGV2 ZWwsIFBSVWludDggKmFOZXh0TGV2ZWwpPTA7CiMgMzkzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lRnJvbUxl dmVsKG5zSVByZXNDb250ZXh0ICphUHJlc0NvbnRleHQsIG5zSUZyYW1lICphRnJhbWVJbiwgbnNE aXJlY3Rpb24gYURpcmVjdGlvbiwgUFJVaW50OCBhQmlkaUxldmVsLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnNJRnJhbWUgKiphRnJhbWVPdXQpPTA7CgoKfTsKIyAzNyAiLi4vLi4v YmFzZS9zcmMvbnNGcmFtZS5oIiAyCiMgMTA3ICIuLi8uLi9iYXNlL3NyYy9uc0ZyYW1lLmgiCmNs YXNzIG5zRnJhbWUgOiBwdWJsaWMgbnNJRnJhbWUKCgoKewpwdWJsaWM6CgoKCgogIGZyaWVuZCBu c3Jlc3VsdCBOU19OZXdFbXB0eUZyYW1lKG5zSVByZXNTaGVsbCogYVNoZWxsLCBuc0lGcmFtZSoq IGFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwg bnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsKTsKCgoKCgogIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZv aWQqIGFQdHIsIHNpemVfdCBzeik7Cgpwcml2YXRlOgoKCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNp emVfdCBzeikgdGhyb3cgKCkgeyByZXR1cm4gMDsgfTsKCgoKCnB1YmxpYzoKCgogIHZpcnR1YWwg bnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFu Y2VQdHIpOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv bnRleHQsCiAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAg ICAgICAgICAgIG5zSUZyYW1lKiBhUGFyZW50LAogICAgICAgICAgICAgICAgICAgbnNJU3R5bGVD b250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhc1ByZXZJbkZs b3cpOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SW5pdGlhbENoaWxkTGlzdChuc0lQcmVzQ29udGV4 dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRv bSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUq IGFDaGlsZExpc3QpOwogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kRnJhbWVzKG5zSVByZXNDb250 ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVs bCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3RO YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlzdCk7CiAg dmlydHVhbCBuc3Jlc3VsdCBJbnNlcnRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUHJldkZyYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlzdCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVG cmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVByZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFP bGRGcmFtZSk7CiAgdmlydHVhbCBuc3Jlc3VsdCBSZXBsYWNlRnJhbWUobnNJUHJlc0NvbnRleHQq IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBh UHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhT2xkRnJhbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3RnJhbWUpOwogIHZpcnR1YWwgbnNyZXN1 bHQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKICB2aXJ0dWFsIG5zcmVz dWx0IEdldENvbnRlbnQobnNJQ29udGVudCoqIGFDb250ZW50KSBjb25zdDsKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFN0eWxlQ29udGV4dChuc0lTdHlsZUNvbnRleHQqKiBhU3R5bGVDb250ZXh0KSBj b25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0eWxlQ29udGV4dChuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRl eHQqIGFDb250ZXh0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0eWxlRGF0YShuc1N0eWxlU3Ry dWN0SUQgYVNJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTdHlsZVN0cnVj dComIGFTdHlsZVN0cnVjdCkgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZShuc1N0 eWxlU3RydWN0SUQgYVNJRCwgY29uc3QgbnNTdHlsZVN0cnVjdCoqIGFTdHJ1Y3QpIGNvbnN0Owog IHZpcnR1YWwgbnNyZXN1bHQgQ2FsY0JvcmRlclBhZGRpbmcobnNNYXJnaW4mIGFCb3JkZXJQYWRk aW5nKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFkZGl0aW9uYWxTdHlsZUNvbnRleHQo UFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdHlsZUNvbnRleHQqKiBhU3R5bGVDb250ZXh0KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldEFkZGl0aW9uYWxTdHlsZUNvbnRleHQoUFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFTdHlsZUNvbnRleHQp OwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50KG5zSUZyYW1lKiogYVBhcmVudCkgY29uc3Q7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJlbnQoY29uc3QgbnNJRnJhbWUqIGFQYXJlbnQpOwog IHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVjdChuc1JlY3QmIGFSZWN0KSBjb25zdDsKICB2aXJ0dWFs IG5zcmVzdWx0IEdldE9yaWdpbihuc1BvaW50JiBhUG9pbnQpIGNvbnN0OwogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0U2l6ZShuc1NpemUmIGFTaXplKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dFJlY3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgY29uc3QgbnNSZWN0JiBhUmVjdCk7 CiAgdmlydHVhbCBuc3Jlc3VsdCBNb3ZlVG8obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwg bnNjb29yZCBhWCwgbnNjb29yZCBhWSk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTaXplVG8obnNJUHJl c0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCk7 CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBZGRpdGlvbmFsQ2hpbGRMaXN0TmFtZShQUkludDMyIGFJ bmRleCwgbnNJQXRvbSoqIGFMaXN0TmFtZSkgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBGaXJz dENoaWxkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFt ZSoqIGFGaXJzdENoaWxkKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KG5zSVByZXND b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29u dGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0 JiBhRGlydHlSZWN0LAogICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGlj aExheWVyKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZUV2ZW50KG5zSVByZXNDb250ZXh0KiBh UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNHVUlFdmVudCogYUV2ZW50 LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0dXMqIGFFdmVudFN0YXR1cyk7 CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50Rm9yRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQ cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudCogYUV2 ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiogYUNvbnRl bnQpOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3Vyc29yKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zUG9pbnQmIGFQb2ludCwKICAgICAgICAg ICAgICAgICAgICAgICAgUFJJbnQzMiYgYUN1cnNvcik7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRG cmFtZUZvclBvaW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBuc1BvaW50JiBhUG9pbnQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYUZyYW1lKTsKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRQb2ludEZyb21PZmZzZXQobnNJUHJlc0NvbnRleHQqIGluUHJlc0NvbnRleHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQqIGluUmVuZENv bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgaW5PZmZzZXQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUG9pbnQqIG91dFBvaW50KTsKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDaGlsZEZyYW1lQ29udGFpbmluZ09mZnNldChQUkludDMyIGlu Q29udGVudE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGlu SGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiogb3V0RnJhbWVD b250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSog Km91dENoaWxkRnJhbWUpOwoKICBzdGF0aWMgbnNyZXN1bHQgR2V0TmV4dFByZXZMaW5lRnJvbWVC bG9ja0ZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc1BlZWtPZmZzZXRTdHJ1Y3QgKmFQb3MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSAqYUJsb2NrRnJhbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFMaW5lU3RhcnQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDggYU91dFNpZGVM aW1pdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRGcmFtZVN0YXRlKG5zRnJhbWVTdGF0ZSogYVJlc3VsdCk7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRGcmFtZVN0YXRlKG5zRnJhbWVTdGF0ZSBhTmV3U3RhdGUpOwoKICB2aXJ0 dWFsIG5zcmVzdWx0IENvbnRlbnRDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiBhU3ViQ29udGVudCk7CiAgdmlydHVh bCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFOYW1lU3BhY2VJRCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQUkludDMyIGFIaW50KTsKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRl bnRTdGF0ZUNoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUhpbnQpOwogIHZpcnR1YWwgbnNyZXN1bHQgSXNT cGxpdHRhYmxlKG5zU3BsaXR0YWJsZVR5cGUmIGFJc1NwbGl0dGFibGUpIGNvbnN0OwogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UHJldkluRmxvdyhuc0lGcmFtZSoqIGFQcmV2SW5GbG93KSBjb25zdDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZXZJbkZsb3cobnNJRnJhbWUqKTsKICB2aXJ0dWFsIG5z cmVzdWx0IEdldE5leHRJbkZsb3cobnNJRnJhbWUqKiBhTmV4dEluRmxvdykgY29uc3Q7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXROZXh0SW5GbG93KG5zSUZyYW1lKik7CiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRWaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zSVZpZXcqKiBhVmlldykg Y29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv bnRleHQsIG5zSVZpZXcqIGFWaWV3KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudFdpdGhW aWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zSUZyYW1lKiogYVBhcmVudCkgY29u c3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPZmZzZXRGcm9tVmlldyhuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0LCBuc1BvaW50JiBhT2Zmc2V0LCBuc0lWaWV3KiogYVZpZXcpIGNvbnN0Owog IHZpcnR1YWwgbnNyZXN1bHQgR2V0V2luZG93KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs IG5zSVdpZGdldCoqKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lVHlwZShuc0lB dG9tKiogYVR5cGUpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgSXNQZXJjZW50YWdlQmFzZShQ UkJvb2wmIGFCYXNlKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5leHRTaWJsaW5nKG5z SUZyYW1lKiogYU5leHRTaWJsaW5nKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5leHRT aWJsaW5nKG5zSUZyYW1lKiBhTmV4dFNpYmxpbmcpOwogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xs ZWQobnNJVmlldyAqYVZpZXcpOwojIDI2NiAiLi4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIgogIHZp cnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0ZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwg bnNJRE9NUmFuZ2UgKmFSYW5nZSxQUkJvb2wgYVNlbGVjdGVkLCBuc1NwcmVhZCBhU3ByZWFkKTsK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVjdGVkKFBSQm9vbCAqYVNlbGVjdGVkKSBjb25zdDsK ICB2aXJ0dWFsIG5zcmVzdWx0IElzU2VsZWN0YWJsZShQUkJvb2wqIGFJc1NlbGVjdGFibGUsIFBS VWludDgqIGFTZWxlY3RTdHlsZSkgY29uc3Q7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0 aW9uQ29udHJvbGxlcihuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lTZWxlY3Rpb25D b250cm9sbGVyICoqYVNlbENvbik7CiAgdmlydHVhbCBuc3Jlc3VsdCBQZWVrT2Zmc2V0KG5zSVBy ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zUGVla09mZnNldFN0cnVjdCAqYVBvcykgOwogIHZp cnR1YWwgbnNyZXN1bHQgQ2hlY2tWaXNpYmlsaXR5KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCwg UFJJbnQzMiBhU3RhcnRJbmRleCwgUFJJbnQzMiBhRW5kSW5kZXgsIFBSQm9vbCBhUmVjdXJzZSwg UFJCb29sICphRmluaXNoZWQsIFBSQm9vbCAqX3JldHZhbCk7CgogIHZpcnR1YWwgbnNyZXN1bHQg UGVla09mZnNldFBhcmFncmFwaChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNQZWVrT2Zmc2V0U3RydWN0ICphUG9zKTsKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNldHMoUFJJbnQzMiAmYVN0YXJ0LCBQUkludDMyICZhRW5k KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvd0RpcnR5Q2hpbGQobnNJUHJlc1NoZWxs KiBhUHJlc1NoZWxsLCBuc0lGcmFtZSogYUNoaWxkKTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxv d0NvbW1hbmROb3RpZnkobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJUmVmbG93Q29tbWFuZCogYVJDLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJCb29sIGFDb21tYW5kQWRkZWQpOwoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldEFjY2Vzc2libGUobnNJQWNjZXNzaWJsZSoqIGFBY2Nlc3NpYmxlKTsKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRQYXJlbnRTdHlsZUNvbnRleHRQcm92aWRlcihuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJRnJhbWUqKiBhUHJvdmlkZXJGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zQ29udGV4dFByb3ZpZGVyUmVsYXRpb25zaGlwJiBhUmVsYXRpb25zaGlw KTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlRm9yUGFpbnRpbmcobnNJUHJlc0NvbnRl eHQgKiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lS ZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBSQm9vbCBhQ2hlY2tWaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQUkJvb2wqIGFJc1Zpc2libGUpOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXaWxsUmVm bG93KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwogIHZpcnR1YWwgbnNyZXN1bHQgUmVm bG93KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIG5z SFRNTFJlZmxvd01ldHJpY3MmIGFEZXNpcmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgY29u c3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAg bnNSZWZsb3dTdGF0dXMmIGFTdGF0dXMpOwogIHZpcnR1YWwgbnNyZXN1bHQgRGlkUmVmbG93KG5z SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zRGlk UmVmbG93U3RhdHVzIGFTdGF0dXMpOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuQ29udGludWVUZXh0 UnVuKFBSQm9vbCYgYUNvbnRpbnVlVGV4dFJ1bikgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBB ZGp1c3RGcmFtZVNpemUobnNjb29yZCBhRXh0cmFTcGFjZSwgbnNjb29yZCYgYVVzZWRTcGFjZSk7 CiAgdmlydHVhbCBuc3Jlc3VsdCBUcmltVHJhaWxpbmdXaGl0ZVNwYWNlKG5zSVByZXNDb250ZXh0 KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJl bmRlcmluZ0NvbnRleHQmIGFSQywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNjb29yZCYgYURlbHRhV2lkdGgpOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVQcmVz cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg bnNHVUlFdmVudCAqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0 dXMqIGFFdmVudFN0YXR1cyk7CgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlTXVsdGlwbGVQcmVz cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg bnNHVUlFdmVudCAqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0 dXMqIGFFdmVudFN0YXR1cyk7CgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRHJhZyhuc0lQcmVz Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc0dVSUV2ZW50 ICogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50U3RhdHVzKiBhRXZlbnRT dGF0dXMpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZVJlbGVhc2UobnNJUHJlc0NvbnRleHQq IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNHVUlFdmVudCAqIGFF dmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3Rh dHVzKTsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50QW5kT2Zmc2V0c0Zyb21Qb2ludChu c0lQcmVzQ29udGV4dCogYUNYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgbnNQb2ludCYgYVBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnNJQ29udGVudCAqKiBhTmV3Q29udGVudCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzImIGFDb250ZW50T2Zmc2V0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiYgYUNvbnRlbnRP ZmZzZXRFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv b2wmIGFCZWdpbkZyYW1lQ29udGVudCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBQZWVrQmFja3dhcmRB bmRGb3J3YXJkKG5zU2VsZWN0aW9uQW1vdW50IGFBbW91bnRCYWNrLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc1NlbGVjdGlvbkFtb3VudCBhQW1vdW50Rm9yd2FyZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhU3RhcnRQb3MsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhSnVtcExpbmVz KTsKCgoKCgoKCiAgdm9pZCBJbnZhbGlkYXRlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEYW1hZ2VSZWN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFJbW1lZGlhdGUgPSAwKSBjb25zdDsKCgoKICBz dGF0aWMgUFJJbnQzMiBDb250ZW50SW5kZXhJbkNvbnRhaW5lcihjb25zdCBuc0lGcmFtZSogYUZy YW1lKTsKCgoKCgoKICBQUkJvb2wgSXNGcmFtZVRyZWVUb29EZWVwKGNvbnN0IG5zSFRNTFJlZmxv d1N0YXRlJiBhUmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0hUTUxS ZWZsb3dNZXRyaWNzJiBhTWV0cmljcyk7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xvc2VzdFZp ZXdGb3JGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSAqYUZyYW1lLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3ICoqYVZpZXcpOwoKICBzdGF0aWMg bnNyZXN1bHQgQ3JlYXRlQW5kUG9zdFJlZmxvd0NvbW1hbmQobnNJUHJlc1NoZWxsKiBhUHJlc1No ZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFt ZSogYVRhcmdldEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lSZWZsb3dDb21tYW5kOjpSZWZsb3dUeXBlIGFSZWZsb3dUeXBlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUNoaWxkRnJhbWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFB dHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SUF0b20qIGFMaXN0TmFtZSk7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhcHR1cmVNb3VzZShuc0lQ cmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBQUkJvb2wgYUdyYWJNb3VzZUV2ZW50cyk7CiAgUFJC b29sIElzTW91c2VDYXB0dXJlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRCaWRpUHJvcGVydHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHJvcGVydHlOYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiBhUHJvcGVydHlWYWx1ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFTaXplID0gc2l6ZW9mKHZvaWQqKSApIGNvbnN0 OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmlkaVByb3BlcnR5KG5zSVByZXNDb250ZXh0KiBhUHJl c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVByb3BlcnR5 TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhUHJvcGVydHlWYWx1ZSkg Y29uc3QgOwojIDQzNCAiLi4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIgpwcm90ZWN0ZWQ6CgogIG5z RnJhbWUoKTsKICB2aXJ0dWFsIH5uc0ZyYW1lKCk7CgogIFBSSW50MTYgRGlzcGxheVNlbGVjdGlv bihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBQUkJvb2wgaXNPa1RvVHVybk9uID0gMCk7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lRnJvbURpcmVjdGlvbihuc0lQcmVzQ29udGV4 dCogYVByZXNDb250ZXh0LCBuc1BlZWtPZmZzZXRTdHJ1Y3QgKmFQb3MpOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBEaWRTZXRTdHlsZUNvbnRleHQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7 CgoKICBuc3Jlc3VsdCBHZXRTZWxlY3Rpb25Gb3JWaXNDaGVjayhuc0lQcmVzQ29udGV4dCAqIGFQ cmVzQ29udGV4dCwgbnNJU2VsZWN0aW9uKiogYVNlbGVjdGlvbik7CgoKICBzdGF0aWMgUFJJbnQz MiBHZXRMaW5lTnVtYmVyKG5zSUZyYW1lICphRnJhbWUpOwoKICBzdGF0aWMgdm9pZCBHZXRMYXN0 TGVhZihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqKmFGcmFtZSk7CiAg c3RhdGljIHZvaWQgR2V0Rmlyc3RMZWFmKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5z SUZyYW1lICoqYUZyYW1lKTsKIyA0NjQgIi4uLy4uL2Jhc2Uvc3JjL25zRnJhbWUuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldERhdGFGb3JUYWJsZVNlbGVjdGlvbihuc0lGcmFtZVNlbGVjdGlvbiAq YUZyYW1lU2VsZWN0aW9uLCBuc01vdXNlRXZlbnQgKmFNb3VzZUV2ZW50LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQgKiphUGFyZW50Q29udGVudCwgUFJJ bnQzMiAqYUNvbnRlbnRPZmZzZXQsIFBSSW50MzIgKmFUYXJnZXQpOwoKICBzdGF0aWMgdm9pZCBY TUxRdW90ZShuc1N0cmluZyYgYVN0cmluZyk7CgoKCiAgdm9pZCBTZXREZWZhdWx0QmFja2dyb3Vu ZENvbG9yKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwoKICB2aXJ0dWFsIFBSQm9vbCBQ YXJlbnREaXNhYmxlc1NlbGVjdGlvbigpIGNvbnN0OwoKCgoKCiAgdm9pZCBTZXRPdmVyZmxvd0Ns aXBSZWN0KG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0KTsKCiAgbnNSZWN0 IG1SZWN0OwogIG5zSUNvbnRlbnQqIG1Db250ZW50OwogIG5zSVN0eWxlQ29udGV4dCogbVN0eWxl Q29udGV4dDsKICBuc0lGcmFtZSogbVBhcmVudDsKICBuc0lGcmFtZSogbU5leHRTaWJsaW5nOwog IG5zRnJhbWVTdGF0ZSBtU3RhdGU7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBuc3JlZmNudCBBZGRS ZWYodm9pZCk7CiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpOwp9OwojIDI2ICIuLi8u Li9iYXNlL3NyYy9uc0xlYWZGcmFtZS5oIiAyCgoKCgoKCgpjbGFzcyBuc0xlYWZGcmFtZSA6IHB1 YmxpYyBuc0ZyYW1lIHsKcHVibGljOgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lQcmVz Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29u dGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3Qm IGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hM YXllcik7CiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u dGV4dCwKICAgICAgICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBhRGVzaXJlZFNp emUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dT dGF0ZSwKICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1N0YXR1cyYgYVN0YXR1cyk7CiAgdmly dHVhbCBuc3Jlc3VsdCBDb250ZW50Q2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFTdWJDb250ZW50KTsKCgoKCnByb3Rl Y3RlZDoKICB2aXJ0dWFsIH5uc0xlYWZGcmFtZSgpOwoKCgoKCgoKICB2aXJ0dWFsIHZvaWQgR2V0 RGVzaXJlZFNpemUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYURlc2lyZWRT aXplKSA9IDA7CgoKCgogIHZvaWQgQWRkQm9yZGVyc0FuZFBhZGRpbmcobnNJUHJlc0NvbnRleHQq IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJl Zmxvd1N0YXRlJiBhUmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0hU TUxSZWZsb3dNZXRyaWNzJiBhRGVzaXJlZFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc01hcmdpbiYgYUJvcmRlclBhZGRpbmcpOwp9OwojIDMxICJuc0Zvcm1Db250cm9sSGVscGVy LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMzIgIm5z Rm9ybUNvbnRyb2xIZWxwZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT dHlsZUNvbnRleHQuaCIgMQojIDMzICJuc0Zvcm1Db250cm9sSGVscGVyLmgiIDIKIyAxICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMQojIDM0ICJuc0Zvcm1Db250 cm9sSGVscGVyLmgiIDIKCmNsYXNzIG5zSVZpZXc7CgpjbGFzcyBuc1N0eWxlQ29vcmQ7CmNsYXNz IG5zRm9ybUZyYW1lOwojIDU0ICJuc0Zvcm1Db250cm9sSGVscGVyLmgiCmVudW0gbnNNb3VzZVN0 YXRlIHsKICBlTW91c2VOb25lLAogIGVNb3VzZUVudGVyLAogIGVNb3VzZUV4aXQsCiAgZU1vdXNl RG93biwKICBlTW91c2VVcAp9OwoKc3RydWN0IG5zSW5wdXREaW1lbnNpb25TcGVjCnsKICBuc0lB dG9tKiBtQ29sU2l6ZUF0dHI7CiAgUFJCb29sIG1Db2xTaXplQXR0ckluUGl4ZWxzOwogIG5zSUF0 b20qIG1Db2xWYWx1ZUF0dHI7CgogIG5zU3RyaW5nKiBtQ29sRGVmYXVsdFZhbHVlOwogIG5zY29v cmQgbUNvbERlZmF1bHRTaXplOwogIFBSQm9vbCBtQ29sRGVmYXVsdFNpemVJblBpeGVsczsKICBu c0lBdG9tKiBtUm93U2l6ZUF0dHI7CiAgbnNjb29yZCBtUm93RGVmYXVsdFNpemU7CgogIG5zSW5w dXREaW1lbnNpb25TcGVjKG5zSUF0b20qIGFDb2xTaXplQXR0ciwgUFJCb29sIGFDb2xTaXplQXR0 ckluUGl4ZWxzLAogICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFDb2xWYWx1ZUF0dHIs IG5zU3RyaW5nKiBhQ29sRGVmYXVsdFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgIG5zY29v cmQgYUNvbERlZmF1bHRTaXplLCBQUkJvb2wgYUNvbERlZmF1bHRTaXplSW5QaXhlbHMsCiAgICAg ICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVJvd1NpemVBdHRyLCBuc2Nvb3JkIGFSb3dEZWZh dWx0U2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICA6IG1Db2xTaXplQXR0cihhQ29sU2l6ZUF0 dHIpLCBtQ29sU2l6ZUF0dHJJblBpeGVscyhhQ29sU2l6ZUF0dHJJblBpeGVscyksCiAgICAgICAg ICAgICAgICAgICAgICAgICBtQ29sVmFsdWVBdHRyKGFDb2xWYWx1ZUF0dHIpLAogICAgICAgICAg ICAgICAgICAgICAgICAgbUNvbERlZmF1bHRWYWx1ZShhQ29sRGVmYXVsdFZhbHVlKSwgbUNvbERl ZmF1bHRTaXplKGFDb2xEZWZhdWx0U2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICBtQ29s RGVmYXVsdFNpemVJblBpeGVscyhhQ29sRGVmYXVsdFNpemVJblBpeGVscyksCiAgICAgICAgICAg ICAgICAgICAgICAgICBtUm93U2l6ZUF0dHIoYVJvd1NpemVBdHRyKSwgbVJvd0RlZmF1bHRTaXpl KGFSb3dEZWZhdWx0U2l6ZSkKICB7CiAgfQoKfTsKIyA5NSAibnNGb3JtQ29udHJvbEhlbHBlci5o IgpjbGFzcyBuc0Zvcm1Db250cm9sSGVscGVyCnsKCnB1YmxpYzoKCgogIHN0YXRpYyBuc2Nvb3Jk IENhbGN1bGF0ZVNpemUgKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCogYVJlbmRDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZvcm1Db250cm9sRnJhbWUqIGFGcmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1NpemUmIGFDU1NTaXpl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSW5wdXREaW1lbnNpb25TcGVjJiBh RGltZW5zaW9uU3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpemUmIGFE ZXNpcmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpemUmIGFNaW5T aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCYgYVdpZHRoRXhwbGlj aXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhSGVpZ2h0RXhwbGlj aXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCYgYVJvd1NpemUpOwoK ICBzdGF0aWMgbnNjb29yZCBHZXRUZXh0U2l6ZShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQsIG5z SUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBuc1N0cmluZyYgYVN0cmluZywgbnNTaXplJiBhU2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0ICphUmVuZENvbnRleHQpOwoKICBzdGF0aWMg bnNjb29yZCBHZXRUZXh0U2l6ZShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQsIG5zSUZvcm1Db250 cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFO dW1DaGFycywgbnNTaXplJiBhU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lS ZW5kZXJpbmdDb250ZXh0ICphUmVuZENvbnRleHQpOwoKICBzdGF0aWMgbnNyZXN1bHQgR2V0Rm9u dChuc0lGb3JtQ29udHJvbEZyYW1lICogYUZvcm1GcmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVN0eWxlQ29udGV4dCAqIGFTdHlsZUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgbnNGb250KiYgYUZvbnQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEdldEZyYW1l Rm9udEZNKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zSUZvcm1Db250cm9sRnJhbWUgKiBhRnJhbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSUZvbnRNZXRyaWNzKiogYUZvbnRNZXQpOwoKICBzdGF0aWMg bnNjb29yZCBDYWxjTmF2UXVpcmtTaXppbmcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCog YVJlbmRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGb250 TWV0cmljcyogYUZvbnRNZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJbnB1dERpbWVuc2lvblNwZWMmIGFTcGVjLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc1NpemUmIGFTaXplKTsKCiAgc3RhdGljIHZvaWQgRm9yY2VEcmF3RnJh bWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUgKiBhRnJhbWUpOwoKCiAg c3RhdGljIHZvaWQgUGxhdGZvcm1Ub0RPTUxpbmVCcmVha3MobnNTdHJpbmcgJmFTdHJpbmcpOwoK ICBzdGF0aWMgbnNyZXN1bHQgR2V0VmFsdWUobnNJQ29udGVudCogYUNvbnRlbnQsIG5zU3RyaW5n KiBhUmVzdWx0KTsKICBzdGF0aWMgbnNyZXN1bHQgR2V0TmFtZShuc0lDb250ZW50KiBhQ29udGVu dCwgbnNTdHJpbmcqIGFSZXN1bHQpOwogIHN0YXRpYyBuc3Jlc3VsdCBHZXRJbnB1dEVsZW1lbnRW YWx1ZShuc0lDb250ZW50KiBhQ29udGVudCwgbnNTdHJpbmcqIGFUZXh0LCBQUkJvb2wgYUluaXRp YWxWYWx1ZSk7CgoKCgoKCgogIHN0YXRpYyBQUkJvb2wgR2V0Qm9vbChjb25zdCBuc0FSZWFkYWJs ZVN0cmluZyYgYVZhbHVlKTsKIyAxNjIgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIKICBzdGF0aWMg dm9pZCBHZXRCb29sU3RyaW5nKGNvbnN0IFBSQm9vbCBhVmFsdWUsIG5zQVdyaXRhYmxlU3RyaW5n JiBhUmVzdWx0KTsKCiAgc3RhdGljIG5zQ29tcGF0aWJpbGl0eSBHZXRSZXBDaGFycyhuc0lQcmVz Q29udGV4dCogYVByZXNDb250ZXh0LCBjaGFyJiBjaGFyMSwgY2hhciYgY2hhcjIpOwoKCiAgdHlw ZWRlZiBlbnVtIHsKICAgIGVIVE1MVGV4dFdyYXBfT2ZmID0gMSwKICAgIGVIVE1MVGV4dFdyYXBf SGFyZCA9IDIsCiAgICBlSFRNTFRleHRXcmFwX1NvZnQgPSAzCiAgfSBuc0hUTUxUZXh0V3JhcDsK CgoKCiAgc3RhdGljIG5zcmVzdWx0IEdldFdyYXBQcm9wZXJ0eShuc0lDb250ZW50ICogYUNvbnRl bnQsIG5zU3RyaW5nICZhT3V0VmFsdWUpOwoKICBzdGF0aWMgbnNyZXN1bHQgR2V0V3JhcFByb3Bl cnR5RW51bShuc0lDb250ZW50ICogYUNvbnRlbnQsIG5zSFRNTFRleHRXcmFwJiBhV3JhcFByb3Ap OwoKCiAgc3RhdGljIG5zcmVzdWx0IEdldExvY2FsaXplZFN0cmluZyhjb25zdCBjaGFyICogYVBy b3BGaWxlTmFtZSwgY29uc3QgY2hhciogYUtleSwgbnNTdHJpbmcmIG9WYWwpOwogIHN0YXRpYyBj b25zdCBjaGFyICogR2V0SFRNTFByb3BlcnRpZXNGaWxlTmFtZSgpIHsgcmV0dXJuICJjaHJvbWU6 Ly9jb21tdW5pY2F0b3IvbG9jYWxlL2xheW91dC9IdG1sRm9ybS5wcm9wZXJ0aWVzIjsgfQoKICBz dGF0aWMgbnNyZXN1bHQgR2V0RGlzYWJsZWQobnNJQ29udGVudCogYUNvbnRlbnQsIFBSQm9vbCog b0lzRGlzYWJsZWQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IERvTWFudWFsU3VibWl0T3JSZXNldChu c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGb3JtRnJhbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZvcm1Db250cm9sRnJhbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYURvU3VibWl0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEb0RPTUV2ZW50 KTsKIyAyMTUgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIKICBuc3Jlc3VsdCBTZXRDdXJyZW50Q2hl Y2tTdGF0ZShQUkJvb2wgYVN0YXRlKTsKIyAyMjQgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIKICBu c3Jlc3VsdCBHZXREZWZhdWx0Q2hlY2tTdGF0ZShQUkJvb2wqIGFTdGF0ZSk7CiMgMjQwICJuc0Zv cm1Db250cm9sSGVscGVyLmgiCiAgIGVudW0gbnNBcnJvd0RpcmVjdGlvbiB7CiAgICBlQXJyb3dE aXJlY3Rpb25fTGVmdCwKICAgIGVBcnJvd0RpcmVjdGlvbl9SaWdodCwKICAgIGVBcnJvd0RpcmVj dGlvbl9VcCwKICAgIGVBcnJvd0RpcmVjdGlvbl9Eb3duCiAgIH07CiMgMjU5ICJuc0Zvcm1Db250 cm9sSGVscGVyLmgiCiAgIHN0YXRpYyB2b2lkIFNldHVwUG9pbnRzKFBSVWludDMyIGFOdW1iZXJP ZlBvaW50cywgbnNjb29yZCogYVBvaW50cywKICAgICBuc1BvaW50KiBhUG9seWdvbiwgbnNjb29y ZCBhU2NhbGVGYWN0b3IsIG5zY29vcmQgYVgsIG5zY29vcmQgYVksCiAgICAgbnNjb29yZCBhQ2Vu dGVyWCwgbnNjb29yZCBhQ2VudGVyWSk7CiMgMjc2ICJuc0Zvcm1Db250cm9sSGVscGVyLmgiCiAg c3RhdGljIHZvaWQgUGFpbnRMaW5lKG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250 ZXh0LAogICAgICAgICAgICAgICAgIG5zY29vcmQgYVNYLCBuc2Nvb3JkIGFTWSwgbnNjb29yZCBh RVgsIG5zY29vcmQgYUVZLAogICAgICAgICAgICAgICAgIFBSQm9vbCBhSG9yeiwgbnNjb29yZCBh V2lkdGgsIG5zY29vcmQgYU9uZVBpeGVsKTsKIyAyODcgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIK ICBzdGF0aWMgdm9pZCBQYWludEZpeGVkU2l6ZUNoZWNrTWFyayhuc0lSZW5kZXJpbmdDb250ZXh0 JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZsb2F0IGFQaXhlbHNUb1R3aXBzKTsKIyAyOTkgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIKICBz dGF0aWMgdm9pZCBQYWludENoZWNrTWFyayhuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5n Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhUGl4ZWxzVG9Ud2lw cywgY29uc3QgbnNSZWN0ICYgYVJlY3QpOwojIDMxMCAibnNGb3JtQ29udHJvbEhlbHBlci5oIgog IHN0YXRpYyB2b2lkIFBhaW50Rml4ZWRTaXplQ2hlY2tNYXJrQm9yZGVyKG5zSVJlbmRlcmluZ0Nv bnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg YVBpeGVsc1RvVHdpcHMsIGNvbnN0IG5zU3R5bGVDb2xvciYgYUJhY2tncm91bmRDb2xvcik7CiMg MzI3ICJuc0Zvcm1Db250cm9sSGVscGVyLmgiCiAgc3RhdGljIHZvaWQgUGFpbnRSZWN0YW5ndWxh ckJ1dHRvbihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsIGNvbnN0IG5zUmVj dCYgYVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVNoaWZ0LCBQUkJv b2wgYVNob3dGb2N1cywgUFJCb29sIGFEaXNhYmxlZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRHJh d091dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFPdXRsaW5lU3R5bGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFGb2N1c1N0eWxlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhU3R5bGVDb250ZXh0LCBuc1N0cmluZyYgYUxh YmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGb3JGcmFtZSk7Cgpw cm90ZWN0ZWQ6CiAgbnNGb3JtQ29udHJvbEhlbHBlcigpOwogIHZpcnR1YWwgfm5zRm9ybUNvbnRy b2xIZWxwZXIoKTsKCgp9OwojIDI0ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5oIiAxCiMgMjUgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc2NvcmUuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUGFydHMu aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5oIiAyCiMgMSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSVJlZmxvd0NvbW1hbmQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNIVE1MUGFydHMuaCIgMgpjbGFzcyBuc0lBcmVuYTsKY2xhc3MgbnNJQXRv bTsKY2xhc3MgbnNJTm9kZUluZm87CmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSUNvbnRlbnRJ dGVyYXRvcjsKY2xhc3MgbnNJRG9jdW1lbnQ7CmNsYXNzIG5zSUhUTUxDb250ZW50OwpjbGFzcyBu c0lIVE1MQ29udGVudFNpbms7CmNsYXNzIG5zSUhUTUxGcmFnbWVudENvbnRlbnRTaW5rOwpjbGFz cyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJVGV4dENvbnRlbnQ7CmNsYXNzIG5zSVVSSTsKY2xh c3MgbnNTdHJpbmc7CmNsYXNzIG5zSVdlYlNoZWxsOwpjbGFzcyBuc0lQcmVzU2hlbGw7CmNsYXNz IG5zSUNoYW5uZWw7CiMgNjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5o IgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3R2VuZXJhdGVkQ29udGVudEl0ZXJhdG9yKG5zSVByZXND b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG cmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudEl0 ZXJhdG9yKiogYUl0ZXJhdG9yKTsKCgoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxBbmNob3JF bGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7 CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEFwcGxldEVsZW1lbnQobnNJSFRNTENvbnRlbnQq KiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19O ZXdIVE1MQXJlYUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MQlJFbGVtZW50KG5zSUhUTUxD b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1 bHQKTlNfTmV3SFRNTEJhc2VFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9k ZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEJhc2VGb250RWxl bWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoK ZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxCb2R5RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFS ZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hU TUxCdXR0b25FbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFO b2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTERMaXN0RWxlbWVudChuc0lIVE1M Q29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVz dWx0Ck5TX05ld0hUTUxEZWxFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9k ZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTERpcmVjdG9yeUVs ZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsK CmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MRGl2RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFS ZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hU TUxFbWJlZEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5v ZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MRmllbGRTZXRFbGVtZW50KG5zSUhU TUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNy ZXN1bHQKTlNfTmV3SFRNTEZvbnRFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJ Tm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEZvcm1FbGVt ZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7Cgpl eHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEZyYW1lRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFS ZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hU TUxGcmFtZVNldEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MSFJFbGVtZW50KG5zSUhUTUxD b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1 bHQKTlNfTmV3SFRNTEhlYWRFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9k ZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEhlYWRpbmdFbGVt ZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7Cgpl eHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEh0bWxFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJl c3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRN TElGcmFtZUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5v ZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MSW1hZ2VFbGVtZW50KG5zSUhUTUxD b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1 bHQKTlNfTmV3SFRNTElucHV0RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5v ZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxJbnNFbGVtZW50 KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRl cm4gbnNyZXN1bHQKTlNfTmV3SFRNTElzSW5kZXhFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJl c3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRN TExJRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUlu Zm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxMYWJlbEVsZW1lbnQobnNJSFRNTENvbnRl bnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApO U19OZXdIVE1MTGVnZW5kRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJ bmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxMaW5rRWxlbWVudChu c0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJu IG5zcmVzdWx0Ck5TX05ld0hUTUxNYXBFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwg bnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTE1lbnVF bGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7 CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTE1ldGFFbGVtZW50KG5zSUhUTUxDb250ZW50Kiog YVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3 SFRNTE1vZEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5v ZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MT0xpc3RFbGVtZW50KG5zSUhUTUxD b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1 bHQKTlNfTmV3SFRNTE9iamVjdEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lO b2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MT3B0R3JvdXBF bGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7 CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTE9wdGlvbkVsZW1lbnQobnNJSFRNTENvbnRlbnQq KiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19O ZXdIVE1MUGFyYWdyYXBoRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJ bmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxQYXJhbUVsZW1lbnQo bnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVy biBuc3Jlc3VsdApOU19OZXdIVE1MUHJlRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQs IG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxRdW90 ZUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZv KTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MU2NyaXB0RWxlbWVudChuc0lIVE1MQ29udGVu dCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5T X05ld0hUTUxTZWxlY3RFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUlu Zm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFNwYWNlckVsZW1lbnQo bnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVy biBuc3Jlc3VsdApOU19OZXdIVE1MU3BhbkVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0 LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MU3R5 bGVFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5m byk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQobnNJSFRN TENvbnRlbnQqKiBhUmVzdWx0LG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVz dWx0Ck5TX05ld0hUTUxUYWJsZUNlbGxFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwg bnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRhYmxl Q29sRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUlu Zm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxUYWJsZUNvbEdyb3VwRWxlbWVudChuc0lI VE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5z cmVzdWx0Ck5TX05ld0hUTUxUYWJsZUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBu c0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MVGFibGVS b3dFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5m byk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQobnNJSFRN TENvbnRlbnQqKiBhUmVzdWx0LG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVz dWx0Ck5TX05ld0hUTUxUYm9keUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lO b2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MVGV4dEFyZWFF bGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7 CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRmb290RWxlbWVudChuc0lIVE1MQ29udGVudCoq IGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05l d0hUTUxUaGVhZEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MVGl0bGVFbGVtZW50KG5zSUhU TUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNy ZXN1bHQKTlNfTmV3SFRNTFVMaXN0RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5z SU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxXQlJFbGVt ZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7Cgpl eHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFVua25vd25FbGVtZW50KG5zSUhUTUxDb250ZW50Kiog YVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgoKCgoKCgpleHRlcm4gbnNyZXN1bHQK TlNfQ3JlYXRlSFRNTEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LAogICAgICAgICAg ICAgICAgICAgICBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvLAogICAgICAgICAgICAgICAgICAgICBQ UkJvb2wgYUNhc2VTZW5zaXRpdmUpOwoKCgoKCgoKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0Jsb2Nr RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdzID0gMCk7CgoKZXh0 ZXJuIG5zcmVzdWx0Ck5TX05ld0F0dHJpYnV0ZUNvbnRlbnQobnNJQ29udGVudCAqKiBhUmVzdWx0 KTsKCgoKCgpleHRlcm4gbnNyZXN1bHQgTlNfTmV3U2VsZWN0c0FyZWFGcmFtZShuc0lQcmVzU2hl bGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MgPSAweDAxMDAwMDAwKTsKCgoKZXh0 ZXJuIG5zcmVzdWx0IE5TX05ld0FyZWFGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5z SUZyYW1lKiogYU5ld0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWlu dDMyIGFGbGFncyA9IDB4MDA4MDAwMDB8MHgwMTAwMDAwMCk7CgoKaW5saW5lIG5zcmVzdWx0IE5T X05ld1RhYmxlQ2VsbElubmVyRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFt ZSoqIGFOZXdGcmFtZSkgewogIHJldHVybiBOU19OZXdCbG9ja0ZyYW1lKGFQcmVzU2hlbGwsIGFO ZXdGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwfDB4MDEwMDAwMDB8 MHgwMDQwMDAwMCk7Cn0KCgoKaW5saW5lIG5zcmVzdWx0IE5TX05ld0RvY3VtZW50RWxlbWVudEZy YW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpIHsKICBy ZXR1cm4gTlNfTmV3QXJlYUZyYW1lKGFQcmVzU2hlbGwsIGFOZXdGcmFtZSwgMHgwMDgwMDAwMHww eDAwNDAwMDAwKTsKfQoKCmlubGluZSBuc3Jlc3VsdCBOU19OZXdBYnNvbHV0ZUl0ZW1XcmFwcGVy RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSkgewog IHJldHVybiBOU19OZXdBcmVhRnJhbWUoYVByZXNTaGVsbCwgYU5ld0ZyYW1lLCAweDAwODAwMDAw fDB4MDA0MDAwMDApOwp9CgoKaW5saW5lIG5zcmVzdWx0IE5TX05ld0Zsb2F0aW5nSXRlbVdyYXBw ZXJGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKSB7 CiAgcmV0dXJuIE5TX05ld0FyZWFGcmFtZShhUHJlc1NoZWxsLCBhTmV3RnJhbWUsIDB4MDA4MDAw MDB8MHgwMDEwMDAwMCk7Cn0KCgoKaW5saW5lIG5zcmVzdWx0IE5TX05ld1JlbGF0aXZlSXRlbVdy YXBwZXJGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1l KSB7CiAgcmV0dXJuIE5TX05ld0FyZWFGcmFtZShhUHJlc1NoZWxsLCBhTmV3RnJhbWUpOwp9Cgpl eHRlcm4gbnNyZXN1bHQgTlNfTmV3QlJGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5z SUZyYW1lKiogYU5ld0ZyYW1lKTsKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdDb21tZW50RnJhbWUo bnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFGcmFtZVJlc3VsdCk7CmV4dGVy biBuc3Jlc3VsdCBOU19OZXdIUkZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJh bWUqKiBhTmV3RnJhbWUpOwoKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdIVE1MRnJhbWVPdXRlckZy YW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwoKZXh0 ZXJuIG5zcmVzdWx0IE5TX05ld0hUTUxGcmFtZXNldEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNT aGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwoKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld1ZpZXdw b3J0RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSk7 CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdDYW52YXNGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hl bGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0ltYWdlRnJh bWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFGcmFtZVJlc3VsdCk7CmV4 dGVybiBuc3Jlc3VsdCBOU19OZXdJbmxpbmVGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGws IG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld1Bvc2l0aW9uZWRJ bmxpbmVGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1l KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld09iamVjdEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNT aGVsbCwgbnNJRnJhbWUqKiBhRnJhbWVSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3U3Bh Y2VyRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpl eHRlcm4gbnNyZXN1bHQgTlNfTmV3VGV4dEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwg bnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0NvbnRpbnVpbmdUZXh0 RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRl cm4gbnNyZXN1bHQgTlNfTmV3RW1wdHlGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5z SUZyYW1lKiogYVJlc3VsdCk7CmlubGluZSBuc3Jlc3VsdCBOU19OZXdXQlJGcmFtZShuc0lQcmVz U2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCkgewogIHJldHVybiBOU19OZXdF bXB0eUZyYW1lKGFQcmVzU2hlbGwsIGFSZXN1bHQpOwp9CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdT Y3JvbGxGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7 CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdTaW1wbGVQYWdlU2VxdWVuY2VGcmFtZShuc0lQcmVzU2hl bGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19O ZXdQYWdlRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQp OwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3Rmlyc3RMZXR0ZXJGcmFtZShuc0lQcmVzU2hlbGwqIGFQ cmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0Zp cnN0TGluZUZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJh bWUpOwoKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdGb3JtRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJl c1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQsIFBSVWludDMyIGFGbGFncyk7CmV4dGVybiBuc3Jl c3VsdCBOU19OZXdHZnhCdXR0b25Db250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxs LCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3TmF0aXZlQnV0dG9u Q29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0 KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0ltYWdlQ29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCog YVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0hU TUxCdXR0b25Db250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoq IGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3R2Z4Q2hlY2tib3hDb250cm9sRnJhbWUo bnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNy ZXN1bHQgTlNfTmV3TmF0aXZlQ2hlY2tib3hDb250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJl c1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3RmllbGRT ZXRGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCwgUFJV aW50MzIgYUZsYWdzKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0ZpbGVDb250cm9sRnJhbWUobnNJ UHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1 bHQgTlNfTmV3TGFiZWxGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiog YVJlc3VsdCwgUFJVaW50MzIgYVN0YXRlRmxhZ3MpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3TGVn ZW5kRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpl eHRlcm4gbnNyZXN1bHQgTlNfTmV3TmF0aXZlVGV4dENvbnRyb2xGcmFtZShuc0lQcmVzU2hlbGwq IGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05l d0dmeFRleHRDb250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoq IGFOZXdGcmFtZSk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdHZnhBdXRvVGV4dENvbnRyb2xGcmFt ZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKZXh0ZXJu IG5zcmVzdWx0IE5TX05ld0dmeFJhZGlvQ29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNT aGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld05hdGl2ZVJh ZGlvQ29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVz dWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld05hdGl2ZVNlbGVjdENvbnRyb2xGcmFtZShuc0lQ cmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3Vs dCBOU19OZXdMaXN0Q29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJh bWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0NvbWJvYm94Q29udHJvbEZyYW1l KG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0LCBQUlVpbnQzMiBh RmxhZ3MpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3SXNJbmRleEZyYW1lKG5zSVByZXNTaGVsbCog YVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKCgpleHRlcm4gbnNyZXN1bHQgTlNfTmV3 VGFibGVPdXRlckZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVz dWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld1RhYmxlRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJl c1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3VGFibGVD YXB0aW9uRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFt ZSk7CgpleHRlcm4gbnNyZXN1bHQgTlNfTmV3VGFibGVDb2xGcmFtZShuc0lQcmVzU2hlbGwqIGFQ cmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdUYWJs ZUNvbEdyb3VwRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1 bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3VGFibGVSb3dGcmFtZShuc0lQcmVzU2hlbGwqIGFQ cmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdUYWJs ZVJvd0dyb3VwRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1 bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3VGFibGVDZWxsRnJhbWUobnNJUHJlc1NoZWxsKiBh UHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwoKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdI VE1MQ29udGVudFNpbmsobnNJSFRNTENvbnRlbnRTaW5rKiogYUluc3RhbmNlUHRyUmVzdWx0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURvY3VtZW50KiBhRG9jLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSogYVVSTCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJTaGVsbCogYVdlYlNoZWxsLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVs KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0hUTUxGcmFnbWVudENvbnRlbnRTaW5rKG5zSUhUTUxG cmFnbWVudENvbnRlbnRTaW5rKiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCgpleHRlcm4gbnNyZXN1 bHQKTlNfTmV3SFRNTFJlZmxvd0NvbW1hbmQobnNJUmVmbG93Q29tbWFuZCoqIGFJbnN0YW5jZVB0 clJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFUYXJnZXRGcmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVmbG93Q29tbWFuZDo6UmVmbG93VHlwZSBhUmVm bG93VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFDaGlsZEZyYW1lID0g MCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSA9IDApOwojIDI1 ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lIVE1MQ29udGVudC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lI VE1MQ29udGVudC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYTUxDb250ZW50 LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhNTENvbnRlbnQuaCIKIyAx ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI4ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNJWE1MQ29udGVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSVN0eWxlZENvbnRlbnQuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJU3R5bGVkQ29udGVudC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lDb250ZW50LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlZENv bnRlbnQuaCIgMgoKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSVN0eWxlUnVsZTsKY2xhc3MgbnNJ U3R5bGVDb250ZXh0OwpjbGFzcyBuc0lTdXBwb3J0c0FycmF5OwpjbGFzcyBuc0lSdWxlV2Fsa2Vy OwoKCgoKCgoKY2xhc3MgbnNJU3R5bGVkQ29udGVudCA6IHB1YmxpYyBuc0lDb250ZW50IHsKcHVi bGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0g eyAweGMxZTg0ZTAxLCAweGNkMTUsIDB4MTFkMiwgeyAweDk2LCAweGVkLCAweDAsIDB4MTAsIDB4 NGIsIDB4N2IsIDB4N2QsIDB4ZWIgfSB9OyByZXR1cm4gaWlkOyB9CgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0SUQobnNJQXRvbSomIGFSZXN1bHQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldENsYXNzZXMobnNWb2lkQXJyYXkmIGFBcnJheSkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgSGFzQ2xhc3MobnNJQXRvbSogYUNsYXNzKSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNy ZXN1bHQgV2Fsa0NvbnRlbnRTdHlsZVJ1bGVzKG5zSVJ1bGVXYWxrZXIqIGFSdWxlV2Fsa2VyKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBXYWxrSW5saW5lU3R5bGVSdWxlcyhuc0lSdWxlV2Fsa2Vy KiBhUnVsZVdhbGtlcikgPSAwOwojIDU4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5 bGVkQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFwcGVkQXR0cmlidXRlSW1wYWN0 KGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJJbnQzMiYgYUhpbnQpIGNvbnN0ID0gMDsKCn07CiMgMjkgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lYTUxDb250ZW50LmgiIDIKCmNsYXNzIG5zSU5hbWVTcGFjZTsKY2xh c3MgbnNJTm9kZUluZm87CmNsYXNzIG5zSVdlYlNoZWxsOwpjbGFzcyBuc0lVUkk7CiMgNDIgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYTUxDb250ZW50LmgiCmNsYXNzIG5zSVhNTENvbnRl bnQgOiBwdWJsaWMgbnNJU3R5bGVkQ29udGVudCB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHhhNmNmOTBjYiwgMHgxNWIzLCAw eDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9 IH07IHJldHVybiBpaWQ7IH0KCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb250YWluaW5nTmFtZVNw YWNlKG5zSU5hbWVTcGFjZSogYU5hbWVTcGFjZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 Q29udGFpbmluZ05hbWVTcGFjZShuc0lOYW1lU3BhY2UqJiBhTmFtZVNwYWNlKSBjb25zdCA9IDA7 CiMgNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYTUxDb250ZW50LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBNYXliZVRyaWdnZXJBdXRvTGluayhuc0lXZWJTaGVsbCAqYVNoZWxsKSA9IDA7 CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0WE1MQmFzZVVSSShuc0lVUkkgKiphVVJJKSA9IDA7Cn07 CiMgNzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYTUxDb250ZW50LmgiCmV4dGVybiBu c3Jlc3VsdApOU19OZXdYTUxFbGVtZW50KG5zSVhNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2Rl SW5mbyogYU5vZGVJbmZvKTsKCgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3WE1MUHJvY2Vzc2luZ0lu c3RydWN0aW9uKG5zSUNvbnRlbnQqKiBhSW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVRhcmdldCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhRGF0YSk7 CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3WE1MRW50aXR5KG5zSUNvbnRlbnQqKiBhSW5zdGFuY2VQ dHJSZXN1bHQsCiAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYU5hbWUs CiAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVB1YmxpY0lkLAogICAg ICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTeXN0ZW1JZCwKICAgICAgICAg ICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhTm90YXRpb25OYW1lKTsKCmV4dGVybiBu c3Jlc3VsdApOU19OZXdYTUxOb3RhdGlvbihuc0lDb250ZW50KiogYUluc3RhbmNlUHRyUmVzdWx0 LAogICAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYU5hbWUsCiAgICAg ICAgICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhUHVibGljSWQsCiAgICAgICAg ICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3lzdGVtSWQpOwoKY2xhc3MgbnNJ RE9NTmFtZWROb2RlTWFwOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld1hNTE5hbWVkTm9kZU1hcChu c0lET01OYW1lZE5vZGVNYXAqKiBhSW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAgICAgICAg ICAgICBuc0lTdXBwb3J0c0FycmF5ICphQXJyYXkpOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld1hN TENEQVRBU2VjdGlvbihuc0lDb250ZW50KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKIyAyNiAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUhUTUxDb250ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNIVE1MVmFsdWUuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNIVE1MVmFsdWUuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3Jl LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFZhbHVlLmgiIDIKIyAx ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb2xvci5oIiAxCiMgMjcgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0hUTUxWYWx1ZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zU3RyaW5nLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFZh bHVlLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQoj IDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MVmFsdWUuaCIgMgoKZW51bSBuc0hU TUxVbml0IHsKICBlSFRNTFVuaXRfTnVsbCA9IDAsCiAgZUhUTUxVbml0X0VtcHR5ID0gMSwKICBl SFRNTFVuaXRfU3RyaW5nID0gMTAsCiAgZUhUTUxVbml0X0lTdXBwb3J0cyA9IDIwLAogIGVIVE1M VW5pdF9JbnRlZ2VyID0gNTAsCiAgZUhUTUxVbml0X0VudW1lcmF0ZWQgPSA1MSwKICBlSFRNTFVu aXRfUHJvcG9ydGlvbmFsID0gNTIsCiAgZUhUTUxVbml0X0NvbG9yID0gODAsCiAgZUhUTUxVbml0 X0NvbG9yTmFtZSA9IDgxLAogIGVIVE1MVW5pdF9QZXJjZW50ID0gOTAsCgoKICBlSFRNTFVuaXRf UGl4ZWwgPSA2MDAKfTsKCmNsYXNzIG5zSFRNTFZhbHVlIHsKcHVibGljOgogIG5zSFRNTFZhbHVl KG5zSFRNTFVuaXQgYVVuaXQgPSBlSFRNTFVuaXRfTnVsbCk7CiAgbnNIVE1MVmFsdWUoUFJJbnQz MiBhVmFsdWUsIG5zSFRNTFVuaXQgYVVuaXQpOwogIG5zSFRNTFZhbHVlKGZsb2F0IGFWYWx1ZSk7 CiAgbnNIVE1MVmFsdWUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFWYWx1ZSwgbnNIVE1MVW5p dCBhVW5pdCA9IGVIVE1MVW5pdF9TdHJpbmcpOwogIG5zSFRNTFZhbHVlKG5zSVN1cHBvcnRzKiBh VmFsdWUpOwogIG5zSFRNTFZhbHVlKG5zY29sb3IgYVZhbHVlKTsKICBuc0hUTUxWYWx1ZShjb25z dCBuc0hUTUxWYWx1ZSYgYUNvcHkpOwogIH5uc0hUTUxWYWx1ZSh2b2lkKTsKCiAgbnNIVE1MVmFs dWUmIG9wZXJhdG9yPShjb25zdCBuc0hUTUxWYWx1ZSYgYUNvcHkpOwogIFBSQm9vbCBvcGVyYXRv cj09KGNvbnN0IG5zSFRNTFZhbHVlJiBhT3RoZXIpIGNvbnN0OwogIFBSQm9vbCBvcGVyYXRvciE9 KGNvbnN0IG5zSFRNTFZhbHVlJiBhT3RoZXIpIGNvbnN0OwogIFBSVWludDMyIEhhc2hWYWx1ZSh2 b2lkKSBjb25zdDsKCiAgbnNIVE1MVW5pdCBHZXRVbml0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1V bml0OyB9CiAgUFJJbnQzMiBHZXRJbnRWYWx1ZSh2b2lkKSBjb25zdDsKICBQUkludDMyIEdldFBp eGVsVmFsdWUodm9pZCkgY29uc3Q7CiAgZmxvYXQgR2V0UGVyY2VudFZhbHVlKHZvaWQpIGNvbnN0 OwogIG5zQVdyaXRhYmxlU3RyaW5nJiBHZXRTdHJpbmdWYWx1ZShuc0FXcml0YWJsZVN0cmluZyYg YUJ1ZmZlcikgY29uc3Q7CiAgbnNJU3VwcG9ydHMqIEdldElTdXBwb3J0c1ZhbHVlKHZvaWQpIGNv bnN0OwogIG5zY29sb3IgR2V0Q29sb3JWYWx1ZSh2b2lkKSBjb25zdDsKCiAgdm9pZCBSZXNldCh2 b2lkKTsKICB2b2lkIFNldEludFZhbHVlKFBSSW50MzIgYVZhbHVlLCBuc0hUTUxVbml0IGFVbml0 KTsKICB2b2lkIFNldFBpeGVsVmFsdWUoUFJJbnQzMiBhVmFsdWUpOwogIHZvaWQgU2V0UGVyY2Vu dFZhbHVlKGZsb2F0IGFWYWx1ZSk7CiAgdm9pZCBTZXRTdHJpbmdWYWx1ZShjb25zdCBuc0FSZWFk YWJsZVN0cmluZyYgYVZhbHVlLCBuc0hUTUxVbml0IGFVbml0ID0gZUhUTUxVbml0X1N0cmluZyk7 CiAgdm9pZCBTZXRJU3VwcG9ydHNWYWx1ZShuc0lTdXBwb3J0cyogYVZhbHVlKTsKICB2b2lkIFNl dENvbG9yVmFsdWUobnNjb2xvciBhVmFsdWUpOwogIHZvaWQgU2V0RW1wdHlWYWx1ZSh2b2lkKTsK CiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc0FXcml0YWJsZVN0cmluZyYgYUJ1ZmZlcikgY29uc3Q7 CiAgdm9pZCBUb1N0cmluZyhuc0FXcml0YWJsZVN0cmluZyYgYUJ1ZmZlcikgY29uc3Q7Cgpwcm90 ZWN0ZWQ6CiAgbnNIVE1MVW5pdCBtVW5pdDsKICB1bmlvbiB7CiAgICBQUkludDMyIG1JbnQ7CiAg ICBmbG9hdCBtRmxvYXQ7CiAgICBQUlVuaWNoYXIqIG1TdHJpbmc7CiAgICBuc0lTdXBwb3J0cyog bUlTdXBwb3J0czsKICAgIG5zY29sb3IgbUNvbG9yOwogIH0gbVZhbHVlOwp9OwoKaW5saW5lIFBS SW50MzIgbnNIVE1MVmFsdWU6OkdldEludFZhbHVlKHZvaWQpIGNvbnN0CnsKICB7fTsKCgoKICBp ZiAoKG1Vbml0ID09IGVIVE1MVW5pdF9JbnRlZ2VyKSB8fAogICAgICAobVVuaXQgPT0gZUhUTUxV bml0X0VudW1lcmF0ZWQpIHx8CiAgICAgIChtVW5pdCA9PSBlSFRNTFVuaXRfUHJvcG9ydGlvbmFs KSkgewogICAgcmV0dXJuIG1WYWx1ZS5tSW50OwogIH0KICBlbHNlIGlmIChtVW5pdCA9PSBlSFRN TFVuaXRfU3RyaW5nKSB7CiAgICBpZiAobVZhbHVlLm1TdHJpbmcpIHsKICAgICAgUFJJbnQzMiBl cnI9MDsKICAgICAgbnNBdXRvU3RyaW5nIHN0cihtVmFsdWUubVN0cmluZyk7CiAgICAgIHJldHVy biBzdHIuVG9JbnRlZ2VyKCZlcnIpOwogICAgfQogIH0KICByZXR1cm4gMDsKfQoKaW5saW5lIFBS SW50MzIgbnNIVE1MVmFsdWU6OkdldFBpeGVsVmFsdWUodm9pZCkgY29uc3QKewogIHt9OwogIGlm IChtVW5pdCA9PSBlSFRNTFVuaXRfUGl4ZWwpIHsKICAgIHJldHVybiBtVmFsdWUubUludDsKICB9 CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBmbG9hdCBuc0hUTUxWYWx1ZTo6R2V0UGVyY2VudFZhbHVl KHZvaWQpIGNvbnN0CnsKICB7fTsKICBpZiAobVVuaXQgPT0gZUhUTUxVbml0X1BlcmNlbnQpIHsK ICAgIHJldHVybiBtVmFsdWUubUZsb2F0OwogIH0KICByZXR1cm4gMC4wZjsKfQoKaW5saW5lIG5z QVdyaXRhYmxlU3RyaW5nJiBuc0hUTUxWYWx1ZTo6R2V0U3RyaW5nVmFsdWUobnNBV3JpdGFibGVT dHJpbmcmIGFCdWZmZXIpIGNvbnN0CnsKICB7fTsKCiAgYUJ1ZmZlci5TZXRMZW5ndGgoMCk7CiAg aWYgKCgobVVuaXQgPT0gZUhUTUxVbml0X1N0cmluZykgfHwgKG1Vbml0ID09IGVIVE1MVW5pdF9D b2xvck5hbWUpKSAmJgogICAgICAoMCAhPSBtVmFsdWUubVN0cmluZykpIHsKICAgIGFCdWZmZXIu QXBwZW5kKG1WYWx1ZS5tU3RyaW5nKTsKICB9CiAgcmV0dXJuIGFCdWZmZXI7Cn0KCmlubGluZSBu c0lTdXBwb3J0cyogbnNIVE1MVmFsdWU6OkdldElTdXBwb3J0c1ZhbHVlKHZvaWQpIGNvbnN0CnsK ICB7fTsKICBpZiAobVVuaXQgPT0gZUhUTUxVbml0X0lTdXBwb3J0cykgewogICAgbnNJU3VwcG9y dHMgKnJlc3VsdCA9IG1WYWx1ZS5tSVN1cHBvcnRzOwogICAgbnNfaWZfYWRkcmVmKHJlc3VsdCk7 CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICByZXR1cm4gMDsKfQoKaW5saW5lIG5zY29sb3IgbnNI VE1MVmFsdWU6OkdldENvbG9yVmFsdWUodm9pZCkgY29uc3QKewogIHt9OwoKICBpZiAobVVuaXQg PT0gZUhUTUxVbml0X0NvbG9yKSB7CiAgICByZXR1cm4gbVZhbHVlLm1Db2xvcjsKICB9CiAgaWYg KChtVW5pdCA9PSBlSFRNTFVuaXRfQ29sb3JOYW1lKSAmJiAobVZhbHVlLm1TdHJpbmcpKSB7CiAg ICBuc2NvbG9yIGNvbG9yOwogICAgaWYgKE5TX0NvbG9yTmFtZVRvUkdCKG5zQXV0b1N0cmluZyht VmFsdWUubVN0cmluZyksICZjb2xvcikpIHsKICAgICAgcmV0dXJuIGNvbG9yOwogICAgfQogIH0K ICByZXR1cm4gKChuc2NvbG9yKSAoKDI1NSA8PCAyNCkgfCAoKDApPDwxNikgfCAoKDApPDw4KSB8 ICgwKSkpOwp9CgppbmxpbmUgUFJCb29sIG5zSFRNTFZhbHVlOjpvcGVyYXRvciE9KGNvbnN0IG5z SFRNTFZhbHVlJiBhT3RoZXIpIGNvbnN0CnsKICByZXR1cm4gUFJCb29sKCEgKCgqdGhpcykgPT0g YU90aGVyKSk7Cn0KIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUhUTUxDb250ZW50 LmgiIDIKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lTdHlsZVJ1bGU7 CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lIVE1MTWFwcGVkQXR0cmlidXRlczsKY2xh c3MgbnNJVVJJOwpzdHJ1Y3QgbnNSdWxlRGF0YTsKCgoKCgoKdHlwZWRlZiB2b2lkICgqbnNNYXBS dWxlVG9BdHRyaWJ1dGVzRnVuYykoY29uc3QgbnNJSFRNTE1hcHBlZEF0dHJpYnV0ZXMqIGFBdHRy aWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1J1bGVE YXRhKiBhRGF0YSk7CgoKY2xhc3MgbnNJSFRNTENvbnRlbnQgOiBwdWJsaWMgbnNJWE1MQ29udGVu dAp7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0geyAweGI5ZTExMGIwLCAweDk0ZDYsIDB4MTFkMSwgezB4ODksIDB4NWMsIDB4 MDAsIDB4NjAsIDB4MDgsIDB4OTEsIDB4MWIsIDB4ODF9IH07IHJldHVybiBpaWQ7fQoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBDb21wYWN0KCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhU TUxBdHRyaWJ1dGUobnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgbnNIVE1MVmFsdWUmIGFWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJCb29sIGFOb3RpZnkpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIVE1MQXR0 cmlidXRlKG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zSFRNTFZhbHVlJiBhVmFsdWUpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0 dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbihuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jJiBhTWFwUnVs ZUZ1bmMpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVUb1N0cmluZyhu c0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg bnNIVE1MVmFsdWUmIGFWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVdy aXRhYmxlU3RyaW5nJiBhUmVzdWx0KSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU3Ry aW5nVG9BdHRyaWJ1dGUobnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0hUTUxWYWx1ZSYgYVJlc3VsdCkgPSAwOwoKCgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEJhc2VVUkwobnNJVVJJKiYgYUJhc2VVUkwpIGNvbnN0ID0gMDsKCgoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCYXNlVGFyZ2V0KG5zQVdyaXRhYmxlU3RyaW5nJiBh QmFzZVRhcmdldCkgY29uc3QgPSAwOwp9OwojIDI2ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIg MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiIDEK IyAyNyAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJUHJlc1NoZWxsLmgiIDEKIyAyOCAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIK IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMQojIDI5ICJu c0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lTdHlsZUNvbnRleHQuaCIgMQojIDMwICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEg Ii4uLy4uL2Jhc2Uvc3JjL25zTGVhZkZyYW1lLmgiIDEKIyAzMSAibnNGb3JtQ29udHJvbEhlbHBl ci5jcHAiIDIKIyAxICIuLi8uLi9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIgMQojIDI1ICIu Li8uLi9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIiAxCiMgMjYgIi4uLy4uL3N0eWxlL3NyYy9uc0NT U1JlbmRlcmluZy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29u dGV4dC5oIiAxCiMgMjcgIi4uLy4uL3N0eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIiAyCnN0cnVj dCBuc1BvaW50OwoKY2xhc3MgbnNDU1NSZW5kZXJpbmcgewpwdWJsaWM6CiMgMzkgIi4uLy4uL3N0 eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIgogIHN0YXRpYyB2b2lkIFBhaW50Qm9yZGVyKG5zSVBy ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVu ZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJRnJhbWUqIGFGb3JGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu c1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0 JiBhQm9yZGVyQXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxlQm9y ZGVyJiBhQm9yZGVyU3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250 ZXh0KiBhU3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50biBhU2tp cFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVjdCogYUdhcCA9IDAsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhSGFyZEJvcmRlclNpemUgPSAwLAogICAgICAg ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU2hvdWxkSWdub3JlUm91bmRlZCA9IDApOwojIDU5 ICIuLi8uLi9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIKICBzdGF0aWMgdm9pZCBQYWludE91 dGxpbmUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lGcmFtZSogYUZvckZyYW1lLAogICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBuc1JlY3QmIGFCb3JkZXJBcmVhLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG5zU3R5bGVCb3JkZXImIGFCb3JkZXJTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBuc1N0eWxlT3V0bGluZSYgYU91dGxpbmVTdHlsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lTdHlsZUNvbnRleHQqIGFTdHlsZUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJJbnRuIGFTa2lwU2lkZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNSZWN0 KiBhR2FwID0gMCk7CiMgODEgIi4uLy4uL3N0eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIgogIHN0 YXRpYyB2b2lkIFBhaW50Qm9yZGVyRWRnZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5k ZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFG b3JGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURp cnR5UmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYUJv cmRlckFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0JvcmRlckVkZ2VzICog YUJvcmRlckVkZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250 ZXh0KiBhU3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRu IGFTa2lwU2lkZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1JlY3QqIGFHYXAg PSAwKTsKIyA5OSAiLi4vLi4vc3R5bGUvc3JjL25zQ1NTUmVuZGVyaW5nLmgiCiAgc3RhdGljIHZv aWQgUGFpbnRCYWNrZ3JvdW5kKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250 ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZvckZyYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYUJvcmRlckFyZWEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVCYWNrZ3JvdW5kJiBhQ29s b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVCb3JkZXImIGFC b3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYURYLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFEWSk7CgogIHN0YXRpYyB2b2lkIERyYXdE YXNoZWRTaWRlcyhQUkludG4gc3RhcnRTaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBQUlVpbnQ4IGJvcmRlclN0eWxlc1tdLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBuc2NvbG9yIGJvcmRlckNvbG9yc1tdLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBuc1JlY3QmIGJvcmRlck91dHNpZGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYm9yZGVySW5zaWRlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQUkludG4gYVNraXBTaWRlcywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNSZWN0KiBhR2FwKTsKCiAgc3RhdGljIHZvaWQgRHJhd0Rhc2hlZFNpZGVzKFBSSW50 biBzdGFydFNpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0Nv bnRleHQmIGFDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1Jl Y3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5 bGVDb2xvciogYUNvbG9yU3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG5zU3R5bGVCb3JkZXIqIGFCb3JkZXJTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgbnNTdHlsZU91dGxpbmUqIGFPdXRsaW5lU3R5bGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBSQm9vbCBhRG9PdXRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBuc1JlY3QmIGJvcmRlck91dHNpZGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IG5zUmVjdCYgYm9yZGVySW5zaWRlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQUkludG4gYVNraXBTaWRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNSZWN0KiBhR2FwKTsKCgoKCiAgc3RhdGljIHZvaWQgRHJhd0Rhc2hlZFNlZ21lbnRzKG5zSVJl bmRlcmluZ0NvbnRleHQmIGFDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBuc1JlY3QmIGFCb3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zQm9yZGVyRWRnZXMgKiBhQm9yZGVyRWRnZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSSW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc1JlY3QqIGFHYXApOwoKCgoKCgoKICBzdGF0aWMgbnNjb2xvciBUcmFuc2Zvcm1Db2xvcihu c2NvbG9yIGFNYXBDb2xvcixQUkJvb2wgYU5vQmFja0dyb3VuZCk7Cgpwcm90ZWN0ZWQ6CgoKCgoK CgogIHN0YXRpYyB2b2lkIFBhaW50Um91bmRlZEJvcmRlcihuc0lQcmVzQ29udGV4dCogYVByZXND b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFS ZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRm9y RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYUJvcmRlckFyZWEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTdHlsZUJvcmRlciogYUJvcmRlclN0eWxl LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVPdXRsaW5lKiBhT3V0bGlu ZVN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVN0eWxl Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYVNraXBTaWRlcywKICAg ICAgICAgICAgICAgICAgICAgICAgICBQUkludDE2IGFCb3JkZXJSYWRpdXNbNF0sbnNSZWN0KiBh R2FwID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUlzT3V0bGluZT0wKTsK CgogIHN0YXRpYyB2b2lkIFJlbmRlclNpZGUobnNGbG9hdFBvaW50IGFQb2ludHNbXSxuc0lSZW5k ZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgbnNTdHlsZUJvcmRlciogYUJvcmRlclN0eWxlLGNvbnN0IG5zU3R5bGVPdXRsaW5lKiBh T3V0bGluZVN0eWxlLG5zSVN0eWxlQ29udGV4dCogYVN0eWxlQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgUFJVaW50OCBhU2lkZSxuc01hcmdpbiAmYUJvclRoaWNrLG5zY29vcmQgYVR3 aXBzUGVyUGl4ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhSXNPdXRsaW5lPTAp OwoKICBzdGF0aWMgdm9pZCBQYWludFJvdW5kZWRCYWNrZ3JvdW5kKG5zSVByZXNDb250ZXh0KiBh UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0Nv bnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lGcmFtZSogYUZvckZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu c1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z UmVjdCYgYUJvcmRlckFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z U3R5bGVCYWNrZ3JvdW5kJiBhQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z Y29vcmQgYURYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFEWSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQxNiBhVGhlUmFkaXVzWzRdKTsKCgogIHN0 YXRpYyBuc2NvbG9yIE1ha2VCZXZlbENvbG9yKFBSSW50biB3aGljaFNpZGUsIFBSVWludDggc3R5 bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb2xvciBhQmFja2dyb3VuZENv bG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29sb3IgYUJvcmRlckNvbG9y LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU3BlY2lhbENhc2UpOwoK ICBzdGF0aWMgUFJJbnRuIE1ha2VTaWRlKG5zUG9pbnQgYVBvaW50c1tdLAogICAgICAgICAgICAg ICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYUNvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICBQUkludG4gd2hpY2hTaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbnNSZWN0JiBvdXRzaWRlLCBjb25zdCBuc1JlY3QmIGluc2lkZSwKICAgICAgICAgICAgICAg ICAgICAgICAgIFBSSW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJJ bnRuIGJvcmRlclBhcnQsIGZsb2F0IGJvcmRlckZyYWMsCiAgICAgICAgICAgICAgICAgICAgICAg ICBuc2Nvb3JkIHR3aXBzUGVyUGl4ZWwpOwoKICBzdGF0aWMgdm9pZCBEcmF3U2lkZShuc0lSZW5k ZXJpbmdDb250ZXh0JiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gd2hp Y2hTaWRlLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVWludDggYm9yZGVyU3R5bGUs CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb2xvciBib3JkZXJDb2xvciwKICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBuc2NvbG9yIGFCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBib3JkZXJPdXRzaWRlLAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYm9yZGVySW5zaWRlLAogICAgICAgICAgICAgICAgICAg ICAgIFBSSW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgdHdp cHNQZXJQaXhlbCwKICAgICAgICAgICAgICAgICAgICAgICBuc1JlY3QqIGFHYXAgPSAwKTsKCgog IHN0YXRpYyB2b2lkIERyYXdMaW5lIChuc0lSZW5kZXJpbmdDb250ZXh0JiBhQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhWDEsIG5zY29vcmQgYVkxLCBuc2Nvb3JkIGFY MiwgbnNjb29yZCBhWTIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVjdCogYUdhcCk7Cgog IHN0YXRpYyB2b2lkIEZpbGxQb2x5Z29uIChuc0lSZW5kZXJpbmdDb250ZXh0JiBhQ29udGV4dCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNQb2ludCBhUG9pbnRzW10sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU51bVBvaW50cywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNSZWN0KiBhR2FwKTsKCn07CgoKCgoKCgpjbGFzcyBRQkN1cnZlCnsKCnB1 YmxpYzoKICAgICAgICBuc0Zsb2F0UG9pbnQgbUFuYzE7CiAgICAgICAgbnNGbG9hdFBvaW50IG1D b247CiAgICAgICAgbnNGbG9hdFBvaW50IG1BbmMyOwoKICBRQkN1cnZlKCkge21BbmMxLng9MDtt QW5jMS55PTA7bUNvbj1tQW5jMj1tQW5jMTt9CiAgdm9pZCBTZXRDb250cm9scyhuc0Zsb2F0UG9p bnQgJmFBbmMxLG5zRmxvYXRQb2ludCAmYUNvbixuc0Zsb2F0UG9pbnQgJmFBbmMyKSB7IG1BbmMx ID0gYUFuYzE7IG1Db24gPSBhQ29uOyBtQW5jMiA9IGFBbmMyO30KICB2b2lkIFNldFBvaW50cyhm bG9hdCBhMXgsZmxvYXQgYTF5LGZsb2F0IGFjeCxmbG9hdCBhY3ksZmxvYXQgYTJ4LGZsb2F0IGEy eSkge21BbmMxLk1vdmVUbyhhMXgsYTF5KSxtQ29uLk1vdmVUbyhhY3gsYWN5KSxtQW5jMi5Nb3Zl VG8oYTJ4LGEyeSk7fQojIDI0NyAiLi4vLi4vc3R5bGUvc3JjL25zQ1NTUmVuZGVyaW5nLmgiCiAg dm9pZCBTdWJEaXZpZGUobnNJUmVuZGVyaW5nQ29udGV4dCAqYVJlbmRlcmluZ0NvbnRleHQsbnNQ b2ludCBhUG9pbnRBcnJheVtdLFBSSW50MzIgKmFDdXJJbmRleCk7CgoKCgoKCgogIHZvaWQgTWlk UG9pbnREaXZpZGUoUUJDdXJ2ZSAqQSxRQkN1cnZlICpCKTsKfTsKCgoKCgoKCmNsYXNzIFJvdW5k ZWRSZWN0CnsKCnB1YmxpYzoKICBQUkludDMyIG1Sb3VuZG5lc3NbNF07CgogIFBSQm9vbCBtRG9S b3VuZDsKCiAgUFJJbnQxNiBtTGVmdDsKICBQUkludDE2IG1SaWdodDsKICBQUkludDE2IG1Ub3A7 CiAgUFJJbnQxNiBtQm90dG9tOwoKCgoKCiAgdm9pZCBSb3VuZFJlY3QoKSB7bVJvdW5kbmVzc1sw XT0wO30KIyAyOTIgIi4uLy4uL3N0eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIgogIHZvaWQgU2V0 KG5zY29vcmQgYUxlZnQsbnNjb29yZCBhVG9wLFBSSW50MzIgYVdpZHRoLFBSSW50MzIgYUhlaWdo dCxQUkludDE2IGFSYWRpdXNbNF0sUFJJbnQxNiBhTnVtVHdpcFBlclBpeCk7CiMgMzAxICIuLi8u Li9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIKICB2b2lkIENhbGNJbnNldEN1cnZlcyhRQkN1 cnZlICZhVUxDdXJ2ZSxRQkN1cnZlICZhVVJDdXJ2ZSxRQkN1cnZlICZhTExDdXJ2ZSxRQkN1cnZl ICZhTFJDdXJ2ZSxuc01hcmdpbiAmYUJvcmRlcik7CiMgMzExICIuLi8uLi9zdHlsZS9zcmMvbnND U1NSZW5kZXJpbmcuaCIKICB2b2lkIEdldFJvdW5kZWRCb3JkZXJzKFFCQ3VydmUgJmFVTEN1cnZl LFFCQ3VydmUgJmFVUkN1cnZlLFFCQ3VydmUgJmFMTEN1cnZlLFFCQ3VydmUgJmFMUkN1cnZlKTsK Cn07CiMgMzIgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vYmFzZS9zcmMv bnNIVE1MSUlEcy5oIiAxCiMgMjUgIi4uLy4uL2Jhc2Uvc3JjL25zSFRNTElJRHMuaCIKIyAxICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI2ICIuLi8uLi9iYXNl L3NyYy9uc0hUTUxJSURzLmgiIDIKCgpleHRlcm4gY29uc3QgbnNJSUQga0lBcmVhRnJhbWVJSUQ7 CmV4dGVybiBjb25zdCBuc0lJRCBrSUhUTUxDb250ZW50SUlEOwpleHRlcm4gY29uc3QgbnNJSUQg a0lIVE1MUmVmbG93SUlEOwpleHRlcm4gY29uc3QgbnNJSUQga0lQYWdlU2VxdWVuY2VGcmFtZUlJ RDsKZXh0ZXJuIGNvbnN0IG5zSUlEIGtJU3R5bGVkQ29udGVudElJRDsKZXh0ZXJuIGNvbnN0IG5z SUlEIGtJVGV4dENvbnRlbnRJSUQ7CiMgMzMgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMg MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIgMQojIDI2ICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4 Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjcgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJU3VwcG9ydHMuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5o IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI5ICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zSVdpZGdldC5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lW aWV3LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAxCiMg MzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiIDIKCmNsYXNzIG5zSVZpZXdN YW5hZ2VyOwpjbGFzcyBuc0lSZWdpb247CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNz IG5zVHJhbnNmb3JtMkQ7CmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lWaWV3T2JzZXJ2ZXI7CmNs YXNzIG5zVm9pZEFycmF5OwpzdHJ1Y3QgbnNSZWN0OwoKCgoKc3RydWN0IG5zVmlld0NsaXAgewog IG5zY29vcmQgbUxlZnQ7CiAgbnNjb29yZCBtUmlnaHQ7CiAgbnNjb29yZCBtVG9wOwogIG5zY29v cmQgbUJvdHRvbTsKfTsKCgoKCgoKZW51bSBuc1ZpZXdWaXNpYmlsaXR5IHsKICBuc1ZpZXdWaXNp YmlsaXR5X2tIaWRlID0gMCwKICBuc1ZpZXdWaXNpYmlsaXR5X2tTaG93ID0gMSwKICBuc1ZpZXdW aXNpYmlsaXR5X2tJbmhlcml0ID0gMgp9OwojIDc4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJVmlldy5oIgpjbGFzcyBuc0lWaWV3IDogcHVibGljIG5zSVN1cHBvcnRzCnsKcHVibGljOgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 IDB4ZjBhMjFjNDAsIDB4YTdlMSwgMHgxMWQxLCB7IDB4YTgsIDB4MjQsIDB4MDAsIDB4NDAsIDB4 OTUsIDB4OWEsIDB4MjgsIDB4YzkgfSB9OyByZXR1cm4gaWlkO30KIyA5NCAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJVmlld01h bmFnZXIqIGFNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0ICZhQm91bmRzLAogICAgICAgICAgICAgICAgICAg Y29uc3QgbnNJVmlldyAqYVBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zVmlld1Zpc2liaWxpdHkgYVZpc2liaWxpdHlGbGFnID0gbnNWaWV3 VmlzaWJpbGl0eV9rU2hvdykgPSAwOwojIDEwOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3koKSA9IDA7CgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFZpZXdNYW5hZ2VyKG5zSVZpZXdNYW5hZ2VyIComYVZpZXdNZ3IpIGNvbnN0 ID0gMDsKIyAxMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBQYWludChuc0lSZW5kZXJpbmdDb250ZXh0JiByYywgY29uc3QgbnNSZWN0JiBy ZWN0LAogICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFQYWludEZsYWdzLCBQUkJvb2wgJmFS ZXN1bHQpID0gMDsKIyAxMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lSZW5kZXJpbmdDb250ZXh0JiByYywgY29uc3QgbnNJ UmVnaW9uJiByZWdpb24sCiAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVBhaW50RmxhZ3Ms IFBSQm9vbCAmYVJlc3VsdCkgPSAwOwojIDE0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZUV2ZW50KG5zR1VJRXZlbnQgKmV2ZW50 LAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFFdmVudEZsYWdzLAogICAgICAg ICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0dXMqIGFTdGF0dXMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgUFJCb29sIGFGb3JjZUhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBQUkJvb2wmIGFIYW5kbGVkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UG9z aXRpb24obnNjb29yZCB4LCBuc2Nvb3JkIHkpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRQb3NpdGlvbihuc2Nvb3JkICp4LCBuc2Nvb3JkICp5KSBjb25zdCA9IDA7CgoKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgU2V0RGltZW5zaW9ucyhuc2Nvb3JkIHdpZHRoLCBuc2Nvb3JkIGhl aWdodCwgUFJCb29sIGFQYWludCA9IDEpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpbWVu c2lvbnMobnNjb29yZCAqd2lkdGgsIG5zY29vcmQgKmhlaWdodCkgY29uc3QgPSAwOwoKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm91bmRzKGNvbnN0IG5zUmVjdCAmYUJvdW5kcywgUFJCb29s IGFQYWludCA9IDEpID0gMDsKIyAxOTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3 LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3VuZHMobnNjb29yZCBhWCwgbnNjb29yZCBhWSwK ICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCwK ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQYWludCA9IDEpID0gMDsKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0Qm91bmRzKG5zUmVjdCAmYUJvdW5kcykgY29uc3QgPSAwOwojIDIx NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldENoaWxkQ2xpcChuc2Nvb3JkIGFMZWZ0LCBuc2Nvb3JkIGFUb3AsIG5zY29vcmQgYVJpZ2h0 LCBuc2Nvb3JkIGFCb3R0b20pID0gMDsKIyAyMjQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGlsZENsaXAobnNjb29yZCAqYUxlZnQs IG5zY29vcmQgKmFUb3AsIG5zY29vcmQgKmFSaWdodCwgbnNjb29yZCAqYUJvdHRvbSkgY29uc3Qg PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmlzaWJpbGl0eShuc1ZpZXdWaXNpYmls aXR5IGFWaXNpYmlsaXR5KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZpc2liaWxp dHkobnNWaWV3VmlzaWJpbGl0eSAmYVZpc2liaWxpdHkpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRaUGFyZW50KG5zSVZpZXcgKmFaUGFyZW50KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRaUGFyZW50KG5zSVZpZXcgKiZhWlBhcmVudCkgY29uc3QgPSAwOwoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0WkluZGV4KFBSSW50MzIgYVpJbmRleCkgPSAwOwoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0WkluZGV4KFBSSW50MzIgJmFaSW5kZXgpIGNvbnN0ID0g MDsKIyAyNjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRBdXRvWkluZGV4KFBSQm9vbCBhQXV0b1pJbmRleCkgPSAwOwoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRBdXRvWkluZGV4KFBSQm9vbCAmYUF1dG9aSW5kZXgpIGNvbnN0ID0g MDsKIyAyODUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRGbG9hdGluZyhQUkJvb2wgYUZsb2F0aW5nVmlldykgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgR2V0RmxvYXRpbmcoUFJCb29sICZhRmxvYXRpbmdWaWV3KSBjb25zdCA9IDA7CgoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJlbnQobnNJVmlldyAqYVBhcmVudCkgPSAwOwoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJVmlldyAqJmFQYXJlbnQpIGNvbnN0 ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dFNpYmxpbmcobnNJVmlldyAqJmFO ZXh0U2libGluZykgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROZXh0U2li bGluZyhuc0lWaWV3KiBhTmV4dFNpYmxpbmcpID0gMDsKIyAzMjEgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNlcnRDaGlsZChuc0lWaWV3 ICphQ2hpbGQsIG5zSVZpZXcgKmFTaWJsaW5nKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBSZW1vdmVDaGlsZChuc0lWaWV3ICphQ2hpbGQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Q2hpbGRDb3VudChQUkludDMyICZhQ291bnQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDaGlsZChQUkludDMyIGluZGV4LCBuc0lWaWV3KiYgYUNoaWxkKSBj b25zdCA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T3BhY2l0eShmbG9hdCBhT3Bh Y2l0eSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9wYWNpdHkoZmxvYXQgJmFP cGFjaXR5KSBjb25zdCA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzVHJhbnNwYXJl bmN5KFBSQm9vbCAmYVRyYW5zcGFyZW50KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRDb250ZW50VHJhbnNwYXJlbmN5KFBSQm9vbCBhVHJhbnNwYXJlbnQpID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2xpZW50RGF0YSh2b2lkICphRGF0YSkgPSAwOwoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGllbnREYXRhKHZvaWQgKiZhRGF0YSkgY29uc3QgPSAw OwojIDM5NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEdldE9mZnNldEZyb21XaWRnZXQobnNjb29yZCAqYUR4LCBuc2Nvb3JkICphRHksIG5z SVdpZGdldCAqJmFXaWRnZXQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlydHlS ZWdpb24obnNJUmVnaW9uIComYVJlZ2lvbikgY29uc3QgPSAwOwojIDQxNSAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVdpZGdldChj b25zdCBuc0lJRCAmYVdpbmRvd0lJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc1dpZGdl dEluaXREYXRhICphV2lkZ2V0SW5pdERhdGEgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTmF0aXZlV2lkZ2V0IGFOYXRpdmUgPSAw LAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRW5hYmxlRHJhZ0Ryb3AgPSAxKSA9 IDA7CiMgNDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIgogIHZpcnR1YWwg bnNyZXN1bHQgU2V0V2lkZ2V0KG5zSVdpZGdldCAqYVdpZGdldCkgPSAwOwojIDQzOCAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZGdl dChuc0lXaWRnZXQgKiZhV2lkZ2V0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBIYXNXaWRnZXQoUFJCb29sICphSGFzV2lkZ2V0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBMaXN0KEZJTEUqIG91dCA9IHN0ZG91dCwgUFJJbnQzMiBhSW5kZW50ID0gMCkg Y29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Vmlld0ZsYWdzKFBSVWludDMy IGFGbGFncykgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJWaWV3RmxhZ3MoUFJV aW50MzIgYUZsYWdzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3RmxhZ3Mo UFJVaW50MzIgKmFGbGFncykgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 Q29tcG9zaXRvckZsYWdzKFBSVWludDMyIGFGbGFncykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q29tcG9zaXRvckZsYWdzKFBSVWludDMyICphRmxhZ3MpID0gMDsKCgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRFeHRlbnRzKG5zUmVjdCAqYUV4dGVudHMpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgSWdub3JlU2V0UG9zaXRpb24oUFJCb29sIGFTaG91bGRJZ25vcmUpID0gMDsKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBTeW5jaFdpZGdldFNpemVQb3NpdGlvbigpID0gMDsKIyA1MDYg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDbGlwcGVkUmVjdChuc1JlY3QmIGFDbGlwcGVkUmVjdCwgUFJCb29sJiBhSXNDbGlwcGVkLCBQ UkJvb2wmIGFFbXB0eSkgY29uc3QgPSAwOwoKCnByaXZhdGU6CiAgdmlydHVhbCBuc3JlZmNudCBB ZGRSZWYodm9pZCkgPSAwOwogIHZpcnR1YWwgbnNyZWZjbnQgUmVsZWFzZSh2b2lkKSA9IDA7Cn07 CiMgMzQgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSVZpZXdNYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5o IiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIiAyCiMg MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyOCAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lWaWV3TWFuYWdlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcu aCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIgMgoK Y2xhc3MgbnNJUmVnaW9uOwpjbGFzcyBuc0lFdmVudDsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNs YXNzIG5zSVZpZXc7CmNsYXNzIG5zSVNjcm9sbGFibGVWaWV3OwpjbGFzcyBuc0lXaWRnZXQ7CmNs YXNzIG5zSUNvbXBvc2l0ZUxpc3RlbmVyOwpzdHJ1Y3QgbnNSZWN0OwoKZW51bSBuc0NvbnRlbnRR dWFsaXR5IHsKICBuc0NvbnRlbnRRdWFsaXR5X2tHb29kID0gMCwKICBuc0NvbnRlbnRRdWFsaXR5 X2tGYWlyLAogIG5zQ29udGVudFF1YWxpdHlfa1Bvb3IsCiAgbnNDb250ZW50UXVhbGl0eV9rVW5r bm93bgp9OwoKCgoKCmNsYXNzIG5zSVZpZXdNYW5hZ2VyIDogcHVibGljIG5zSVN1cHBvcnRzCnsK cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlp ZCA9IHsgMHgzYTg4NjNkMCwgMHhhN2YzLCAweDExZDEsIHsgMHhhOCwgMHgyNCwgMHgwMCwgMHg0 MCwgMHg5NSwgMHg5YSwgMHgyOCwgMHhjOSB9IH07IHJldHVybiBpaWQ7IH0KIyA2NSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJ bml0KG5zSURldmljZUNvbnRleHQqIGFDb250ZXh0LCBuc2Nvb3JkIGFYID0gMCwgbnNjb29yZCBh WSA9IDApID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9vdFZpZXcobnNJVmlldyAq JmFWaWV3KSA9IDA7CiMgODMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdl ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Um9vdFZpZXcobnNJVmlldyAqYVZpZXcsIG5zSVdp ZGdldCogYVdpZGdldCA9IDApID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5k b3dEaW1lbnNpb25zKG5zY29vcmQgKndpZHRoLCBuc2Nvb3JkICpoZWlnaHQpID0gMDsKIyAxMDAg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0V2luZG93RGltZW5zaW9ucyhuc2Nvb3JkIHdpZHRoLCBuc2Nvb3JkIGhlaWdodCkg PSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc2V0U2Nyb2xsaW5nKHZvaWQpID0gMDsKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBDb21wb3NpdGUodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IFVwZGF0ZVZpZXcobnNJVmlldyAqYVZpZXcsIFBSVWludDMyIGFVcGRhdGVGbGFn cykgPSAwOwojIDEyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBVcGRhdGVWaWV3KG5zSVZpZXcgKmFWaWV3LCBjb25zdCBuc1Jl Y3QgJmFSZWN0LCBQUlVpbnQzMiBhVXBkYXRlRmxhZ3MpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IFVwZGF0ZUFsbFZpZXdzKFBSVWludDMyIGFVcGRhdGVGbGFncykgPSAwOwojIDE0NCAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBVcGRhdGVWaWV3QWZ0ZXJTY3JvbGwobnNJVmlldyAqYVZpZXcsIFBSSW50MzIgYURYLCBQ UkludDMyIGFEWSkgPSAwOwojIDE1MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdN YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEaXNwYXRjaEV2ZW50KG5zR1VJRXZlbnQgKmFF dmVudCwgbnNFdmVudFN0YXR1cyogYVN0YXR1cykgPSAwOwojIDE2MiAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHcmFiTW91c2VF dmVudHMobnNJVmlldyAqYVZpZXcsIFBSQm9vbCYgYVJlc3VsdCkgPSAwOwojIDE3MSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBH cmFiS2V5RXZlbnRzKG5zSVZpZXcgKmFWaWV3LCBQUkJvb2wmIGFSZXN1bHQpID0gMDsKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0TW91c2VFdmVudEdyYWJiZXIobnNJVmlldyAqJmFWaWV3KSA9 IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEtleUV2ZW50R3JhYmJlcihuc0lWaWV3ICom YVZpZXcpID0gMDsKIyAxOTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdl ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0Q2hpbGQobnNJVmlldyAqYVBhcmVudCwgbnNJ VmlldyAqYUNoaWxkLCBuc0lWaWV3ICphU2libGluZywKICAgICAgICAgICAgICAgICAgICAgICAg ICBQUkJvb2wgYUFib3ZlKSA9IDA7CiMgMjA3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ Vmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydENoaWxkKG5zSVZpZXcgKmFQ YXJlbnQsIG5zSVZpZXcgKmFDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy IGFaSW5kZXgpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNlcnRaUGxhY2Vob2xkZXIobnNJ VmlldyAqYVBhcmVudCwgbnNJVmlldyAqYVpDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJJbnQzMiBhWkluZGV4KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg UmVtb3ZlQ2hpbGQobnNJVmlldyAqYVBhcmVudCwgbnNJVmlldyAqYUNoaWxkKSA9IDA7CiMgMjI4 ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IE1vdmVWaWV3QnkobnNJVmlldyAqYVZpZXcsIG5zY29vcmQgYVgsIG5zY29vcmQgYVkp ID0gMDsKIyAyMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgog IHZpcnR1YWwgbnNyZXN1bHQgTW92ZVZpZXdUbyhuc0lWaWV3ICphVmlldywgbnNjb29yZCBhWCwg bnNjb29yZCBhWSkgPSAwOwojIDI1MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdN YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNpemVWaWV3KG5zSVZpZXcgKmFWaWV3LCBu c2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0LCBQUkJvb2wgYVJlcGFpbnRFeHBvc2VkQXJl YU9ubHkgPSAwKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Vmlld0NoaWxkQ2xp cChuc0lWaWV3ICphVmlldywgbnNSZWN0ICphUmVjdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IFNldFZpZXdWaXNpYmlsaXR5KG5zSVZpZXcgKmFWaWV3LCBuc1ZpZXdWaXNpYmlsaXR5 IGFWaXNpYmxlKSA9IDA7CiMgMjc2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01h bmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpZXdaSW5kZXgobnNJVmlldyAqYVZpZXcs IFBSSW50MzIgYVppbmRleCkgPSAwOwojIDI4NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaWV3QXV0b1pJbmRleChuc0lW aWV3ICphVmlldywgUFJCb29sIGFBdXRvWkluZGV4KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgTW92ZVZpZXdBYm92ZShuc0lWaWV3ICphVmlldywgbnNJVmlldyAqYU90aGVyKSA9IDA7 CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVZpZXdCZWxvdyhuc0lWaWV3ICphVmlldywg bnNJVmlldyAqYU90aGVyKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaWV3U2hv d24obnNJVmlldyAqYVZpZXcsIFBSQm9vbCAmYVJlc3VsdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFZpZXdDbGlwQWJzb2x1dGUobnNJVmlldyAqYVZpZXcsIG5zUmVjdCAqYVJl Y3QsIFBSQm9vbCAmYVJlc3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Vmll d0NvbnRlbnRUcmFuc3BhcmVuY3kobnNJVmlldyAqYVZpZXcsIFBSQm9vbCBhVHJhbnNwYXJlbnQp ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaWV3T3BhY2l0eShuc0lWaWV3ICph VmlldywgZmxvYXQgYU9wYWNpdHkpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZp ZXdPYnNlcnZlcihuc0lWaWV3T2JzZXJ2ZXIgKmFPYnNlcnZlcikgPSAwOwoKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0Vmlld09ic2VydmVyKG5zSVZpZXdPYnNlcnZlciAqJmFPYnNlcnZlcikg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZXZpY2VDb250ZXh0KG5zSURldmljZUNv bnRleHQgKiZhQ29udGV4dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTaG93UXVhbGl0 eShQUkJvb2wgYVNob3cpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2hvd1F1YWxp dHkoUFJCb29sICZhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFF1YWxp dHkobnNDb250ZW50UXVhbGl0eSBhUXVhbGl0eSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBEaXNhYmxlUmVmcmVzaCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5h YmxlUmVmcmVzaChQUlVpbnQzMiBhVXBkYXRlRmxhZ3MpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBCZWdpblVwZGF0ZVZpZXdCYXRjaCh2b2lkKSA9IDA7CiMgNDAzICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZFVw ZGF0ZVZpZXdCYXRjaChQUlVpbnQzMiBhVXBkYXRlRmxhZ3MpID0gMDsKCgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRSb290U2Nyb2xsYWJsZVZpZXcobnNJU2Nyb2xsYWJsZVZpZXcgKmFTY3Jv bGxhYmxlKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9vdFNjcm9sbGFibGVW aWV3KG5zSVNjcm9sbGFibGVWaWV3ICoqYVNjcm9sbGFibGUpID0gMDsKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBEaXNwbGF5KG5zSVZpZXcgKmFWaWV3LCBuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZKSA9 IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRDb21wb3NpdGVMaXN0ZW5lcihuc0lDb21w b3NpdGVMaXN0ZW5lciAqYUxpc3RlbmVyKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZW1vdmVDb21wb3NpdGVMaXN0ZW5lcihuc0lDb21wb3NpdGVMaXN0ZW5lciAqYUxpc3RlbmVyKSA9 IDA7CiMgNDQ3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFdpZGdldEZvclZpZXcobnNJVmlldyAqYVZpZXcsIG5zSVdpZGdl dCAqKmFXaWRnZXQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaWRnZXQobnNJ V2lkZ2V0ICoqYVdpZGdldCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZvcmNlVXBk YXRlKCkgPSAwOwojIDQ3MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2Vy LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPZmZzZXQobnNjb29yZCAqYVgsIG5zY29vcmQgKmFZ KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNDYWNoaW5nV2lkZ2V0Q2hhbmdlcyhQUkJv b2wqIGFDYWNoaW5nKT0wOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FjaGVXaWRnZXRDaGFu Z2VzKFBSQm9vbCBhQ2FjaGUpPTA7CiMgNDk2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ Vmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFsbG93RG91YmxlQnVmZmVyaW5nKFBS Qm9vbCBhRG91YmxlQnVmZmVyKT0wOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGFpbnRp bmcoUFJCb29sJiBhSXNQYWludGluZyk9MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNo UGVuZGluZ0ludmFsaWRhdGVzKCk9MDsKIyA1MjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lWaWV3TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdEJhY2tncm91bmRD b2xvcihuc2NvbG9yIGFDb2xvcik9MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1 bHRCYWNrZ3JvdW5kQ29sb3IobnNjb2xvciogYUNvbG9yKT0wOwp9OwojIDM1ICJuc0Zvcm1Db250 cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgi IDEKIyAzNiAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNXaWRnZXRzQ0lELmgiIDEKIyAzNyAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAi IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWaWV3c0NJRC5oIiAxCiMgMjYgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ZpZXdzQ0lELmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zVmlld3NDSUQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGYWN0b3J5 LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZhY3RvcnkuaCIKY2xhc3Mg bnNJRmFjdG9yeSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwMDAwMDAwMSwg MHgwMDAwLCAweDAwMDAsIHsgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHg0NiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUluc3Rh bmNlKG5zSVN1cHBvcnRzICphT3V0ZXIsIGNvbnN0IG5zSUlEICYgaWlkLCB2b2lkICogKnJlc3Vs dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMb2NrRmFjdG9yeShQUkJvb2wgbG9jaykgPSAw OwoKfTsKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVmlld3NDSUQuaCIgMgojIDEg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDEKIyAxOCAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKIyAxICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRvci5oIiAxCiMgMzUgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1lcmF0b3Ig OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZDE4OTkyNDAsIDB4ZjlkMiwgMHgx MWQyLCB7IDB4YmQsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQgfX07 IHJldHVybiBpaWQ7fQojIDUzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRv ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzTW9yZUVsZW1lbnRzKFBSQm9vbCAqX3JldHZhbCkg PSAwOwojIDcwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRvci5oIgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0TmV4dChuc0lTdXBwb3J0cyAqKl9yZXR2YWwpID0gMDsKCn07CiMg MTQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRvci5oIgpjbGFzcyBuc0lF bnVtZXJhdG9yIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGFkMzg1Mjg2LCAw eGNiYzQsIDB4MTFkMiwgeyAweDhjLCAweGNhLCAweDAwLCAweDYwLCAweGIwLCAweGZjLCAweDE0 LCAweGEzIH19OyByZXR1cm4gaWlkO30KCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaXJzdCh2b2lk KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmV4dCh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEN1cnJlbnRJdGVtKG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJc0RvbmUodm9pZCkgPSAwOwoKfTsKIyAyNTUgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSUJpZGlyZWN0aW9uYWxF bnVtZXJhdG9yIDogcHVibGljIG5zSUVudW1lcmF0b3IgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NzVmMTU4YTAs IDB4Y2FkZCwgMHgxMWQyLCB7IDB4OGMsIDB4Y2EsIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4 MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IExhc3Qodm9p ZCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByZXYodm9pZCkgPSAwOwoKfTsKIyAzMzEg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmV4dGVybiAiQyIgbnNy ZXN1bHQKTlNfTmV3RW1wdHlFbnVtZXJhdG9yKG5zSVNpbXBsZUVudW1lcmF0b3IqKiBhUmVzdWx0 KTsKCgoKCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3Q29uam9pbmluZ0VudW1lcmF0b3IobnNJ RW51bWVyYXRvciogZmlyc3QsIG5zSUVudW1lcmF0b3IqIHNlY29uZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IqICphSW5zdGFuY2VQdHJSZXN1 bHQpOwoKCgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX05ld1VuaW9uRW51bWVyYXRvcihuc0lFbnVt ZXJhdG9yKiBmaXJzdCwgbnNJRW51bWVyYXRvciogc2Vjb25kLAogICAgICAgICAgICAgICAgICAg ICAgbnNJRW51bWVyYXRvciogKmFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCmV4dGVybiAiQyIgbnNy ZXN1bHQKTlNfTmV3SW50ZXJzZWN0aW9uRW51bWVyYXRvcihuc0lFbnVtZXJhdG9yKiBmaXJzdCwg bnNJRW51bWVyYXRvciogc2Vjb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUVu dW1lcmF0b3IqICphSW5zdGFuY2VQdHJSZXN1bHQpOwojIDE5ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIiAyCgoKCgoKCmNsYXNzIG5zSUZpbGU7CiMgMzUg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCmNsYXNzIG5z SUNvbXBvbmVudE1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ODQ1 OGE3NDAsIDB4ZDVkYywgMHgxMWQyLCB7IDB4OTIsIDB4ZmIsIDB4MDAsIDB4ZTAsIDB4OTgsIDB4 MDUsIDB4NTcsIDB4MGYgfX07IHJldHVybiBpaWQ7fQojIDQ5ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZEZhY3Rv cnkoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIG5zSUZhY3RvcnkgKipfcmV0dmFsKSA9IDA7CiMgNjAg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRDbGFzc09iamVjdChjb25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgbnNJ SUQgJiBhSUlELCB2b2lkICogKl9yZXR2YWwpID0gMDsKIyA3MyAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRyYWN0 SURUb0NsYXNzSUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zQ0lEICphQ2xhc3MpID0gMDsK IyA4NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IENMU0lEVG9Db250cmFjdElEKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBj aGFyICoqYUNsYXNzTmFtZSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA5OCAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENy ZWF0ZUluc3RhbmNlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lTdXBwb3J0cyAqYURlbGVnYXRl LCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDExMiAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IENyZWF0ZUluc3RhbmNlQnlDb250cmFjdElEKGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBu c0lTdXBwb3J0cyAqYURlbGVnYXRlLCBjb25zdCBuc0lJRCAmIElJRCwgdm9pZCAqICpfcmV0dmFs KSA9IDA7CiMgMTI0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdl ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0cnlMb2NhdGlvbkZvclNwZWMobnNJRmlsZSAq YVNwZWMsIGNoYXIgKipfcmV0dmFsKSA9IDA7CiMgMTMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3BlY0ZvclJlZ2lz dHJ5TG9jYXRpb24oY29uc3QgY2hhciAqYUxvY2F0aW9uLCBuc0lGaWxlICoqX3JldHZhbCkgPSAw OwojIDE0OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmIGFDbGFzcywg Y29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zSUZhY3Rv cnkgKmFGYWN0b3J5LCBQUkJvb2wgYVJlcGxhY2UpID0gMDsKIyAxNjkgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdp c3RlckNvbXBvbmVudChjb25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFt ZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIGNvbnN0IGNoYXIgKmFMb2NhdGlvbiwgUFJCb29s IGFSZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QpID0gMDsKIyAxOTEgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3Rl ckNvbXBvbmVudFdpdGhUeXBlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphQ2xh c3NOYW1lLCBjb25zdCBjaGFyICphQ29udHJhY3RJRCwgbnNJRmlsZSAqYVNwZWMsIGNvbnN0IGNo YXIgKmFMb2NhdGlvbiwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QsIGNvbnN0IGNo YXIgKmFUeXBlKSA9IDA7CiMgMjA5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9u ZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRTcGVjKGNv bnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphQ2xhc3NOYW1lLCBjb25zdCBjaGFyICph Q29udHJhY3RJRCwgbnNJRmlsZSAqYUxpYnJhcnksIFBSQm9vbCBhUmVwbGFjZSwgUFJCb29sIGFQ ZXJzaXN0KSA9IDA7CiMgMjI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50 TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRMaWIoY29uc3Qg bnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFDb250 cmFjdElELCBjb25zdCBjaGFyICphRGxsTmFtZSwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBl cnNpc3QpID0gMDsKIyAyNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJ RCAmIGFDbGFzcywgbnNJRmFjdG9yeSAqYUZhY3RvcnkpID0gMDsKIyAyNTQgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBV bnJlZ2lzdGVyQ29tcG9uZW50KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphTG9j YXRpb24pID0gMDsKIyAyNjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25z dCBuc0NJRCAmIGFDbGFzcywgbnNJRmlsZSAqYUxpYnJhcnlTcGVjKSA9IDA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgRnJlZUxpYnJhcmllcyh2b2lkKSA9IDA7CgoKCgogIGVudW0geyBOU19T dGFydHVwID0gMCB9OwoKICBlbnVtIHsgTlNfU2NyaXB0ID0gMSB9OwoKICBlbnVtIHsgTlNfVGlt ZXIgPSAyIH07CgogIGVudW0geyBOU19TaHV0ZG93biA9IDMgfTsKIyAyOTUgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBB dXRvUmVnaXN0ZXIoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICpkaXJlY3RvcnkpID0gMDsKIyAzMDgg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBBdXRvUmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICph RmlsZUxvY2F0aW9uKSA9IDA7CiMgMzE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29t cG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQXV0b1VucmVnaXN0ZXJDb21wb25l bnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICphRmlsZUxvY2F0aW9uKSA9IDA7CiMgMzI5ICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgSXNSZWdpc3RlcmVkKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBQUkJvb2wgKl9yZXR2YWwp ID0gMDsKIyAzMzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2Vy LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJhdGVDTFNJRHMobnNJRW51bWVyYXRvciAqKl9y ZXR2YWwpID0gMDsKIyAzNDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJhdGVDb250cmFjdElEcyhuc0lFbnVt ZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKfTsKIyA2MDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z Q29tcG9uZW50TWFuYWdlclV0aWxzLmgiIDEKIyAyMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zQ09NUHRyLmgiIDEKIyAyNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tcG9uZW50 TWFuYWdlclV0aWxzLmgiIDIKIyAzNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tcG9u ZW50TWFuYWdlclV0aWxzLmgiCmV4dGVybiAiQyIgbnNyZXN1bHQgTlNHZXRGYWN0b3J5KG5zSVN1 cHBvcnRzKiBhU2Vydk1nciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICphQ2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGYWN0b3J5ICoqYUZhY3RvcnkpOwpl eHRlcm4gIkMiIFBSQm9vbCBOU0NhblVubG9hZChuc0lTdXBwb3J0cyogYVNlcnZNZ3IpOwpleHRl cm4gIkMiIG5zcmVzdWx0IE5TUmVnaXN0ZXJTZWxmKG5zSVN1cHBvcnRzKiBhU2Vydk1nciwgY29u c3QgY2hhciAqZnVsbHBhdGgpOwpleHRlcm4gIkMiIG5zcmVzdWx0IE5TVW5yZWdpc3RlclNlbGYo bnNJU3VwcG9ydHMqIGFTZXJ2TWdyLCBjb25zdCBjaGFyICpmdWxscGF0aCk7Cgp0eXBlZGVmIG5z cmVzdWx0ICgqbnNGYWN0b3J5UHJvYykobnNJU3VwcG9ydHMqIGFTZXJ2TWdyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZhY3RvcnkgKiphRmFjdG9yeSk7CnR5cGVkZWYg UFJCb29sICgqbnNDYW5VbmxvYWRQcm9jKShuc0lTdXBwb3J0cyogYVNlcnZNZ3IpOwp0eXBlZGVm IG5zcmVzdWx0ICgqbnNSZWdpc3RlclByb2MpKG5zSVN1cHBvcnRzKiBhU2Vydk1nciwgY29uc3Qg Y2hhciAqcGF0aCk7CnR5cGVkZWYgbnNyZXN1bHQgKCpuc1VucmVnaXN0ZXJQcm9jKShuc0lTdXBw b3J0cyogYVNlcnZNZ3IsIGNvbnN0IGNoYXIgKnBhdGgpOwojIDYzICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIKZXh0ZXJuIG5zcmVzdWx0Ck5TX0dl dEdsb2JhbENvbXBvbmVudE1hbmFnZXIobnNJQ29tcG9uZW50TWFuYWdlciogKnJlc3VsdCk7CgoK CgoKY2xhc3MgbnNDb21wb25lbnRNYW5hZ2VyIHsKcHVibGljOgogIHN0YXRpYyBuc3Jlc3VsdCBJ bml0aWFsaXplKHZvaWQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEZpbmRGYWN0b3J5KGNvbnN0IG5z Q0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZhY3RvcnkgKiph RmFjdG9yeSk7CgoKICBzdGF0aWMgbnNyZXN1bHQgR2V0Q2xhc3NPYmplY3QoY29uc3QgbnNDSUQg JmFDbGFzcywgY29uc3QgbnNJSUQgJmFJSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKiphUmVzdWx0KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBDb250cmFjdElEVG9DbGFz c0lEKGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zQ0lEICphQ2xhc3MpOwoKCgogIHN0YXRpYyBuc3Jlc3VsdCBDTFNJRFRvQ29udHJhY3RJ RChuc0NJRCAqYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqICph Q2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqICphQ29udHJh Y3RJRCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgQ3JlYXRlSW5zdGFuY2UoY29uc3QgbnNDSUQgJmFD bGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKmFEZWxl Z2F0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNJSUQgJmFJSUQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiphUmVzdWx0KTsKCgogIHN0 YXRpYyBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZShjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNJSUQgJmFJSUQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiphUmVzdWx0KTsKCgogIHN0YXRpYyBuc3Jl c3VsdCBSZWdpc3RlckZhY3RvcnkoY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSUZhY3RvcnkgKmFGYWN0b3J5LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXBsYWNlKTsKIyAxMTggIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0NvbXBvbmVudE1hbmFnZXJVdGlscy5oIgogIHN0YXRpYyBuc3Jlc3Vs dCBSZWdpc3RlckNvbXBvbmVudChjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqYUxpYnJhcnlQZXJzaXN0ZW50RGVzY3JpcHRvciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUmVwbGFjZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUGVyc2lzdCk7CgoKCiAgc3RhdGljIG5zcmVzdWx0 IFJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmlsZSAqYUxpYnJhcnksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXBsYWNlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUGVyc2lzdCk7CgoKCgogIHN0YXRpYyBuc3Jlc3Vs dCBSZWdpc3RlckNvbXBvbmVudExpYihjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ2xhc3NOYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYWRsbE5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUmVwbGFj ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0 KTsKCgoKICBzdGF0aWMgbnNyZXN1bHQgVW5yZWdpc3RlckZhY3RvcnkoY29uc3QgbnNDSUQgJmFD bGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqYUZh Y3RvcnkpOwoKCiAgc3RhdGljIG5zcmVzdWx0IFVucmVnaXN0ZXJDb21wb25lbnQoY29uc3QgbnND SUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICphTGlicmFyeSk7CgoKICBzdGF0aWMgbnNyZXN1bHQgVW5yZWdpc3RlckNvbXBvbmVudFNw ZWMoY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJRmlsZSAqYUxpYnJhcnlTcGVjKTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBGcmVl TGlicmFyaWVzKHZvaWQpOwoKCgoKCiAgc3RhdGljIG5zcmVzdWx0IEF1dG9SZWdpc3RlcihQUklu dDMyIHdoZW4sIG5zSUZpbGUqIGRpcmVjdG9yeSk7CiAgc3RhdGljIG5zcmVzdWx0IEF1dG9SZWdp c3RlckNvbXBvbmVudChQUkludDMyIHdoZW4sIG5zSUZpbGUgKmNvbXBvbmVudCk7CiAgc3RhdGlj IG5zcmVzdWx0IEF1dG9VbnJlZ2lzdGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAq Y29tcG9uZW50KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBJc1JlZ2lzdGVyZWQoY29uc3QgbnNDSUQg JmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqYVJlZ2lzdGVy ZWQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEVudW1lcmF0ZUNMU0lEcyhuc0lFbnVtZXJhdG9yKiog YUVtdW1lcmF0b3IpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEVudW1lcmF0ZUNvbnRyYWN0SURzKG5z SUVudW1lcmF0b3IqKiBhRW11bWVyYXRvcik7Cgp9OwoKCmNsYXNzIG5zQ3JlYXRlSW5zdGFuY2VC eUNJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKICAgICAgICB7CiAgICAgICAgICAgICAgICBw dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgIG5zQ3JlYXRlSW5zdGFuY2VCeUNJRCggY29u c3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIg KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtQ0lEKGFDSUQpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0ZXIoYU91 dGVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUVy cm9yUHRyKGFFcnJvclB0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHZp cnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsK CiAgICAgICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu c0NJRCYgbUNJRDsKICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIG1PdXRlcjsK ICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICAgICAgICB9OwoK Y2xhc3MgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxw ZXIKICAgICAgICB7CiAgICAgICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg ICAgIG5zQ3JlYXRlSW5zdGFuY2VCeUNvbnRyYWN0SUQoIGNvbnN0IGNoYXIqIGFDb250cmFjdElE LCBuc0lTdXBwb3J0cyogYU91dGVyLCBuc3Jlc3VsdCogYUVycm9yUHRyICkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0ZXIoYU91 dGVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUVy cm9yUHRyKGFFcnJvclB0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHZp cnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsK CiAgICAgICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBtQ29udHJhY3RJRDsKICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIG1P dXRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICAgICAg ICB9OwoKY2xhc3MgbnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeSA6IHB1YmxpYyBuc0NPTVB0 cl9oZWxwZXIKewpwdWJsaWM6CiAgICBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KGNvbnN0 IGNoYXIgKmFDYXRlZ29yeSwgY29uc3QgY2hhciAqYUVudHJ5LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYU91dGVyLCBuc3Jlc3VsdCAqYUVycm9yUHRyKQog ICAgICAgIDogbUNhdGVnb3J5KGFDYXRlZ29yeSksCiAgICAgICAgICBtRW50cnkoYUVudHJ5KSwK ICAgICAgICAgIG1FcnJvclB0cihhRXJyb3JQdHIpCiAgICB7CgogICAgfQogICAgdmlydHVhbCBu c3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwogICAgdmly dHVhbCB+bnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeSgpIHt9OwoKcHJpdmF0ZToKICAgIGNv bnN0IGNoYXIgKm1DYXRlZ29yeTsKICAgIGNvbnN0IGNoYXIgKm1FbnRyeTsKICAgIG5zSVN1cHBv cnRzICptT3V0ZXI7CiAgICBuc3Jlc3VsdCAqbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5z Q3JlYXRlSW5zdGFuY2VCeUNJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgbnNDSUQmIGFDSUQs IG5zcmVzdWx0KiBlcnJvciA9IDAgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBu c0NyZWF0ZUluc3RhbmNlQnlDSUQoYUNJRCwgMCwgZXJyb3IpOwogICAgICAgIH0KCmlubGluZQpj b25zdCBuc0NyZWF0ZUluc3RhbmNlQnlDSUQKZG9fQ3JlYXRlSW5zdGFuY2UoIGNvbnN0IG5zQ0lE JiBhQ0lELCBuc0lTdXBwb3J0cyogYU91dGVyLCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICAgICAg ICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKGFDSUQsIGFP dXRlciwgZXJyb3IpOwogICAgICAgIH0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNlQnlD b250cmFjdElECmRvX0NyZWF0ZUluc3RhbmNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNy ZXN1bHQqIGVycm9yID0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG5zQ3Jl YXRlSW5zdGFuY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIDAsIGVycm9yKTsKICAgICAgICB9 CgppbmxpbmUKY29uc3QgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRApkb19DcmVhdGVJbnN0 YW5jZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVz dWx0KiBlcnJvciA9IDAgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBuc0NyZWF0 ZUluc3RhbmNlQnlDb250cmFjdElEKGFDb250cmFjdElELCBhT3V0ZXIsIGVycm9yKTsKICAgICAg ICB9CgppbmxpbmUKY29uc3QgbnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeQpkb19DcmVhdGVJ bnN0YW5jZUZyb21DYXRlZ29yeSggY29uc3QgY2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICph RW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3Jlc3VsdCAqYUVycm9yUHRy ID0gMCkKewogICAgcmV0dXJuIG5zQ3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkoYUNhdGVnb3J5 LCBhRW50cnksIDAsIGFFcnJvclB0cik7Cn0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNl RnJvbUNhdGVnb3J5CmRvX0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KCBjb25zdCBjaGFyICph Q2F0ZWdvcnksIGNvbnN0IGNoYXIgKmFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVN1cHBvcnRzICphT3V0ZXIsIG5zcmVzdWx0ICphRXJyb3JQdHIgPSAwKQp7CiAgICBy ZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeShhQ2F0ZWdvcnksIGFFbnRyeSwgYU91 dGVyLCBhRXJyb3JQdHIpOwp9CgoKZXh0ZXJuIGNvbnN0IGNoYXIgeHBjb21LZXlOYW1lW107CmV4 dGVybiBjb25zdCBjaGFyIHhwY29tQ29tcG9uZW50c0tleU5hbWVbXTsKZXh0ZXJuIGNvbnN0IGNo YXIgbGFzdE1vZFZhbHVlTmFtZVtdOwpleHRlcm4gY29uc3QgY2hhciBmaWxlU2l6ZVZhbHVlTmFt ZVtdOwpleHRlcm4gY29uc3QgY2hhciBuYXRpdmVDb21wb25lbnRUeXBlW107CiMgNjAzICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIiAyCiMgMjkgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ZpZXdzQ0lELmgiIDIKIyAzOCAibnNGb3JtQ29udHJvbEhl bHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFu YWdlci5oIiAxCiMgMzkgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIgMQojIDQwICJuc0Zvcm1Db250cm9sSGVscGVy LmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5oIiAx CiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5oIgojIDEgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zQ29vcmQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9u dE1ldHJpY3MuaCIgMgoKc3RydWN0IG5zRm9udDsKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSURl dmljZUNvbnRleHQ7CmNsYXNzIG5zSUF0b207CiMgNDQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lGb250TWV0cmljcy5oIgp0eXBlZGVmIHZvaWQqIG5zRm9udEhhbmRsZTsKIyA2MyAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvbnRNZXRyaWNzLmgiCmNsYXNzIG5zSUZvbnRNZXRy aWNzIDogcHVibGljIG5zSVN1cHBvcnRzCnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4Yzc0Y2I3NzAsIDB4YTMzZSwg MHgxMWQxLCB7IDB4YTgsIDB4MjQsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OWEsIDB4MjgsIDB4Yzkg fSB9OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KGNvbnN0IG5z Rm9udCYgYUZvbnQsIG5zSUF0b20qIGFMYW5nR3JvdXAsCiAgICAgICAgICAgICAgICAgICBuc0lE ZXZpY2VDb250ZXh0ICphQ29udGV4dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZXN0 cm95KCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFhIZWlnaHQobnNjb29yZCYgYVJl c3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3VwZXJzY3JpcHRPZmZzZXQo bnNjb29yZCYgYVJlc3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3Vic2Ny aXB0T2Zmc2V0KG5zY29vcmQmIGFSZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFN0cmlrZW91dChuc2Nvb3JkJiBhT2Zmc2V0LCBuc2Nvb3JkJiBhU2l6ZSkgPSAwOwoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VW5kZXJsaW5lKG5zY29vcmQmIGFPZmZzZXQsIG5zY29v cmQmIGFTaXplKSA9IDA7CiMgMTIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9udE1l dHJpY3MuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhlaWdodChuc2Nvb3JkICZhSGVpZ2h0KSA9 IDA7CiMgMTMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9udE1ldHJpY3MuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldE5vcm1hbExpbmVIZWlnaHQobnNjb29yZCAmYUhlaWdodCkgPSAw OwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVhZGluZyhuc2Nvb3JkICZhTGVhZGluZykg PSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVtSGVpZ2h0KG5zY29vcmQgJmFIZWln aHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbUFzY2VudChuc2Nvb3JkICZhQXNj ZW50KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW1EZXNjZW50KG5zY29vcmQgJmFE ZXNjZW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1heEhlaWdodChuc2Nvb3Jk ICZhSGVpZ2h0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWF4QXNjZW50KG5z Y29vcmQgJmFBc2NlbnQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWF4RGVzY2Vu dChuc2Nvb3JkICZhRGVzY2VudCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1heEFk dmFuY2UobnNjb29yZCAmYUFkdmFuY2UpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRG b250KGNvbnN0IG5zRm9udCAqJmFGb250KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TGFuZ0dyb3VwKG5zSUF0b20qKiBhTGFuZ0dyb3VwKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Rm9udEhhbmRsZShuc0ZvbnRIYW5kbGUgJmFIYW5kbGUpID0gMDsKCgoKCgoKCn07CiMg NDEgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSUZvcm1Db250cm9sLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SUZvcm1Db250cm9sLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRz LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvcm1Db250cm9sLmgiIDIK Y2xhc3MgbnNJRE9NSFRNTEZvcm1FbGVtZW50OwojIDYyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJRm9ybUNvbnRyb2wuaCIKY2xhc3MgbnNJRm9ybUNvbnRyb2wgOiBwdWJsaWMgbnNJU3Vw cG9ydHMgewpwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMg bnNJSUQgaWlkID0geyAweDI4MmZmNDQwLCAweGNkN2UsIDB4MTFkMSwgezB4ODksIDB4YWQsIDB4 MDAsIDB4NjAsIDB4MDgsIDB4OTEsIDB4MWIsIDB4ODF9IH07IHJldHVybiBpaWQ7IH0KCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvcm0obnNJRE9NSFRNTEZvcm1FbGVtZW50KiogYUZvcm0p ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvcm0obnNJRE9NSFRNTEZvcm1FbGVt ZW50KiBhRm9ybSwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZW1vdmVGcm9tRm9ybSA9 IDEpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUoUFJJbnQzMiogYVR5cGUp ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KCkgPSAwOwoKfTsKIyA0MiAibnNGb3JtQ29u dHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNl Q29udGV4dC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250 ZXh0LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAy NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIgMgojIDEgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc1JlY3QuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNl Q29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAx CiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiIDIKCmNs YXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNzIG5zSVZpZXc7CmNsYXNzIG5zSUZvbnRNZXRy aWNzOwpjbGFzcyBuc0lXaWRnZXQ7CmNsYXNzIG5zSURldmljZUNvbnRleHRTcGVjOwpjbGFzcyBu c0lBdG9tOwoKc3RydWN0IG5zRm9udDsKc3RydWN0IG5zQ29sb3I7CgoKdHlwZWRlZiB2b2lkICog bnNOYXRpdmVEZXZpY2VDb250ZXh0OwoKCgoKCgp0eXBlZGVmIHZvaWQgKiBuc1BhbGV0dGU7CgoK c3RydWN0IG5zUGFsZXR0ZUluZm8gewogIFBSUGFja2VkQm9vbCBpc1BhbGV0dGVEZXZpY2U7CiAg UFJVaW50MTYgc2l6ZVBhbGV0dGU7CiAgUFJVaW50MTYgbnVtUmVzZXJ2ZWQ7CiAgbnNQYWxldHRl IHBhbGV0dGU7Cn07CgoKCgoKICB0eXBlZGVmIGVudW0gewoKICAgIGVTeXN0ZW1BdHRyX0NvbG9y X1dpbmRvd0JhY2tncm91bmQsCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9XaW5kb3dGb3JlZ3JvdW5k LAogICAgZVN5c3RlbUF0dHJfQ29sb3JfV2lkZ2V0QmFja2dyb3VuZCwKICAgIGVTeXN0ZW1BdHRy X0NvbG9yX1dpZGdldEZvcmVncm91bmQsCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9XaWRnZXRTZWxl Y3RCYWNrZ3JvdW5kLAogICAgZVN5c3RlbUF0dHJfQ29sb3JfV2lkZ2V0U2VsZWN0Rm9yZWdyb3Vu ZCwKICAgIGVTeXN0ZW1BdHRyX0NvbG9yX1dpZGdldDNESGlnaGxpZ2h0LAogICAgZVN5c3RlbUF0 dHJfQ29sb3JfV2lkZ2V0M0RTaGFkb3csCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9UZXh0QmFja2dy b3VuZCwKICAgIGVTeXN0ZW1BdHRyX0NvbG9yX1RleHRGb3JlZ3JvdW5kLAogICAgZVN5c3RlbUF0 dHJfQ29sb3JfVGV4dFNlbGVjdEJhY2tncm91bmQsCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9UZXh0 U2VsZWN0Rm9yZWdyb3VuZCwKCiAgICBlU3lzdGVtQXR0cl9TaXplX1dpbmRvd1RpdGxlSGVpZ2h0 LAogICAgZVN5c3RlbUF0dHJfU2l6ZV9XaW5kb3dCb3JkZXJXaWR0aCwKICAgIGVTeXN0ZW1BdHRy X1NpemVfV2luZG93Qm9yZGVySGVpZ2h0LAogICAgZVN5c3RlbUF0dHJfU2l6ZV9XaWRnZXQzREJv cmRlciwKICAgIGVTeXN0ZW1BdHRyX1NpemVfU2Nyb2xsYmFySGVpZ2h0LAogICAgZVN5c3RlbUF0 dHJfU2l6ZV9TY3JvbGxiYXJXaWR0aCwKCiAgICBlU3lzdGVtQXR0cl9Gb250X0NhcHRpb24sCiAg ICBlU3lzdGVtQXR0cl9Gb250X0ljb24sCiAgICBlU3lzdGVtQXR0cl9Gb250X01lbnUsCiAgICBl U3lzdGVtQXR0cl9Gb250X01lc3NhZ2VCb3gsCiAgICBlU3lzdGVtQXR0cl9Gb250X1NtYWxsQ2Fw dGlvbiwKICAgIGVTeXN0ZW1BdHRyX0ZvbnRfU3RhdHVzQmFyLAoKICAgICAgICAgICAgICAgIGVT eXN0ZW1BdHRyX0ZvbnRfV2luZG93LAogICAgICAgICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9E b2N1bWVudCwKICAgICAgICAgICAgICAgIGVTeXN0ZW1BdHRyX0ZvbnRfV29ya3NwYWNlLAogICAg ICAgICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9EZXNrdG9wLAogICAgICAgICAgICAgICAgZVN5 c3RlbUF0dHJfRm9udF9JbmZvLAogICAgICAgICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9EaWFs b2csCiAgICAgICAgICAgICAgICBlU3lzdGVtQXR0cl9Gb250X0J1dHRvbiwKICAgICAgICAgICAg ICAgIGVTeXN0ZW1BdHRyX0ZvbnRfUHVsbERvd25NZW51LAogICAgICAgICAgICAgICAgZVN5c3Rl bUF0dHJfRm9udF9MaXN0LAogICAgICAgICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9GaWVsZCwK CiAgICBlU3lzdGVtQXR0cl9Gb250X1Rvb2x0aXBzLAogICAgZVN5c3RlbUF0dHJfRm9udF9XaWRn ZXQKICB9IG5zU3lzdGVtQXR0cklEOwoKICB0eXBlZGVmIHVuaW9uIHsKICAgIFBSVWludDMyIG1T aXplOwogICAgbnNjb2xvciAqIG1Db2xvcjsKICAgIG5zRm9udCAqIG1Gb250OwogIH0gU3lzdGVt QXR0clN0cnVjdDsKIyAxMjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250 ZXh0LmgiCnN0cnVjdCBfTklfQ29sb3JTcGFjZTsKdHlwZWRlZiBfTklfQ29sb3JTcGFjZSBOSV9D b2xvclNwYWNlOwp0eXBlZGVmIE5JX0NvbG9yU3BhY2UgSUxfQ29sb3JTcGFjZTsKCmNsYXNzIG5z SURldmljZUNvbnRleHQgOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg1OTMxYzU4 MCwgMHhiOTE3LCAweDExZDEsIHsgMHhhOCwgMHgyNCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5YSwg MHgyOCwgMHhjOSB9IH07IHJldHVybiBpaWQ7fQoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5p dChuc05hdGl2ZVdpZGdldCBhV2lkZ2V0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg Q3JlYXRlUmVuZGVyaW5nQ29udGV4dChuc0lWaWV3ICphVmlldywgbnNJUmVuZGVyaW5nQ29udGV4 dCAqJmFDb250ZXh0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlUmVuZGVy aW5nQ29udGV4dChuc0lXaWRnZXQgKmFXaWRnZXQsIG5zSVJlbmRlcmluZ0NvbnRleHQgKiZhQ29u dGV4dCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVJlbmRlcmluZ0NvbnRl eHQobnNJUmVuZGVyaW5nQ29udGV4dCAqJmFDb250ZXh0KSA9IDA7CiMgMTcxICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5p dFJlbmRlcmluZ0NvbnRleHQobnNJUmVuZGVyaW5nQ29udGV4dCAqYUNvbnRleHQsIG5zSVdpZGdl dCAqYVdpbmRvdykgPSAwOwojIDE4MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmlj ZUNvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFN1cHBvcnRzTmF0aXZlV2lkZ2V0cyhQUkJv b2wgJmFTdXBwb3J0c1dpZGdldHMpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE ZXZVbml0c1RvVHdpcHMoZmxvYXQgJmFEZXZVbml0c1RvVHdpcHMpIGNvbnN0ID0gMDsKCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR3aXBzVG9EZXZVbml0cyhmbG9hdCAmYVR3aXBzVG9EZXZV bml0cykgY29uc3QgPSAwOwojIDIwOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmlj ZUNvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFwcFVuaXRzVG9EZXZVbml0cyhmbG9h dCBhQXBwVW5pdHMpID0gMDsKIyAyMTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZp Y2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZXZVbml0c1RvQXBwVW5pdHMoZmxv YXQgYURldlVuaXRzKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXBwVW5pdHNU b0RldlVuaXRzKGZsb2F0ICZhQXBwVW5pdHMpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXREZXZVbml0c1RvQXBwVW5pdHMoZmxvYXQgJmFEZXZVbml0cykgY29uc3QgPSAw OwojIDI0NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldENhbm9uaWNhbFBpeGVsU2NhbGUoZmxvYXQgJmFTY2FsZSkgY29u c3QgPSAwOwojIDI1NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjcm9sbEJhckRpbWVuc2lvbnMoZmxvYXQgJmFXaWR0 aCwgZmxvYXQgJmFIZWlnaHQpIGNvbnN0ID0gMDsKIyAyNjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTeXN0ZW1BdHRy aWJ1dGUobnNTeXN0ZW1BdHRySUQgYW5JRCwgU3lzdGVtQXR0clN0cnVjdCAqIGFJbmZvKSBjb25z dCA9IDA7CiMgMjc1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5o IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWV0cmljc0Zvcihjb25zdCBuc0ZvbnQmIGFGb250LCBu c0lBdG9tKiBhTGFuZ0dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRm9udE1l dHJpY3MqJiBhTWV0cmljcykgPSAwOwojIDI4NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SURldmljZUNvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldHJpY3NGb3IoY29uc3Qg bnNGb250JiBhRm9udCwgbnNJRm9udE1ldHJpY3MqJiBhTWV0cmljcykgPSAwOwoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0Wm9vbShmbG9hdCBhWm9vbSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Wm9vbShmbG9hdCAmYVpvb20pIGNvbnN0ID0gMDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dFRleHRab29tKGZsb2F0IGFUZXh0Wm9vbSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4 dFpvb20oZmxvYXQgJmFUZXh0Wm9vbSkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXREcmF3aW5nU3VyZmFjZShuc0lSZW5kZXJpbmdDb250ZXh0ICZhQ29udGV4dCwgbnNEcmF3 aW5nU3VyZmFjZSAmYVN1cmZhY2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0R2FtbWEo ZmxvYXQgJmFHYW1tcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0R2FtbWEoZmxvYXQgYUdh bW1hKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEdhbW1hVGFibGUoUFJVaW50OCAqJmFH YW1tYVRhYmxlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTG9hZEljb25JbWFnZShQUklu dDMyIGFJZCwgbnNJSW1hZ2UqJiBhSW1hZ2UpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IENoZWNrRm9udEV4aXN0ZW5jZShjb25zdCBuc1N0cmluZyYgYUZhY2VOYW1lKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBGaXJzdEV4aXN0aW5nRm9udChjb25zdCBuc0ZvbnQmIGFGb250LCBuc1N0 cmluZyYgYUZhY2VOYW1lKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9jYWxGb250TmFt ZShjb25zdCBuc1N0cmluZyYgYUZhY2VOYW1lLCBuc1N0cmluZyYgYUxvY2FsTmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhQWxpYXNlZCkgPSAwOwoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgRmx1c2hGb250Q2FjaGUodm9pZCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldERlcHRoKFBSVWludDMyJiBhRGVwdGgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRJTENvbG9yU3BhY2UoSUxfQ29sb3JTcGFjZSomIGFDb2xvclNwYWNlKSA9IDA7 CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFsZXR0ZUluZm8obnNQYWxldHRlSW5mbyYpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb252ZXJ0UGl4ZWwobnNjb2xvciBhQ29sb3IsIFBS VWludDMyICYgYVBpeGVsKSA9IDA7CiMgMzYzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ RGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGV2aWNlU3VyZmFjZURpbWVu c2lvbnMoUFJJbnQzMiAmYVdpZHRoLCBQUkludDMyICZhSGVpZ2h0KSA9IDA7CiMgMzcyICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0UmVjdCAoIG5zUmVjdCAmYVJlY3QgKSA9IDA7CiMgMzg0ICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xpZW50 UmVjdChuc1JlY3QgJmFSZWN0KSA9IDA7CiMgMzk2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGV2aWNlQ29udGV4dEZv cihuc0lEZXZpY2VDb250ZXh0U3BlYyAqYURldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJRGV2aWNlQ29udGV4dCAqJmFDb250ZXh0KSA9IDA7CiMgNDA4ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg QmVnaW5Eb2N1bWVudChQUlVuaWNoYXIgKiBhVGl0bGUpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBFbmREb2N1bWVudCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg QmVnaW5QYWdlKHZvaWQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmRQYWdlKHZv aWQpID0gMDsKfTsKIyA0MyAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MQXRvbXMuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNIVE1MQXRvbXMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ QXRvbS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxBdG9tcy5oIiAy CiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxBdG9tcy5oIgpjbGFzcyBuc0hU TUxBdG9tcyB7CnB1YmxpYzoKCiAgc3RhdGljIHZvaWQgQWRkUmVmQXRvbXMoKTsKICBzdGF0aWMg dm9pZCBSZWxlYXNlQXRvbXMoKTsKIyA1MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRN TEF0b21zLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTEF0b21MaXN0Lmgi IDEKIyAzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTEF0b21MaXN0LmgiCnN0YXRp YyBuc0lBdG9tKiBtb3pBbm9ueW1vdXNCbG9jazsKc3RhdGljIG5zSUF0b20qIG1vekFub255bW91 c1Bvc2l0aW9uZWRCbG9jazsKc3RhdGljIG5zSUF0b20qIG1vekZpcnN0TGluZUZpeHVwOwpzdGF0 aWMgbnNJQXRvbSogbW96TGV0dGVyRnJhbWU7CnN0YXRpYyBuc0lBdG9tKiBtb3pMaW5lRnJhbWU7 CnN0YXRpYyBuc0lBdG9tKiBtb3pMaXN0QnVsbGV0UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogbW96 U2luZ2xlTGluZVRleHRDb250cm9sRnJhbWU7CnN0YXRpYyBuc0lBdG9tKiBtb3pGb2N1c0lubmVy UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogbW96Rm9jdXNPdXRlclBzZXVkbzsKc3RhdGljIG5zSUF0 b20qIG1vekRpc3BsYXlDb21ib2JveENvbnRyb2xGcmFtZTsKCnN0YXRpYyBuc0lBdG9tKiBfYmFz ZUhyZWY7CnN0YXRpYyBuc0lBdG9tKiBfYmFzZVRhcmdldDsKc3RhdGljIG5zSUF0b20qIGE7CnN0 YXRpYyBuc0lBdG9tKiBhYmJyOwpzdGF0aWMgbnNJQXRvbSogYWJvdmU7CnN0YXRpYyBuc0lBdG9t KiBhY2NlcHQ7CnN0YXRpYyBuc0lBdG9tKiBhY2NlcHRjaGFyc2V0OwpzdGF0aWMgbnNJQXRvbSog YWNjZXNza2V5OwpzdGF0aWMgbnNJQXRvbSogYWN0aW9uOwpzdGF0aWMgbnNJQXRvbSogYWxpZ247 CnN0YXRpYyBuc0lBdG9tKiBhbGluazsKc3RhdGljIG5zSUF0b20qIGFsdDsKc3RhdGljIG5zSUF0 b20qIGFwcGxldDsKc3RhdGljIG5zSUF0b20qIGFyY2hpdmU7CnN0YXRpYyBuc0lBdG9tKiBhcmVh OwpzdGF0aWMgbnNJQXRvbSogYXhpczsKc3RhdGljIG5zSUF0b20qIGJhY2tncm91bmQ7CnN0YXRp YyBuc0lBdG9tKiBiYXNlOwpzdGF0aWMgbnNJQXRvbSogYmVsb3c7CgpzdGF0aWMgbnNJQXRvbSog YmRvOwoKc3RhdGljIG5zSUF0b20qIGJnY29sb3I7CnN0YXRpYyBuc0lBdG9tKiBibG9ja3F1b3Rl OwpzdGF0aWMgbnNJQXRvbSogYm9keTsKc3RhdGljIG5zSUF0b20qIGJvcmRlcjsKc3RhdGljIG5z SUF0b20qIGJvcmRlcmNvbG9yOwpzdGF0aWMgbnNJQXRvbSogYm90dG9tcGFkZGluZzsKc3RhdGlj IG5zSUF0b20qIGJyOwpzdGF0aWMgbnNJQXRvbSogYjsKc3RhdGljIG5zSUF0b20qIGJ1dHRvbjsK c3RhdGljIG5zSUF0b20qIGJ1dHRvbkNvbnRlbnRQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBjYXB0 aW9uOwpzdGF0aWMgbnNJQXRvbSogY2VsbENvbnRlbnRQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBj ZWxscGFkZGluZzsKc3RhdGljIG5zSUF0b20qIGNlbGxzcGFjaW5nOwpzdGF0aWMgbnNJQXRvbSog Y2g7CnN0YXRpYyBuc0lBdG9tKiBfY2hhcjsKc3RhdGljIG5zSUF0b20qIGNoYXJvZmY7CnN0YXRp YyBuc0lBdG9tKiBjaGFyc2V0OwpzdGF0aWMgbnNJQXRvbSogY2hlY2tlZDsKc3RhdGljIG5zSUF0 b20qIGNpdGU7CnN0YXRpYyBuc0lBdG9tKiBrQ2xhc3M7CnN0YXRpYyBuc0lBdG9tKiBjbGFzc2lk OwpzdGF0aWMgbnNJQXRvbSogY2xlYXI7CnN0YXRpYyBuc0lBdG9tKiBjbGlwOwpzdGF0aWMgbnNJ QXRvbSogY29kZTsKc3RhdGljIG5zSUF0b20qIGNvZGViYXNlOwpzdGF0aWMgbnNJQXRvbSogY29k ZXR5cGU7CnN0YXRpYyBuc0lBdG9tKiBjb2xvcjsKc3RhdGljIG5zSUF0b20qIGNvbDsKc3RhdGlj IG5zSUF0b20qIGNvbGdyb3VwOwpzdGF0aWMgbnNJQXRvbSogY29sczsKc3RhdGljIG5zSUF0b20q IGNvbHNwYW47CnN0YXRpYyBuc0lBdG9tKiBjb21ib2JveDsKc3RhdGljIG5zSUF0b20qIGNvbHVt blBzZXVkbzsKc3RhdGljIG5zSUF0b20qIGNvbW1lbnRQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBj b21wYWN0OwpzdGF0aWMgbnNJQXRvbSogY29udGVudDsKc3RhdGljIG5zSUF0b20qIGNvb3JkczsK c3RhdGljIG5zSUF0b20qIGRkOwpzdGF0aWMgbnNJQXRvbSogZGVmYXVsdGNoZWNrZWQ7CnN0YXRp YyBuc0lBdG9tKiBkZWZhdWx0c2VsZWN0ZWQ7CnN0YXRpYyBuc0lBdG9tKiBkZWZhdWx0dmFsdWU7 CnN0YXRpYyBuc0lBdG9tKiBkZWNsYXJlOwpzdGF0aWMgbnNJQXRvbSogZGVmZXI7CnN0YXRpYyBu c0lBdG9tKiBkaXI7CnN0YXRpYyBuc0lBdG9tKiBkaXY7CnN0YXRpYyBuc0lBdG9tKiBkaXNhYmxl ZDsKc3RhdGljIG5zSUF0b20qIGRsOwpzdGF0aWMgbnNJQXRvbSogZHJvcERvd25MaXN0UHNldWRv OwpzdGF0aWMgbnNJQXRvbSogZHQ7CgpzdGF0aWMgbnNJQXRvbSogZGF0ZXRpbWU7CnN0YXRpYyBu c0lBdG9tKiBkYXRhOwpzdGF0aWMgbnNJQXRvbSogZGZuOwpzdGF0aWMgbnNJQXRvbSogZW07CnN0 YXRpYyBuc0lBdG9tKiBlbWJlZDsKc3RhdGljIG5zSUF0b20qIGVuY29kaW5nOwpzdGF0aWMgbnNJ QXRvbSogZW5jdHlwZTsKc3RhdGljIG5zSUF0b20qIGZhY2U7CnN0YXRpYyBuc0lBdG9tKiBmaWVs ZHNldDsKc3RhdGljIG5zSUF0b20qIGZpZWxkc2V0Q29udGVudFBzZXVkbzsKc3RhdGljIG5zSUF0 b20qIGZpcnN0TGV0dGVyUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogZmlyc3RMaW5lUHNldWRvOwpz dGF0aWMgbnNJQXRvbSogZm9udDsKc3RhdGljIG5zSUF0b20qIGZvbnRXZWlnaHQ7CnN0YXRpYyBu c0lBdG9tKiBfZm9yOwpzdGF0aWMgbnNJQXRvbSogZm9ybTsKc3RhdGljIG5zSUF0b20qIGZyYW1l OwpzdGF0aWMgbnNJQXRvbSogZnJhbWVib3JkZXI7CnN0YXRpYyBuc0lBdG9tKiBmcmFtZXNldDsK c3RhdGljIG5zSUF0b20qIGZyYW1lc2V0QmxhbmtQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBndXR0 ZXI7CnN0YXRpYyBuc0lBdG9tKiBoMTsKc3RhdGljIG5zSUF0b20qIGgyOwpzdGF0aWMgbnNJQXRv bSogaDM7CnN0YXRpYyBuc0lBdG9tKiBoNDsKc3RhdGljIG5zSUF0b20qIGg1OwpzdGF0aWMgbnNJ QXRvbSogaDY7CnN0YXRpYyBuc0lBdG9tKiBoZWFkOwpzdGF0aWMgbnNJQXRvbSogaGVhZGVyQ29u dGVudEJhc2U7CnN0YXRpYyBuc0lBdG9tKiBoZWFkZXJDb250ZW50TGFuZ3VhZ2U7CnN0YXRpYyBu c0lBdG9tKiBoZWFkZXJDb250ZW50U2NyaXB0VHlwZTsKc3RhdGljIG5zSUF0b20qIGhlYWRlckNv bnRlbnRTdHlsZVR5cGU7CnN0YXRpYyBuc0lBdG9tKiBoZWFkZXJDb250ZW50VHlwZTsKc3RhdGlj IG5zSUF0b20qIGhlYWRlckRlZmF1bHRTdHlsZTsKc3RhdGljIG5zSUF0b20qIGhlYWRlcldpbmRv d1RhcmdldDsKc3RhdGljIG5zSUF0b20qIGhlYWRlcnM7CnN0YXRpYyBuc0lBdG9tKiBoZWlnaHQ7 CnN0YXRpYyBuc0lBdG9tKiBoaWRkZW47CnN0YXRpYyBuc0lBdG9tKiBob3Jpem9udGFsRnJhbWVz ZXRCb3JkZXJQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBocjsKc3RhdGljIG5zSUF0b20qIGhyZWY7 CnN0YXRpYyBuc0lBdG9tKiBocmVmbGFuZzsKc3RhdGljIG5zSUF0b20qIGhzcGFjZTsKc3RhdGlj IG5zSUF0b20qIGh0bWw7CnN0YXRpYyBuc0lBdG9tKiBodHRwRXF1aXY7CnN0YXRpYyBuc0lBdG9t KiBpYlBzZXVkbzsKc3RhdGljIG5zSUF0b20qIGk7CnN0YXRpYyBuc0lBdG9tKiBpZDsKc3RhdGlj IG5zSUF0b20qIGlmcmFtZTsKc3RhdGljIG5zSUF0b20qIGlsYXllcjsKc3RhdGljIG5zSUF0b20q IGltZzsKc3RhdGljIG5zSUF0b20qIGluZGV4OwpzdGF0aWMgbnNJQXRvbSogaW5wdXQ7CnN0YXRp YyBuc0lBdG9tKiBpc2luZGV4OwpzdGF0aWMgbnNJQXRvbSogaXNtYXA7CnN0YXRpYyBuc0lBdG9t KiBsYWJlbDsKc3RhdGljIG5zSUF0b20qIGxhYmVsQ29udGVudFBzZXVkbzsKc3RhdGljIG5zSUF0 b20qIGxhbmc7CnN0YXRpYyBuc0lBdG9tKiBsYXllcjsKc3RhdGljIG5zSUF0b20qIGxheW91dDsK c3RhdGljIG5zSUF0b20qIGxpOwpzdGF0aWMgbnNJQXRvbSogbGluazsKc3RhdGljIG5zSUF0b20q IGxlZnQ7CnN0YXRpYyBuc0lBdG9tKiBsZWZ0cGFkZGluZzsKc3RhdGljIG5zSUF0b20qIGxlZ2Vu ZDsKc3RhdGljIG5zSUF0b20qIGxlZ2VuZENvbnRlbnRQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBs ZW5ndGg7CnN0YXRpYyBuc0lBdG9tKiBsb25nZGVzYzsKc3RhdGljIG5zSUF0b20qIGxvd3NyYzsK c3RhdGljIG5zSUF0b20qIG1hcDsKc3RhdGljIG5zSUF0b20qIG1hcmdpbmhlaWdodDsKc3RhdGlj IG5zSUF0b20qIG1hcmdpbndpZHRoOwpzdGF0aWMgbnNJQXRvbSogbWF4bGVuZ3RoOwpzdGF0aWMg bnNJQXRvbSogbWF5c2NyaXB0OwpzdGF0aWMgbnNJQXRvbSogbWVkaWE7CnN0YXRpYyBuc0lBdG9t KiBtZW51OwpzdGF0aWMgbnNJQXRvbSogbWV0YTsKc3RhdGljIG5zSUF0b20qIG1ldGhvZDsKc3Rh dGljIG5zSUF0b20qIG11bHRpY29sOwpzdGF0aWMgbnNJQXRvbSogbXVsdGlwbGU7CnN0YXRpYyBu c0lBdG9tKiBuYW1lOwpzdGF0aWMgbnNJQXRvbSogbm9lbWJlZDsKc3RhdGljIG5zSUF0b20qIG5v ZnJhbWVzOwpzdGF0aWMgbnNJQXRvbSogbm9ocmVmOwpzdGF0aWMgbnNJQXRvbSogbm9yZXNpemU7 CnN0YXRpYyBuc0lBdG9tKiBub3NjcmlwdDsKc3RhdGljIG5zSUF0b20qIG5vc2hhZGU7CnN0YXRp YyBuc0lBdG9tKiBub3dyYXA7CnN0YXRpYyBuc0lBdG9tKiBvYmplY3Q7CnN0YXRpYyBuc0lBdG9t KiBvbDsKc3RhdGljIG5zSUF0b20qIG9wdGlvbjsKc3RhdGljIG5zSUF0b20qIG92ZXJmbG93Owpz dGF0aWMgbnNJQXRvbSogcDsKc3RhdGljIG5zSUF0b20qIHBhZ2V4OwpzdGF0aWMgbnNJQXRvbSog cGFnZXk7CnN0YXRpYyBuc0lBdG9tKiBwYXJhbTsKc3RhdGljIG5zSUF0b20qIHBsYWNlaG9sZGVy UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogcG9pbnRTaXplOwpzdGF0aWMgbnNJQXRvbSogcHJlOwpz dGF0aWMgbnNJQXRvbSogcHJvY2Vzc2luZ0luc3RydWN0aW9uUHNldWRvOwpzdGF0aWMgbnNJQXRv bSogcHJvZmlsZTsKc3RhdGljIG5zSUF0b20qIHByb21wdDsKc3RhdGljIG5zSUF0b20qIHJhZGlv UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogY2hlY2tQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiByZWFk b25seTsKc3RhdGljIG5zSUF0b20qIHJlZnJlc2g7CnN0YXRpYyBuc0lBdG9tKiByZWw7CnN0YXRp YyBuc0lBdG9tKiByZXBlYXQ7CnN0YXRpYyBuc0lBdG9tKiByZXY7CnN0YXRpYyBuc0lBdG9tKiBy aWdodHBhZGRpbmc7CnN0YXRpYyBuc0lBdG9tKiByb3dzOwpzdGF0aWMgbnNJQXRvbSogcm93c3Bh bjsKc3RhdGljIG5zSUF0b20qIHJ1bGVzOwpzdGF0aWMgbnNJQXRvbSogczsKc3RhdGljIG5zSUF0 b20qIHNjaGVtZTsKc3RhdGljIG5zSUF0b20qIHNjb3BlOwpzdGF0aWMgbnNJQXRvbSogc2NyaXB0 OwpzdGF0aWMgbnNJQXRvbSogc2Nyb2xsaW5nOwpzdGF0aWMgbnNJQXRvbSogc2VsZWN0OwpzdGF0 aWMgbnNJQXRvbSogc2VsZWN0ZWQ7CnN0YXRpYyBuc0lBdG9tKiBzZWxlY3RlZGluZGV4OwpzdGF0 aWMgbnNJQXRvbSogc2V0Y29va2llOwpzdGF0aWMgbnNJQXRvbSogc2hhcGU7CnN0YXRpYyBuc0lB dG9tKiBzaXplOwpzdGF0aWMgbnNJQXRvbSogc3BhY2VyOwpzdGF0aWMgbnNJQXRvbSogc3BhbjsK c3RhdGljIG5zSUF0b20qIHNyYzsKc3RhdGljIG5zSUF0b20qIHN0YW5kYnk7CnN0YXRpYyBuc0lB dG9tKiBzdGFydDsKc3RhdGljIG5zSUF0b20qIHN0cmlrZTsKc3RhdGljIG5zSUF0b20qIHN0cm9u ZzsKc3RhdGljIG5zSUF0b20qIHN0eWxlOwpzdGF0aWMgbnNJQXRvbSogc3VtbWFyeTsKc3RhdGlj IG5zSUF0b20qIHN1cHByZXNzOwpzdGF0aWMgbnNJQXRvbSogdGFiaW5kZXg7CnN0YXRpYyBuc0lB dG9tKiB0YWJsZTsKc3RhdGljIG5zSUF0b20qIHRhYmxlUHNldWRvOwpzdGF0aWMgbnNJQXRvbSog dGFibGVDZWxsUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogdGFibGVDb2xHcm91cFBzZXVkbzsKc3Rh dGljIG5zSUF0b20qIHRhYmxlQ29sUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogdGFibGVPdXRlclBz ZXVkbzsKc3RhdGljIG5zSUF0b20qIHRhYmxlUm93R3JvdXBQc2V1ZG87CnN0YXRpYyBuc0lBdG9t KiB0YWJsZVJvd1BzZXVkbzsKc3RhdGljIG5zSUF0b20qIHRhYnN0b3A7CnN0YXRpYyBuc0lBdG9t KiB0YXJnZXQ7CnN0YXRpYyBuc0lBdG9tKiB0Ym9keTsKc3RhdGljIG5zSUF0b20qIHRkOwpzdGF0 aWMgbnNJQXRvbSogdGZvb3Q7CnN0YXRpYyBuc0lBdG9tKiB0aGVhZDsKc3RhdGljIG5zSUF0b20q IHRleHQ7CnN0YXRpYyBuc0lBdG9tKiB0ZXh0YXJlYTsKc3RhdGljIG5zSUF0b20qIHRleHRQc2V1 ZG87CnN0YXRpYyBuc0lBdG9tKiB0aDsKc3RhdGljIG5zSUF0b20qIHRpdGxlOwpzdGF0aWMgbnNJ QXRvbSogdG9wOwpzdGF0aWMgbnNJQXRvbSogdG9wcGFkZGluZzsKc3RhdGljIG5zSUF0b20qIHRy OwpzdGF0aWMgbnNJQXRvbSogdHQ7CnN0YXRpYyBuc0lBdG9tKiB0eXBlOwpzdGF0aWMgbnNJQXRv bSogdTsKc3RhdGljIG5zSUF0b20qIHVsOwpzdGF0aWMgbnNJQXRvbSogdXNlbWFwOwpzdGF0aWMg bnNJQXRvbSogdmFsaWduOwpzdGF0aWMgbnNJQXRvbSogdmFsdWU7CnN0YXRpYyBuc0lBdG9tKiB2 YWx1ZXR5cGU7CnN0YXRpYyBuc0lBdG9tKiB2YXJpYWJsZTsKc3RhdGljIG5zSUF0b20qIHZjYXJk X25hbWU7CnN0YXRpYyBuc0lBdG9tKiB2ZXJzaW9uOwpzdGF0aWMgbnNJQXRvbSogdmVydGljYWxG cmFtZXNldEJvcmRlclBzZXVkbzsKc3RhdGljIG5zSUF0b20qIHZpc2liaWxpdHk7CnN0YXRpYyBu c0lBdG9tKiB2bGluazsKc3RhdGljIG5zSUF0b20qIHZzcGFjZTsKc3RhdGljIG5zSUF0b20qIHdi cjsKc3RhdGljIG5zSUF0b20qIHdpZHRoOwpzdGF0aWMgbnNJQXRvbSogd3JhcDsKc3RhdGljIG5z SUF0b20qIHdyYXBwZWRGcmFtZVBzZXVkbzsKc3RhdGljIG5zSUF0b20qIHppbmRleDsKc3RhdGlj IG5zSUF0b20qIHpfaW5kZXg7CgpzdGF0aWMgbnNJQXRvbSogbW96X3RyaXN0YXRlOwpzdGF0aWMg bnNJQXRvbSogbW96X3RyaXN0YXRldmFsdWU7CiMgNTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0hUTUxBdG9tcy5oIiAyCgp9OwojIDQ0ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgoj IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lCdXR0b24uaCIgMQojIDI2ICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNJQnV0dG9uLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSVdpZGdldC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lCdXR0 b24uaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjgg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lCdXR0b24uaCIgMgojIDM4ICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJQnV0dG9uLmgiCmNsYXNzIG5zSUJ1dHRvbiA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CgpwdWJsaWM6CiAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4MTgwMzJhZDAsIDB4YjI2NSwgMHgxMWQxLCB7IDB4YWEs IDB4MmEsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAgfSB9OyByZXR1cm4gaWlkO30KIyA1 MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUJ1dHRvbi5oIgogICAgdmlydHVhbCBuc3Jl c3VsdCBTZXRMYWJlbChjb25zdCBuc1N0cmluZyAmYVRleHQpID0gMDsKIyA1OSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSUJ1dHRvbi5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYWJl bChuc1N0cmluZyAmYUJ1ZmZlcikgPSAwOwoKfTsKIyA0NSAibnNGb3JtQ29udHJvbEhlbHBlci5j cHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hlY2tCdXR0b24uaCIgMQoj IDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hlY2tCdXR0b24uaCIKIyAxICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDMxICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNJQ2hlY2tCdXR0b24uaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lXaWRnZXQuaCIgMQojIDMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hl Y2tCdXR0b24uaCIgMgoKCgoKCgoKY2xhc3MgbnNJQ2hlY2tCdXR0b24gOiBwdWJsaWMgbnNJU3Vw cG9ydHMgewoKcHVibGljOgogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg5NjEwODVmNSwgMHhiZDI4LCAweDExZDEsIHsgMHg5Nywg MHhlZiwgMHgwLCAweDYwLCAweDk3LCAweDMsIDB4YzEsIDB4NGUgfSB9OyByZXR1cm4gaWlkO30K IyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNoZWNrQnV0dG9uLmgiCiAgICB2aXJ0 dWFsIG5zcmVzdWx0IFNldExhYmVsKGNvbnN0IG5zU3RyaW5nICZhVGV4dCkgPSAwOwojIDYwICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hlY2tCdXR0b24uaCIKICAgIHZpcnR1YWwgbnNy ZXN1bHQgR2V0TGFiZWwobnNTdHJpbmcgJmFCdWZmZXIpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFs IG5zcmVzdWx0IFNldFN0YXRlKGNvbnN0IFBSQm9vbCBhU3RhdGUpID0gMDsKCgoKCgoKCiAgICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFN0YXRlKFBSQm9vbCYgYVN0YXRlKSA9IDA7Cgp9OwojIDQ2ICJu c0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lUZXh0V2lkZ2V0LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRX aWRnZXQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiIDEKIyAy NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIgMgojIDEgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lUZXh0V2lkZ2V0LmgiIDIKCgoKCgoKc3RydWN0IG5zVGV4dFdpZGdldEluaXRE YXRhIDogcHVibGljIG5zV2lkZ2V0SW5pdERhdGEgewogIG5zVGV4dFdpZGdldEluaXREYXRhKCkK ICAgIDogbUlzUGFzc3dvcmQoMCksCiAgICAgIG1Jc1JlYWRPbmx5KDApCiAgewogIH0KCiAgUFJC b29sIG1Jc1Bhc3N3b3JkOwogIFBSQm9vbCBtSXNSZWFkT25seTsKfTsKIyA1MyAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIKY2xhc3MgbnNJVGV4dFdpZGdldCA6IHB1 YmxpYyBuc0lTdXBwb3J0cwp7CgogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4ZjgwMzAwMTEsIDB4YzM0MiwgMHgx MWQxLCB7IDB4OTcsIDB4ZjAsIDB4MCwgMHg2MCwgMHg5NywgMHgzLCAweGMxLCAweDRlIH0gfTsg cmV0dXJuIGlpZDt9CiMgNjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0V2lkZ2V0 LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRleHQobnNTdHJpbmcgJmFUZXh0QnVmZmVyLCBQ UlVpbnQzMiBhQnVmZmVyU2l6ZSwgUFJVaW50MzImIGFBY3R1YWxTaXplKSA9IDA7CiMgODAgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0V2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVz dWx0IFNldFRleHQoY29uc3QgbnNTdHJpbmcgJmFUZXh0LCBQUlVpbnQzMiYgYUFjdHVhbFNpemUp ID0gMDsKIyA5NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIKICAg IHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0VGV4dChjb25zdCBuc1N0cmluZyAmYVRleHQsIFBSVWlu dDMyIGFTdGFydFBvcywgUFJVaW50MzIgYUVuZFBvcywgUFJVaW50MzImIGFBY3R1YWxTaXplKSA9 IDA7CgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZVRleHQodm9pZCkgPSAwOwojIDEx MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIKICAgIHZpcnR1YWwg bnNyZXN1bHQgU2V0UGFzc3dvcmQoUFJCb29sIGFJc1Bhc3N3b3JkKSA9IDA7CiMgMTIxICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dFdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRNYXhUZXh0TGVuZ3RoKFBSVWludDMyIGFDaGFycykgPSAwOwojIDEzMyAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0 UmVhZE9ubHkoUFJCb29sIGFOZXdSZWFkT25seUZsYWcsIFBSQm9vbCYgYU9sZFJlYWRPbmx5Rmxh ZykgPSAwOwoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3RBbGwoKSA9IDA7CiMgMTQ5 ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dFdpZGdldC5oIgogICAgdmlydHVhbCBu c3Jlc3VsdCBTZXRTZWxlY3Rpb24oUFJVaW50MzIgYVN0YXJ0U2VsLCBQUlVpbnQzMiBhRW5kU2Vs KSA9IDA7CiMgMTU4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dFdpZGdldC5oIgog ICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb24oUFJVaW50MzIgKmFTdGFydFNlbCwgUFJV aW50MzIgKmFFbmRTZWwpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldENhcmV0 UG9zaXRpb24oUFJVaW50MzIgYVBvc2l0aW9uKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDYXJldFBvc2l0aW9uKFBSVWludDMyJiBhUG9zaXRpb24pID0gMDsKCn07CiMgNDcg Im5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSVN1cHBvcnRzLmgiIDEKIyA0OCAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvbnN0cy5oIiAxCiMgNDkgIm5zRm9ybUNv bnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVW5pdENv bnZlcnNpb24uaCIgMQojIDUwICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c2xheW91dC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5o IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI3ICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVV0aWwuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc1N0eWxlVXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxp bmtIYW5kbGVyLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxpbmtIYW5k bGVyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAy NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxpbmtIYW5kbGVyLmgiIDIKCmNsYXNzIG5z SUlucHV0U3RyZWFtOwpjbGFzcyBuc0lDb250ZW50OwpjbGFzcyBuc1N0cmluZzsKc3RydWN0IG5z R1VJRXZlbnQ7CgoKCgoKZW51bSBuc0xpbmtTdGF0ZSB7CiAgZUxpbmtTdGF0ZV9Vbmtub3duID0g MCwKICBlTGlua1N0YXRlX1VudmlzaXRlZCA9IDEsCiAgZUxpbmtTdGF0ZV9WaXNpdGVkID0gMiwK ICBlTGlua1N0YXRlX05vdExpbmsgPSAzCn07CgoKCgplbnVtIG5zTGlua1ZlcmIgewogIGVMaW5r VmVyYl9SZXBsYWNlID0gMCwKICBlTGlua1ZlcmJfTmV3ID0gMSwKICBlTGlua1ZlcmJfRW1iZWQg PSAyLAogIGVMaW5rVmVyYl9VbmRlZmluZWQgPSAzCn07CgoKCgpjbGFzcyBuc0lMaW5rSGFuZGxl ciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweGE2Y2Y5MDViLCAweDE1YjMsIDB4 MTFkMix7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyBy ZXR1cm4gaWlkO30KIyA2NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxpbmtIYW5kbGVy LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBPbkxpbmtDbGljayhuc0lDb250ZW50KiBhQ29udGVudCwK ICAgICAgICAgICAgICAgICAgICAgICAgIG5zTGlua1ZlcmIgYVZlcmIsCiAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFVUkxTcGVjLAogICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUFJVbmljaGFyKiBhVGFyZ2V0U3BlYywKICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSUlucHV0U3RyZWFtKiBhUG9zdERhdGFTdHJlYW0gPSAwLAogICAgICAgICAgICAgICAg ICAgICAgICAgbnNJSW5wdXRTdHJlYW0qIGFIZWFkZXJzRGF0YVN0cmVhbSA9IDApID0gMDsKCgoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPbk92ZXJMaW5rKG5zSUNvbnRlbnQqIGFDb250ZW50LAog ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFVUkxTcGVjLAogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFUYXJnZXRTcGVjKSA9IDA7CgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlua1N0YXRlKGNvbnN0IGNoYXIqIGFMaW5rVVJJLCBuc0xp bmtTdGF0ZSYgYVN0YXRlKSA9IDA7Cn07CiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c1N0eWxlVXRpbC5oIiAyCgpjbGFzcyBuc0lTdHlsZUNvbnRleHQ7CnN0cnVjdCBuc1N0eWxlQmFj a2dyb3VuZDsKCmVudW0gbnNGb250U2l6ZVR5cGUgewogIGVGb250U2l6ZV9IVE1MID0gMSwKICBl Rm9udFNpemVfQ1NTID0gMgp9OwoKCgpjbGFzcyBuc1N0eWxlVXRpbCB7CnB1YmxpYzoKCiAgc3Rh dGljIGZsb2F0IEdldFNjYWxpbmdGYWN0b3IoUFJJbnQzMiBhU2NhbGVyKTsKCiAgc3RhdGljIG5z Y29vcmQgQ2FsY0ZvbnRQb2ludFNpemUoUFJJbnQzMiBhSFRNTFNpemUsIFBSSW50MzIgYUJhc2VQ b2ludFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVNjYWxp bmdGYWN0b3IsIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNGb250U2l6ZVR5cGUgYUZvbnRTaXplVHlwZSA9IGVGb250U2l6 ZV9IVE1MKTsKCiAgc3RhdGljIFBSSW50MzIgRmluZE5leHRTbWFsbGVyRm9udFNpemUobnNjb29y ZCBhRm9udFNpemUsIFBSSW50MzIgYUJhc2VQb2ludFNpemUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVNjYWxpbmdGYWN0b3IsIG5zSVByZXNDb250ZXh0 KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNGb250U2l6ZVR5cGUgYUZvbnRTaXplVHlwZSA9IGVGb250U2l6ZV9IVE1MKTsKCiAgc3RhdGlj IFBSSW50MzIgRmluZE5leHRMYXJnZXJGb250U2l6ZShuc2Nvb3JkIGFGb250U2l6ZSwgUFJJbnQz MiBhQmFzZVBvaW50U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZsb2F0IGFTY2FsaW5nRmFjdG9yLCBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGb250U2l6ZVR5cGUgYUZvbnRT aXplVHlwZSA9IGVGb250U2l6ZV9IVE1MKTsKCiAgc3RhdGljIFBSSW50MzIgQ29uc3RyYWluRm9u dFdlaWdodChQUkludDMyIGFXZWlnaHQpOwoKICBzdGF0aWMgY29uc3QgbnNTdHlsZUJhY2tncm91 bmQqIEZpbmROb25UcmFuc3BhcmVudEJhY2tncm91bmQobnNJU3R5bGVDb250ZXh0KiBhQ29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJCb29sIGFTdGFydEF0UGFyZW50ID0gMCk7CgogIHN0YXRpYyBQUkJvb2wgSXNI VE1MTGluayhuc0lDb250ZW50ICphQ29udGVudCwgbnNJQXRvbSAqYVRhZywgbnNJUHJlc0NvbnRl eHQgKmFQcmVzQ29udGV4dCwgbnNMaW5rU3RhdGUgKmFTdGF0ZSk7CiAgc3RhdGljIFBSQm9vbCBJ c1NpbXBsZVhsaW5rKG5zSUNvbnRlbnQgKmFDb250ZW50LCBuc0lQcmVzQ29udGV4dCAqYVByZXND b250ZXh0LCBuc0xpbmtTdGF0ZSAqYVN0YXRlKTsKCn07CiMgNTEgIm5zRm9ybUNvbnRyb2xIZWxw ZXIuY3BwIiAyCiMgMSAibnNGb3JtRnJhbWUuaCIgMQojIDI1ICJuc0Zvcm1GcmFtZS5oIgojIDEg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtTWFuYWdlci5oIiAxCiMgMjYgIm5zRm9y bUZyYW1lLmgiIDIKIyAxICIuLi8uLi9iYXNlL3NyYy9uc0Jsb2NrRnJhbWUuaCIgMQojIDI1ICIu Li8uLi9iYXNlL3NyYy9uc0Jsb2NrRnJhbWUuaCIKIyAxICIuLi8uLi9iYXNlL3NyYy9uc0hUTUxD b250YWluZXJGcmFtZS5oIiAxCiMgMjUgIi4uLy4uL2Jhc2Uvc3JjL25zSFRNTENvbnRhaW5lckZy YW1lLmgiCiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNDb250YWluZXJGcmFtZS5oIiAxCiMgMjUgIi4u Ly4uL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUuaCIKIyAxICIuLi8uLi9iYXNlL3NyYy9uc1Nw bGl0dGFibGVGcmFtZS5oIiAxCiMgMjUgIi4uLy4uL2Jhc2Uvc3JjL25zU3BsaXR0YWJsZUZyYW1l LmgiCiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIiAxCiMgMjYgIi4uLy4uL2Jhc2Uvc3Jj L25zU3BsaXR0YWJsZUZyYW1lLmgiIDIKCgpjbGFzcyBuc1NwbGl0dGFibGVGcmFtZSA6IHB1Ymxp YyBuc0ZyYW1lCnsKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lQcmVzQ29udGV4 dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwK ICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQYXJlbnQsCiAgICAgICAgICAgICAgICAgIG5z SVN0eWxlQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUHJl dkluRmxvdyk7CgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTcGxpdHRhYmxlKG5zU3BsaXR0YWJsZVR5 cGUmIGFJc1NwbGl0dGFibGUpIGNvbnN0OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2 SW5GbG93KG5zSUZyYW1lKiogYVByZXZJbkZsb3cpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0UHJldkluRmxvdyhuc0lGcmFtZSopOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dEluRmxv dyhuc0lGcmFtZSoqIGFOZXh0SW5GbG93KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5l eHRJbkZsb3cobnNJRnJhbWUqKTsKCgoKCiAgbnNJRnJhbWUqIEdldEZpcnN0SW5GbG93KCkgY29u c3Q7CgoKCgogIG5zSUZyYW1lKiBHZXRMYXN0SW5GbG93KCkgY29uc3Q7CgoKCiAgc3RhdGljIHZv aWQgUmVtb3ZlRnJvbUZsb3cobnNJRnJhbWUqIGFGcmFtZSk7CgoKICBzdGF0aWMgdm9pZCBCcmVh a0Zyb21QcmV2Rmxvdyhuc0lGcmFtZSogYUZyYW1lKTsKCiAgbnNJRnJhbWUqIEdldFByZXZJbkZs b3coKTsKICBuc0lGcmFtZSogR2V0TmV4dEluRmxvdygpOwoKcHJvdGVjdGVkOgoKCgoKICBuc0lG cmFtZSogbVByZXZJbkZsb3c7CiAgbnNJRnJhbWUqIG1OZXh0SW5GbG93Owp9OwojIDI2ICIuLi8u Li9iYXNlL3NyYy9uc0NvbnRhaW5lckZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNGcmFtZUxpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNG cmFtZUxpc3QuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMQoj IDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGcmFtZUxpc3QuaCIgMgoKCgoKCmNsYXNz IG5zRnJhbWVMaXN0IHsKcHVibGljOgogIG5zRnJhbWVMaXN0KCkgewogICAgbUZpcnN0Q2hpbGQg PSAwOwogIH0KCiAgbnNGcmFtZUxpc3QobnNJRnJhbWUqIGFIZWFkKSB7CiAgICBtRmlyc3RDaGls ZCA9IGFIZWFkOwogIH0KCiAgfm5zRnJhbWVMaXN0KCkgewogIH0KCiAgdm9pZCBEZXN0cm95RnJh bWVzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwoKICB2b2lkIFNldEZyYW1lcyhuc0lG cmFtZSogYUZyYW1lTGlzdCkgewogICAgbUZpcnN0Q2hpbGQgPSBhRnJhbWVMaXN0OwogIH0KCiAg dm9pZCBBcHBlbmRGcmFtZXMobnNJRnJhbWUqIGFQYXJlbnQsIG5zSUZyYW1lKiBhRnJhbWVMaXN0 KTsKCiAgdm9pZCBBcHBlbmRGcmFtZXMobnNJRnJhbWUqIGFQYXJlbnQsIG5zRnJhbWVMaXN0JiBh RnJhbWVMaXN0KSB7CiAgICBBcHBlbmRGcmFtZXMoYVBhcmVudCwgYUZyYW1lTGlzdC5tRmlyc3RD aGlsZCk7CiAgICBhRnJhbWVMaXN0Lm1GaXJzdENoaWxkID0gMDsKICB9CgogIHZvaWQgQXBwZW5k RnJhbWUobnNJRnJhbWUqIGFQYXJlbnQsIG5zSUZyYW1lKiBhRnJhbWUpOwoKCgoKICBQUkJvb2wg UmVtb3ZlRnJhbWUobnNJRnJhbWUqIGFGcmFtZSk7CgoKCgogIFBSQm9vbCBSZW1vdmVGaXJzdENo aWxkKCk7CgoKCgogIFBSQm9vbCBEZXN0cm95RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u dGV4dCwgbnNJRnJhbWUqIGFGcmFtZSk7CgogIHZvaWQgSW5zZXJ0RnJhbWUobnNJRnJhbWUqIGFQ YXJlbnQsCiAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVByZXZTaWJsaW5nLAogICAgICAg ICAgICAgICAgICAgbnNJRnJhbWUqIGFOZXdGcmFtZSk7CgogIHZvaWQgSW5zZXJ0RnJhbWVzKG5z SUZyYW1lKiBhUGFyZW50LAogICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUHJldlNpYmxp bmcsCiAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZUxpc3QpOwoKICB2b2lkIElu c2VydEZyYW1lcyhuc0lGcmFtZSogYVBhcmVudCwgbnNJRnJhbWUqIGFQcmV2U2libGluZywKICAg ICAgICAgICAgICAgICAgICBuc0ZyYW1lTGlzdCYgYUZyYW1lTGlzdCkgewogICAgSW5zZXJ0RnJh bWVzKGFQYXJlbnQsIGFQcmV2U2libGluZywgYUZyYW1lTGlzdC5GaXJzdENoaWxkKCkpOwogICAg YUZyYW1lTGlzdC5tRmlyc3RDaGlsZCA9IDA7CiAgfQoKICBQUkJvb2wgUmVwbGFjZUZyYW1lKG5z SUZyYW1lKiBhUGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPbGRGcmFt ZSwKICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3RnJhbWUpOwoKICBQUkJvb2wg UmVwbGFjZUFuZERlc3Ryb3lGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUGFyZW50LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhT2xkRnJhbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFOZXdGcmFtZSk7CgogIFBSQm9vbCBTcGxpdChu c0lGcmFtZSogYUFmdGVyRnJhbWUsIG5zSUZyYW1lKiogYU5leHRGcmFtZVJlc3VsdCk7CgogIG5z SUZyYW1lKiBQdWxsRnJhbWUobnNJRnJhbWUqIGFQYXJlbnQsCiAgICAgICAgICAgICAgICAgICAg ICBuc0lGcmFtZSogYUxhc3RDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgIG5zRnJhbWVMaXN0 JiBhRnJvbUxpc3QpOwoKICBuc0lGcmFtZSogRmlyc3RDaGlsZCgpIGNvbnN0IHsKICAgIHJldHVy biBtRmlyc3RDaGlsZDsKICB9CgogIG5zSUZyYW1lKiBMYXN0Q2hpbGQoKSBjb25zdDsKCiAgbnNJ RnJhbWUqIEZyYW1lQXQoUFJJbnQzMiBhSW5kZXgpIGNvbnN0OwoKICBQUkJvb2wgSXNFbXB0eSgp IGNvbnN0IHsKICAgIHJldHVybiAwID09IG1GaXJzdENoaWxkOwogIH0KCiAgUFJCb29sIE5vdEVt cHR5KCkgY29uc3QgewogICAgcmV0dXJuIDAgIT0gbUZpcnN0Q2hpbGQ7CiAgfQoKICBQUkJvb2wg Q29udGFpbnNGcmFtZShjb25zdCBuc0lGcmFtZSogYUZyYW1lKSBjb25zdDsKCiAgUFJJbnQzMiBH ZXRMZW5ndGgoKSBjb25zdDsKCiAgbnNJRnJhbWUqIEdldFByZXZTaWJsaW5nRm9yKG5zSUZyYW1l KiBhRnJhbWUpIGNvbnN0OwoKCgoKCiAgbnNJRnJhbWUqIEdldFByZXZWaXN1YWxGb3IobnNJRnJh bWUqIGFGcmFtZSkgY29uc3Q7CgoKCgogIG5zSUZyYW1lKiBHZXROZXh0VmlzdWFsRm9yKG5zSUZy YW1lKiBhRnJhbWUpIGNvbnN0OwoKCiAgdm9pZCBWZXJpZnlQYXJlbnQobnNJRnJhbWUqIGFQYXJl bnQpIGNvbnN0OwoKCgoKCnByb3RlY3RlZDoKICBuc0lGcmFtZSogbUZpcnN0Q2hpbGQ7Cn07CiMg MjcgIi4uLy4uL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUuaCIgMgojIDM5ICIuLi8uLi9iYXNl L3NyYy9uc0NvbnRhaW5lckZyYW1lLmgiCmNsYXNzIG5zQ29udGFpbmVyRnJhbWUgOiBwdWJsaWMg bnNTcGxpdHRhYmxlRnJhbWUKewpwdWJsaWM6CgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lQ cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBh Q29udGVudCwKICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQYXJlbnQsCiAgICAgICAgICAg ICAgICAgIG5zSVN0eWxlQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgIG5zSUZy YW1lKiBhUHJldkluRmxvdyk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbml0aWFsQ2hpbGRMaXN0 KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJRnJhbWUqIGFDaGlsZExpc3QpOwogIHZpcnR1YWwgbnNyZXN1bHQgRmlyc3RDaGlsZChu c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc0lB dG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYUZpcnN0 Q2hpbGQpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgRGVzdHJveShuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KG5zSVByZXNDb250ZXh0KiBh UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVu ZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVj dCwKICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyKTsKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lRm9yUG9pbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNQb2ludCYgYVBvaW50 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hM YXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhRnJhbWUpOwog IHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFjZUZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAog ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSUZyYW1lKiBhTmV3RnJhbWUpOwogIHZpcnR1YWwgbnNyZXN1bHQgUmVmbG93RGlydHlD aGlsZChuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiBhQ2hpbGQpOwoKCgoKCgoK ICB2aXJ0dWFsIHZvaWQgRGVsZXRlQ2hpbGRzTmV4dEluRmxvdyhuc0lQcmVzQ29udGV4dCogYVBy ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l KiBhQ2hpbGQpOwoKICBzdGF0aWMgUFJJbnQzMiBMZW5ndGhPZihuc0lGcmFtZSogYUZyYW1lTGlz dCkgewogICAgbnNGcmFtZUxpc3QgdG1wKGFGcmFtZUxpc3QpOwogICAgcmV0dXJuIHRtcC5HZXRM ZW5ndGgoKTsKICB9CgoKICBzdGF0aWMgdm9pZCBQb3NpdGlvbkZyYW1lVmlldyhuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy YW1lKiBhS2lkRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVmlldyog YVZpZXcpOwojIDEwMiAiLi4vLi4vYmFzZS9zcmMvbnNDb250YWluZXJGcmFtZS5oIgogIHN0YXRp YyB2b2lkIFN5bmNGcmFtZVZpZXdBZnRlclJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250 ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZy YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3KiBhVmll dywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0KiBh Q29tYmluZWRBcmVhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVp bnQzMiBhRmxhZ3MgPSAwKTsKIyAxMTkgIi4uLy4uL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUu aCIKICBuc3Jlc3VsdCBSZWZsb3dDaGlsZChuc0lGcmFtZSogYUtpZEZyYW1lLAogICAgICAgICAg ICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYURlc2lyZWRTaXplLAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUmVmbG93U3RhdGUsCiAgICAgICAg ICAgICAgICAgICAgICAgbnNjb29yZCBhWCwKICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3Jk IGFZLAogICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFGbGFncywKICAgICAgICAgICAg ICAgICAgICAgICBuc1JlZmxvd1N0YXR1cyYgYVN0YXR1cyk7CiMgMTQ5ICIuLi8uLi9iYXNlL3Ny Yy9uc0NvbnRhaW5lckZyYW1lLmgiCiAgc3RhdGljIG5zcmVzdWx0IEZpbmlzaFJlZmxvd0NoaWxk KG5zSUZyYW1lKiBhS2lkRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5zSFRNTFJlZmxvd01ldHJpY3MmIGFEZXNpcmVkU2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhWCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnNjb29yZCBhWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJVaW50MzIgYUZsYWdzKTsKCgogIHN0YXRpYyB2b2lkIFBvc2l0aW9uQ2hpbGRWaWV3 cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lGcmFtZSogYUZyYW1lKTsKCnByb3RlY3RlZDoKICBuc0NvbnRhaW5lckZyYW1l KCk7CiAgfm5zQ29udGFpbmVyRnJhbWUoKTsKCiAgbnNyZXN1bHQgR2V0RnJhbWVGb3JQb2ludFVz aW5nKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG5zUG9pbnQmIGFQb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJQXRvbSogYUxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQUkJvb2wgYUNvbnNpZGVyU2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJRnJhbWUqKiBhRnJhbWUpOwoKICB2aXJ0dWFsIHZvaWQgUGFpbnRDaGlsZHJlbihu c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllcik7CgogIHZpcnR1YWwgdm9p ZCBQYWludENoaWxkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNGcmFtZVBhaW50TGF5ZXIgYVdoaWNoTGF5ZXIpOwoKCgoKICBuc0lGcmFtZSogR2V0T3Zl cmZsb3dGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUFJCb29sIGFSZW1vdmVQcm9wZXJ0eSkgY29uc3Q7CgoKCgogIG5zcmVz dWx0IFNldE92ZXJmbG93RnJhbWVzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPdmVyZmxvd0ZyYW1lcyk7CiMgMjAz ICIuLi8uLi9iYXNlL3NyYy9uc0NvbnRhaW5lckZyYW1lLmgiCiAgUFJCb29sIE1vdmVPdmVyZmxv d1RvQ2hpbGRMaXN0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwojIDIxOSAiLi4vLi4v YmFzZS9zcmMvbnNDb250YWluZXJGcmFtZS5oIgogIHZvaWQgUHVzaENoaWxkcmVuKG5zSVByZXND b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcm9t Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2U2libGluZyk7CgogIG5z RnJhbWVMaXN0IG1GcmFtZXM7Cn07CiMgMjYgIi4uLy4uL2Jhc2Uvc3JjL25zSFRNTENvbnRhaW5l ckZyYW1lLmgiIDIKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zQWJzb2x1dGVGcmFtZTsKY2xhc3Mg bnNQbGFjZWhvbGRlckZyYW1lOwpzdHJ1Y3QgbnNTdHlsZURpc3BsYXk7CnN0cnVjdCBuc1N0eWxl UG9zaXRpb247CiMgNDYgIi4uLy4uL2Jhc2Uvc3JjL25zSFRNTENvbnRhaW5lckZyYW1lLmgiCmNs YXNzIG5zSFRNTENvbnRhaW5lckZyYW1lIDogcHVibGljIG5zQ29udGFpbmVyRnJhbWUgewpwdWJs aWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0 LAogICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250 ZXh0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAg ICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllcik7CiMgNjAgIi4uLy4u L2Jhc2Uvc3JjL25zSFRNTENvbnRhaW5lckZyYW1lLmgiCiAgc3RhdGljIG5zcmVzdWx0IENyZWF0 ZU5leHRJbkZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU91dGVyRnJhbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lGcmFtZSomIGFOZXh0SW5GbG93UmVzdWx0KTsKIyA3NSAiLi4v Li4vYmFzZS9zcmMvbnNIVE1MQ29udGFpbmVyRnJhbWUuaCIKICBzdGF0aWMgbnNyZXN1bHQgQ3Jl YXRlVmlld0ZvckZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhU3R5bGVDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFDb250ZW50UGFy ZW50RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUZv cmNlKTsKCiAgc3RhdGljIG5zcmVzdWx0IFJlcGFyZW50RnJhbWVWaWV3KG5zSVByZXNDb250ZXh0 KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy YW1lKiBhQ2hpbGRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ RnJhbWUqIGFPbGRQYXJlbnRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJRnJhbWUqIGFOZXdQYXJlbnRGcmFtZSk7CgogIHN0YXRpYyBuc3Jlc3VsdCBSZXBhcmVu dEZyYW1lVmlld0xpc3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhQ2hpbGRGcmFtZUxpc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZFBhcmVu dEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUq IGFOZXdQYXJlbnRGcmFtZSk7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBQUkludG4gR2V0U2tpcFNp ZGVzKCkgY29uc3QgPSAwOwp9OwojIDI2ICIuLi8uLi9iYXNlL3NyYy9uc0Jsb2NrRnJhbWUuaCIg MgojIDEgIi4uLy4uL2Jhc2Uvc3JjL25zSFRNTFBhcnRzLmgiIDEKIyAyNyAiLi4vLi4vYmFzZS9z cmMvbnNCbG9ja0ZyYW1lLmgiIDIKIyAxICIuLi8uLi9iYXNlL3NyYy9uc0Fic29sdXRlQ29udGFp bmluZ0Jsb2NrLmgiIDEKIyAyNSAiLi4vLi4vYmFzZS9zcmMvbnNBYnNvbHV0ZUNvbnRhaW5pbmdC bG9jay5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAxCiMgMjYg Ii4uLy4uL2Jhc2Uvc3JjL25zQWJzb2x1dGVDb250YWluaW5nQmxvY2suaCIgMgojIDEgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZyYW1lTGlzdC5oIiAxCiMgMjcgIi4uLy4uL2Jhc2Uvc3Jj L25zQWJzb2x1dGVDb250YWluaW5nQmxvY2suaCIgMgoKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJ RnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwojIDQzICIuLi8uLi9iYXNlL3NyYy9uc0Fic29s dXRlQ29udGFpbmluZ0Jsb2NrLmgiCmNsYXNzIG5zQWJzb2x1dGVDb250YWluaW5nQmxvY2sKewpw dWJsaWM6CiAgbnNyZXN1bHQgRmlyc3RDaGlsZChjb25zdCBuc0lGcmFtZSogYURlbGVnYXRpbmdG cmFtZSwKICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAg ICAgICAgICAgICAgIG5zSUZyYW1lKiogYUZpcnN0Q2hpbGQpIGNvbnN0OwoKICBuc3Jlc3VsdCBT ZXRJbml0aWFsQ2hpbGRMaXN0KG5zSUZyYW1lKiBhRGVsZWdhdGluZ0ZyYW1lLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhQ2hpbGRMaXN0KTsKICBuc3Jlc3VsdCBBcHBl bmRGcmFtZXMobnNJRnJhbWUqIGFEZWxlZ2F0aW5nRnJhbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg IG5zSVByZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRv bSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlz dCk7CiAgbnNyZXN1bHQgSW5zZXJ0RnJhbWVzKG5zSUZyYW1lKiBhRGVsZWdhdGluZ0ZyYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg ICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAg ICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg bnNJRnJhbWUqIGFQcmV2RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBh RnJhbWVMaXN0KTsKICBuc3Jlc3VsdCBSZW1vdmVGcmFtZShuc0lGcmFtZSogYURlbGVnYXRpbmdG cmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0 LAogICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAg ICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgbnNJRnJhbWUqIGFPbGRGcmFtZSk7CiMgNzggIi4uLy4uL2Jhc2Uvc3JjL25zQWJzb2x1dGVD b250YWluaW5nQmxvY2suaCIKICBuc3Jlc3VsdCBSZWZsb3cobnNJRnJhbWUqIGFEZWxlZ2F0aW5n RnJhbWUsCiAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg ICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUmVmbG93U3RhdGUsCiAg ICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAogICAgICAgICAg ICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tIZWlnaHQsCiAgICAgICAgICAgICAgICAg IG5zUmVjdCYgYUNoaWxkQm91bmRzKTsKIyA5MiAiLi4vLi4vYmFzZS9zcmMvbnNBYnNvbHV0ZUNv bnRhaW5pbmdCbG9jay5oIgogIG5zcmVzdWx0IEluY3JlbWVudGFsUmVmbG93KG5zSUZyYW1lKiBh RGVsZWdhdGluZ0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250 ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNI VE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJCb29sJiBhV2FzSGFuZGxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc1JlY3QmIGFDaGlsZEJvdW5kcyk7CgogIHZvaWQgRGVzdHJveUZyYW1lcyhuc0lGcmFtZSog YURlbGVnYXRpbmdGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc0NvbnRleHQqIGFQ cmVzQ29udGV4dCk7CgogIFBSQm9vbCBIYXNBYnNvbHV0ZUZyYW1lcygpIHtyZXR1cm4gbUFic29s dXRlRnJhbWVzLk5vdEVtcHR5KCk7fQoKcHJvdGVjdGVkOgogIG5zcmVzdWx0IFJlZmxvd0Fic29s dXRlRnJhbWUobnNJRnJhbWUqIGFEZWxlZ2F0aW5nRnJhbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRo LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2Nr SGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFLaWRGcmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVmbG93UmVhc29uIGFSZWFzb24s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1N0YXR1cyYgYVN0YXR1cyk7 CgogIHZvaWQgQ2FsY3VsYXRlQ2hpbGRCb3VuZHMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4 dCwgbnNSZWN0JiBhQ2hpbGRCb3VuZHMpOwoKcHJvdGVjdGVkOgogIG5zRnJhbWVMaXN0IG1BYnNv bHV0ZUZyYW1lczsKfTsKIyAyOCAiLi4vLi4vYmFzZS9zcmMvbnNCbG9ja0ZyYW1lLmgiIDIKCmNs YXNzIG5zQmxvY2tSZWZsb3dTdGF0ZTsKY2xhc3MgbnNCdWxsZXRGcmFtZTsKY2xhc3MgbnNMaW5l Qm94OwpjbGFzcyBuc0ZpcnN0TGluZUZyYW1lOwpjbGFzcyBuc0lMaW5lSXRlcmF0b3I7CiMgNDgg Ii4uLy4uL2Jhc2Uvc3JjL25zQmxvY2tGcmFtZS5oIgpleHRlcm4gY29uc3QgbnNJSUQga0Jsb2Nr RnJhbWVDSUQ7CiMgNTcgIi4uLy4uL2Jhc2Uvc3JjL25zQmxvY2tGcmFtZS5oIgpjbGFzcyBuc0Js b2NrRnJhbWUgOiBwdWJsaWMgbnNIVE1MQ29udGFpbmVyRnJhbWUKewpwdWJsaWM6CiAgZnJpZW5k IG5zcmVzdWx0IE5TX05ld0Jsb2NrRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lG cmFtZSoqIGFOZXdGcmFtZSwgUFJVaW50MzIgYUZsYWdzKTsKCgogIHZpcnR1YWwgbnNyZXN1bHQg UXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg ICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICBu c0lGcmFtZSogYVBhcmVudCwKICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhQ29u dGV4dCwKICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2SW5GbG93KTsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldEluaXRpYWxDaGlsZExpc3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUNoaWxkTGlzdCk7CiAg dmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0KTsKICB2aXJ0dWFsIG5zcmVzdWx0 IEluc2VydEZyYW1lcyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJRnJhbWUqIGFQcmV2RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l KiBhRnJhbWVMaXN0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUZyYW1lKG5zSVByZXNDb250 ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxs JiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lKTsKICB2aXJ0 dWFsIG5zcmVzdWx0IEZpcnN0Q2hpbGQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICBuc0lGcmFtZSoqIGFGaXJzdENoaWxkKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldEFkZGl0aW9uYWxDaGlsZExpc3ROYW1lKFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSoqIGFMaXN0TmFtZSkgY29uc3Q7CiAg dmlydHVhbCBuc3Jlc3VsdCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwog IHZpcnR1YWwgbnNyZXN1bHQgSXNTcGxpdHRhYmxlKG5zU3BsaXR0YWJsZVR5cGUmIGFJc1NwbGl0 dGFibGUpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgSXNQZXJjZW50YWdlQmFzZShQUkJvb2wm IGFCYXNlKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KG5zSVByZXNDb250ZXh0KiBh UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVu ZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVj dCwKICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyKTsKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lVHlwZShuc0lBdG9tKiogYVR5cGUpIGNvbnN0OwoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVGb3JQb2ludChuc0lQcmVzQ29udGV4dCogYVBy ZXNDb250ZXh0LCBjb25zdCBuc1BvaW50JiBhUG9pbnQsIG5zRnJhbWVQYWludExheWVyIGFXaGlj aExheWVyLCBuc0lGcmFtZSoqIGFGcmFtZSk7CiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVFdmVu dChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg bnNHVUlFdmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1 cyogYUV2ZW50U3RhdHVzKTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvd0RpcnR5Q2hpbGQobnNJ UHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSogYUNoaWxkKTsKCiAgdmlydHVhbCBuc3Jl c3VsdCBJc1Zpc2libGVGb3JQYWludGluZyhuc0lQcmVzQ29udGV4dCAqIGFQcmVzQ29udGV4dCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFS ZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29s IGFDaGVja1ZpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlz VmlzaWJsZSk7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVBy ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgIG5zSFRNTFJlZmxvd01ldHJpY3MmIGFEZXNp cmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJl Zmxvd1N0YXRlLAogICAgICAgICAgICAgICAgICAgIG5zUmVmbG93U3RhdHVzJiBhU3RhdHVzKTsK CiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJl c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGls ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNwYWNlSUQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUhpbnQpOwojIDE0NCAiLi4vLi4vYmFzZS9z cmMvbnNCbG9ja0ZyYW1lLmgiCiAgdmlydHVhbCB2b2lkIERlbGV0ZUNoaWxkc05leHRJbkZsb3co bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lGcmFtZSogYU5leHRJbkZsb3cpOwoKCgoKCiAgbnNJRnJhbWUqIEdldFRv cEJsb2NrQ2hpbGQoKTsKCgoKCiAgbnNyZXN1bHQgVXBkYXRlU3BhY2VNYW5hZ2VyKG5zSVByZXND b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVNw YWNlTWFuYWdlciogYVNwYWNlTWFuYWdlcik7CgogIG5zTGluZUJveCogRmluZExpbmVGb3IobnNJ RnJhbWUqIGFGcmFtZSwgbnNMaW5lQm94KiogYVByZXZMaW5lUmVzdWx0LAogICAgICAgICAgICAg ICAgICAgICAgICAgUFJCb29sKiBhSXNGbG9hdGVyUmVzdWx0KTsKCiAgc3RhdGljIG5zcmVzdWx0 IEdldEN1cnJlbnRMaW5lKG5zQmxvY2tSZWZsb3dTdGF0ZSAqYVN0YXRlLCBuc0xpbmVCb3ggKiph T3V0Q3VycmVudExpbmUpOwoKICBzdGF0aWMgdm9pZCBDb21iaW5lUmVjdHMoY29uc3QgbnNSZWN0 JiByMSwgbnNSZWN0JiByMik7Cgpwcm90ZWN0ZWQ6CiAgbnNCbG9ja0ZyYW1lKCk7CiAgdmlydHVh bCB+bnNCbG9ja0ZyYW1lKCk7CgogIG5zSVN0eWxlQ29udGV4dCogR2V0Rmlyc3RMZXR0ZXJTdHls ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKCgoKCgoKCiAgbnNyZXN1bHQgR2V0Q2xv c2VzdExpbmUobnNJTGluZUl0ZXJhdG9yICphTEksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgbnNQb2ludCAmYU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBuc1BvaW50ICZhUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQz MiAmYUNsb3Nlc3RMaW5lKTsKCiAgdm9pZCBTZXRGbGFncyhQUlVpbnQzMiBhRmxhZ3MpIHsKICAg IG1TdGF0ZSAmPSB+MHhGRkYwMDAwMDsKICAgIG1TdGF0ZSB8PSBhRmxhZ3M7CiAgfQoKICBQUkJv b2wgSGF2ZU91dHNpZGVCdWxsZXQoKSBjb25zdCB7CgoKCgoKICAgIHJldHVybiAwICE9IChtU3Rh dGUgJiAweDQwMDAwMDAwKTsKICB9CgoKCgogIFBSQm9vbCBJc0luY3JlbWVudGFsRGFtYWdlQ29u c3RyYWluZWQoY29uc3QgbnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUpIGNvbnN0OwoKCgoKICB2 b2lkIFNsaWRlTGluZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAg ICBuc0xpbmVCb3gqIGFMaW5lLCBuc2Nvb3JkIGFEWSk7CgoKCgoKICBQUkJvb2wgRHJhaW5PdmVy Zmxvd0xpbmVzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwoKICB2aXJ0dWFsIFBSSW50 biBHZXRTa2lwU2lkZXMoKSBjb25zdDsKCiAgdmlydHVhbCB2b2lkIENvbXB1dGVGaW5hbFNpemUo Y29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBhTWV0cmljcyk7CgoKCgoKCgog IG5zcmVzdWx0IEFkZEZyYW1lcyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg ICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlzdCwKICAgICAgICAgICAgICAgICAgICAg bnNJRnJhbWUqIGFQcmV2U2libGluZyk7CgoKCgoKICB2b2lkIEZpeFBhcmVudEFuZFZpZXcobnNJ UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUqIGFGcmFtZSk7CgoKCgoKCiAgbnNy ZXN1bHQgRG9SZW1vdmVGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg ICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFEZWxldGVkRnJhbWUpOwoKCgogIG5zcmVzdWx0 IFByZXBhcmVJbml0aWFsUmVmbG93KG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlKTsKCgogIG5z cmVzdWx0IFByZXBhcmVTdHlsZUNoYW5nZWRSZWZsb3cobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3Rh dGUpOwoKCgoKICBuc3Jlc3VsdCBQcmVwYXJlQ2hpbGRJbmNyZW1lbnRhbFJlZmxvdyhuc0Jsb2Nr UmVmbG93U3RhdGUmIGFTdGF0ZSk7CgoKCgogIG5zcmVzdWx0IFByZXBhcmVSZXNpemVSZWZsb3co bnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUpOwoKCiAgbnNyZXN1bHQgUmVmbG93RGlydHlMaW5l cyhuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSk7CgoKICB2b2lkIFJlY292ZXJTdGF0ZUZyb20o bnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zTGlu ZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVjdCogYURhbWFnZVJlY3Qp OwojIDI4MCAiLi4vLi4vYmFzZS9zcmMvbnNCbG9ja0ZyYW1lLmgiCiAgbnNyZXN1bHQgUmVmbG93 TGluZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgIG5z TGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFLZWVwUmVmbG93 R29pbmcsCiAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYURhbWFnZURpcnR5QXJlYSA9IDAp OwoKICBuc3Jlc3VsdCBQbGFjZUxpbmUobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAg ICAgICAgICAgICAgICAgIG5zTGluZUxheW91dCYgYUxpbmVMYXlvdXQsCiAgICAgICAgICAgICAg ICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUtl ZXBSZWZsb3dHb2luZywKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFVcGRhdGVNYXhpbXVt V2lkdGgpOwoKICBuc3Jlc3VsdCBNYXJrTGluZURpcnR5IChuc0xpbmVCb3gqIGFMaW5lLAogICAg ICAgICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCogYVByZXZMaW5lKTsKCgogIHZvaWQgUG9z dFBsYWNlTGluZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAg ICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTaXplJiBh TWF4RWxlbWVudFNpemUpOwoKICB2b2lkIENvbXB1dGVMaW5lTWF4RWxlbWVudFNpemUobnNCbG9j a1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z TGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU2l6ZSog YU1heEVsZW1lbnRTaXplKTsKCgogIFBSQm9vbCBTaG91bGRKdXN0aWZ5TGluZShuc0Jsb2NrUmVm bG93U3RhdGUmIGFTdGF0ZSwgbnNMaW5lQm94KiBhTGluZSk7CgogIHZvaWQgRGVsZXRlTGluZShu c0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwgbnNMaW5lQm94KiBhTGluZSk7CgoKCgogIFBSQm9v bCBTaG91bGRBcHBseVRvcE1hcmdpbihuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSk7CgogIG5zcmVzdWx0IFJl Zmxvd0Jsb2NrRnJhbWUobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJCb29sKiBhS2VlcEdvaW5nKTsKCiAgbnNyZXN1bHQgUmVmbG93SW5saW5lRnJhbWVzKG5z QmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFL ZWVwTGluZUdvaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYURhbWFn ZURpcnR5QXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFVcGRhdGVN YXhpbXVtV2lkdGggPSAwKTsKCiAgbnNyZXN1bHQgRG9SZWZsb3dJbmxpbmVGcmFtZXMobnNCbG9j a1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNM aW5lTGF5b3V0JiBhTGluZUxheW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCog YUtlZXBSZWZsb3dHb2luZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQ4 KiBhTGluZVJlZmxvd1N0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv b2wgYVVwZGF0ZU1heGltdW1XaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ UkJvb2wgYURhbWFnZURpcnR5QXJlYSk7CgogIG5zcmVzdWx0IERvUmVmbG93SW5saW5lRnJhbWVz QXV0byhuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJCb29sKiBhS2VlcFJlZmxvd0dvaW5nLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQUlVpbnQ4KiBhTGluZVJlZmxvd1N0YXR1cywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFVcGRhdGVNYXhpbXVtV2lkdGgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRGFtYWdlRGlydHlBcmVhKTsKCiAg bnNyZXN1bHQgRG9SZWZsb3dJbmxpbmVGcmFtZXNNYWxsb2MobnNCbG9ja1JlZmxvd1N0YXRlJiBh U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBh TGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFLZWVw UmVmbG93R29pbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50 OCogYUxpbmVSZWZsb3dTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJCb29sIGFVcGRhdGVNYXhpbXVtV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUFJCb29sIGFEYW1hZ2VEaXJ0eUFyZWEpOwoKICBuc3Jlc3VsdCBSZWZsb3dJ bmxpbmVGcmFtZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0xpbmVMYXlvdXQmIGFMaW5lTGF5b3V0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQ4KiBh TGluZVJlZmxvd1N0YXR1cyk7CgogIG5zcmVzdWx0IFJlZmxvd0Zsb2F0ZXIobnNCbG9ja1JlZmxv d1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc1BsYWNlaG9sZGVyRnJh bWUqIGFQbGFjZWhvbGRlciwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVjdCYgYUNvbWJp bmVkUmVjdFJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zTWFyZ2luJiBhTWFyZ2lu UmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNNYXJnaW4mIGFDb21wdXRlZE9mZnNl dHNSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkJiBhTWF4RWxlbWVudFdp ZHRoUmVzdWx0KTsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVDb250aW51YXRpb25Gb3Io bnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBSQm9vbCYgYU1hZGVOZXdGcmFtZSk7CgogIG5zcmVzdWx0IFNwbGl0 TGluZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgbnNM aW5lTGF5b3V0JiBhTGluZUxheW91dCwKICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBh TGluZSwKICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSk7CgogIG5zQmxvY2tG cmFtZSogRmluZEZvbGxvd2luZ0Jsb2NrRnJhbWUobnNJRnJhbWUqIGFGcmFtZSk7CgogIG5zcmVz dWx0IFB1bGxGcmFtZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAg ICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEYW1h Z2VEZWxldGVkTGluZSwKICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqJiBhRnJhbWVSZXN1 bHQpOwoKICBuc3Jlc3VsdCBQdWxsRnJhbWUobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAg ICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCogYVRvTGluZSwKICAgICAgICAgICAgICAgICAg ICAgbnNMaW5lQm94KiogYUZyb21MaXN0LAogICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVVw ZGF0ZUdlb21ldHJpY1BhcmVudCwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEYW1hZ2VE ZWxldGVkTGluZXMsCiAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiYgYUZyYW1lUmVzdWx0 LAogICAgICAgICAgICAgICAgICAgICBQUkJvb2wmIGFTdG9wUHVsbGluZyk7CgogIHZvaWQgUHVz aExpbmVzKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlKTsKCgoKICB2aXJ0dWFsIHZvaWQgUGFp bnRDaGlsZHJlbihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllcik7Cgog IHZvaWQgUGFpbnRGbG9hdGVycyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg ICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0KTsKCiAgdm9pZCBQcm9w YWdhdGVSZWZsb3dEYW1hZ2UobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBuc1JlY3QmIGFPbGRDb21iaW5lZEFyZWEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNjb29yZCBhRGVsdGFZKTsKCiAgdm9pZCBCdWlsZEZsb2F0ZXJMaXN0KCk7 CgoKCgogIHZvaWQgUmVudW1iZXJMaXN0cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsK CiAgUFJCb29sIFJlbnVtYmVyTGlzdHNJbihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFDb250YWluZXJGcmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIGFPcmRpbmFsLAogICAgICAgICAgICAgICAgICAg ICAgICAgUFJJbnQzMiBhRGVwdGgpOwoKICBQUkJvb2wgUmVudW1iZXJMaXN0c0luQmxvY2sobnNJ UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNCbG9ja0ZyYW1lKiBhQ29udGFpbmVyRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBSSW50MzIqIGFPcmRpbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu dDMyIGFEZXB0aCk7CgogIFBSQm9vbCBSZW51bWJlckxpc3RzRm9yKG5zSVByZXNDb250ZXh0KiBh UHJlc0NvbnRleHQsIG5zSUZyYW1lKiBhS2lkLCBQUkludDMyKiBhT3JkaW5hbCwgUFJJbnQzMiBh RGVwdGgpOwoKICBQUkJvb2wgRnJhbWVTdGFydHNDb3VudGVyU2NvcGUobnNJRnJhbWUqIGFGcmFt ZSk7CgogIG5zcmVzdWx0IFVwZGF0ZUJ1bGxldFBvc2l0aW9uKG5zQmxvY2tSZWZsb3dTdGF0ZSYg YVN0YXRlKTsKCiAgdm9pZCBSZWZsb3dCdWxsZXQobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUs CiAgICAgICAgICAgICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYU1ldHJpY3MpOwoKCgog IG5zTGluZUJveCogR2V0T3ZlcmZsb3dMaW5lcyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlbW92ZVByb3BlcnR5KSBj b25zdDsKCiAgbnNyZXN1bHQgU2V0T3ZlcmZsb3dMaW5lcyhuc0lQcmVzQ29udGV4dCogYVByZXND b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhT3ZlcmZsb3dG cmFtZXMpOwoKICBuc0lGcmFtZSogTGFzdENoaWxkKCk7CiMgNDQ5ICIuLi8uLi9iYXNlL3NyYy9u c0Jsb2NrRnJhbWUuaCIKICBuc2Nvb3JkIG1Bc2NlbnQ7CgogIG5zTGluZUJveCogbUxpbmVzOwoK CiAgbnNGcmFtZUxpc3QgbUZsb2F0ZXJzOwoKCgogIG5zQnVsbGV0RnJhbWUqIG1CdWxsZXQ7Cgog IGZyaWVuZCBjbGFzcyBuc0Jsb2NrUmVmbG93U3RhdGU7Cgpwcml2YXRlOgogIG5zQWJzb2x1dGVD b250YWluaW5nQmxvY2sgbUFic29sdXRlQ29udGFpbmVyOwojIDQ4NCAiLi4vLi4vYmFzZS9zcmMv bnNCbG9ja0ZyYW1lLmgiCn07CiMgMjcgIm5zRm9ybUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMQojIDI4ICJuc0Zvcm1GcmFtZS5oIiAyCiMg MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiIDEKIyAxNyAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25zRmlsZVNwZWMuaCIgMQojIDEzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z RmlsZVNwZWMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAx MzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIiAxCiMgMTMzICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNGaWxlU3BlYy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry aW5nLmgiIDEKIyAxMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIK IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMQojIDEzNSAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1j dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAxMzYgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxNjAgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxv Y2FsRmlsZS5oIiAxCiMgMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUu aCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAxCiMgMTcgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1lcmF0b3I7 CiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNzIG5zSUZpbGUg OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YzhjMGEwODAsIDB4MDg2OCwgMHgx MWQzLCB7IDB4OTEsIDB4NWYsIDB4ZDksIDB4ZDgsIDB4ODksIDB4ZDQsIDB4OGUsIDB4M2MgfX07 IHJldHVybiBpaWQ7fQoKCgoKCgoKICBlbnVtIHsgTk9STUFMX0ZJTEVfVFlQRSA9IDBVIH07Cgog IGVudW0geyBESVJFQ1RPUllfVFlQRSA9IDFVIH07CiMgNTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmQoY29uc3QgY2hhciAqbm9k ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRVbmljb2RlKGNvbnN0IFBSVW5pY2hh ciAqbm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOb3JtYWxpemUodm9pZCkgPSAw OwojIDg1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgQ3JlYXRlKFBSVWludDMyIHR5cGUsIFBSVWludDMyIHBlcm1pc3Npb25zKSA9IDA7CgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlYWZOYW1lKGNoYXIgKiAqYUxlYWZOYW1lKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMZWFmTmFtZShjb25zdCBjaGFyICogYUxlYWZOYW1lKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaWNvZGVMZWFmTmFtZShQUlVuaWNoYXIgKiAq YVVuaWNvZGVMZWFmTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VW5pY29kZUxlYWZO YW1lKGNvbnN0IFBSVW5pY2hhciAqIGFVbmljb2RlTGVhZk5hbWUpID0gMDsKIyAxMjIgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG8o bnNJRmlsZSAqbmV3UGFyZW50RGlyLCBjb25zdCBjaGFyICpuZXdOYW1lKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IENvcHlUb1VuaWNvZGUobnNJRmlsZSAqbmV3UGFyZW50RGlyLCBjb25zdCBQ UlVuaWNoYXIgKm5ld05hbWUpID0gMDsKIyAxMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG9Gb2xsb3dpbmdMaW5rcyhuc0lGaWxl ICpuZXdQYXJlbnREaXIsIGNvbnN0IGNoYXIgKm5ld05hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgQ29weVRvRm9sbG93aW5nTGlua3NVbmljb2RlKG5zSUZpbGUgKm5ld1BhcmVudERpciwg Y29uc3QgUFJVbmljaGFyICpuZXdOYW1lKSA9IDA7CiMgMTY3ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVRvKG5zSUZpbGUgKm5ld1Bh cmVudERpciwgY29uc3QgY2hhciAqbmV3TmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBN b3ZlVG9Vbmljb2RlKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgUFJVbmljaGFyICpuZXdO YW1lKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3Bhd24oY29uc3QgY2hhciAqKmFy Z3MsIFBSVWludDMyIGNvdW50KSA9IDA7CiMgMTg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlKFBSQm9vbCByZWN1cnNpdmUpID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGVybWlzc2lvbnMoUFJVaW50MzIgKmFQZXJt aXNzaW9ucykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGVybWlzc2lvbnMoUFJVaW50MzIg YVBlcm1pc3Npb25zKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlcm1pc3Npb25zT2ZM aW5rKFBSVWludDMyICphUGVybWlzc2lvbnNPZkxpbmspID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldFBlcm1pc3Npb25zT2ZMaW5rKFBSVWludDMyIGFQZXJtaXNzaW9uc09mTGluaykgPSAwOwoK CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhc3RNb2RpZmljYXRpb25EYXRlKFBSSW50NjQg KmFMYXN0TW9kaWZpY2F0aW9uRGF0ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFzdE1v ZGlmaWNhdGlvbkRhdGUoUFJJbnQ2NCBhTGFzdE1vZGlmaWNhdGlvbkRhdGUpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlmaWNhdGlvbkRhdGVPZkxpbmsoUFJJbnQ2NCAqYUxh c3RNb2RpZmljYXRpb25EYXRlT2ZMaW5rKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMYXN0 TW9kaWZpY2F0aW9uRGF0ZU9mTGluayhQUkludDY0IGFMYXN0TW9kaWZpY2F0aW9uRGF0ZU9mTGlu aykgPSAwOwojIDIyMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEZpbGVTaXplKFBSSW50NjQgKmFGaWxlU2l6ZSkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0RmlsZVNpemUoUFJJbnQ2NCBhRmlsZVNpemUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RmlsZVNpemVPZkxpbmsoUFJJbnQ2NCAqYUZpbGVTaXplT2ZMaW5rKSA9 IDA7CiMgMjQ4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0VGFyZ2V0KGNoYXIgKiAqYVRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRVbmljb2RlVGFyZ2V0KFBSVW5pY2hhciAqICphVW5pY29kZVRhcmdldCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRoKGNoYXIgKiAqYVBhdGgpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0VW5pY29kZVBhdGgoUFJVbmljaGFyICogKmFVbmljb2RlUGF0aCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFeGlzdHMoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IElzV3JpdGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IElzUmVhZGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IElzRXhlY3V0YWJsZShQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgSXNIaWRkZW4oUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IElzRGlyZWN0b3J5KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBJc0ZpbGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU3lt bGluayhQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTcGVj aWFsKFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDMxNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVVuaXF1ZShjb25zdCBjaGFyICpz dWdnZXN0ZWROYW1lLCBQUlVpbnQzMiB0eXBlLCBQUlVpbnQzMiBwZXJtaXNzaW9ucykgPSAwOwoj IDMyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IENsb25lKG5zSUZpbGUgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEVxdWFscyhuc0lGaWxlICppbkZpbGUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgQ29udGFpbnMobnNJRmlsZSAqaW5GaWxlLCBQUkJvb2wgcmVjdXIsIFBS Qm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJ RmlsZSAqICphUGFyZW50KSA9IDA7CiMgMzU4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ RmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlyZWN0b3J5RW50cmllcyhuc0lTaW1wbGVF bnVtZXJhdG9yICogKmFEaXJlY3RvcnlFbnRyaWVzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRVUkwoY2hhciAqICphVVJMKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRVUkwo Y29uc3QgY2hhciAqIGFVUkwpID0gMDsKCn07CiMgODMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJRmlsZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFu YWdlci5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdl ci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgi IDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiIDIK IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIiAxCiMgMjkgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAyCgoKCgoKY2xhc3MgbnNJU2h1dGRv d25MaXN0ZW5lcjsKY2xhc3MgbnNJRGlyZWN0b3J5U2VydmljZVByb3ZpZGVyOwojIDg3ICIuLi8u Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VydmljZU1hbmFnZXIuaCIKY2xhc3MgbnNJU2Vydmlj ZU1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CgogICAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhjZjBkZjNiMCwg MHgzNDAxLCAweDExZDIsIHsweDgxLCAweDYzLCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweDlk LCAweDdhfSB9OyByZXR1cm4gaWlkO307CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAg UmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBhU2Vydmlj ZSkgPSAwOwojIDExMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2Vy LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShjb25zdCBuc0NJ RCYgYUNsYXNzKSA9IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25z dCBuc0NJRCYgYUNsYXNzLCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAgbnNJU3Vw cG9ydHMqICpyZXN1bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIqIHNodXRk b3duTGlzdGVuZXIgPSAwKSA9IDA7CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAgIFJlbGVhc2VT ZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBzZXJ2aWNlLAogICAgICAg ICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApID0g MDsKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2UoY29uc3QgY2hh ciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSkgPSAwOwoKICAgIHZpcnR1YWwg bnNyZXN1bHQKICAgIFVucmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFjdElEKSA9 IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25zdCBjaGFyKiBhQ29u dHJhY3RJRCwgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiAq cmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3Rl bmVyID0gMCkgPSAwOwoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShj b25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAgICAg ICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCkgPSAwOwoK fTsKIyAxNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpj bGFzcyBuc0lTaHV0ZG93bkxpc3RlbmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgoK ICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7IDB4NTZkZWNhZTAsIDB4MzQwNiwgMHgxMWQyLCB7MHg4MSwgMHg2MywgMHgwMCwgMHg2MCwg MHgwOCwgMHgxMSwgMHg5ZCwgMHg3YX0gfTsgcmV0dXJuIGlpZDt9OwoKICAgIHZpcnR1YWwgbnNy ZXN1bHQKICAgIE9uU2h1dGRvd24oY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMqIHNl cnZpY2UpID0gMDsKCn07CgoKCgpjbGFzcyBuc1NlcnZpY2VNYW5hZ2VyIHsKcHVibGljOgoKICAg IHN0YXRpYyBuc3Jlc3VsdAogICAgUmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3Ms IG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBVbnJlZ2lz dGVyU2VydmljZShjb25zdCBuc0NJRCYgYUNsYXNzKTsKCiAgICBzdGF0aWMgbnNyZXN1bHQKICAg IEdldFNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAg ICAgICAgICAgIG5zSVN1cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93 bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKICAgIHN0YXRpYyBuc3Jlc3VsdAog ICAgUmVsZWFzZVNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMqIHNlcnZp Y2UsCiAgICAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3Rl bmVyID0gMCk7CgoKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2UoY29u c3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3RhdGlj IG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShjb25zdCBjaGFyKiBhQ29udHJhY3RJRCk7 CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBHZXRTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFj dElELCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqICpyZXN1 bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIqIHNodXRkb3duTGlzdGVuZXIg PSAwKTsKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShjb25zdCBjaGFy KiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICBu c0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKCiAgICBzdGF0aWMg bnNyZXN1bHQgR2V0R2xvYmFsU2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1 bHQpOwoKCgogICAgc3RhdGljIG5zcmVzdWx0IFNodXRkb3duR2xvYmFsU2VydmljZU1hbmFnZXIo bnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwp9OwoKCgoKY2xhc3MgbnNHZXRTZXJ2aWNlQnlD SUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAgICBuc0dldFNl cnZpY2VCeUNJRCggY29uc3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFn ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAgOiBtQ0lEKGFDSUQpLAogICAgICAg ICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdlcikg KSwKICAgICAgICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICAgICAgICB7CgogICAgICAgIH0K CiAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9p ZCoqICkgY29uc3Q7CiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDSUQoKSB7fTsKCiAg ICBwcml2YXRlOgogICAgICBjb25zdCBuc0NJRCYgbUNJRDsKICAgICAgbnNDT01QdHI8bnNJU2Vy dmljZU1hbmFnZXI+IG1TZXJ2aWNlTWFuYWdlcjsKICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsK ICB9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldFNlcnZpY2UoIGNvbnN0 IG5zQ0lEJiBhQ0lELCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNHZXRT ZXJ2aWNlQnlDSUQoYUNJRCwgMCwgZXJyb3IpOwogIH0KCmlubGluZQpjb25zdCBuc0dldFNlcnZp Y2VCeUNJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBuc0NJRCYgYUNJRCwgbnNJU3VwcG9ydHMqIGFT ZXJ2aWNlTWFuYWdlciwgbnNyZXN1bHQqIGVycm9yID0gMCApCiAgewogICAgcmV0dXJuIG5zR2V0 U2VydmljZUJ5Q0lEKGFDSUQsIGFTZXJ2aWNlTWFuYWdlciwgZXJyb3IpOwogIH0KCmNsYXNzIG5z R2V0U2VydmljZUJ5Q29udHJhY3RJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKICB7CiAgICBw dWJsaWM6CiAgICAgIG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNvbnRy YWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIg KQogICAgICAgICAgOiBtQ29udHJhY3RJRChhQ29udHJhY3RJRCksCiAgICAgICAgICAgIG1TZXJ2 aWNlTWFuYWdlciggZG9fUXVlcnlJbnRlcmZhY2UoYVNlcnZpY2VNYW5hZ2VyKSApLAogICAgICAg ICAgICBtRXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAgICAg IHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25z dDsKCiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDb250cmFjdElEKCkge307CgogICAg cHJpdmF0ZToKICAgICAgY29uc3QgY2hhciogbUNvbnRyYWN0SUQ7CiAgICAgIG5zQ09NUHRyPG5z SVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1hbmFnZXI7CiAgICAgIG5zcmVzdWx0KiBtRXJyb3JQ dHI7CiAgfTsKCmlubGluZQpjb25zdCBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQKZG9fR2V0U2Vy dmljZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQogIHsK ICAgIHJldHVybiBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIDAsIGVycm9y KTsKICB9CgppbmxpbmUKY29uc3QgbnNHZXRTZXJ2aWNlQnlDb250cmFjdElECmRvX0dldFNlcnZp Y2UoIGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5hZ2Vy LCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2aWNlQnlDb250 cmFjdElEKGFDb250cmFjdElELCBhU2VydmljZU1hbmFnZXIsIGVycm9yKTsKICB9CgpjbGFzcyBu c0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCnsKcHVibGlj OgogIG5zR2V0U2VydmljZUZyb21DYXRlZ29yeShjb25zdCBjaGFyKiBhQ2F0ZWdvcnksIGNvbnN0 IGNoYXIqIGFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFT ZXJ2aWNlTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1bHQqIGFFcnJv clB0cikKICAgIDogbUNhdGVnb3J5KGFDYXRlZ29yeSksCiAgICAgIG1FbnRyeShhRW50cnkpLAog ICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdlcikg KSwKICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICB7CgogIH0KCiAgdmlydHVhbCBuc3Jlc3Vs dCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwogIHZpcnR1YWwgfm5z R2V0U2VydmljZUZyb21DYXRlZ29yeSgpIHt9Owpwcm90ZWN0ZWQ6CiAgY29uc3QgY2hhciogbUNh dGVnb3J5OwogIGNvbnN0IGNoYXIqIG1FbnRyeTsKICBuc0NPTVB0cjxuc0lTZXJ2aWNlTWFuYWdl cj4gbVNlcnZpY2VNYW5hZ2VyOwogIG5zcmVzdWx0KiBtRXJyb3JQdHI7Cn07CgppbmxpbmUKY29u c3QgbnNHZXRTZXJ2aWNlRnJvbUNhdGVnb3J5CmRvX0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkoIGNv bnN0IGNoYXIqIGNhdGVnb3J5LCBjb25zdCBjaGFyKiBlbnRyeSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNyZXN1bHQqIGVycm9yID0gMCkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2aWNl RnJvbUNhdGVnb3J5KGNhdGVnb3J5LCBlbnRyeSwgMCwgZXJyb3IpOwogIH0KIyAzNTYgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1bHQK TlNfTmV3U2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwojIDM2OSAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiCmV4dGVybiBuc3Jl c3VsdApOU19Jbml0WFBDT00obnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQsIG5zSUZpbGUqIGJp bkRpcmVjdG9yeSk7CgoKCgpleHRlcm4gbnNyZXN1bHQKTlNfSW5pdFhQQ09NMihuc0lTZXJ2aWNl TWFuYWdlciogKnJlc3VsdCwgbnNJRmlsZSogYmluRGlyZWN0b3J5LCBuc0lEaXJlY3RvcnlTZXJ2 aWNlUHJvdmlkZXIqIGFwcEZpbGVMb2NhdGlvblByb3ZpZGVyKTsKIyAzODYgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1bHQKTlNfU2h1 dGRvd25YUENPTShuc0lTZXJ2aWNlTWFuYWdlciogc2Vydk1ncik7CiMgODMyICIuLi8uLi8uLi8u Li9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSVByb3BlcnRpZXMuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJv cGVydGllcy5oIgpjbGFzcyBuc0lQcm9wZXJ0aWVzIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1 YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE IGlpZCA9IHsweDYxYzFiM2MwLCAweGIxYmYsIDB4MTFkMywgeyAweDkzLCAweGI2LCAweDAwLCAw eDEwLCAweDRiLCAweGEwLCAweGZkLCAweDQwIH19OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBEZWZpbmUoY29uc3QgY2hhciAqcHJvcCwgbnNJU3VwcG9ydHMgKmluaXRp YWxWYWx1ZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVuZGVmaW5lKGNvbnN0IGNo YXIgKnByb3ApID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXQoY29uc3QgY2hhciAq cHJvcCwgY29uc3QgbnNJSUQgJiB1dWlkLCB2b2lkICogKnJlc3VsdCkgPSAwOwoKCgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldChjb25zdCBjaGFyICpwcm9wLCBuc0lTdXBwb3J0cyAqdmFsdWUp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzKGNvbnN0IGNoYXIgKnByb3AsIFBSQm9v bCAqX3JldHZhbCkgPSAwOwoKfTsKIyAxNjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQ cm9wZXJ0aWVzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1h bmFnZXIuaCIgMQojIDE2NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByb3BlcnRpZXMu aCIgMgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3SVByb3BlcnRpZXMobnNJU3VwcG9ydHMqIG91dGVy LCBuc0lQcm9wZXJ0aWVzKiAqcmVzdWx0KQp7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga1Byb3Bl cnRpZXNDSUQgPSB7IDB4NGRlMmJjOTAsIDB4YjFiZiwgMHgxMWQzLCB7MHg5MywgMHhiNiwgMHgw MCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MH0gfTsKICAgIHJldHVybiBuc0NvbXBvbmVu dE1hbmFnZXI6OkNyZWF0ZUluc3RhbmNlKGtQcm9wZXJ0aWVzQ0lELAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSVByb3BlcnRpZXM+OjpH ZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2 b2lkKiopcmVzdWx0KTsKfQojIDgzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUu aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAxCiMgODM0ICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAyCgppbmxpbmUgbnNyZXN1bHQKTlNf R2V0U3BlY2lhbERpcmVjdG9yeShjb25zdCBjaGFyKiBzcGVjaWFsRGlyTmFtZSwgbnNJRmlsZSog KnJlc3VsdCkKewogICAgbnNyZXN1bHQgcnY7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0RpcmVj dG9yeVNlcnZpY2VDSUQgPSB7MHhmMDAxNTJkMCwweGI0MGIsMHgxMWQzLHsweDhjLCAweDljLCAw eDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAweDc0fX07CiAgICBuc0NPTVB0cjxuc0lQcm9w ZXJ0aWVzPiBzZXJ2ID0gZG9fR2V0U2VydmljZShrRGlyZWN0b3J5U2VydmljZUNJRCwgJnJ2KTs7 CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgbnNDT01QdHI8bnNJ U3VwcG9ydHM+IGRpcjsKICAgIHJ2ID0gc2Vydi0+R2V0KHNwZWNpYWxEaXJOYW1lLCBuc0NPTVR5 cGVJbmZvPG5zSUZpbGU+OjpHZXRJSUQoKSwgZ2V0dGVyX0FkZFJlZnMoZGlyKSk7CiAgICBpZiAo KChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgKnJlc3VsdCA9IChuc0lGaWxlKilk aXIuZ2V0KCk7CiAgICBpZiAoKnJlc3VsdCkKICAgICAgICAoKnJlc3VsdCktPkFkZFJlZigpOwog ICAgcmV0dXJuIDA7Cn0KIyAxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmls ZS5oIiAyCgoKCgoKCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3ByaW8uaCIgMQojIDI5ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIgMQojIDMwICIvd2luZG93cy9oZGExMi9t b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCiMgMSAiL3dpbmRvd3Mv aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIiAxCiMgMzEg Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi IDIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJpbnJ2YWwuaCIgMQojIDMyICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJpby5oIiAyCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAxCiMgNDggIi93aW5kb3dzL2hkYTEyL21vei1j dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluZXQuaCIKIyAxICIvdXNyL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDEgMwojIDQ5ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5o IiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgpl eHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIgMSAzCiMgMjIgIi91c3Iv aW5jbHVkZS9zeXMvdWlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg MjMgIi91c3IvaW5jbHVkZS9zeXMvdWlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAyIDMKCmV4dGVybiAiQyIg ewoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdWlvLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUv Yml0cy91aW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjUgIi91 c3IvaW5jbHVkZS9iaXRzL3Vpby5oIiAyIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2JpdHMvdWlvLmgi IDMKc3RydWN0IGlvdmVjCiAgewogICAgdm9pZCAqaW92X2Jhc2U7CiAgICBzaXplX3QgaW92X2xl bjsKICB9OwojIDMwICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAyIDMKCgoKCgoKCmV4dGVybiBz c2l6ZV90IHJlYWR2IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9fdmVjdG9yLCBp bnQgX19jb3VudCkKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGV2IChp bnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9fdmVjdG9yLCBpbnQgX19jb3VudCkKICAg ICB0aHJvdyAoKTsKCn0KIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgojIDEg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCgoKCgojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMv c29ja2V0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251 LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0 LmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMu MC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0Lmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVk ZS9iaXRzL3NvY2tldC5oIiAyIDMKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CgoK CgplbnVtIF9fc29ja2V0X3R5cGUKewogIFNPQ0tfU1RSRUFNID0gMSwKCgogIFNPQ0tfREdSQU0g PSAyLAoKCiAgU09DS19SQVcgPSAzLAoKICBTT0NLX1JETSA9IDQsCgogIFNPQ0tfU0VRUEFDS0VU ID0gNSwKCgogIFNPQ0tfUEFDS0VUID0gMTAKCgoKfTsKIyAxMzggIi91c3IvaW5jbHVkZS9iaXRz L3NvY2tldC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2FkZHIuaCIgMSAzCiMgMjkg Ii91c3IvaW5jbHVkZS9iaXRzL3NvY2thZGRyLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp bnQgc2FfZmFtaWx5X3Q7CiMgMTM5ICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCgoK c3RydWN0IHNvY2thZGRyCiAgewogICAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogICAgY2hhciBz YV9kYXRhWzE0XTsKICB9OwojIDE1OCAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMKc3Ry dWN0IHNvY2thZGRyX3N0b3JhZ2UKICB7CiAgICBzYV9mYW1pbHlfdCBzc19mYW1pbHk7CiAgICBf X3VpbnQzMl90IF9fc3NfYWxpZ247CiAgICBjaGFyIF9fc3NfcGFkZGluZ1soMTI4IC0gKDIgKiBz aXplb2YgKF9fdWludDMyX3QpKSldOwogIH07CgoKCmVudW0KICB7CiAgICBNU0dfT09CID0gMHgw MSwKCiAgICBNU0dfUEVFSyA9IDB4MDIsCgogICAgTVNHX0RPTlRST1VURSA9IDB4MDQsCgoKCiAg ICBNU0dfVFJZSEFSRCA9IE1TR19ET05UUk9VVEUsCgoKICAgIE1TR19DVFJVTkMgPSAweDA4LAoK ICAgIE1TR19QUk9YWSA9IDB4MTAsCgogICAgTVNHX1RSVU5DID0gMHgyMCwKCiAgICBNU0dfRE9O VFdBSVQgPSAweDQwLAoKICAgIE1TR19FT1IgPSAweDgwLAoKICAgIE1TR19XQUlUQUxMID0gMHgx MDAsCgogICAgTVNHX0ZJTiA9IDB4MjAwLAoKICAgIE1TR19TWU4gPSAweDQwMCwKCiAgICBNU0df Q09ORklSTSA9IDB4ODAwLAoKICAgIE1TR19SU1QgPSAweDEwMDAsCgogICAgTVNHX0VSUlFVRVVF ID0gMHgyMDAwLAoKICAgIE1TR19OT1NJR05BTCA9IDB4NDAwMAoKICB9OwoKCgoKc3RydWN0IG1z Z2hkcgogIHsKICAgIHZvaWQgKm1zZ19uYW1lOwogICAgc29ja2xlbl90IG1zZ19uYW1lbGVuOwoK ICAgIHN0cnVjdCBpb3ZlYyAqbXNnX2lvdjsKICAgIGludCBtc2dfaW92bGVuOwoKICAgIHZvaWQg Km1zZ19jb250cm9sOwogICAgc29ja2xlbl90IG1zZ19jb250cm9sbGVuOwoKICAgIGludCBtc2df ZmxhZ3M7CiAgfTsKCgpzdHJ1Y3QgY21zZ2hkcgogIHsKICAgIHNpemVfdCBjbXNnX2xlbjsKCiAg ICBpbnQgY21zZ19sZXZlbDsKICAgIGludCBjbXNnX3R5cGU7CiAgICBfX2V4dGVuc2lvbl9fIHVu c2lnbmVkIGNoYXIgX19jbXNnX2RhdGEgW107CgogIH07CiMgMjUwICIvdXNyL2luY2x1ZGUvYml0 cy9zb2NrZXQuaCIgMwpleHRlcm4gc3RydWN0IGNtc2doZHIgKl9fY21zZ19ueHRoZHIgKHN0cnVj dCBtc2doZHIgKl9fbWhkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgY21zZ2hkciAqX19jbXNnKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2lubGluZSBzdHJ1 Y3QgY21zZ2hkciAqCl9fY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwgc3RydWN0 IGNtc2doZHIgKl9fY21zZykgdGhyb3cgKCkKewogIGlmICgoc2l6ZV90KSBfX2Ntc2ctPmNtc2df bGVuIDwgc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikpCgogICAgcmV0dXJuIDA7CgogIF9fY21zZyA9 IChzdHJ1Y3QgY21zZ2hkciAqKSAoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNnCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChzaXpl X3QpIC0gMSkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKSk7CiAgaWYgKCh1bnNp Z25lZCBjaGFyICopIChfX2Ntc2cgKyAxKSA+PSAoKHVuc2lnbmVkIGNoYXIgKikgX19taGRyLT5t c2dfY29udHJvbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX19t aGRyLT5tc2dfY29udHJvbGxlbikKICAgICAgfHwgKCh1bnNpZ25lZCBjaGFyICopIF9fY21zZyAr ICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChzaXplX3QpIC0gMSkgJiAoc2l6ZV90KSB+ KHNpemVvZiAoc2l6ZV90KSAtIDEpKQogICAgICAgICAgPiAoKHVuc2lnbmVkIGNoYXIgKikgX19t aGRyLT5tc2dfY29udHJvbCArIF9fbWhkci0+bXNnX2NvbnRyb2xsZW4pKSkKCiAgICByZXR1cm4g MDsKICByZXR1cm4gX19jbXNnOwp9CgoKCgplbnVtCiAgewogICAgU0NNX1JJR0hUUyA9IDB4MDEs CgoKICAgIFNDTV9DUkVERU5USUFMUyA9IDB4MDIsCgoKICAgIF9fU0NNX0NPTk5FQ1QgPSAweDAz CiAgfTsKCgoKc3RydWN0IHVjcmVkCnsKICBwaWRfdCBwaWQ7CiAgdWlkX3QgdWlkOwogIGdpZF90 IGdpZDsKfTsKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vc29ja2V0LmgiIDEgMwoKCgojIDEgIi91 c3IvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxIDMKIyA1ICIvdXNyL2luY2x1ZGUvYXNtL3NvY2tl dC5oIiAyIDMKIyAyOTkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgoKc3RydWN0 IGxpbmdlcgogIHsKICAgIGludCBsX29ub2ZmOwogICAgaW50IGxfbGluZ2VyOwogIH07CiMgMzYg Ii91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIgMwoKCgoKc3RydWN0IG9zb2NrYWRkcgogIHsK ICAgIHVuc2lnbmVkIHNob3J0IGludCBzYV9mYW1pbHk7CiAgICB1bnNpZ25lZCBjaGFyIHNhX2Rh dGFbMTRdOwogIH07CgoKCgplbnVtCnsKICBTSFVUX1JEID0gMCwKCiAgU0hVVF9XUiwKCiAgU0hV VF9SRFdSCgp9OwojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMwpleHRlcm4gaW50 IHNvY2tldCAoaW50IF9fZG9tYWluLCBpbnQgX190eXBlLCBpbnQgX19wcm90b2NvbCkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGludCBzb2NrZXRwYWlyIChpbnQgX19kb21haW4sIGludCBfX3R5cGUs IGludCBfX3Byb3RvY29sLAogICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Zkc1syXSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kIChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3Qgc29ja2Fk ZHIgKiBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IGdldHNvY2tuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9fYWRk ciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fbGVuKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGNvbm5lY3QgKGludCBfX2ZkLCBfX2NvbnN0IHN0cnVj dCBzb2NrYWRkciAqIF9fYWRkciwgc29ja2xlbl90IF9fbGVuKQogICAgIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IGdldHBlZXJuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2thZGRyICpfX3Jlc3Ry aWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3RyaWN0 IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZW5kIChpbnQgX19mZCwgX19jb25zdCB2 b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwgaW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgcmVjdiAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLCBpbnQgX19m bGFncykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZW5kdG8gKGludCBfX2ZkLCBfX2Nv bnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgaW50IF9fZmxh Z3MsIF9fY29uc3Qgc3RydWN0IHNvY2thZGRyICogX19hZGRyLAogICAgICAgICAgICAgICAgICAg c29ja2xlbl90IF9fYWRkcl9sZW4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmVjdmZyb20g KGludCBfX2ZkLCB2b2lkICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19uLCBpbnQgX19mbGFn cywKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9fYWRk ciwgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fYWRkcl9sZW4pCiAgICAgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IHNlbmRtc2cgKGludCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBtc2doZHIgKl9fbWVz c2FnZSwgaW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmVjdm1zZyAo aW50IF9fZmQsIHN0cnVjdCBtc2doZHIgKl9fbWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50IF9fbGV2ZWws IGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBf X29wdHZhbCwKICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19v cHRsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50 IF9fbGV2ZWwsIGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2 b2lkICpfX29wdHZhbCwgc29ja2xlbl90IF9fb3B0bGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IGxpc3RlbiAoaW50IF9fZmQsIGludCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IGFjY2VwdCAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX2FkZHIsCiAg ICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19hZGRyX2xlbikKICAgICB0 aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgc2h1dGRvd24gKGludCBfX2ZkLCBpbnQgX19ob3cp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzZmR0eXBlIChpbnQgX19mZCwgaW50IF9fZmR0 eXBlKSB0aHJvdyAoKTsKCgp9CiMgNTAgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmluZXQuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2lu LmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkaW50 LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVk ZS9zdGRpbnQuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc3RkaW50 LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDMwICIvdXNyL2lu Y2x1ZGUvc3RkaW50LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEg MwojIDMxICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDIgMwojIDUxICIvdXNyL2luY2x1ZGUvc3Rk aW50LmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQg c2hvcnQgaW50IHVpbnQxNl90OwoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7CgoKCgoK X19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludDY0X3Q7CgoK CgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50X2xlYXN0OF90Owp0eXBlZGVmIHNob3J0IGludCBp bnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBpbnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9f CnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfbGVhc3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVk IGNoYXIgdWludF9sZWFzdDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludF9sZWFz dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lv bl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50X2xlYXN0NjRfdDsKCgoKCgoK dHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFzdDhfdDsKCgoKCgp0eXBlZGVmIGludCBpbnRfZmFz dDE2X3Q7CnR5cGVkZWYgaW50IGludF9mYXN0MzJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxv bmcgbG9uZyBpbnQgaW50X2Zhc3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9m YXN0OF90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYg dW5zaWduZWQgaW50IHVpbnRfZmFzdDMyX3Q7Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25l ZCBsb25nIGxvbmcgaW50IHVpbnRfZmFzdDY0X3Q7CiMgMTI4ICIvdXNyL2luY2x1ZGUvc3RkaW50 LmgiIDMKdHlwZWRlZiBpbnQgaW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludHB0 cl90OwojIDE0MCAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCl9fZXh0ZW5zaW9uX18KdHlwZWRl ZiBsb25nIGxvbmcgaW50IGludG1heF90OwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQg bG9uZyBsb25nIGludCB1aW50bWF4X3Q7CiMgMjQgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1 ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgpleHRlcm4gIkMiIHsKCgplbnVtCiAgewogICAgSVBQUk9U T19JUCA9IDAsCgogICAgSVBQUk9UT19IT1BPUFRTID0gMCwKCiAgICBJUFBST1RPX0lDTVAgPSAx LAoKICAgIElQUFJPVE9fSUdNUCA9IDIsCgogICAgSVBQUk9UT19JUElQID0gNCwKCiAgICBJUFBS T1RPX1RDUCA9IDYsCgogICAgSVBQUk9UT19FR1AgPSA4LAoKICAgIElQUFJPVE9fUFVQID0gMTIs CgogICAgSVBQUk9UT19VRFAgPSAxNywKCiAgICBJUFBST1RPX0lEUCA9IDIyLAoKICAgIElQUFJP VE9fVFAgPSAyOSwKCiAgICBJUFBST1RPX0lQVjYgPSA0MSwKCiAgICBJUFBST1RPX1JPVVRJTkcg PSA0MywKCiAgICBJUFBST1RPX0ZSQUdNRU5UID0gNDQsCgogICAgSVBQUk9UT19SU1ZQID0gNDYs CgogICAgSVBQUk9UT19HUkUgPSA0NywKCiAgICBJUFBST1RPX0VTUCA9IDUwLAoKICAgIElQUFJP VE9fQUggPSA1MSwKCiAgICBJUFBST1RPX0lDTVBWNiA9IDU4LAoKICAgIElQUFJPVE9fTk9ORSA9 IDU5LAoKICAgIElQUFJPVE9fRFNUT1BUUyA9IDYwLAoKICAgIElQUFJPVE9fTVRQID0gOTIsCgog ICAgSVBQUk9UT19FTkNBUCA9IDk4LAoKICAgIElQUFJPVE9fUElNID0gMTAzLAoKICAgIElQUFJP VE9fQ09NUCA9IDEwOCwKCiAgICBJUFBST1RPX1JBVyA9IDI1NSwKCiAgICBJUFBST1RPX01BWAog IH07CgoKCnR5cGVkZWYgdWludDE2X3QgaW5fcG9ydF90OwoKCmVudW0KICB7CiAgICBJUFBPUlRf RUNITyA9IDcsCiAgICBJUFBPUlRfRElTQ0FSRCA9IDksCiAgICBJUFBPUlRfU1lTVEFUID0gMTEs CiAgICBJUFBPUlRfREFZVElNRSA9IDEzLAogICAgSVBQT1JUX05FVFNUQVQgPSAxNSwKICAgIElQ UE9SVF9GVFAgPSAyMSwKICAgIElQUE9SVF9URUxORVQgPSAyMywKICAgIElQUE9SVF9TTVRQID0g MjUsCiAgICBJUFBPUlRfVElNRVNFUlZFUiA9IDM3LAogICAgSVBQT1JUX05BTUVTRVJWRVIgPSA0 MiwKICAgIElQUE9SVF9XSE9JUyA9IDQzLAogICAgSVBQT1JUX01UUCA9IDU3LAoKICAgIElQUE9S VF9URlRQID0gNjksCiAgICBJUFBPUlRfUkpFID0gNzcsCiAgICBJUFBPUlRfRklOR0VSID0gNzks CiAgICBJUFBPUlRfVFRZTElOSyA9IDg3LAogICAgSVBQT1JUX1NVUERVUCA9IDk1LAoKCiAgICBJ UFBPUlRfRVhFQ1NFUlZFUiA9IDUxMiwKICAgIElQUE9SVF9MT0dJTlNFUlZFUiA9IDUxMywKICAg IElQUE9SVF9DTURTRVJWRVIgPSA1MTQsCiAgICBJUFBPUlRfRUZTU0VSVkVSID0gNTIwLAoKCiAg ICBJUFBPUlRfQklGRlVEUCA9IDUxMiwKICAgIElQUE9SVF9XSE9TRVJWRVIgPSA1MTMsCiAgICBJ UFBPUlRfUk9VVEVTRVJWRVIgPSA1MjAsCgoKICAgIElQUE9SVF9SRVNFUlZFRCA9IDEwMjQsCgoK ICAgIElQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCiAgfTsKCgoKdHlwZWRlZiB1aW50MzJfdCBp bl9hZGRyX3Q7CnN0cnVjdCBpbl9hZGRyCiAgewogICAgaW5fYWRkcl90IHNfYWRkcjsKICB9Owoj IDE5MCAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpzdHJ1Y3QgaW42X2FkZHIKICB7CiAg ICB1bmlvbgogICAgICB7CiAgICAgICAgdWludDhfdCB1Nl9hZGRyOFsxNl07CiAgICAgICAgdWlu dDE2X3QgdTZfYWRkcjE2WzhdOwogICAgICAgIHVpbnQzMl90IHU2X2FkZHIzMls0XTsKICAgICAg fSBpbjZfdTsKCgoKICB9OwoKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2Fu eTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xvb3BiYWNrOwoKCgoKCgoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMSAzCiMgMjEzICIvdXNyL2luY2x1ZGUv bmV0aW5ldC9pbi5oIiAyIDMKCgoKc3RydWN0IHNvY2thZGRyX2luCiAgewogICAgc2FfZmFtaWx5 X3Qgc2luX2ZhbWlseTsKICAgIGluX3BvcnRfdCBzaW5fcG9ydDsKICAgIHN0cnVjdCBpbl9hZGRy IHNpbl9hZGRyOwoKCiAgICB1bnNpZ25lZCBjaGFyIHNpbl96ZXJvW3NpemVvZiAoc3RydWN0IHNv Y2thZGRyKSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplb2YgKHVuc2lnbmVkIHNo b3J0IGludCkpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChpbl9wb3J0X3Qp IC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcildOwog IH07CgoKc3RydWN0IHNvY2thZGRyX2luNgogIHsKICAgIHNhX2ZhbWlseV90IHNpbjZfZmFtaWx5 OwogICAgaW5fcG9ydF90IHNpbjZfcG9ydDsKICAgIHVpbnQzMl90IHNpbjZfZmxvd2luZm87CiAg ICBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOwogICAgdWludDMyX3Qgc2luNl9zY29wZV9pZDsK ICB9OwoKCnN0cnVjdCBpcHY2X21yZXEKICB7CgogICAgc3RydWN0IGluNl9hZGRyIGlwdjZtcl9t dWx0aWFkZHI7CgoKICAgIHVuc2lnbmVkIGludCBpcHY2bXJfaW50ZXJmYWNlOwogIH07CgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9pbi5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2JpdHMvaW4u aCIgMwpzdHJ1Y3QgaXBfb3B0cwogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGlwX2RzdDsKICAgIGNo YXIgaXBfb3B0c1s0MF07CiAgfTsKCgpzdHJ1Y3QgaXBfbXJlcQogIHsKICAgIHN0cnVjdCBpbl9h ZGRyIGltcl9tdWx0aWFkZHI7CiAgICBzdHJ1Y3QgaW5fYWRkciBpbXJfaW50ZXJmYWNlOwogIH07 CgoKc3RydWN0IGlwX21yZXFuCiAgewogICAgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsK ICAgIHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNzOwogICAgaW50IGltcl9pZmluZGV4OwogIH07 CgoKc3RydWN0IGluX3BrdGluZm8KICB7CiAgICBpbnQgaXBpX2lmaW5kZXg7CiAgICBzdHJ1Y3Qg aW5fYWRkciBpcGlfc3BlY19kc3Q7CiAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfYWRkcjsKICB9Owoj IDI1MSAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCiMgMjU5ICIvdXNyL2luY2x1ZGUv bmV0aW5ldC9pbi5oIiAzCmV4dGVybiB1aW50MzJfdCBudG9obCAodWludDMyX3QgX19uZXRsb25n KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiB1aW50MTZfdCBu dG9ocyAodWludDE2X3QgX19uZXRzaG9ydCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CmV4dGVybiB1aW50MzJfdCBodG9ubCAodWludDMyX3QgX19ob3N0bG9uZykK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiB1aW50MTZf dCBodG9ucyAodWludDE2X3QgX19ob3N0c2hvcnQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDI2OCAi L3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9i eXRlc3dhcC5oIiAxIDMKIyAyNzEgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwojIDMz MyAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpleHRlcm4gaW50IGJpbmRyZXN2cG9ydCAo aW50IF9fc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKl9fc29ja19pbikgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBiaW5kcmVzdnBvcnQ2IChpbnQgX19zb2NrZmQsIHN0cnVjdCBzb2NrYWRkcl9p bjYgKl9fc29ja19pbikKICAgICB0aHJvdyAoKTsKIyAzNjEgIi91c3IvaW5jbHVkZS9uZXRpbmV0 L2luLmgiIDMKc3RydWN0IGluNl9wa3RpbmZvCiAgewogICAgc3RydWN0IGluNl9hZGRyIGlwaTZf YWRkcjsKICAgIHVuc2lnbmVkIGludCBpcGk2X2lmaW5kZXg7CiAgfTsKCn0KIyA1MSAiL3dpbmRv d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAyCiMg NjUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlu ZXQuaCIKIyAxICIvdXNyL2luY2x1ZGUvYXJwYS9pbmV0LmgiIDEgMwojIDIyICIvdXNyL2luY2x1 ZGUvYXJwYS9pbmV0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMg Ii91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL25ldGluZXQv aW4uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCgoKCgoKCgpleHRl cm4gIkMiIHsKCgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2FkZHIgKF9fY29uc3QgY2hhciAqX19j cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2xuYW9mIChzdHJ1Y3QgaW5fYWRk ciBfX2luKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRfbWFrZWFkZHIg KGluX2FkZHJfdCBfX25ldCwgaW5fYWRkcl90IF9faG9zdCkKICAgICB0aHJvdyAoKTsKCgpleHRl cm4gaW5fYWRkcl90IGluZXRfbmV0b2YgKHN0cnVjdCBpbl9hZGRyIF9faW4pIHRocm93ICgpOwoK CgpleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0d29yayAoX19jb25zdCBjaGFyICpfX2NwKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnRvYSAoc3RydWN0IGluX2FkZHIgX19pbikgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IGluZXRfcHRvbiAoaW50IF9fYWYsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2NwLAogICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBf X2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19jb25zdCBjaGFyICppbmV0X250b3AgKGludCBf X2FmLCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19jcCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzb2NrbGVuX3QgX19sZW4pCiAgICAg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9hdG9uIChfX2NvbnN0IGNoYXIg Kl9fY3AsIHN0cnVjdCBpbl9hZGRyICpfX2lucCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpp bmV0X25ldGEgKGluX2FkZHJfdCBfX25ldCwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhy b3cgKCk7CgoKCgpleHRlcm4gY2hhciAqaW5ldF9uZXRfbnRvcCAoaW50IF9fYWYsIF9fY29uc3Qg dm9pZCAqX19jcCwgaW50IF9fYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg Kl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpbmV0X25ldF9w dG9uIChpbnQgX19hZiwgX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVuc2ln bmVkIGludCBpbmV0X25zYXBfYWRkciAoX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2J1ZiwgaW50IF9fbGVuKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnNhcF9udG9hIChpbnQgX19sZW4sIF9fY29u c3QgdW5zaWduZWQgY2hhciAqX19jcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICpfX2J1ZikgdGhyb3cgKCk7CgoKfQojIDY2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL25ldGRi LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKIyAxICIvdXNy L2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIg MwojIDEgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9uZXRk Yi5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmgiIDEgMwojIDM5ICIvdXNy L2luY2x1ZGUvcnBjL25ldGRiLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz CiMgNDAgIi91c3IvaW5jbHVkZS9ycGMvbmV0ZGIuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0 MyAiL3Vzci9pbmNsdWRlL3JwYy9uZXRkYi5oIiAyIDMKCmV4dGVybiAiQyIgewoKc3RydWN0IHJw Y2VudAp7CiAgY2hhciAqcl9uYW1lOwogIGNoYXIgKipyX2FsaWFzZXM7CiAgaW50IHJfbnVtYmVy Owp9OwoKZXh0ZXJuIHZvaWQgc2V0cnBjZW50IChpbnQgX19zdGF5b3BlbikgdGhyb3cgKCk7CmV4 dGVybiB2b2lkIGVuZHJwY2VudCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBzdHJ1Y3QgcnBjZW50 ICpnZXRycGNieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKZXh0ZXJuIHN0 cnVjdCBycGNlbnQgKmdldHJwY2J5bnVtYmVyIChpbnQgX19udW1iZXIpIHRocm93ICgpOwpleHRl cm4gc3RydWN0IHJwY2VudCAqZ2V0cnBjZW50ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IGdldHJwY2J5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc3RydWN0IHJwY2VudCAqX19y ZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2J1ZmZlciwgc2l6 ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnBjZW50ICoq X19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRycGNieW51bWJlcl9yIChpbnQgX19u dW1iZXIsIHN0cnVjdCBycGNlbnQgKl9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBycGNlbnQgKipfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4g aW50IGdldHJwY2VudF9yIChzdHJ1Y3QgcnBjZW50ICpfX3Jlc3VsdF9idWYsIGNoYXIgKl9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19idWZsZW4sIHN0cnVjdCBycGNl bnQgKipfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKfQojIDM0ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIg MiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9uZXRkYi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs dWRlL2JpdHMvbmV0ZGIuaCIgMwpzdHJ1Y3QgbmV0ZW50CnsKICBjaGFyICpuX25hbWU7CiAgY2hh ciAqKm5fYWxpYXNlczsKICBpbnQgbl9hZGRydHlwZTsKICB1aW50MzJfdCBuX25ldDsKfTsKIyAz NyAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwojIDQ3ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIg MwpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IGhfZXJybm87CgoKZXh0ZXJuIGludCAqX19oX2Vy cm5vX2xvY2F0aW9uICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CiMgOTggIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAzCmV4dGVybiB2b2lkIGhlcnJvciAoX19jb25z dCBjaGFyICpfX3N0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fY29uc3QgY2hhciAqaHN0cmVycm9y IChpbnQgX19lcnJfbnVtKSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBob3N0ZW50CnsKICBjaGFyICpo X25hbWU7CiAgY2hhciAqKmhfYWxpYXNlczsKICBpbnQgaF9hZGRydHlwZTsKICBpbnQgaF9sZW5n dGg7CiAgY2hhciAqKmhfYWRkcl9saXN0OwoKfTsKCgoKZXh0ZXJuIHZvaWQgc2V0aG9zdGVudCAo aW50IF9fc3RheV9vcGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRob3N0ZW50ICh2b2lk KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0ZW50ICh2b2lkKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnlhZGRyIChfX2NvbnN0 IHZvaWQgKl9fYWRkciwgX19zb2NrbGVuX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBob3N0 ZW50ICpnZXRob3N0YnluYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1lMiAoX19jb25zdCBjaGFyICpfX25h bWUsIGludCBfX2FmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRob3N0ZW50X3IgKHN0 cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgZ2V0aG9zdGJ5YWRkcl9yIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg X19hZGRyLCBfX3NvY2tsZW5fdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBfX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqX19y ZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpf X3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgaG9zdGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRl cm4gaW50IGdldGhvc3RieW5hbWVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9f cmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3Qg X19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0 aG9zdGJ5bmFtZTJfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwgaW50IF9fYWYs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3Qg X19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJp Y3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgaG9zdGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKCgoKCmV4dGVy biB2b2lkIHNldG5ldGVudCAoaW50IF9fc3RheV9vcGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9p ZCBlbmRuZXRlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IG5ldGVudCAqZ2V0 bmV0ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdldG5ldGJ5 YWRkciAodWludDMyX3QgX19uZXQsIGludCBfX3R5cGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu IHN0cnVjdCBuZXRlbnQgKmdldG5ldGJ5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93 ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRuZXRlbnRfciAoc3RydWN0IG5ldGVudCAqX19yZXN0 cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJp Y3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IG5ldGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0bmV0Ynlh ZGRyX3IgKHVpbnQzMl90IF9fbmV0LCBpbnQgX190eXBlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgbmV0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0ZW50ICoqX19yZXN0cmljdCBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJu b3ApIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRuZXRieW5hbWVfciAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGVu dCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IG5ldGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCgoK CnN0cnVjdCBzZXJ2ZW50CnsKICBjaGFyICpzX25hbWU7CiAgY2hhciAqKnNfYWxpYXNlczsKICBp bnQgc19wb3J0OwogIGNoYXIgKnNfcHJvdG87Cn07CgoKCmV4dGVybiB2b2lkIHNldHNlcnZlbnQg KGludCBfX3N0YXlfb3BlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kc2VydmVudCAodm9p ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmVudCAodm9pZCkg dGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5bmFtZSAoX19jb25z dCBjaGFyICpfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Byb3RvKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBzZXJ2ZW50ICpn ZXRzZXJ2Ynlwb3J0IChpbnQgX19wb3J0LCBfX2NvbnN0IGNoYXIgKl9fcHJvdG8pCiAgICAgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRzZXJ2ZW50X3IgKHN0cnVjdCBzZXJ2ZW50ICpfX3Jl c3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz dHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBzZXJ2ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50 IGdldHNlcnZieW5hbWVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Byb3RvLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZlbnQgKl9fcmVzdHJpY3QgX19y ZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBf X2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHNlcnZlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0 c2VydmJ5cG9ydF9yIChpbnQgX19wb3J0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wcm90 bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICpfX3Jlc3RyaWN0 IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJp Y3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBzZXJ2ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qg cHJvdG9lbnQKewogIGNoYXIgKnBfbmFtZTsKICBjaGFyICoqcF9hbGlhc2VzOwogIGludCBwX3By b3RvOwp9OwoKCgpleHRlcm4gdm9pZCBzZXRwcm90b2VudCAoaW50IF9fc3RheV9vcGVuKSB0aHJv dyAoKTsKCgpleHRlcm4gdm9pZCBlbmRwcm90b2VudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVy biBzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvZW50ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4g c3RydWN0IHByb3RvZW50ICpnZXRwcm90b2J5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo cm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnludW1iZXIgKGludCBf X3Byb3RvKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHByb3RvZW50X3IgKHN0cnVjdCBw cm90b2VudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93 ICgpOwoKZXh0ZXJuIGludCBnZXRwcm90b2J5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAq X19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp OwoKZXh0ZXJuIGludCBnZXRwcm90b2J5bnVtYmVyX3IgKGludCBfX3Byb3RvLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByb3RvZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0 X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19i dWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBwcm90b2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu dCBzZXRuZXRncmVudCAoX19jb25zdCBjaGFyICpfX25ldGdyb3VwKSB0aHJvdyAoKTsKCgpleHRl cm4gdm9pZCBlbmRuZXRncmVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZ2V0bmV0 Z3JlbnQgKGNoYXIgKipfX3Jlc3RyaWN0IF9faG9zdHAsCiAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fdXNlcnAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZG9tYWlucCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaW5uZXRnciAo X19jb25zdCBjaGFyICpfX25ldGdyb3VwLCBfX2NvbnN0IGNoYXIgKl9faG9zdCwKICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fdXNlciwgX19jb25zdCBjaGFyICpkb21haW4pIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0bmV0Z3JlbnRfciAoY2hhciAqKl9fcmVzdHJpY3QgX19o b3N0cCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3VzZXJw LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZG9tYWlucCwK ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBzaXpl X3QgX19idWZsZW4pIHRocm93ICgpOwojIDM0NCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0 ZXJuIGludCByY21kIChjaGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCB1bnNpZ25lZCBzaG9ydCBp bnQgX19ycG9ydCwKICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19s b2N1c2VyLAogICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3JlbXVz ZXIsCiAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY21kLCBpbnQg Kl9fcmVzdHJpY3QgX19mZDJwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJjbWRfYWYg KGNoYXIgKipfX3Jlc3RyaWN0IF9fYWhvc3QsIHVuc2lnbmVkIHNob3J0IGludCBfX3Jwb3J0LAog ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2xvY3VzZXIsCiAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcmVtdXNlciwKICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAqX19y ZXN0cmljdCBfX2ZkMnAsCiAgICAgICAgICAgICAgICAgICAgc2FfZmFtaWx5X3QgX19hZikgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcmV4ZWMgKGNoYXIgKipfX3Jlc3RyaWN0IF9fYWhvc3Qs IGludCBfX3Jwb3J0LAogICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19uYW1lLAogICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXNz LAogICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAq X19yZXN0cmljdCBfX2ZkMnApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmV4ZWNfYWYg KGNoYXIgKipfX3Jlc3RyaWN0IF9fYWhvc3QsIGludCBfX3Jwb3J0LAogICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXNzLAogICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnAsCiAg ICAgICAgICAgICAgICAgICAgIHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBydXNlcm9rIChfX2NvbnN0IGNoYXIgKl9fcmhvc3QsIGludCBfX3N1c2VyLAogICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZW11c2VyLCBfX2NvbnN0IGNoYXIgKl9fbG9j dXNlcikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcnVzZXJva19hZiAoX19jb25zdCBjaGFyICpf X3Job3N0LCBpbnQgX19zdXNlciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVtdXNlciwgX19jb25zdCBjaGFyICpfX2xvY3VzZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgc2FfZmFtaWx5X3QgX19hZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJyZXN2cG9ydCAo aW50ICpfX2FscG9ydCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcnJlc3Zwb3J0X2FmIChpbnQg Kl9fYWxwb3J0LCBzYV9mYW1pbHlfdCBfX2FmKSB0aHJvdyAoKTsKCgoKCgoKc3RydWN0IGFkZHJp bmZvCnsKICBpbnQgYWlfZmxhZ3M7CiAgaW50IGFpX2ZhbWlseTsKICBpbnQgYWlfc29ja3R5cGU7 CiAgaW50IGFpX3Byb3RvY29sOwogIHNvY2tsZW5fdCBhaV9hZGRybGVuOwogIHN0cnVjdCBzb2Nr YWRkciAqYWlfYWRkcjsKICBjaGFyICphaV9jYW5vbm5hbWU7CiAgc3RydWN0IGFkZHJpbmZvICph aV9uZXh0Owp9OwojIDQ0NCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0ZXJuIGludCBnZXRh ZGRyaW5mbyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc2VydmljZSwKICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgYWRkcmluZm8gKl9fcmVzdHJpY3QgX19yZXEsCiAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqKl9fcmVzdHJpY3QgX19wYWkp IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZyZWVhZGRyaW5mbyAoc3RydWN0IGFkZHJpbmZvICpf X2FpKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqZ2FpX3N0cmVycm9yIChpbnQgX19lY29kZSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRuYW1laW5mbyAoX19jb25zdCBzdHJ1Y3Qgc29ja2Fk ZHIgKl9fcmVzdHJpY3QgX19zYSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90IF9f c2FsZW4sIGNoYXIgKl9fcmVzdHJpY3QgX19ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICBz b2NrbGVuX3QgX19ob3N0bGVuLCBjaGFyICpfX3Jlc3RyaWN0IF9fc2VydiwKICAgICAgICAgICAg ICAgICAgICAgICAgc29ja2xlbl90IF9fc2VydmxlbiwgdW5zaWduZWQgaW50IF9fZmxhZ3MpIHRo cm93ICgpOwoKCgp9CiMgNjggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcmluZXQuaCIgMgojIDMzICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHN0 cnVjdCBQUkRpciBQUkRpcjsKdHlwZWRlZiBzdHJ1Y3QgUFJEaXJFbnRyeSBQUkRpckVudHJ5Owp0 eXBlZGVmIHN0cnVjdCBQUkZpbGVEZXNjIFBSRmlsZURlc2M7CnR5cGVkZWYgc3RydWN0IFBSRmls ZUluZm8gUFJGaWxlSW5mbzsKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlSW5mbzY0IFBSRmlsZUluZm82 NDsKdHlwZWRlZiB1bmlvbiBQUk5ldEFkZHIgUFJOZXRBZGRyOwp0eXBlZGVmIHN0cnVjdCBQUklP TWV0aG9kcyBQUklPTWV0aG9kczsKdHlwZWRlZiBzdHJ1Y3QgUFJQb2xsRGVzYyBQUlBvbGxEZXNj Owp0eXBlZGVmIHN0cnVjdCBQUkZpbGVQcml2YXRlIFBSRmlsZVByaXZhdGU7CnR5cGVkZWYgc3Ry dWN0IFBSU2VuZEZpbGVEYXRhIFBSU2VuZEZpbGVEYXRhOwojIDU5ICIvd2luZG93cy9oZGExMi9t b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIFBSSW50biBQ UkRlc2NJZGVudGl0eTsKCnN0cnVjdCBQUkZpbGVEZXNjIHsKICAgIGNvbnN0IFBSSU9NZXRob2Rz ICptZXRob2RzOwogICAgUFJGaWxlUHJpdmF0ZSAqc2VjcmV0OwogICAgUFJGaWxlRGVzYyAqbG93 ZXIsICpoaWdoZXI7CiAgICB2b2lkICggKmR0b3IpKFBSRmlsZURlc2MgKmZkKTsKCiAgICBQUkRl c2NJZGVudGl0eSBpZGVudGl0eTsKfTsKIyA3OSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSVHJhbnNtaXRGaWxl RmxhZ3MgewogICAgUFJfVFJBTlNNSVRGSUxFX0tFRVBfT1BFTiA9IDAsCgogICAgUFJfVFJBTlNN SVRGSUxFX0NMT1NFX1NPQ0tFVCA9IDEKCn0gUFJUcmFuc21pdEZpbGVGbGFnczsKIyAxMzIgIi93 aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnN0 cnVjdCBQUklQdjZBZGRyIHsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBQUlVpbnQ4 IF9TNl91OFsxNl07CiAgICAgICAgICAgICAgICBQUlVpbnQxNiBfUzZfdTE2WzhdOwogICAgICAg ICAgICAgICAgUFJVaW50MzIgX1M2X3UzMls0XTsKICAgICAgICAgICAgICAgIFBSVWludDY0IF9T Nl91NjRbMl07CiAgICAgICAgfSBfUzZfdW47Cn07CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJJUHY2 QWRkciBQUklQdjZBZGRyOwoKdW5pb24gUFJOZXRBZGRyIHsKICAgIHN0cnVjdCB7CiAgICAgICAg UFJVaW50MTYgZmFtaWx5OwoKCgogICAgICAgIGNoYXIgZGF0YVsxNF07CgogICAgfSByYXc7CiAg ICBzdHJ1Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKICAgICAgICBQUlVpbnQxNiBwb3J0 OwogICAgICAgIFBSVWludDMyIGlwOwoKCgogICAgICAgIGNoYXIgcGFkWzhdOwoKICAgIH0gaW5l dDsKICAgIHN0cnVjdCB7CiAgICAgICAgUFJVaW50MTYgZmFtaWx5OwogICAgICAgIFBSVWludDE2 IHBvcnQ7CiAgICAgICAgUFJVaW50MzIgZmxvd2luZm87CiAgICAgICAgUFJJUHY2QWRkciBpcDsK ICAgICAgICBQUlVpbnQzMiBzY29wZV9pZDsKICAgIH0gaXB2NjsKCiAgICBzdHJ1Y3QgewogICAg ICAgIFBSVWludDE2IGZhbWlseTsKICAgICAgICBjaGFyIHBhdGhbMTA0XTsKICAgIH0gbG9jYWw7 Cgp9OwojIDE5MCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU29ja09wdGlvbgp7CiAgICBQUl9Tb2NrT3B0X05v bmJsb2NraW5nLAogICAgUFJfU29ja09wdF9MaW5nZXIsCiAgICBQUl9Tb2NrT3B0X1JldXNlYWRk ciwKICAgIFBSX1NvY2tPcHRfS2VlcGFsaXZlLAogICAgUFJfU29ja09wdF9SZWN2QnVmZmVyU2l6 ZSwKICAgIFBSX1NvY2tPcHRfU2VuZEJ1ZmZlclNpemUsCgogICAgUFJfU29ja09wdF9JcFRpbWVU b0xpdmUsCiAgICBQUl9Tb2NrT3B0X0lwVHlwZU9mU2VydmljZSwKCiAgICBQUl9Tb2NrT3B0X0Fk ZE1lbWJlciwKICAgIFBSX1NvY2tPcHRfRHJvcE1lbWJlciwKICAgIFBSX1NvY2tPcHRfTWNhc3RJ bnRlcmZhY2UsCiAgICBQUl9Tb2NrT3B0X01jYXN0VGltZVRvTGl2ZSwKICAgIFBSX1NvY2tPcHRf TWNhc3RMb29wYmFjaywKCiAgICBQUl9Tb2NrT3B0X05vRGVsYXksCiAgICBQUl9Tb2NrT3B0X01h eFNlZ21lbnQsCiAgICBQUl9Tb2NrT3B0X0Jyb2FkY2FzdCwKICAgIFBSX1NvY2tPcHRfTGFzdAp9 IFBSU29ja09wdGlvbjsKCnR5cGVkZWYgc3RydWN0IFBSTGluZ2VyIHsKICAgICAgICBQUkJvb2wg cG9sYXJpdHk7CiAgICAgICAgUFJJbnRlcnZhbFRpbWUgbGluZ2VyOwp9IFBSTGluZ2VyOwoKdHlw ZWRlZiBzdHJ1Y3QgUFJNY2FzdFJlcXVlc3QgewogICAgICAgIFBSTmV0QWRkciBtY2FkZHI7CiAg ICAgICAgUFJOZXRBZGRyIGlmYWRkcjsKfSBQUk1jYXN0UmVxdWVzdDsKCnR5cGVkZWYgc3RydWN0 IFBSU29ja2V0T3B0aW9uRGF0YQp7CiAgICBQUlNvY2tPcHRpb24gb3B0aW9uOwogICAgdW5pb24K ICAgIHsKICAgICAgICBQUlVpbnRuIGlwX3R0bDsKICAgICAgICBQUlVpbnRuIG1jYXN0X3R0bDsK ICAgICAgICBQUlVpbnRuIHRvczsKICAgICAgICBQUkJvb2wgbm9uX2Jsb2NraW5nOwogICAgICAg IFBSQm9vbCByZXVzZV9hZGRyOwogICAgICAgIFBSQm9vbCBrZWVwX2FsaXZlOwogICAgICAgIFBS Qm9vbCBtY2FzdF9sb29wYmFjazsKICAgICAgICBQUkJvb2wgbm9fZGVsYXk7CiAgICAgICAgUFJC b29sIGJyb2FkY2FzdDsKICAgICAgICBQUlNpemUgbWF4X3NlZ21lbnQ7CiAgICAgICAgUFJTaXpl IHJlY3ZfYnVmZmVyX3NpemU7CiAgICAgICAgUFJTaXplIHNlbmRfYnVmZmVyX3NpemU7CiAgICAg ICAgUFJMaW5nZXIgbGluZ2VyOwogICAgICAgIFBSTWNhc3RSZXF1ZXN0IGFkZF9tZW1iZXI7CiAg ICAgICAgUFJNY2FzdFJlcXVlc3QgZHJvcF9tZW1iZXI7CiAgICAgICAgUFJOZXRBZGRyIG1jYXN0 X2lmOwogICAgfSB2YWx1ZTsKfSBQUlNvY2tldE9wdGlvbkRhdGE7CiMgMjU2ICIvd2luZG93cy9o ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIHN0 cnVjdCBQUklPVmVjIHsKICAgIGNoYXIgKmlvdl9iYXNlOwogICAgaW50IGlvdl9sZW47Cn0gUFJJ T1ZlYzsKCgoKCgoKdHlwZWRlZiBlbnVtIFBSRGVzY1R5cGUKewogICAgUFJfREVTQ19GSUxFID0g MSwKICAgIFBSX0RFU0NfU09DS0VUX1RDUCA9IDIsCiAgICBQUl9ERVNDX1NPQ0tFVF9VRFAgPSAz LAogICAgUFJfREVTQ19MQVlFUkVEID0gNCwKICAgIFBSX0RFU0NfUElQRSA9IDUKfSBQUkRlc2NU eXBlOwoKdHlwZWRlZiBlbnVtIFBSU2Vla1doZW5jZSB7CiAgICBQUl9TRUVLX1NFVCA9IDAsCiAg ICBQUl9TRUVLX0NVUiA9IDEsCiAgICBQUl9TRUVLX0VORCA9IDIKfSBQUlNlZWtXaGVuY2U7Cgpl eHRlcm4gUFJEZXNjVHlwZSBQUl9HZXREZXNjVHlwZShQUkZpbGVEZXNjICpmaWxlKTsKIyAyOTkg Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJDbG9zZUZOKShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYg UFJJbnQzMiAoICpQUlJlYWRGTikoUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBh bW91bnQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJXcml0ZUZOKShQUkZpbGVEZXNjICpmZCwgY29u c3Qgdm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUkF2YWls YWJsZUZOKShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYgUFJJbnQ2NCAoICpQUkF2YWlsYWJsZTY0 Rk4pKFBSRmlsZURlc2MgKmZkKTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkZzeW5jRk4pKFBSRmls ZURlc2MgKmZkKTsKdHlwZWRlZiBQUk9mZnNldDMyICggKlBSU2Vla0ZOKShQUkZpbGVEZXNjICpm ZCwgUFJPZmZzZXQzMiBvZmZzZXQsIFBSU2Vla1doZW5jZSBob3cpOwp0eXBlZGVmIFBST2Zmc2V0 NjQgKCAqUFJTZWVrNjRGTikoUFJGaWxlRGVzYyAqZmQsIFBST2Zmc2V0NjQgb2Zmc2V0LCBQUlNl ZWtXaGVuY2UgaG93KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkZpbGVJbmZvRk4pKFBSRmlsZURl c2MgKmZkLCBQUkZpbGVJbmZvICppbmZvKTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkZpbGVJbmZv NjRGTikoUFJGaWxlRGVzYyAqZmQsIFBSRmlsZUluZm82NCAqaW5mbyk7CnR5cGVkZWYgUFJJbnQz MiAoICpQUldyaXRldkZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBjb25zdCBQUklPVmVjICppb3Ys IFBSSW50MzIgaW92X3NpemUsCiAgICBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQ UlN0YXR1cyAoICpQUkNvbm5lY3RGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJOZXRB ZGRyICphZGRyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUkZpbGVEZXNjKiAo ICpQUkFjY2VwdEZOKSAoCiAgICBQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyLCBQUklu dGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkJpbmRGTikoUFJGaWxl RGVzYyAqZmQsIGNvbnN0IFBSTmV0QWRkciAqYWRkcik7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJM aXN0ZW5GTikoUFJGaWxlRGVzYyAqZmQsIFBSSW50biBiYWNrbG9nKTsKdHlwZWRlZiBQUlN0YXR1 cyAoICpQUlNodXRkb3duRk4pKFBSRmlsZURlc2MgKmZkLCBQUkludG4gaG93KTsKdHlwZWRlZiBQ UkludDMyICggKlBSUmVjdkZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYsIFBSSW50 MzIgYW1vdW50LAogICAgUFJJbnRuIGZsYWdzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlw ZWRlZiBQUkludDMyICggKlBSU2VuZEZOKSAoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9p ZCAqYnVmLCBQUkludDMyIGFtb3VudCwKICAgIFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUg dGltZW91dCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUlJlY3Zmcm9tRk4pKAogICAgUFJGaWxlRGVz YyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsCiAgICBQUkludG4gZmxhZ3MsIFBSTmV0 QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQ UlNlbmR0b0ZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBjb25zdCB2b2lkICpidWYsIFBSSW50MzIg YW1vdW50LAogICAgUFJJbnRuIGZsYWdzLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIsIFBSSW50ZXJ2 YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBSSW50MTYgKCAqUFJQb2xsRk4pKAogICAgUFJGaWxl RGVzYyAqZmQsIFBSSW50MTYgaW5fZmxhZ3MsIFBSSW50MTYgKm91dF9mbGFncyk7CnR5cGVkZWYg UFJJbnQzMiAoICpQUkFjY2VwdHJlYWRGTikoCiAgICBQUkZpbGVEZXNjICpzZCwgUFJGaWxlRGVz YyAqKm5kLCBQUk5ldEFkZHIgKipyYWRkciwKICAgIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQs IFBSSW50ZXJ2YWxUaW1lIHQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJUcmFuc21pdGZpbGVGTiko CiAgICAgUFJGaWxlRGVzYyAqc2QsIFBSRmlsZURlc2MgKmZkLCBjb25zdCB2b2lkICpoZWFkZXJz LAogICAgIFBSSW50MzIgaGxlbiwgUFJUcmFuc21pdEZpbGVGbGFncyBmbGFncywgUFJJbnRlcnZh bFRpbWUgdCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJHZXRzb2NrbmFtZUZOKShQUkZpbGVEZXNj ICpmZCwgUFJOZXRBZGRyICphZGRyKTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkdldHBlZXJuYW1l Rk4pKFBSRmlsZURlc2MgKmZkLCBQUk5ldEFkZHIgKmFkZHIpOwp0eXBlZGVmIFBSU3RhdHVzICgg KlBSR2V0c29ja2V0b3B0aW9uRk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIFBSU29ja2V0T3B0aW9u RGF0YSAqZGF0YSk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJTZXRzb2NrZXRvcHRpb25GTikoCiAg ICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJTb2NrZXRPcHRpb25EYXRhICpkYXRhKTsKdHlwZWRl ZiBQUkludDMyICggKlBSU2VuZGZpbGVGTikoCiAgICAgICAgUFJGaWxlRGVzYyAqbmV0d29ya1Nv Y2tldCwgUFJTZW5kRmlsZURhdGEgKnNlbmREYXRhLAogICAgICAgIFBSVHJhbnNtaXRGaWxlRmxh Z3MgZmxhZ3MsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBSSW50biAoICpQUlJl c2VydmVkRk4pKFBSRmlsZURlc2MgKmZkKTsKCnN0cnVjdCBQUklPTWV0aG9kcyB7CiAgICBQUkRl c2NUeXBlIGZpbGVfdHlwZTsKICAgIFBSQ2xvc2VGTiBjbG9zZTsKICAgIFBSUmVhZEZOIHJlYWQ7 CiAgICBQUldyaXRlRk4gd3JpdGU7CiAgICBQUkF2YWlsYWJsZUZOIGF2YWlsYWJsZTsKICAgIFBS QXZhaWxhYmxlNjRGTiBhdmFpbGFibGU2NDsKICAgIFBSRnN5bmNGTiBmc3luYzsKICAgIFBSU2Vl a0ZOIHNlZWs7CiAgICBQUlNlZWs2NEZOIHNlZWs2NDsKICAgIFBSRmlsZUluZm9GTiBmaWxlSW5m bzsKICAgIFBSRmlsZUluZm82NEZOIGZpbGVJbmZvNjQ7CiAgICBQUldyaXRldkZOIHdyaXRldjsK ICAgIFBSQ29ubmVjdEZOIGNvbm5lY3Q7CiAgICBQUkFjY2VwdEZOIGFjY2VwdDsKICAgIFBSQmlu ZEZOIGJpbmQ7CiAgICBQUkxpc3RlbkZOIGxpc3RlbjsKICAgIFBSU2h1dGRvd25GTiBzaHV0ZG93 bjsKICAgIFBSUmVjdkZOIHJlY3Y7CiAgICBQUlNlbmRGTiBzZW5kOwogICAgUFJSZWN2ZnJvbUZO IHJlY3Zmcm9tOwogICAgUFJTZW5kdG9GTiBzZW5kdG87CiAgICBQUlBvbGxGTiBwb2xsOwogICAg UFJBY2NlcHRyZWFkRk4gYWNjZXB0cmVhZDsKICAgIFBSVHJhbnNtaXRmaWxlRk4gdHJhbnNtaXRm aWxlOwogICAgUFJHZXRzb2NrbmFtZUZOIGdldHNvY2tuYW1lOwogICAgUFJHZXRwZWVybmFtZUZO IGdldHBlZXJuYW1lOwogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzY7CiAgICBQUlJlc2Vy dmVkRk4gcmVzZXJ2ZWRfZm5fNTsKICAgIFBSR2V0c29ja2V0b3B0aW9uRk4gZ2V0c29ja2V0b3B0 aW9uOwoKICAgIFBSU2V0c29ja2V0b3B0aW9uRk4gc2V0c29ja2V0b3B0aW9uOwoKICAgIFBSU2Vu ZGZpbGVGTiBzZW5kZmlsZTsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl80OwogICAgUFJS ZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzM7CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5fMjsK ICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl8xOwogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVk X2ZuXzA7Cn07CiMgNDEwICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0gUFJTcGVjaWFsRkQKewogICAgUFJfU3RhbmRh cmRJbnB1dCwKICAgIFBSX1N0YW5kYXJkT3V0cHV0LAogICAgUFJfU3RhbmRhcmRFcnJvcgp9IFBS U3BlY2lhbEZEOwoKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX0dldFNwZWNpYWxGRChQUlNwZWNpYWxG RCBpZCk7CiMgNDU2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJpby5oIgpleHRlcm4gUFJEZXNjSWRlbnRpdHkgUFJfR2V0VW5pcXVlSWRlbnRpdHko Y29uc3QgY2hhciAqbGF5ZXJfbmFtZSk7CmV4dGVybiBjb25zdCBjaGFyKiBQUl9HZXROYW1lRm9y SWRlbnRpdHkoUFJEZXNjSWRlbnRpdHkgaWRlbnQpOwpleHRlcm4gUFJEZXNjSWRlbnRpdHkgUFJf R2V0TGF5ZXJzSWRlbnRpdHkoUFJGaWxlRGVzYyogZmQpOwpleHRlcm4gUFJGaWxlRGVzYyogUFJf R2V0SWRlbnRpdGllc0xheWVyKFBSRmlsZURlc2MqIGZkX3N0YWNrLCBQUkRlc2NJZGVudGl0eSBp ZCk7CiMgNDY5ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJpby5oIgpleHRlcm4gY29uc3QgUFJJT01ldGhvZHMgKiBQUl9HZXREZWZhdWx0SU9NZXRo b2RzKHZvaWQpOwojIDQ4MCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX0NyZWF0ZUlPTGF5ZXJTdHVi KAogICAgUFJEZXNjSWRlbnRpdHkgaWRlbnQsIGNvbnN0IFBSSU9NZXRob2RzICptZXRob2RzKTsK IyA0OTcgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9QdXNoSU9MYXllcigKICAgIFBSRmlsZURlc2MgKmZk X3N0YWNrLCBQUkRlc2NJZGVudGl0eSBpZCwgUFJGaWxlRGVzYyAqbGF5ZXIpOwojIDUxNCAiL3dp bmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0 ZXJuIFBSRmlsZURlc2MqIFBSX1BvcElPTGF5ZXIoUFJGaWxlRGVzYyAqZmRfc3RhY2ssIFBSRGVz Y0lkZW50aXR5IGlkKTsKIyA1ODggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9PcGVuKGNvbnN0IGNo YXIgKm5hbWUsIFBSSW50biBmbGFncywgUFJJbnRuIG1vZGUpOwojIDYxNCAiL3dpbmRvd3MvaGRh MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmls ZURlc2MqIFBSX09wZW5GaWxlKAogICAgY29uc3QgY2hhciAqbmFtZSwgUFJJbnRuIGZsYWdzLCBQ UkludG4gbW9kZSk7CiMgNjM3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfQ2xvc2UoUFJGaWxlRGVzYyAq ZmQpOwojIDY3MiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfUmVhZChQUkZpbGVEZXNjICpmZCwgdm9pZCAq YnVmLCBQUkludDMyIGFtb3VudCk7CiMgNjk2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9Xcml0ZShQUkZp bGVEZXNjICpmZCxjb25zdCB2b2lkICpidWYsUFJJbnQzMiBhbW91bnQpOwojIDczMCAiL3dpbmRv d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJu IFBSSW50MzIgUFJfV3JpdGV2KAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSSU9WZWMgKmlv diwgUFJJbnQzMiBpb3Zfc2l6ZSwKICAgIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDc1MSAi L3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK ZXh0ZXJuIFBSU3RhdHVzIFBSX0RlbGV0ZShjb25zdCBjaGFyICpuYW1lKTsKCgoKdHlwZWRlZiBl bnVtIFBSRmlsZVR5cGUKewogICAgUFJfRklMRV9GSUxFID0gMSwKICAgIFBSX0ZJTEVfRElSRUNU T1JZID0gMiwKICAgIFBSX0ZJTEVfT1RIRVIgPSAzCn0gUFJGaWxlVHlwZTsKCnN0cnVjdCBQUkZp bGVJbmZvIHsKICAgIFBSRmlsZVR5cGUgdHlwZTsKICAgIFBST2Zmc2V0MzIgc2l6ZTsKICAgIFBS VGltZSBjcmVhdGlvblRpbWU7CiAgICBQUlRpbWUgbW9kaWZ5VGltZTsKfTsKCnN0cnVjdCBQUkZp bGVJbmZvNjQgewogICAgUFJGaWxlVHlwZSB0eXBlOwogICAgUFJPZmZzZXQ2NCBzaXplOwogICAg UFJUaW1lIGNyZWF0aW9uVGltZTsKICAgIFBSVGltZSBtb2RpZnlUaW1lOwp9OwojIDc5NCAiL3dp bmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0 ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvKGNvbnN0IGNoYXIgKmZuLCBQUkZpbGVJbmZvICpp bmZvKTsKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvNjQoY29uc3QgY2hhciAqZm4sIFBS RmlsZUluZm82NCAqaW5mbyk7CiMgODE0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0T3BlbkZpbGVJ bmZvKFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvICppbmZvKTsKZXh0ZXJuIFBSU3RhdHVzIFBS X0dldE9wZW5GaWxlSW5mbzY0KFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvNjQgKmluZm8pOwoj IDgzMyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1JlbmFtZShjb25zdCBjaGFyICpmcm9tLCBjb25zdCBj aGFyICp0byk7CiMgODU5ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0gUFJBY2Nlc3NIb3cgewogICAgUFJfQUNDRVNT X0VYSVNUUyA9IDEsCiAgICBQUl9BQ0NFU1NfV1JJVEVfT0sgPSAyLAogICAgUFJfQUNDRVNTX1JF QURfT0sgPSAzCn0gUFJBY2Nlc3NIb3c7CgpleHRlcm4gUFJTdGF0dXMgUFJfQWNjZXNzKGNvbnN0 IGNoYXIgKm5hbWUsIFBSQWNjZXNzSG93IGhvdyk7CiMgOTAwICIvd2luZG93cy9oZGExMi9tb3ot Y3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJPZmZzZXQzMiBQ Ul9TZWVrKFBSRmlsZURlc2MgKmZkLCBQUk9mZnNldDMyIG9mZnNldCwgUFJTZWVrV2hlbmNlIHdo ZW5jZSk7CmV4dGVybiBQUk9mZnNldDY0IFBSX1NlZWs2NChQUkZpbGVEZXNjICpmZCwgUFJPZmZz ZXQ2NCBvZmZzZXQsIFBSU2Vla1doZW5jZSB3aGVuY2UpOwojIDkyMyAiL3dpbmRvd3MvaGRhMTIv bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIg UFJfQXZhaWxhYmxlKFBSRmlsZURlc2MgKmZkKTsKZXh0ZXJuIFBSSW50NjQgUFJfQXZhaWxhYmxl NjQoUFJGaWxlRGVzYyAqZmQpOwojIDk0MyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1N5bmMoUFJGaWxl RGVzYyAqZmQpOwoKCgpzdHJ1Y3QgUFJEaXJFbnRyeSB7CiAgICBjb25zdCBjaGFyICpuYW1lOwp9 OwojIDk3NSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3ByaW8uaCIKZXh0ZXJuIFBSRGlyKiBQUl9PcGVuRGlyKGNvbnN0IGNoYXIgKm5hbWUpOwojIDEw MDAgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlv LmgiCnR5cGVkZWYgZW51bSBQUkRpckZsYWdzIHsKICAgIFBSX1NLSVBfTk9ORSA9IDB4MCwKICAg IFBSX1NLSVBfRE9UID0gMHgxLAogICAgUFJfU0tJUF9ET1RfRE9UID0gMHgyLAogICAgUFJfU0tJ UF9CT1RIID0gMHgzLAogICAgUFJfU0tJUF9ISURERU4gPSAweDQKfSBQUkRpckZsYWdzOwoKZXh0 ZXJuIFBSRGlyRW50cnkqIFBSX1JlYWREaXIoUFJEaXIgKmRpciwgUFJEaXJGbGFncyBmbGFncyk7 CiMgMTAyNyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlRGlyKFBSRGlyICpkaXIpOwojIDEwNDkg Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi CmV4dGVybiBQUlN0YXR1cyBQUl9Na0Rpcihjb25zdCBjaGFyICpuYW1lLCBQUkludG4gbW9kZSk7 CiMgMTA2MSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX01ha2VEaXIoY29uc3QgY2hhciAqbmFtZSwgUFJJ bnRuIG1vZGUpOwojIDEwODEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9SbURpcihjb25zdCBjaGFyICpu YW1lKTsKIyAxMTAwICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfTmV3VURQU29ja2V0KHZvaWQpOwoj IDExMTkgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9OZXdUQ1BTb2NrZXQodm9pZCk7CiMgMTEzOSAi L3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK ZXh0ZXJuIFBSRmlsZURlc2MqIFBSX09wZW5VRFBTb2NrZXQoUFJJbnRuIGFmKTsKIyAxMTU5ICIv d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpl eHRlcm4gUFJGaWxlRGVzYyogUFJfT3BlblRDUFNvY2tldChQUkludG4gYWYpOwojIDExODMgIi93 aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4 dGVybiBQUlN0YXR1cyBQUl9Db25uZWN0KAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSTmV0 QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTIxMiAiL3dpbmRvd3MvaGRh MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3Rh dHVzIFBSX0dldENvbm5lY3RTdGF0dXMoY29uc3QgUFJQb2xsRGVzYyAqcGQpOwojIDEyMzYgIi93 aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4 dGVybiBQUkZpbGVEZXNjKiBQUl9BY2NlcHQoCiAgICBQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRy ICphZGRyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxMjU4ICIvd2luZG93cy9oZGExMi9t b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMg UFJfQmluZChQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJOZXRBZGRyICphZGRyKTsKIyAxMjgwICIv d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpl eHRlcm4gUFJTdGF0dXMgUFJfTGlzdGVuKFBSRmlsZURlc2MgKmZkLCBQUkludG4gYmFja2xvZyk7 CiMgMTMwNCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU2h1dGRvd25Ib3cKewogICAgUFJfU0hVVERPV05fUkNW ID0gMCwKICAgIFBSX1NIVVRET1dOX1NFTkQgPSAxLAogICAgUFJfU0hVVERPV05fQk9USCA9IDIK fSBQUlNodXRkb3duSG93OwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1NodXRkb3duKFBSRmlsZURlc2Mg KmZkLCBQUlNodXRkb3duSG93IGhvdyk7CiMgMTM0MiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfUmVjdihQ UkZpbGVEZXNjICpmZCwgdm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCwKICAgICAgICAgICAgICAg IFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTM3MyAiL3dpbmRvd3Mv aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBS SW50MzIgUFJfU2VuZChQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFt b3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gZmxhZ3MsIFBSSW50 ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE0MDggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1JlY3ZGcm9tKAog ICAgUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBSSW50biBmbGFn cywKICAgIFBSTmV0QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTQ0MSAi L3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK ZXh0ZXJuIFBSSW50MzIgUFJfU2VuZFRvKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZvaWQg KmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBSSW50biBmbGFncywKICAgIGNvbnN0IFBSTmV0QWRkciAq YWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTQ4MSAiL3dpbmRvd3MvaGRhMTIvbW96 LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJf VHJhbnNtaXRGaWxlKAogICAgUFJGaWxlRGVzYyAqbmV0d29ya1NvY2tldCwgUFJGaWxlRGVzYyAq c291cmNlRmlsZSwKICAgIGNvbnN0IHZvaWQgKmhlYWRlcnMsIFBSSW50MzIgaGxlbiwgUFJUcmFu c21pdEZpbGVGbGFncyBmbGFncywKICAgIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE1MjAg Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi CnN0cnVjdCBQUlNlbmRGaWxlRGF0YSB7CiAgICAgICAgUFJGaWxlRGVzYyAqZmQ7CiAgICAgICAg UFJVaW50MzIgZmlsZV9vZmZzZXQ7CiAgICAgICAgUFJTaXplIGZpbGVfbmJ5dGVzOwoKCiAgICAg ICAgY29uc3Qgdm9pZCAqaGVhZGVyOwogICAgICAgIFBSSW50MzIgaGxlbjsKICAgICAgICBjb25z dCB2b2lkICp0cmFpbGVyOwogICAgICAgIFBSSW50MzIgdGxlbjsKfTsKCgpleHRlcm4gUFJJbnQz MiBQUl9TZW5kRmlsZSgKICAgIFBSRmlsZURlc2MgKm5ldHdvcmtTb2NrZXQsIFBSU2VuZEZpbGVE YXRhICpzZW5kRGF0YSwKICAgICAgICBQUlRyYW5zbWl0RmlsZUZsYWdzIGZsYWdzLCBQUkludGVy dmFsVGltZSB0aW1lb3V0KTsKIyAxNTg3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9BY2NlcHRSZWFkKAog ICAgUFJGaWxlRGVzYyAqbGlzdGVuU29jaywgUFJGaWxlRGVzYyAqKmFjY2VwdGVkU29jaywKICAg IFBSTmV0QWRkciAqKnBlZXJBZGRyLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LCBQUkludGVy dmFsVGltZSB0aW1lb3V0KTsKIyAxNjExICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTmV3VENQU29ja2V0 UGFpcihQUkZpbGVEZXNjICpmZHNbMl0pOwojIDE2MzEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9HZXRT b2NrTmFtZShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsKIyAxNjUzICIvd2luZG93 cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4g UFJTdGF0dXMgUFJfR2V0UGVlck5hbWUoUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAqYWRkcik7 CgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0U29ja2V0T3B0aW9uKAogICAgUFJGaWxlRGVzYyAqZmQs IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0YSk7CgpleHRlcm4gUFJTdGF0dXMgUFJfU2V0U29ja2V0 T3B0aW9uKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0 YSk7CiMgMTY4OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldEZESW5oZXJpdGFibGUoCiAgICBQUkZp bGVEZXNjICpmZCwKICAgIFBSQm9vbCBpbmhlcml0YWJsZSk7CiMgMTcwOCAiL3dpbmRvd3MvaGRh MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmls ZURlc2MgKiBQUl9HZXRJbmhlcml0ZWRGRChjb25zdCBjaGFyICpuYW1lKTsKIyAxNzE4ICIvd2lu ZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBl ZGVmIHN0cnVjdCBQUkZpbGVNYXAgUFJGaWxlTWFwOwoKCgoKdHlwZWRlZiBlbnVtIFBSRmlsZU1h cFByb3RlY3QgewogICAgUFJfUFJPVF9SRUFET05MWSwKICAgIFBSX1BST1RfUkVBRFdSSVRFLAog ICAgUFJfUFJPVF9XUklURUNPUFkKfSBQUkZpbGVNYXBQcm90ZWN0OwoKZXh0ZXJuIFBSRmlsZU1h cCAqIFBSX0NyZWF0ZUZpbGVNYXAoCiAgICBQUkZpbGVEZXNjICpmZCwKICAgIFBSSW50NjQgc2l6 ZSwKICAgIFBSRmlsZU1hcFByb3RlY3QgcHJvdCk7CgpleHRlcm4gdm9pZCAqIFBSX01lbU1hcCgK ICAgIFBSRmlsZU1hcCAqZm1hcCwKICAgIFBST2Zmc2V0NjQgb2Zmc2V0LAogICAgUFJVaW50MzIg bGVuKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9NZW1Vbm1hcCh2b2lkICphZGRyLCBQUlVpbnQzMiBs ZW4pOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlRmlsZU1hcChQUkZpbGVNYXAgKmZtYXApOwoj IDE3NTYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9DcmVhdGVQaXBlKAogICAgUFJGaWxlRGVzYyAqKnJl YWRQaXBlLAogICAgUFJGaWxlRGVzYyAqKndyaXRlUGlwZQopOwoKCgoKCnN0cnVjdCBQUlBvbGxE ZXNjIHsKICAgIFBSRmlsZURlc2MqIGZkOwogICAgUFJJbnQxNiBpbl9mbGFnczsKICAgIFBSSW50 MTYgb3V0X2ZsYWdzOwp9OwojIDE4MzIgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1BvbGwoCiAgICBQUlBv bGxEZXNjICpwZHMsIFBSSW50biBucGRzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxODc2 ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5o IgpleHRlcm4gUFJGaWxlRGVzYyAqIFBSX05ld1BvbGxhYmxlRXZlbnQodm9pZCk7CgpleHRlcm4g UFJTdGF0dXMgUFJfRGVzdHJveVBvbGxhYmxlRXZlbnQoUFJGaWxlRGVzYyAqZXZlbnQpOwoKZXh0 ZXJuIFBSU3RhdHVzIFBSX1NldFBvbGxhYmxlRXZlbnQoUFJGaWxlRGVzYyAqZXZlbnQpOwoKZXh0 ZXJuIFBSU3RhdHVzIFBSX1dhaXRGb3JQb2xsYWJsZUV2ZW50KFBSRmlsZURlc2MgKmV2ZW50KTsK Cn0KIyAxOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIiAyCiMgMSAi L3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5o IiAxCiMgMjUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcmxpbmsuaCIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIgMgoKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0 cnVjdCBQUkxpYnJhcnkgUFJMaWJyYXJ5OwoKdHlwZWRlZiBzdHJ1Y3QgUFJTdGF0aWNMaW5rVGFi bGUgewogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIHZvaWQgKCpmcCkoKTsKfSBQUlN0YXRpY0xp bmtUYWJsZTsKIyA0MyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BybGluay5oIgpleHRlcm4gUFJTdGF0dXMgUFJfU2V0TGlicmFyeVBhdGgoY29uc3Qg Y2hhciAqcGF0aCk7CiMgNTMgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIGNoYXIqIFBSX0dldExpYnJhcnlQYXRoKHZvaWQp OwojIDY2ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJsaW5rLmgiCmV4dGVybiBjaGFyKiBQUl9HZXRMaWJyYXJ5TmFtZShjb25zdCBjaGFyICpkaXIs IGNvbnN0IGNoYXIgKmxpYik7CgoKCgoKZXh0ZXJuIHZvaWQgUFJfRnJlZUxpYnJhcnlOYW1lKGNo YXIgKm1lbSk7CiMgODYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSTGlicmFyeSogUFJfTG9hZExpYnJhcnkoY29uc3Qg Y2hhciAqbmFtZSk7CiMgMTA3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJsaW5rLmgiCnR5cGVkZWYgZW51bSBQUkxpYlNwZWNUeXBlIHsKICAgIFBS X0xpYlNwZWNfUGF0aG5hbWUsCiAgICBQUl9MaWJTcGVjX01hY05hbWVkRnJhZ21lbnQsCiAgICBQ Ul9MaWJTcGVjX01hY0luZGV4ZWRGcmFnbWVudAp9IFBSTGliU3BlY1R5cGU7CgpzdHJ1Y3QgRlNT cGVjOwoKdHlwZWRlZiBzdHJ1Y3QgUFJMaWJTcGVjIHsKICAgIFBSTGliU3BlY1R5cGUgdHlwZTsK ICAgIHVuaW9uIHsKCiAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWU7CgoKICAgICAgICBzdHJ1 Y3QgewogICAgICAgICAgICBjb25zdCBzdHJ1Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAgICAgICAg IGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgICAgfSBtYWNfbmFtZWRfZnJhZ21lbnQ7CgoKICAgICAg ICBzdHJ1Y3QgewogICAgICAgICAgICBjb25zdCBzdHJ1Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAg ICAgICAgIFBSVWludDMyIGluZGV4OwogICAgICAgIH0gbWFjX2luZGV4ZWRfZnJhZ21lbnQ7CiAg ICB9IHZhbHVlOwp9IFBSTGliU3BlYzsKIyAxNTAgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSTGlicmFyeSAqClBSX0xv YWRMaWJyYXJ5V2l0aEZsYWdzKAogICAgUFJMaWJTcGVjIGxpYlNwZWMsCiAgICBQUkludG4gZmxh Z3MKKTsKIyAxNjUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1VubG9hZExpYnJhcnkoUFJMaWJyYXJ5 ICpsaWIpOwojIDE3NSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BybGluay5oIgpleHRlcm4gdm9pZCogUFJfRmluZFN5bWJvbChQUkxpYnJhcnkgKmxp YiwgY29uc3QgY2hhciAqbmFtZSk7CiMgMTg3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiB2b2lkKiBQUl9GaW5kU3ltYm9s QW5kTGlicmFyeShjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkxpYnJhcnkqICpsaWIpOwojIDIwMSAiL3dpbmRv d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpleHRl cm4gUFJMaWJyYXJ5KiBQUl9Mb2FkU3RhdGljTGlicmFyeSgKICAgIGNvbnN0IGNoYXIgKm5hbWUs IGNvbnN0IFBSU3RhdGljTGlua1RhYmxlICp0YWJsZSk7Cgp9CiMgMTkgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIgMgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIv aTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjAgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIgMgojIDI4ICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNJTG9jYWxGaWxlLmgiCmNsYXNzIG5zSUxvY2FsRmlsZSA6IHB1YmxpYyBuc0lG aWxlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweGFhNjEwZjIwLCAweGE4ODksIDB4MTFkMywgeyAweDhjLCAweDgx LCAweDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAweDc0IH19OyByZXR1cm4gaWlkO30KIyA1 MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgSW5pdFdpdGhQYXRoKGNvbnN0IGNoYXIgKmZpbGVQYXRoKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEluaXRXaXRoVW5pY29kZVBhdGgoY29uc3QgUFJVbmljaGFyICpmaWxlUGF0aCkg PSAwOwojIDcyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTG9jYWxGaWxlLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRGb2xsb3dMaW5rcyhQUkJvb2wgKmFGb2xsb3dMaW5rcykgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0Rm9sbG93TGlua3MoUFJCb29sIGFGb2xsb3dMaW5rcykgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuTlNQUkZpbGVEZXNjKFBSSW50MzIgZmxhZ3MsIFBS SW50MzIgbW9kZSwgUFJGaWxlRGVzYyAqICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IE9wZW5BTlNJRmlsZURlc2MoY29uc3QgY2hhciAqbW9kZSwgRklMRSAqICpfcmV0dmFsKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvYWQoUFJMaWJyYXJ5ICogKl9yZXR2YWwpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlza1NwYWNlQXZhaWxhYmxlKFBSSW50NjQgKmFEaXNr U3BhY2VBdmFpbGFibGUpID0gMDsKIyA5NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxv Y2FsRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kUmVsYXRpdmVQYXRoKGNvbnN0IGNo YXIgKnJlbGF0aXZlRmlsZVBhdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kUmVs YXRpdmVVbmljb2RlUGF0aChjb25zdCBQUlVuaWNoYXIgKnJlbGF0aXZlRmlsZVBhdGgpID0gMDsK CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlcnNpc3RlbnREZXNjcmlwdG9yKGNoYXIgKiAq YVBlcnNpc3RlbnREZXNjcmlwdG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQZXJzaXN0 ZW50RGVzY3JpcHRvcihjb25zdCBjaGFyICogYVBlcnNpc3RlbnREZXNjcmlwdG9yKSA9IDA7CgoK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmV2ZWFsKHZvaWQpID0gMDsKCgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBMYXVuY2godm9pZCkgPSAwOwoKfTsKIyAyOTMgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIKZXh0ZXJuICJDIiBuc3Jlc3VsdApOU19OZXdMb2NhbEZp bGUoY29uc3QgY2hhciogcGF0aCwgUFJCb29sIGZvbGxvd0xpbmtzLCBuc0lMb2NhbEZpbGUqICpy ZXN1bHQpOwpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX05ld1VuaWNvZGVMb2NhbEZpbGUoY29uc3Qg UFJVbmljaGFyKiBwYXRoLCBQUkJvb2wgZm9sbG93TGlua3MsIG5zSUxvY2FsRmlsZSogKnJlc3Vs dCk7CiMgMTYxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIiAyCiMgMSAi Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEKIyAxNjIgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxNzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0ZpbGVTcGVjLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAxIDMKIyAyNiAi L3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg MwojIDI3ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi IDIgMwojIDYyICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9kaXJlbnQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL2RpcmVudC5oIiAzCnN0cnVj dCBkaXJlbnQKICB7CgogICAgX19pbm9fdCBkX2lubzsKICAgIF9fb2ZmX3QgZF9vZmY7CgoKCgog ICAgdW5zaWduZWQgc2hvcnQgaW50IGRfcmVjbGVuOwogICAgdW5zaWduZWQgY2hhciBkX3R5cGU7 CiAgICBjaGFyIGRfbmFtZVsyNTZdOwogIH07CgoKc3RydWN0IGRpcmVudDY0CiAgewogICAgX19p bm82NF90IGRfaW5vOwogICAgX19vZmY2NF90IGRfb2ZmOwogICAgdW5zaWduZWQgc2hvcnQgaW50 IGRfcmVjbGVuOwogICAgdW5zaWduZWQgY2hhciBkX3R5cGU7CiAgICBjaGFyIGRfbmFtZVsyNTZd OwogIH07CiMgNjMgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCiMgOTggIi91c3IvaW5jbHVk ZS9kaXJlbnQuaCIgMwplbnVtCiAgewogICAgRFRfVU5LTk9XTiA9IDAsCgogICAgRFRfRklGTyA9 IDEsCgogICAgRFRfQ0hSID0gMiwKCiAgICBEVF9ESVIgPSA0LAoKICAgIERUX0JMSyA9IDYsCgog ICAgRFRfUkVHID0gOCwKCiAgICBEVF9MTksgPSAxMCwKCiAgICBEVF9TT0NLID0gMTIsCgogICAg RFRfV0hUID0gMTQKCiAgfTsKIyAxMjggIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwp0eXBlZGVm IHN0cnVjdCBfX2RpcnN0cmVhbSBESVI7CgoKCmV4dGVybiBESVIgKm9wZW5kaXIgKF9fY29uc3Qg Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9zZWRpciAoRElSICpfX2Rp cnApIHRocm93ICgpOwojIDE0NiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBzdHJ1 Y3QgZGlyZW50ICpyZWFkZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCk7CiMgMTU2ICIvdXNyL2lu Y2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIHN0cnVjdCBkaXJlbnQ2NCAqcmVhZGRpcjY0IChESVIg Kl9fZGlycCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcmVhZGRpcl9yIChESVIgKl9fcmVz dHJpY3QgX19kaXJwLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqX19yZXN0 cmljdCBfX2VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqKl9fcmVz dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwojIDE3OSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAz CmV4dGVybiBpbnQgcmVhZGRpcjY0X3IgKERJUiAqX19yZXN0cmljdCBfX2RpcnAsCiAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQ2NCAqX19yZXN0cmljdCBfX2VudHJ5LAogICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0 KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHJld2luZGRpciAoRElSICpfX2RpcnApIHRocm93 ICgpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTkwICIvdXNyL2lu Y2x1ZGUvZGlyZW50LmgiIDIgMwoKCmV4dGVybiB2b2lkIHNlZWtkaXIgKERJUiAqX19kaXJwLCBs b25nIGludCBfX3BvcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IHRlbGxkaXIgKERJUiAq X19kaXJwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGRpcmZkIChESVIgKl9fZGlycCkgdGhy b3cgKCk7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMg MjEwICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDIgMwojIDIyMCAiL3Vzci9pbmNsdWRlL2RpcmVu dC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjIxICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDIgMwoK CgoKCgpleHRlcm4gaW50IHNjYW5kaXIgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RpciwK ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICoqKl9fcmVzdHJpY3QgX19uYW1lbGlz dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX3NlbGVjdG9yKSAoX19jb25zdCBzdHJ1Y3Qg ZGlyZW50ICopLAogICAgICAgICAgICAgICAgICAgIGludCAoKl9fY21wKSAoX19jb25zdCB2b2lk ICosIF9fY29uc3Qgdm9pZCAqKSkgdGhyb3cgKCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvZGlyZW50 LmgiIDMKZXh0ZXJuIGludCBzY2FuZGlyNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Rp ciwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQ2NCAqKipfX3Jlc3RyaWN0IF9f bmFtZWxpc3QsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX3NlbGVjdG9yKSAoX19jb25z dCBzdHJ1Y3QgZGlyZW50NjQgKiksCiAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX2NtcCkg KF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu dCBhbHBoYXNvcnQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDI2OSAiL3Vzci9pbmNsdWRl L2RpcmVudC5oIiAzCmV4dGVybiBpbnQgYWxwaGFzb3J0NjQgKF9fY29uc3Qgdm9pZCAqX19lMSwg X19jb25zdCB2b2lkICpfX2UyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCgoKCmV4dGVybiBpbnQgdmVyc2lvbnNvcnQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19j b25zdCB2b2lkICpfX2UyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwojIDI5MCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBpbnQgdmVyc2lvbnNvcnQ2 NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMzAwICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi IDMKZXh0ZXJuIF9fc3NpemVfdCBnZXRkaXJlbnRyaWVzIChpbnQgX19mZCwgY2hhciAqX19yZXN0 cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uYnl0 ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmZfdCAqX19yZXN0cmljdCBf X2Jhc2VwKSB0aHJvdyAoKTsKIyAzMTYgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4g X19zc2l6ZV90IGdldGRpcmVudHJpZXM2NCAoaW50IF9fZmQsIGNoYXIgKl9fcmVzdHJpY3QgX19i dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uYnl0ZXMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgKl9fcmVzdHJpY3QgX19i YXNlcCkgdGhyb3cgKCk7CgoKCgp9CiMgMTc5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNG aWxlU3BlYy5oIiAyCiMgMTk3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5o IgpjbGFzcyBuc0ZpbGVTcGVjOwpjbGFzcyBuc0ZpbGVQYXRoOwpjbGFzcyBuc0ZpbGVVUkw7CmNs YXNzIG5zTlNQUlBhdGg7CmNsYXNzIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yOwoKCgoKY2xh c3MgbnNPdXRwdXRTdHJlYW07CmNsYXNzIG5zSW5wdXRTdHJlYW07CmNsYXNzIG5zSU91dHB1dFN0 cmVhbTsKY2xhc3MgbnNJSW5wdXRTdHJlYW07CmNsYXNzIG5zT3V0cHV0RmlsZVN0cmVhbTsKY2xh c3MgbnNJbnB1dEZpbGVTdHJlYW07CmNsYXNzIG5zT3V0cHV0Q29uc29sZVN0cmVhbTsKCmNsYXNz IG5zU3RyaW5nOwoKY2xhc3MgbnNJVW5pY29kZUVuY29kZXI7CmNsYXNzIG5zSVVuaWNvZGVEZWNv ZGVyOwojIDIyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKbnNyZXN1 bHQgbnNfZmlsZV9jb252ZXJ0X3Jlc3VsdChQUkludDMyIG5hdGl2ZUVycik7CgoKCmNsYXNzIG5z QXV0b0NTdHJpbmcKIyAyNDcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgi CnsKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F1dG9DU3RyaW5n KGNvbnN0IG5zU3RyaW5nJiBvdGhlcikgOiBtQ1N0cmluZyhvdGhlci5Ub05ld0NTdHJpbmcoKSkg e30KICAgIHZpcnR1YWwgfm5zQXV0b0NTdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSBjb25zdCB7IHJldHVybiBtQ1N0cmluZzsg fQoKCgoKcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBtQ1N0cmluZzsKfTsKCgpjbGFzcyBuc1NpbXBsZUNoYXJTdHJpbmcKCgoKewpwdWJsaWM6 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZygpOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpbXBsZUNoYXJTdHJpbmcoY29uc3Qg Y2hhciopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpbXBsZUNoYXJTdHJp bmcoY29uc3QgbnNTdHJpbmcmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNT aW1wbGVDaGFyU3RyaW5nKGNvbnN0IG5zU2ltcGxlQ2hhclN0cmluZyYpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc1NpbXBsZUNoYXJTdHJpbmcoY29uc3QgY2hhciogaW5EYXRh LCBQUlVpbnQzMiBpbkxlbmd0aCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+ bnNTaW1wbGVDaGFyU3RyaW5nKCk7CgogICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBjaGFyKik7 CiAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zU3RyaW5nJik7CiAgICB2b2lkIG9wZXJhdG9y ID0gKGNvbnN0IG5zU2ltcGxlQ2hhclN0cmluZyYpOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSBjb25zdCB7IHJldHVybiBtRGF0YSA/IG1E YXRhLT5tU3RyaW5nIDogMDsgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVy YXRvciBjaGFyKiAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsbG9jRGF0YShMZW5ndGgoKSk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbURhdGEgPyBtRGF0YS0+bVN0 cmluZyA6IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIFBSQm9vbCBv cGVyYXRvciA9PSAoY29uc3QgY2hhciopOwogICAgUFJCb29sIG9wZXJhdG9yID09IChjb25zdCBu c1N0cmluZyYpOwogICAgUFJCb29sIG9wZXJhdG9yID09IChjb25zdCBuc1NpbXBsZUNoYXJTdHJp bmcmKTsKCiAgICB2b2lkIG9wZXJhdG9yICs9IChjb25zdCBjaGFyKiBpblN0cmluZyk7CiAgICBu c1NpbXBsZUNoYXJTdHJpbmcgb3BlcmF0b3IgKyAoY29uc3QgY2hhciogaW5TdHJpbmcpIGNvbnN0 OwoKICAgIGNoYXIgb3BlcmF0b3IgW10oaW50IGkpIGNvbnN0IHsgcmV0dXJuIG1EYXRhID8gbURh dGEtPm1TdHJpbmdbaV0gOiAnXDAnOyB9CiAgICBjaGFyJiBvcGVyYXRvciBbXShpbnQgaSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGkgPj0gKGludClMZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWFsbG9jRGF0YSgoUFJVaW50MzIpaSArIDEpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1EYXRhLT5tU3RyaW5nW2ldOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICBjaGFyJiBvcGVyYXRvciBbXSh1 bnNpZ25lZCBpbnQgaSkgeyByZXR1cm4gKCp0aGlzKVsoaW50KWldOyB9CgogICAgdm9pZCBDYXRl bmF0ZShjb25zdCBjaGFyKiBpblN0cmluZzEsIGNvbnN0IGNoYXIqIGluU3RyaW5nMik7CgogICAg dm9pZCBTZXRUb0VtcHR5KCk7CiAgICBQUkJvb2wgSXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIExl bmd0aCgpID09IDA7IH0KCiAgICBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtRGF0 YSA/IG1EYXRhLT5tTGVuZ3RoIDogMDsgfQogICAgdm9pZCBTZXRMZW5ndGgoUFJVaW50MzIgaW5M ZW5ndGgpIHsgUmVhbGxvY0RhdGEoaW5MZW5ndGgpOyB9CiAgICB2b2lkIENvcHlGcm9tKGNvbnN0 IGNoYXIqIGluRGF0YSwgUFJVaW50MzIgaW5MZW5ndGgpOwogICAgdm9pZCBMZWFmUmVwbGFjZShj aGFyIGluU2VwYXJhdG9yLCBjb25zdCBjaGFyKiBpbkxlYWZOYW1lKTsKICAgIGNoYXIqIEdldExl YWYoY2hhciBpblNlcGFyYXRvcikgY29uc3Q7CiAgICB2b2lkIFVuZXNjYXBlKCk7Cgpwcm90ZWN0 ZWQ6CgogICAgdm9pZCBBZGRSZWZEYXRhKCk7CiAgICB2b2lkIFJlbGVhc2VEYXRhKCk7CiAgICB2 b2lkIFJlYWxsb2NEYXRhKFBSVWludDMyIGluTGVuZ3RoKTsKCgoKCgpwcm90ZWN0ZWQ6CgogICAg c3RydWN0IERhdGEgewogICAgICAgIGludCBtUmVmQ291bnQ7CiAgICAgICAgUFJVaW50MzIgbUxl bmd0aDsKICAgICAgICBjaGFyIG1TdHJpbmdbMV07CiAgICAgICAgfTsKICAgIERhdGEqIG1EYXRh Owp9OwoKCmNsYXNzIG5zRmlsZVNwZWMKCgoKewogICAgcHVibGljOgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zRmlsZVNwZWMoKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zRmlsZVNwZWMoY29uc3QgY2hhciogaW5OYXRpdmVQYXRoLCBQUkJvb2wgaW5DcmVh dGVEaXJzID0gMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlU3BlYyhj b25zdCBuc1N0cmluZyYgaW5OYXRpdmVQYXRoLCBQUkJvb2wgaW5DcmVhdGVEaXJzID0gMCk7CgoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVTcGVjKGNvbnN0IG5zRmlsZVBh dGgmIGluUGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlU3BlYyhj b25zdCBuc0ZpbGVVUkwmIGluVVJMKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0ZpbGVTcGVjKGNvbnN0IG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yJiBpblVSTCk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlU3BlYyhjb25zdCBuc0ZpbGVTcGVjJiBp blBhdGgpOwogICAgICAgIHZpcnR1YWwgfm5zRmlsZVNwZWMoKTsKCgogICAgICAgIHZvaWQgb3Bl cmF0b3IgPSAoY29uc3QgY2hhciogaW5OYXRpdmVQYXRoKTsKICAgICAgICB2b2lkIG9wZXJhdG9y ID0gKGNvbnN0IG5zU3RyaW5nJiBpbk5hdGl2ZVBhdGgpOwoKICAgICAgICB2b2lkIG9wZXJhdG9y ID0gKGNvbnN0IG5zRmlsZVBhdGgmIGluUGF0aCk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChj b25zdCBuc0ZpbGVVUkwmIGluVVJMKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5z RmlsZVNwZWMmIGluT3RoZXIpOwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNQZXJz aXN0ZW50RmlsZURlc2NyaXB0b3ImIGluT3RoZXIpOwoKICAgICAgICBQUkJvb2wgb3BlcmF0b3Ig PT0oY29uc3QgbnNGaWxlU3BlYyYgaW5PdGhlcikgY29uc3Q7CiAgICAgICAgUFJCb29sIG9wZXJh dG9yICE9KGNvbnN0IG5zRmlsZVNwZWMmIGluT3RoZXIpIGNvbnN0OwojIDM3NCAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgICAgIGNvbnN0IGNoYXIqIEdldENTdHJp bmcoKSBjb25zdDsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciBj b25zdCBjaGFyKiAoKSBjb25zdCB7IHJldHVybiBHZXRDU3RyaW5nKCk7IH0KCgoKICAgICAgIGNv bnN0IGNoYXIqIEdldE5hdGl2ZVBhdGhDU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gR2V0Q1N0cmlu ZygpOyB9CgoKCiAgICAgICB2b2lkIEdldE5hdGl2ZVBhdGhTdHJpbmcobnNTdHJpbmcgJm5hdGl2 ZVBhdGhTdHJpbmcpOwoKICAgICAgIFBSQm9vbCBJc0NoaWxkT2YobnNGaWxlU3BlYyAmcG9zc2li bGVQYXJlbnQpOwojIDQyMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIK ICAgICAgICBQUkJvb2wgVmFsaWQoKSBjb25zdCB7IHJldHVybiAoISgoRXJyb3IoKSkgJiAweDgw MDAwMDAwKSk7IH0KICAgICAgICBuc3Jlc3VsdCBFcnJvcigpIGNvbnN0CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKG1QYXRoLklzRW1wdHkoKSAmJiAoISgobUVycm9yKSAmIDB4ODAwMDAwMDApKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobnNGaWxlU3BlYyopdGhpcyktPm1F cnJvciA9ICgoKG5zcmVzdWx0KSAweEMxRjMwMDAwKSArIDEpOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgUFJCb29sIEZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIChQUkJvb2wp KChFcnJvcigpKSAmIDB4ODAwMDAwMDApOyB9CgoKCgoKICAgICAgICBjaGFyKiBHZXRMZWFmTmFt ZSgpIGNvbnN0OwoKCiAgICAgICAgdm9pZCBHZXRMZWFmTmFtZShuc1N0cmluZyAmbmF0aXZlUGF0 aFN0cmluZyk7CiMgNDUyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgog ICAgICAgIHZvaWQgU2V0TGVhZk5hbWUoY29uc3QgY2hhciogaW5MZWFmTmFtZSk7CiAgICAgICAg dm9pZCBTZXRMZWFmTmFtZShjb25zdCBuc1N0cmluZyYgaW5MZWFmTmFtZSk7CgoKCgoKCgogICAg ICAgIHZvaWQgR2V0UGFyZW50KG5zRmlsZVNwZWMmIG91dFNwZWMpIGNvbnN0OwojIDQ3MCAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgICAgICB0eXBlZGVmIFBSVWlu dDMyIFRpbWVTdGFtcDsKCgoKCgogICAgICAgIHZvaWQgR2V0TW9kRGF0ZShUaW1lU3RhbXAmIG91 dFN0YW1wKSBjb25zdDsKCiAgICAgICAgUFJCb29sIE1vZERhdGVDaGFuZ2VkKGNvbnN0IFRpbWVT dGFtcCYgb2xkU3RhbXApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3RhbXAgbmV3U3RhbXA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldE1vZERhdGUobmV3U3RhbXApOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3U3RhbXAgIT0gb2xk U3RhbXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICBQUlVpbnQz MiBHZXRGaWxlU2l6ZSgpIGNvbnN0OwogICAgICAgIFBSSW50NjQgR2V0RGlza1NwYWNlQXZhaWxh YmxlKCkgY29uc3Q7CgogICAgICAgIG5zRmlsZVNwZWMgb3BlcmF0b3IgKyAoY29uc3QgY2hhciog aW5SZWxhdGl2ZVVuaXhQYXRoKSBjb25zdDsKICAgICAgICBuc0ZpbGVTcGVjIG9wZXJhdG9yICsg KGNvbnN0IG5zU3RyaW5nJiBpblJlbGF0aXZlVW5peFBhdGgpIGNvbnN0OwojIDQ5OSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgICAgICB2b2lkIG9wZXJhdG9yICs9 IChjb25zdCBjaGFyKiBpblJlbGF0aXZlVW5peFBhdGgpOwoKICAgICAgICB2b2lkIG9wZXJhdG9y ICs9IChjb25zdCBuc1N0cmluZyYgaW5SZWxhdGl2ZVVuaXhQYXRoKTsKCiAgICAgICAgdm9pZCBN YWtlVW5pcXVlKCk7CiAgICAgICAgdm9pZCBNYWtlVW5pcXVlKGNvbnN0IGNoYXIqIGluU3VnZ2Vz dGVkTGVhZk5hbWUpOwogICAgICAgIHZvaWQgTWFrZVVuaXF1ZShjb25zdCBuc1N0cmluZyYgaW5T dWdnZXN0ZWRMZWFmTmFtZSk7CgoKICAgICAgICBQUkJvb2wgSXNEaXJlY3RvcnkoKSBjb25zdDsK ICAgICAgICBQUkJvb2wgSXNGaWxlKCkgY29uc3Q7CiAgICAgICAgUFJCb29sIEV4aXN0cygpIGNv bnN0OwoKICAgICAgICBQUkJvb2wgSXNIaWRkZW4oKSBjb25zdDsKCiAgICAgICAgUFJCb29sIElz U3ltbGluaygpIGNvbnN0OwoKCgoKCgoKICAgICAgICBuc3Jlc3VsdCBSZXNvbHZlU3ltbGluayhQ UkJvb2wmIHdhc1N5bWxpbmspOwoKICAgICAgICB2b2lkIENyZWF0ZURpcmVjdG9yeShpbnQgbW9k ZSA9IDA3NzUgKTsKICAgICAgICB2b2lkIENyZWF0ZURpcihpbnQgbW9kZSA9IDA3NzUpIHsgQ3Jl YXRlRGlyZWN0b3J5KG1vZGUpOyB9CgogICAgICAgIHZvaWQgRGVsZXRlKFBSQm9vbCBpblJlY3Vy c2l2ZSkgY29uc3Q7CiAgICAgICAgbnNyZXN1bHQgVHJ1bmNhdGUoUFJJbnQzMiBhTmV3TGVuZ3Ro KSBjb25zdDsKICAgICAgICB2b2lkIFJlY3Vyc2l2ZUNvcHkobnNGaWxlU3BlYyBuZXdEaXIpIGNv bnN0OwoKICAgICAgICBuc3Jlc3VsdCBSZW5hbWUoY29uc3QgY2hhciogaW5OZXdOYW1lKTsKICAg ICAgICBuc3Jlc3VsdCBSZW5hbWUoY29uc3QgbnNTdHJpbmcmIGluTmV3TmFtZSk7CiAgICAgICAg bnNyZXN1bHQgQ29weVRvRGlyKGNvbnN0IG5zRmlsZVNwZWMmIGluTmV3UGFyZW50RGlyZWN0b3J5 KSBjb25zdDsKICAgICAgICBuc3Jlc3VsdCBNb3ZlVG9EaXIoY29uc3QgbnNGaWxlU3BlYyYgaW5O ZXdQYXJlbnREaXJlY3RvcnkpOwogICAgICAgIG5zcmVzdWx0IEV4ZWN1dGUoY29uc3QgY2hhciog YXJncykgY29uc3Q7CiAgICAgICAgbnNyZXN1bHQgRXhlY3V0ZShjb25zdCBuc1N0cmluZyYgYXJn cykgY29uc3Q7CgoKCgoKICAgIHByb3RlY3RlZDoKCgogICAgICAgUFJVbmljaGFyKiBDb252ZXJ0 RnJvbUZpbGVTeXN0ZW1DaGFyc2V0KGNvbnN0IGNoYXIgKmluU3RyaW5nKTsKICAgICAgIHN0YXRp YyB2b2lkIEdldEZpbGVTeXN0ZW1DaGFyc2V0KG5zU3RyaW5nICYgZmlsZVN5c3RlbUNoYXJzZXQp OwoKCgoKCiAgICBwcm90ZWN0ZWQ6CgoKCiAgICAgICB2b2lkIENsZWFyKCk7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBuc0ZpbGVQYXRoOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBuc0ZpbGVVUkw7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIG5zRGlyZWN0b3J5SXRlcmF0b3I7CgoK CiAgICAgICAgbnNTaW1wbGVDaGFyU3RyaW5nIG1QYXRoOwogICAgICAgIG5zcmVzdWx0IG1FcnJv cjsKCn07CgoKCnR5cGVkZWYgbnNGaWxlU3BlYyBuc05hdGl2ZUZpbGVTcGVjOwoKCmNsYXNzIG5z RmlsZVVSTAoKCgoKewogICAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zRmlsZVVSTChjb25zdCBuc0ZpbGVVUkwmIGluVVJMKTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0ZpbGVVUkwoY29uc3QgY2hhciogaW5VUkxTdHJpbmcsIFBSQm9vbCBpbkNy ZWF0ZURpcnMgPSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVVUkwo Y29uc3QgbnNTdHJpbmcmIGluVVJMU3RyaW5nLCBQUkJvb2wgaW5DcmVhdGVEaXJzID0gMCk7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlVVJMKGNvbnN0IG5zRmlsZVBhdGgm IGluUGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlVVJMKGNvbnN0 IG5zRmlsZVNwZWMmIGluUGF0aCk7CiAgICAgICAgdmlydHVhbCB+bnNGaWxlVVJMKCk7CgoKCgoK ICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zRmlsZVVSTCYgaW5VUkwpOwogICAgICAg IHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgY2hhciogaW5VUkxTdHJpbmcpOwogICAgICAgIHZvaWQg b3BlcmF0b3IgPSAoY29uc3QgbnNTdHJpbmcmIGluVVJMU3RyaW5nKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbnNBdXRvQ1N0cmluZyBzdHJpbmcoaW5VUkxTdHJpbmcpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqdGhpcyA9IHN0cmluZzsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc0ZpbGVQYXRoJiBpbk90 aGVyKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zRmlsZVNwZWMmIGluT3RoZXIp OwoKICAgICAgICB2b2lkIG9wZXJhdG9yICs9KGNvbnN0IGNoYXIqIGluUmVsYXRpdmVVbml4UGF0 aCk7CiAgICAgICAgbnNGaWxlVVJMIG9wZXJhdG9yICsoY29uc3QgY2hhciogaW5SZWxhdGl2ZVVu aXhQYXRoKSBjb25zdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciBj b25zdCBjaGFyKiAoKSBjb25zdCB7IHJldHVybiAoY29uc3QgY2hhciopbVVSTDsgfQogICAgICAg IGNvbnN0IGNoYXIqIEdldFVSTFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBjaGFyKilt VVJMOyB9CgogICAgICAgIGNvbnN0IGNoYXIqIEdldEFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g KGNvbnN0IGNoYXIqKW1VUkw7IH0KIyA2MTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Zp bGVTcGVjLmgiCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnJpZW5kIGNsYXNzIG5zRmlsZVBhdGg7CiAgICAgICAgbnNTaW1wbGVDaGFyU3RyaW5nIG1VUkw7 CgoKCgoKCn07CgoKY2xhc3MgbnNGaWxlUGF0aAoKCgoKewogICAgcHVibGljOgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVBhdGgoY29uc3QgbnNGaWxlUGF0aCYgaW5QYXRo KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVQYXRoKGNvbnN0IGNoYXIq IGluVW5peFBhdGhTdHJpbmcsIFBSQm9vbCBpbkNyZWF0ZURpcnMgPSAwKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc0ZpbGVQYXRoKGNvbnN0IG5zU3RyaW5nJiBpblVuaXhQYXRo U3RyaW5nLCBQUkJvb2wgaW5DcmVhdGVEaXJzID0gMCk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNGaWxlUGF0aChjb25zdCBuc0ZpbGVVUkwmIGluVVJMKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc0ZpbGVQYXRoKGNvbnN0IG5zRmlsZVNwZWMmIGluUGF0aCk7 CiAgICAgICAgdmlydHVhbCB+bnNGaWxlUGF0aCgpOwoKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciogKCkgY29uc3QgeyByZXR1cm4gbVBhdGg7IH0K CgoKCiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc0ZpbGVQYXRoJiBpblBhdGgpOwog ICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgY2hhciogaW5Vbml4UGF0aFN0cmluZyk7CiAg ICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc1N0cmluZyYgaW5Vbml4UGF0aFN0cmluZykK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG5zQXV0b0NTdHJpbmcgc3RyaW5nKGluVW5peFBhdGhTdHJpbmcp OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHN0cmluZzsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChj b25zdCBuc0ZpbGVVUkwmIGluVVJMKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5z RmlsZVNwZWMmIGluT3RoZXIpOwoKICAgICAgICB2b2lkIG9wZXJhdG9yICs9KGNvbnN0IGNoYXIq IGluUmVsYXRpdmVVbml4UGF0aCk7CiAgICAgICAgbnNGaWxlUGF0aCBvcGVyYXRvciArKGNvbnN0 IGNoYXIqIGluUmVsYXRpdmVVbml4UGF0aCkgY29uc3Q7CiMgNjc0ICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgogICAgcHJpdmF0ZToKCiAgICAgICAgbnNTaW1wbGVDaGFy U3RyaW5nIG1QYXRoOwoKCgoKCn07CgoKY2xhc3MgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3IK CgoKCgp7CiAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNQZXJz aXN0ZW50RmlsZURlc2NyaXB0b3IoKSB7fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvcihjb25zdCBuc1BlcnNpc3RlbnRGaWxlRGVzY3Jp cHRvciYgaW5FbmNvZGVkRGF0YSk7CiAgICAgICAgdmlydHVhbCB+bnNQZXJzaXN0ZW50RmlsZURl c2NyaXB0b3IoKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zUGVyc2lzdGVudEZp bGVEZXNjcmlwdG9yJiBpbkVuY29kZWREYXRhKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yKGNvbnN0IG5zRmlsZVNwZWMmIGluU3Bl Yyk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc0ZpbGVTcGVjJiBpblNwZWMpOwoK CgoKICAgICAgICBmcmllbmQgbnNyZXN1bHQgUmVhZChuc0lJbnB1dFN0cmVhbSogYVN0cmVhbSwg bnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3ImKTsKICAgICAgICBmcmllbmQgbnNyZXN1bHQgV3Jp dGUobnNJT3V0cHV0U3RyZWFtKiBhU3RyZWFtLCBjb25zdCBuc1BlcnNpc3RlbnRGaWxlRGVzY3Jp cHRvciYpOwoKICAgICAgICBmcmllbmQgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3IgPj4gKG5zSW5w dXRTdHJlYW0mLCBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvciYpOwoKICAgICAgICBmcmllbmQg bnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChuc091dHB1dFN0cmVhbSYsIGNvbnN0IG5zUGVy c2lzdGVudEZpbGVEZXNjcmlwdG9yJik7CgogICAgICAgIGZyaWVuZCBjbGFzcyBuc0ZpbGVTcGVj OwoKICAgICAgICB2b2lkIEdldERhdGEobnNTaW1wbGVDaGFyU3RyaW5nJiBvdXREYXRhKSBjb25z dDsKICAgICAgICB2b2lkIFNldERhdGEoY29uc3QgbnNTaW1wbGVDaGFyU3RyaW5nJiBpbkRhdGEp OwogICAgICAgIHZvaWQgR2V0RGF0YShuc1NpbXBsZUNoYXJTdHJpbmcmIG91dERhdGEsIFBSSW50 MzImIG91dFNpemUpIGNvbnN0OwogICAgICAgIHZvaWQgU2V0RGF0YShjb25zdCBuc1NpbXBsZUNo YXJTdHJpbmcmIGluRGF0YSwgUFJJbnQzMiBpblNpemUpOwogICAgICAgIHZvaWQgU2V0RGF0YShj b25zdCBjaGFyKiBpbkRhdGEsIFBSSW50MzIgaW5TaXplKTsKCgoKCgogICAgcHJvdGVjdGVkOgoK ICAgICAgICBuc1NpbXBsZUNoYXJTdHJpbmcgbURlc2NyaXB0b3JTdHJpbmc7Cgp9OwoKCmNsYXNz IG5zRGlyZWN0b3J5SXRlcmF0b3IKIyA3NDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Zp bGVTcGVjLmgiCnsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zRGlyZWN0b3J5SXRlcmF0b3IoIGNvbnN0IG5zRmlsZVNwZWMmIHBhcmVudCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJC b29sIHJlc292ZVN5bUxpbmtzKTsKCgogICAgICAgICAgICB2aXJ0dWFsIH5uc0RpcmVjdG9yeUl0 ZXJhdG9yKCk7CgogICAgICAgICAgICBQUkJvb2wgRXhpc3RzKCkgY29uc3QgeyByZXR1cm4gbUV4 aXN0czsgfQogICAgICAgICAgICBuc0RpcmVjdG9yeUl0ZXJhdG9yJiBvcGVyYXRvciArKygpOwog ICAgICAgICAgICBuc0RpcmVjdG9yeUl0ZXJhdG9yJiBvcGVyYXRvciArKyhpbnQpIHsgcmV0dXJu ICsrKCp0aGlzKTsgfQogICAgICAgICAgICBuc0RpcmVjdG9yeUl0ZXJhdG9yJiBvcGVyYXRvciAt LSgpOwogICAgICAgICAgICBuc0RpcmVjdG9yeUl0ZXJhdG9yJiBvcGVyYXRvciAtLShpbnQpIHsg cmV0dXJuIC0tKCp0aGlzKTsgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv cGVyYXRvciBuc0ZpbGVTcGVjJigpIHsgcmV0dXJuIG1DdXJyZW50OyB9CgogICAgICAgICAgICBu c0ZpbGVTcGVjJiBTcGVjKCkgeyByZXR1cm4gbUN1cnJlbnQ7IH0KCiAgICAgICAgcHJpdmF0ZToK IyA3NzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAgICAgICAgcHJp dmF0ZToKCiAgICAgICAgICAgIG5zRmlsZVNwZWMgbUN1cnJlbnQ7CiAgICAgICAgICAgIFBSQm9v bCBtRXhpc3RzOwogICAgICAgIFBSQm9vbCBtUmVzb3ZlU3ltTGlua3M7CgoKICAgICAgICAgICAg bnNGaWxlU3BlYyBtU3RhcnRpbmc7CgoKCiAgICAgICAgICAgIERJUiogbURpcjsKIyA3OTYgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCn07CgoKY2xhc3MgbnNOU1BSUGF0 aAoKCgoKewpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTlNQUlBh dGgoY29uc3QgbnNGaWxlU3BlYyYgaW5TcGVjKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiBtRmlsZVBhdGgoaW5TcGVjKSwgbW9kaWZpZWROU1BSUGF0aCgwKSB7fQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc05TUFJQYXRoKGNvbnN0IG5zRmlsZVVSTCYg aW5VUkwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1GaWxlUGF0aChp blVSTCksIG1vZGlmaWVkTlNQUlBhdGgoMCkge30KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNOU1BSUGF0aChjb25zdCBuc0ZpbGVQYXRoJiBpblVuaXhQYXRoKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtRmlsZVBhdGgoaW5Vbml4UGF0aCksIG1vZGlm aWVkTlNQUlBhdGgoMCkge30KCiAgICB2aXJ0dWFsIH5uc05TUFJQYXRoKCk7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNvbnN0OwojIDgy NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKcHJpdmF0ZToKCiAgICBu c0ZpbGVQYXRoIG1GaWxlUGF0aDsKICAgIGNoYXIqIG1vZGlmaWVkTlNQUlBhdGg7Cn07CgoKICAg ICAgIG5zcmVzdWx0IE5TX0ZpbGVTcGVjVG9JRmlsZShuc0ZpbGVTcGVjKiBmaWxlU3BlYywgbnNJ TG9jYWxGaWxlKiAqcmVzdWx0KTsKIyAxOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZp bGVTcGVjLmgiIDIKY2xhc3MgbnNJRmlsZVVSTDsKCmNsYXNzIG5zSUZpbGVQYXRoOwoKY2xhc3Mg bnNJT3V0cHV0U3RyZWFtOwoKY2xhc3MgbnNJSW5wdXRTdHJlYW07CiMgNDIgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lGaWxlU3BlYy5oIgpjbGFzcyBuc0lGaWxlU3BlYyA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkOGMwYTA4MCwgMHgwODY4LCAweDExZDMsIHsgMHg5 MSwgMHg1ZiwgMHhkOSwgMHhkOCwgMHg4OSwgMHhkNCwgMHg4ZSwgMHgzYyB9fTsgcmV0dXJuIGlp ZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZyb21GaWxlU3BlYyhjb25zdCBuc0lGaWxlU3BlYyAq b3JpZ2luYWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VVJMU3RyaW5nKGNoYXIgKiAq YVVSTFN0cmluZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VVJMU3RyaW5nKGNvbnN0IGNo YXIgKiBhVVJMU3RyaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaXhTdHlsZUZp bGVQYXRoKGNoYXIgKiAqYVVuaXhTdHlsZUZpbGVQYXRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRVbml4U3R5bGVGaWxlUGF0aChjb25zdCBjaGFyICogYVVuaXhTdHlsZUZpbGVQYXRoKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlcnNpc3RlbnREZXNjcmlwdG9yU3RyaW5nKGNo YXIgKiAqYVBlcnNpc3RlbnREZXNjcmlwdG9yU3RyaW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRQZXJzaXN0ZW50RGVzY3JpcHRvclN0cmluZyhjb25zdCBjaGFyICogYVBlcnNpc3RlbnRE ZXNjcmlwdG9yU3RyaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hdGl2ZVBhdGgo Y2hhciAqICphTmF0aXZlUGF0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TmF0aXZlUGF0 aChjb25zdCBjaGFyICogYU5hdGl2ZVBhdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TlNQUlBhdGgoY2hhciAqICphTlNQUlBhdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXJy b3Iodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1ZhbGlkKFBSQm9vbCAqX3JldHZh bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGYWlsZWQoUFJCb29sICpfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlYWZOYW1lKGNoYXIgKiAqYUxlYWZOYW1lKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMZWFmTmFtZShjb25zdCBjaGFyICogYUxlYWZOYW1lKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudChuc0lGaWxlU3BlYyAqICphUGFyZW50 KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElucHV0U3RyZWFtKG5zSUlucHV0U3RyZWFt ICogKmFJbnB1dFN0cmVhbSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPdXRwdXRTdHJl YW0obnNJT3V0cHV0U3RyZWFtICogKmFPdXRwdXRTdHJlYW0pID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgSXNDaGlsZE9mKG5zSUZpbGVTcGVjICpwb3NzaWJsZVBhcmVudCwgUFJCb29sICpfcmV0 dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVTcGVjKG5zRmlsZVNwZWMgKmFG aWxlU3BlYykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGcm9tRmlsZVNwZWMoY29uc3Qg bnNGaWxlU3BlYyAmIHNwZWMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZUNvbnRl bnRzKGNoYXIgKiAqYUZpbGVDb250ZW50cykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Rmls ZUNvbnRlbnRzKGNvbnN0IGNoYXIgKiBhRmlsZUNvbnRlbnRzKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IE1ha2VVbmlxdWUodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNYWtlVW5p cXVlV2l0aFN1Z2dlc3RlZE5hbWUoY29uc3QgY2hhciAqc3VnZ2VzdGVkTmFtZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRNb2REYXRlKFBSVWludDMyICphTW9kRGF0ZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBNb2REYXRlQ2hhbmdlZChQUlVpbnQzMiBvbGRTdGFtcCwgUFJCb29s ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRGlyZWN0b3J5KFBSQm9vbCAq X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0ZpbGUoUFJCb29sICpfcmV0dmFs KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEV4aXN0cyhQUkJvb2wgKl9yZXR2YWwpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgSXNIaWRkZW4oUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEVxdWFscyhuc0lGaWxlU3BlYyAqc3BlYywgUFJCb29sICpfcmV0dmFs KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVTaXplKFBSVWludDMyICphRmlsZVNp emUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlza1NwYWNlQXZhaWxhYmxlKFBSSW50 NjQgKmFEaXNrU3BhY2VBdmFpbGFibGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5k UmVsYXRpdmVVbml4UGF0aChjb25zdCBjaGFyICpyZWxhdGl2ZVBhdGgpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgQ3JlYXRlRGlyKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG91 Y2godm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1N5bWxpbmsoUFJCb29sICpfcmV0 dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29sdmVTeW1saW5rKHZvaWQpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlKFBSQm9vbCByZWN1cnNpdmUpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgVHJ1bmNhdGUoUFJJbnQzMiBhTmV3TGVuZ3RoKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFJlbmFtZShjb25zdCBjaGFyICpuZXdMZWFmTmFtZSkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBDb3B5VG9EaXIoY29uc3QgbnNJRmlsZVNwZWMgKm5ld1BhcmVudERpcikg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNb3ZlVG9EaXIoY29uc3QgbnNJRmlsZVNwZWMgKm5l d1BhcmVudERpcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFeGVjdXRlKGNvbnN0IGNoYXIg KmFyZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3BlblN0cmVhbUZvclJlYWRpbmcodm9p ZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuU3RyZWFtRm9yV3JpdGluZyh2b2lkKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW5TdHJlYW1Gb3JSZWFkaW5nQW5kV3JpdGluZyh2 b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsb3NlU3RyZWFtKHZvaWQpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgSXNTdHJlYW1PcGVuKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBFb2YoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IFJlYWQoY2hhciAqKmJ1ZmZlciwgUFJJbnQzMiByZXF1ZXN0ZWRDb3VudCwgUFJJbnQz MiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWFkTGluZShjaGFyICoqbGlu ZSwgUFJJbnQzMiBidWZmZXJTaXplLCBQUkJvb2wgKndhc1RydW5jYXRlZCkgPSAwOwoKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgV3JpdGUoY29uc3QgY2hhciAqZGF0YSwgUFJJbnQzMiByZXF1ZXN0 ZWRDb3VudCwgUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGbHVz aCh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlZWsoUFJJbnQzMiBvZmZzZXQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVGVsbChQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEVuZExpbmUodm9pZCkgPSAwOwoKfTsKIyA3NzkgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lGaWxlU3BlYy5oIgpjbGFzcyBuc0lEaXJlY3RvcnlJdGVyYXRvciA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkOGMwYTA4MywgMHgwODY4LCAweDEx ZDMsIHsgMHg5MSwgMHg1ZiwgMHhkOSwgMHhkOCwgMHg4OSwgMHhkNCwgMHg4ZSwgMHgzYyB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJRmlsZVNwZWMgKnBhcmVu dCwgUFJCb29sIHJlc29sdmVTeW1saW5rKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEV4aXN0 cyhQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmV4dCh2b2lkKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRTcGVjKG5zSUZpbGVTcGVjICogKmFD dXJyZW50U3BlYykgPSAwOwoKfTsKIyA4NzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lG aWxlU3BlYy5oIgogICAgICAgbnNyZXN1bHQgTlNfTmV3RmlsZVNwZWNXaXRoU3BlYyhjb25zdCBu c0ZpbGVTcGVjJiBhU3JjRmlsZVNwZWMsIG5zSUZpbGVTcGVjICoqcmVzdWx0KTsKICAgICAgIG5z cmVzdWx0IE5TX05ld0ZpbGVTcGVjKG5zSUZpbGVTcGVjKiogcmVzdWx0KTsKICAgICAgIG5zcmVz dWx0IE5TX05ld0RpcmVjdG9yeUl0ZXJhdG9yKG5zSURpcmVjdG9yeUl0ZXJhdG9yKiogcmVzdWx0 KTsKCmlubGluZSBQUkJvb2wgRXhpc3RzKG5zSUZpbGVTcGVjKiBmKSB7IFBSQm9vbCB5ZXM7IHJl dHVybiAoISgoZi0+RXhpc3RzKCZ5ZXMpKSAmIDB4ODAwMDAwMDApKSAmJiB5ZXM7IH0KaW5saW5l IFBSQm9vbCBFeGlzdHMobnNJRGlyZWN0b3J5SXRlcmF0b3IqIGYpIHsgUFJCb29sIHllczsgcmV0 dXJuICghKChmLT5FeGlzdHMoJnllcykpICYgMHg4MDAwMDAwMCkpICYmIHllczsgfQppbmxpbmUg UFJCb29sIElzRGlyZWN0b3J5KG5zSUZpbGVTcGVjKiBmKSB7IFBSQm9vbCB5ZXM7IHJldHVybiAo ISgoZi0+SXNEaXJlY3RvcnkoJnllcykpICYgMHg4MDAwMDAwMCkpICYmIHllczsgfQojIDI5ICJu c0Zvcm1GcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvcm1Qcm9j ZXNzb3IuaCIgMQojIDMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybVByb2Nlc3Nv ci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMzQg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtUHJvY2Vzc29yLmgiIDIKIyAxICIvd2lu ZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAx CiMgMzUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtUHJvY2Vzc29yLmgiIDIKCiMg MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUhUTUxJbnB1dEVsZW1lbnQuaCIgMQoj IDEwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRNTElucHV0RWxlbWVudC5oIgoj IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MRWxlbWVudC5oIiAxCiMgMTAg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MRWxlbWVudC5oIgojIDEgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01FbGVtZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSURPTUVsZW1lbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbnNJRE9NTm9kZS5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01O b2RlLmgiCmNsYXNzIG5zSURPTU5vZGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g ezB4YTZjZjkwN2MsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4 NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKICBlbnVtIHsgRUxFTUVOVF9O T0RFID0gMVUgfTsKCiAgZW51bSB7IEFUVFJJQlVURV9OT0RFID0gMlUgfTsKCiAgZW51bSB7IFRF WFRfTk9ERSA9IDNVIH07CgogIGVudW0geyBDREFUQV9TRUNUSU9OX05PREUgPSA0VSB9OwoKICBl bnVtIHsgRU5USVRZX1JFRkVSRU5DRV9OT0RFID0gNVUgfTsKCiAgZW51bSB7IEVOVElUWV9OT0RF ID0gNlUgfTsKCiAgZW51bSB7IFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSA9IDdVIH07Cgog IGVudW0geyBDT01NRU5UX05PREUgPSA4VSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfTk9ERSA9IDlV IH07CgogIGVudW0geyBET0NVTUVOVF9UWVBFX05PREUgPSAxMFUgfTsKCiAgZW51bSB7IERPQ1VN RU5UX0ZSQUdNRU5UX05PREUgPSAxMVUgfTsKCiAgZW51bSB7IE5PVEFUSU9OX05PREUgPSAxMlUg fTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Tm9kZU5hbWUobnNBV3JpdGFibGVTdHJpbmcgJiBh Tm9kZU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Tm9kZVZhbHVlKG5zQVdyaXRh YmxlU3RyaW5nICYgYU5vZGVWYWx1ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Tm9kZVZh bHVlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgYU5vZGVWYWx1ZSkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXROb2RlVHlwZShQUlVpbnQxNiAqYU5vZGVUeXBlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFBhcmVudE5vZGUobnNJRE9NTm9kZSAqICphUGFyZW50Tm9kZSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGlsZE5vZGVzKG5zSURPTU5vZGVMaXN0ICogKmFD aGlsZE5vZGVzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpcnN0Q2hpbGQobnNJRE9N Tm9kZSAqICphRmlyc3RDaGlsZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXN0Q2hp bGQobnNJRE9NTm9kZSAqICphTGFzdENoaWxkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFByZXZpb3VzU2libGluZyhuc0lET01Ob2RlICogKmFQcmV2aW91c1NpYmxpbmcpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dFNpYmxpbmcobnNJRE9NTm9kZSAqICphTmV4dFNpYmxp bmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlcyhuc0lET01OYW1lZE5v ZGVNYXAgKiAqYUF0dHJpYnV0ZXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3duZXJE b2N1bWVudChuc0lET01Eb2N1bWVudCAqICphT3duZXJEb2N1bWVudCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBJbnNlcnRCZWZvcmUobnNJRE9NTm9kZSAqbmV3Q2hpbGQsIG5zSURPTU5vZGUg KnJlZkNoaWxkLCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBSZXBsYWNlQ2hpbGQobnNJRE9NTm9kZSAqbmV3Q2hpbGQsIG5zSURPTU5vZGUgKm9sZENoaWxk LCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVD aGlsZChuc0lET01Ob2RlICpvbGRDaGlsZCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kQ2hpbGQobnNJRE9NTm9kZSAqbmV3Q2hpbGQsIG5zSURP TU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0NoaWxkTm9kZXMo UFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lTm9kZShQUkJv b2wgZGVlcCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg Tm9ybWFsaXplKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTdXBwb3J0ZWQoY29u c3QgbnNBUmVhZGFibGVTdHJpbmcgJiBmZWF0dXJlLCBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAm IHZlcnNpb24sIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRO YW1lc3BhY2VVUkkobnNBV3JpdGFibGVTdHJpbmcgJiBhTmFtZXNwYWNlVVJJKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFByZWZpeChuc0FXcml0YWJsZVN0cmluZyAmIGFQcmVmaXgpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZWZpeChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAm IGFQcmVmaXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9jYWxOYW1lKG5zQVdyaXRh YmxlU3RyaW5nICYgYUxvY2FsTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNBdHRy aWJ1dGVzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyAzOTcgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lET01Ob2RlLmgiCmNsYXNzIG5zSURPTTNOb2RlIDogcHVibGljIG5zSVN1cHBv cnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweDI5ZmIyYTE4LCAweDFkZDIsIDB4MTFiMiwgeyAweDhkLCAweGQ5 LCAweGE2LCAweGZkLCAweDVkLCAweDVhLCAweGQxLCAweDJmIH19OyByZXR1cm4gaWlkO30KCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFzZVVSSShuc0FXcml0YWJsZVN0cmluZyAmIGFCYXNlVVJJ KSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NRWxlbWVudC5o IiAyCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01FbGVtZW50LmgiCmNsYXNz IG5zSURPTUVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NTm9kZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA3 OCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhZ05h bWUobnNBV3JpdGFibGVTdHJpbmcgJiBhVGFnTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRBdHRyaWJ1dGUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lLCBuc0FXcml0YWJs ZVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRl KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZSwgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcg JiB2YWx1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVBdHRyaWJ1dGUoY29uc3Qg bnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0 dHJpYnV0ZU5vZGUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lLCBuc0lET01BdHRyICoq X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyaWJ1dGVOb2RlKG5zSURP TUF0dHIgKm5ld0F0dHIsIG5zSURPTUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IFJlbW92ZUF0dHJpYnV0ZU5vZGUobnNJRE9NQXR0ciAqb2xkQXR0ciwgbnNJRE9NQXR0 ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RWxlbWVudHNCeVRhZ05h bWUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lLCBuc0lET01Ob2RlTGlzdCAqKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlTlMoY29uc3QgbnNBUmVh ZGFibGVTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbG9j YWxOYW1lLCBuc0FXcml0YWJsZVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0QXR0cmlidXRlTlMoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lc3BhY2VV UkksIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgcXVhbGlmaWVkTmFtZSwgY29uc3QgbnNBUmVh ZGFibGVTdHJpbmcgJiB2YWx1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVBdHRy aWJ1dGVOUyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIG5hbWVzcGFjZVVSSSwgY29uc3QgbnNB UmVhZGFibGVTdHJpbmcgJiBsb2NhbE5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 QXR0cmlidXRlTm9kZU5TKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBj b25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGxvY2FsTmFtZSwgbnNJRE9NQXR0ciAqKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRlTm9kZU5TKG5zSURPTUF0dHIg Km5ld0F0dHIsIG5zSURPTUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lc3Bh Y2VVUkksIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbG9jYWxOYW1lLCBuc0lET01Ob2RlTGlz dCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzQXR0cmlidXRlKGNvbnN0 IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZSwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEhhc0F0dHJpYnV0ZU5TKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFt ZXNwYWNlVVJJLCBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGxvY2FsTmFtZSwgUFJCb29sICpf cmV0dmFsKSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRN TEVsZW1lbnQuaCIgMgojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRNTEVs ZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NRWxlbWVudCB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHhhNmNmOTA4NSwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgw MCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldElkKG5zQVdyaXRhYmxlU3RyaW5nICYgYUlkKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRJZChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFJZCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRUaXRsZShuc0FXcml0YWJsZVN0cmluZyAmIGFUaXRsZSkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGl0bGUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBh VGl0bGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZyhuc0FXcml0YWJsZVN0cmlu ZyAmIGFMYW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMYW5nKGNvbnN0IG5zQVJlYWRh YmxlU3RyaW5nICYgYUxhbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlyKG5zQVdy aXRhYmxlU3RyaW5nICYgYURpcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlyKGNvbnN0 IG5zQVJlYWRhYmxlU3RyaW5nICYgYURpcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD bGFzc05hbWUobnNBV3JpdGFibGVTdHJpbmcgJiBhQ2xhc3NOYW1lKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRDbGFzc05hbWUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBhQ2xhc3NOYW1l KSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRNTElucHV0 RWxlbWVudC5oIiAyCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MSW5w dXRFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxJbnB1dEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9N SFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtz dGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwOTMsIDB4MTViMywgMHgxMWQyLCB7IDB4 OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBp aWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0VmFsdWUobnNBV3JpdGFibGVTdHJp bmcgJiBhRGVmYXVsdFZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0VmFs dWUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBhRGVmYXVsdFZhbHVlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldERlZmF1bHRDaGVja2VkKFBSQm9vbCAqYURlZmF1bHRDaGVja2VkKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0Q2hlY2tlZChQUkJvb2wgYURlZmF1bHRD aGVja2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvcm0obnNJRE9NSFRNTEZvcm1F bGVtZW50ICogKmFGb3JtKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFjY2VwdChuc0FX cml0YWJsZVN0cmluZyAmIGFBY2NlcHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2Vw dChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFBY2NlcHQpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0QWNjZXNzS2V5KG5zQVdyaXRhYmxlU3RyaW5nICYgYUFjY2Vzc0tleSkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0QWNjZXNzS2V5KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYg YUFjY2Vzc0tleSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlnbihuc0FXcml0YWJs ZVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29uc3Qg bnNBUmVhZGFibGVTdHJpbmcgJiBhQWxpZ24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 QWx0KG5zQVdyaXRhYmxlU3RyaW5nICYgYUFsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 QWx0KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgYUFsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDaGVja2VkKFBSQm9vbCAqYUNoZWNrZWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldENoZWNrZWQoUFJCb29sIGFDaGVja2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dERpc2FibGVkKFBSQm9vbCAqYURpc2FibGVkKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRE aXNhYmxlZChQUkJvb2wgYURpc2FibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1h eExlbmd0aChQUkludDMyICphTWF4TGVuZ3RoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRN YXhMZW5ndGgoUFJJbnQzMiBhTWF4TGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dE5hbWUobnNBV3JpdGFibGVTdHJpbmcgJiBhTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0TmFtZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFOYW1lKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFJlYWRPbmx5KFBSQm9vbCAqYVJlYWRPbmx5KSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRSZWFkT25seShQUkJvb2wgYVJlYWRPbmx5KSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFNpemUobnNBV3JpdGFibGVTdHJpbmcgJiBhU2l6ZSkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0U2l6ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFTaXplKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNyYyhuc0FXcml0YWJsZVN0cmluZyAmIGFTcmMpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNyYyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFTcmMp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFiSW5kZXgoUFJJbnQzMiAqYVRhYkluZGV4 KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUYWJJbmRleChQUkludDMyIGFUYWJJbmRleCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUeXBlKG5zQVdyaXRhYmxlU3RyaW5nICYgYVR5 cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFR5cGUoY29uc3QgbnNBUmVhZGFibGVTdHJp bmcgJiBhVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVc2VNYXAobnNBV3JpdGFi bGVTdHJpbmcgJiBhVXNlTWFwKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRVc2VNYXAoY29u c3QgbnNBUmVhZGFibGVTdHJpbmcgJiBhVXNlTWFwKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFZhbHVlKG5zQVdyaXRhYmxlU3RyaW5nICYgYVZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRWYWx1ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFWYWx1ZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBCbHVyKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRm9j dXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3Qodm9pZCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBDbGljayh2b2lkKSA9IDA7Cgp9OwojIDM3ICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNJRm9ybVByb2Nlc3Nvci5oIiAyCgpjbGFzcyBuc1N0cmluZzsKY2xhc3Mg bnNWb2lkQXJyYXk7CiMgNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtUHJvY2Vz c29yLmgiCmNsYXNzIG5zSUZvcm1Qcm9jZXNzb3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJs aWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp ZCA9IHsgMHhmMTFjMWUyMCwgMHg4NzNmLCAweDExZDMsIHsgMHg5NiwgMHg3ZiwgMHgwLCAweDEw LCAweDVhLCAweDFiLCAweDFiLCAweDc2IH0gfTsgcmV0dXJuIGlpZDt9CiMgNzQgIi4uLy4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtUHJvY2Vzc29yLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQ cm9jZXNzVmFsdWUobnNJRE9NSFRNTEVsZW1lbnQgKmFFbGVtZW50LAogICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG5zU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBuc1N0cmluZyYgYVZhbHVlKSA9IDA7CiMgODcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lGb3JtUHJvY2Vzc29yLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQcm92aWRlQ29udGVudChjb25z dCBuc1N0cmluZyYgYUZvcm1UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNWb2lk QXJyYXkmIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTdHJpbmcmIGFB dHRyaWJ1dGUpID0gMDsKCn07CiMgMzAgIm5zRm9ybUZyYW1lLmgiIDIKCmNsYXNzIG5zU3RyaW5n OwpjbGFzcyBuc0lDb250ZW50OwpjbGFzcyBuc0lGcmFtZTsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7 CnN0cnVjdCBuc0hUTUxSZWZsb3dTdGF0ZTsKY2xhc3MgbnNGb3JtQ29udHJvbEZyYW1lOwpjbGFz cyBuc0dmeFJhZGlvQ29udHJvbEZyYW1lOwpjbGFzcyBuc0lGb3JtQ29udHJvbEZyYW1lOwpjbGFz cyBuc0lET01IVE1MRm9ybUVsZW1lbnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lQcmVz Q29udGV4dDsKY2xhc3MgbnNGb3JtRnJhbWU7CmNsYXNzIG5zSVVuaWNvZGVFbmNvZGVyOwpjbGFz cyBuc1JhZGlvQ29udHJvbEdyb3VwOwoKY2xhc3MgbnNGb3JtRnJhbWUgOiBwdWJsaWMgbnNCbG9j a0ZyYW1lLAogICAgICAgICAgICAgICAgICAgIHB1YmxpYyBuc0lGb3JtTWFuYWdlcgp7CnB1Ymxp YzoKICBuc0Zvcm1GcmFtZSgpOwogIHZpcnR1YWwgfm5zRm9ybUZyYW1lKCk7CgogIHZpcnR1YWwg bnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFu Y2VQdHIpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUZyYW1lKG5zSVByZXNDb250ZXh0KiBh UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVz U2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lKTsKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IE9uUmVzZXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CgogIHZpcnR1YWwg bnNyZXN1bHQgT25TdWJtaXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUq IGFGcmFtZSk7CgoKCgoKCgogIG5zcmVzdWx0IE9uUmFkaW9DaGVja2VkKG5zSVByZXNDb250ZXh0 KiBhUHJlc0NvbnRleHQsIG5zR2Z4UmFkaW9Db250cm9sRnJhbWUmIGFSYWRpbywgUFJCb29sIGFD aGVja2VkID0gMSk7CgogIHZvaWQgQWRkRm9ybUNvbnRyb2xGcmFtZShuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0LCBuc0lGb3JtQ29udHJvbEZyYW1lJiBhRnJhbWUpOwogIHN0YXRpYyB2b2lk IEFkZEZvcm1Db250cm9sRnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJh bWUmIGFGcmFtZSk7CiAgdm9pZCBSZW1vdmVGb3JtQ29udHJvbEZyYW1lKG5zSUZvcm1Db250cm9s RnJhbWUmIGFGcmFtZSk7CiAgdm9pZCBSZW1vdmVSYWRpb0NvbnRyb2xGcmFtZShuc0lGb3JtQ29u dHJvbEZyYW1lICogYUZyYW1lKTsKICBuc3Jlc3VsdCBHZXRSYWRpb0luZm8obnNJRm9ybUNvbnRy b2xGcmFtZSogYUZyYW1lLCBuc1N0cmluZyYgYU5hbWUsIG5zUmFkaW9Db250cm9sR3JvdXAgKiYg YUdyb3VwKTsKCiAgUFJCb29sIENhblN1Ym1pdChuc0lGb3JtQ29udHJvbEZyYW1lICphRnJhbWUp OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldGhvZChQUkludDMyKiBhTWV0aG9kKTsKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEVuY3R5cGUoUFJJbnQzMiogYUVuY3R5cGUpOwogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0VGFyZ2V0KG5zU3RyaW5nKiBhVGFyZ2V0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEFjdGlvbihuc1N0cmluZyogYUFjdGlvbik7CgoKCiAgc3RhdGljIFBSQm9vbCBHZXREaXNhYmxl ZChuc0lGcmFtZSogYUNoaWxkRnJhbWUsIG5zSUNvbnRlbnQqIGFDb250ZW50ID0gMCk7CiAgc3Rh dGljIFBSQm9vbCBHZXRSZWFkb25seShuc0lGcmFtZSogYUNoaWxkRnJhbWUsIG5zSUNvbnRlbnQq IGFDb250ZW50ID0gMCk7CiAgc3RhdGljIG5zcmVzdWx0IEdldE5hbWUobnNJRnJhbWUqIGFDaGls ZEZyYW1lLCBuc1N0cmluZyYgYU5hbWUsIG5zSUNvbnRlbnQqIGFDb250ZW50ID0gMCk7CiAgc3Rh dGljIG5zcmVzdWx0IEdldFZhbHVlKG5zSUZyYW1lKiBhQ2hpbGRGcmFtZSwgbnNTdHJpbmcmIGFW YWx1ZSwgbnNJQ29udGVudCogYUNvbnRlbnQgPSAwKTsKICBzdGF0aWMgdm9pZCBTdHlsZUNoYW5n ZVJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUpOwogIHN0YXRpYyBuc3Jlc3VsdCBHZXRSYWRp b0dyb3VwU2VsZWN0ZWRDb250ZW50KG5zR2Z4UmFkaW9Db250cm9sRnJhbWUqIGFDb250cm9sLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQg KiogYVJhZGlvYnRuKTsKICB2b2lkIFNldEZsYWdzKFBSVWludDMyIGFGbGFncykgewogICAgbVN0 YXRlICY9IH4weEZGRjAwMDAwOwogICAgbVN0YXRlIHw9IGFGbGFnczsKICB9Cgpwcm90ZWN0ZWQ6 CiAgdmlydHVhbCBuc3JlZmNudCBBZGRSZWYodm9pZCk7CiAgdmlydHVhbCBuc3JlZmNudCBSZWxl YXNlKHZvaWQpOwogIHZvaWQgUmVtb3ZlUmFkaW9Hcm91cHMoKTsKCiAgdm9pZCBEb0RlZmF1bHRT ZWxlY3Rpb24obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAg ICAgICAgICBuc1JhZGlvQ29udHJvbEdyb3VwICogYUdyb3VwLAogICAgICAgICAgICAgICAgICAg ICAgICAgIG5zR2Z4UmFkaW9Db250cm9sRnJhbWUgKiBhUmFkaW9Ub0lnbm9yZSA9IDApOwoKICBu c3Jlc3VsdCBQcm9jZXNzVmFsdWUobnNJRm9ybVByb2Nlc3NvciYgYUZvcm1Qcm9jZXNzb3IsIG5z SUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZUNvbnRyb2wsIGNvbnN0IG5zU3RyaW5nJiBhTmFtZSwg bnNTdHJpbmcmIGFOZXdWYWx1ZSk7CiAgbnNyZXN1bHQgUHJvY2Vzc0FzVVJMRW5jb2RlZChuc0lG b3JtUHJvY2Vzc29yKiBhRm9ybVByb2Nlc3NvciwgUFJCb29sIGFJc1Bvc3QsIG5zU3RyaW5nJiBh RGF0YSwgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lKTsKICBuc3Jlc3VsdCBQcm9jZXNzQXNN dWx0aXBhcnQobnNJRm9ybVByb2Nlc3NvciogYUZvcm1Qcm9jZXNzb3IsIG5zSUZpbGVTcGVjKiYg YU11bHRpcGFydERhdGFGaWxlLCBuc0lGb3JtQ29udHJvbEZyYW1lKiBhRnJhbWUpOwogIHN0YXRp YyBjb25zdCBjaGFyKiBHZXRGaWxlTmFtZVdpdGhpblBhdGgoY2hhciogYVBhdGhOYW1lKTsKICBu c3Jlc3VsdCBHZXRDb250ZW50VHlwZShjaGFyKiBhUGF0aE5hbWUsIGNoYXIqKiBhQ29udGVudFR5 cGUpOwoKCiAgbnNTdHJpbmcqIFVSTEVuY29kZShjb25zdCBuc1N0cmluZyYgYVN0cmluZywgbnNJ VW5pY29kZUVuY29kZXIqIGVuY29kZXIpOwogIGNoYXIqIFVuaWNvZGVUb05ld0J5dGVzKGNvbnN0 IFBSVW5pY2hhciogYVNyYywgUFJVaW50MzIgYUxlbiwgbnNJVW5pY29kZUVuY29kZXIqIGVuY29k ZXIpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVuY29kZXIobnNJVW5pY29kZUVuY29kZXIqKiBl bmNvZGVyKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsYXRmb3JtRW5jb2Rlcihuc0lVbmljb2Rl RW5jb2RlcioqIGVuY29kZXIpOwogIHZvaWQgR2V0U3VibWl0Q2hhcnNldChuc1N0cmluZyYgb0No YXJzZXQpOwogIHZvaWQgVXBkYXRlU3VibWl0dGVyKG5zSUZvcm1Db250cm9sRnJhbWUgKiBhRnJh bWUpOwoKICBuc1ZvaWRBcnJheSBtRm9ybUNvbnRyb2xzOwogIG5zVm9pZEFycmF5IG1SYWRpb0dy b3VwczsKICBuc0lGb3JtQ29udHJvbEZyYW1lKiBtVGV4dFN1Ym1pdHRlcjsKICBQUkJvb2wgbVRl eHRTdWJtaXR0ZXJTZXQ7CgoKICBuc0F1dG9TdHJpbmcgbUNoYXJzZXQ7CiAgUFJVaW50OCBtVGV4 dERpcjsKICBQUlVpbnQ4IG1DdHJsc01vZEF0U3VibWl0OwoKCn07CiMgNTIgIm5zRm9ybUNvbnRy b2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQu aCIgMQojIDUzICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5oIiAxCiMgNTQgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3Bw IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU5hbWVTcGFjZU1hbmFnZXIuaCIg MQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTmFtZVNwYWNlTWFuYWdlci5oIgoj IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lOYW1lU3BhY2VNYW5hZ2VyLmgiIDIKIyAxICIuLi8uLi8u Li8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJTmFtZVNwYWNlTWFuYWdlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zQVdyaXRhYmxlU3RyaW5nLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSU5hbWVTcGFjZU1hbmFnZXIuaCIgMgoKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNTdHJpbmc7 CmNsYXNzIG5zSU5hbWVTcGFjZTsKIyA2OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU5h bWVTcGFjZU1hbmFnZXIuaCIKY2xhc3MgbnNJTmFtZVNwYWNlTWFuYWdlciA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGlj IG5zSUlEIGlpZCA9IHsgMHhhNmNmOTBkNSwgMHgxNWIzLCAweDExZDIsIHsweDkzLCAweDJlLCAw eDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfX07IHJldHVybiBpaWQ7IH0KCiAgdmly dHVhbCBuc3Jlc3VsdCBDcmVhdGVSb290TmFtZVNwYWNlKG5zSU5hbWVTcGFjZSomIGFSb290TmFt ZVNwYWNlKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJOYW1lU3BhY2UoY29uc3Qg bnNBUmVhZGFibGVTdHJpbmcmIGFVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQUkludDMyJiBhTmFtZVNwYWNlSUQpID0gMDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXROYW1lU3BhY2VVUkkoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zQVdyaXRhYmxl U3RyaW5nJiBhVVJJKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lU3BhY2VJRChjb25z dCBuc0FSZWFkYWJsZVN0cmluZyYgYVVSSSwgUFJJbnQzMiYgYU5hbWVTcGFjZUlEKSA9IDA7Cn07 CgpleHRlcm4gbnNyZXN1bHQKICBOU19OZXdOYW1lU3BhY2VNYW5hZ2VyKG5zSU5hbWVTcGFjZU1h bmFnZXIqKiBhSW5zdGFuY2VQdHJSZXN1bHQpOwojIDU1ICJuc0Zvcm1Db250cm9sSGVscGVyLmNw cCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MSW5wdXRFbGVtZW50 LmgiIDEKIyA1NiAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNOZXRDSUQuaCIgMQojIDU3ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIg MgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiIDEK IyA2MCAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJSU9TZXJ2aWNlLmgiIDEKIyAxNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z SUlPU2VydmljZS5oIgpjbGFzcyBuc0lQcm90b2NvbEhhbmRsZXI7CgpjbGFzcyBuc0lDaGFubmVs OwoKY2xhc3MgbnNJVVJJOwojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2 aWNlLmgiCmNsYXNzIG5zSUlPU2VydmljZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHhhYjdjM2E4NCwgMHhkNDg4LCAweDExZDMsIHsgMHg4YywgMHhkYSwgMHgwMCwgMHg2MCwg MHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CiMgNDMgIi4uLy4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3Rv Y29sSGFuZGxlcihjb25zdCBjaGFyICpzY2hlbWUsIG5zSVByb3RvY29sSGFuZGxlciAqKl9yZXR2 YWwpID0gMDsKIyA1NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlPU2VydmljZS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgTmV3VVJJKGNvbnN0IGNoYXIgKmFTcGVjLCBuc0lVUkkgKmFCYXNl VVJJLCBuc0lVUkkgKipfcmV0dmFsKSA9IDA7CiMgNzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld0NoYW5uZWxGcm9tVVJJKG5z SVVSSSAqYVVSSSwgbnNJQ2hhbm5lbCAqKl9yZXR2YWwpID0gMDsKIyA5MiAiLi4vLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25zSUlPU2VydmljZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3Q2hhbm5l bChjb25zdCBjaGFyICphU3BlYywgbnNJVVJJICphQmFzZVVSSSwgbnNJQ2hhbm5lbCAqKl9yZXR2 YWwpID0gMDsKIyAxMDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJT1NlcnZpY2UuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZmxpbmUoUFJCb29sICphT2ZmbGluZSkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0T2ZmbGluZShQUkJvb2wgYU9mZmxpbmUpID0gMDsKIyAxMTIgIi4u Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0 IEFsbG93UG9ydChQUkludDMyIHBvcnQsIGNvbnN0IGNoYXIgKnNjaGVtZSwgUFJCb29sICpfcmV0 dmFsKSA9IDA7CiMgMTMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBFeHRyYWN0U2NoZW1lKGNvbnN0IGNoYXIgKnVybFN0cmluZywg UFJVaW50MzIgKnNjaGVtZVN0YXJ0UG9zLCBQUlVpbnQzMiAqc2NoZW1lRW5kUG9zLCBjaGFyICoq c2NoZW1lKSA9IDA7CgoKCgogIGVudW0geyB1cmxfU2NoZW1lID0gMSB9OwoKICBlbnVtIHsgdXJs X1VzZXJuYW1lID0gMiB9OwoKICBlbnVtIHsgdXJsX1Bhc3N3b3JkID0gNCB9OwoKICBlbnVtIHsg dXJsX0hvc3QgPSA4IH07CgogIGVudW0geyB1cmxfRGlyZWN0b3J5ID0gMTYgfTsKCiAgZW51bSB7 IHVybF9GaWxlQmFzZU5hbWUgPSAzMiB9OwoKICBlbnVtIHsgdXJsX0ZpbGVFeHRlbnNpb24gPSA2 NCB9OwoKICBlbnVtIHsgdXJsX1BhcmFtID0gMTI4IH07CgogIGVudW0geyB1cmxfUXVlcnkgPSAy NTYgfTsKCiAgZW51bSB7IHVybF9SZWYgPSA1MTIgfTsKCiAgZW51bSB7IHVybF9Gb3JjZWQgPSAx MDI0IH07CiMgMTY1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBFc2NhcGUoY29uc3QgY2hhciAqc3RyLCBQUkludDE2IG1hc2ssIGNo YXIgKipfcmV0dmFsKSA9IDA7CiMgMTc0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9T ZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbmVzY2FwZShjb25zdCBjaGFyICpzdHIsIGNo YXIgKipfcmV0dmFsKSA9IDA7CiMgMTgzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9T ZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFeHRyYWN0UG9ydChjb25zdCBjaGFyICpzdHIs IFBSSW50MzIgKl9yZXR2YWwpID0gMDsKIyAxOTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29sdmVSZWxhdGl2ZVBhdGgoY29u c3QgY2hhciAqcmVsYXRpdmVQYXRoLCBjb25zdCBjaGFyICpiYXNlUGF0aCwgY2hhciAqKl9yZXR2 YWwpID0gMDsKCn07CiMgNjEgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIiAxCiMgNjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lVUkkuaCIKY2xhc3MgbnNJVVJJIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1Ymxp YzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp ZCA9IHsweDA3YTIyY2MwLCAweDBjZTUsIDB4MTFkMywgeyAweDkzLCAweDMxLCAweDAwLCAweDEw LCAweDRiLCAweGEwLCAweGZkLCAweDQwIH19OyByZXR1cm4gaWlkO30KIyA3MyAiLi4vLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3BlYyhjaGFy ICogKmFTcGVjKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTcGVjKGNvbnN0IGNoYXIgKiBh U3BlYykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZVBhdGgoY2hhciAqICph UHJlUGF0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJlUGF0aChjb25zdCBjaGFyICog YVByZVBhdGgpID0gMDsKIyA5MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NoZW1lKGNoYXIgKiAqYVNjaGVtZSkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0U2NoZW1lKGNvbnN0IGNoYXIgKiBhU2NoZW1lKSA9IDA7CgoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVIb3N0KGNoYXIgKiAqYVByZUhvc3QpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFByZUhvc3QoY29uc3QgY2hhciAqIGFQcmVIb3N0KSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFVzZXJuYW1lKGNoYXIgKiAqYVVzZXJuYW1lKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRVc2VybmFtZShjb25zdCBjaGFyICogYVVzZXJuYW1lKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhc3N3b3JkKGNoYXIgKiAqYVBhc3N3b3JkKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRQYXNzd29yZChjb25zdCBjaGFyICogYVBhc3N3b3JkKSA9IDA7 CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIb3N0KGNoYXIgKiAqYUhvc3QpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldEhvc3QoY29uc3QgY2hhciAqIGFIb3N0KSA9IDA7CiMgMTMwICIu Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ b3J0KFBSSW50MzIgKmFQb3J0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQb3J0KFBSSW50 MzIgYVBvcnQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRoKGNoYXIgKiAq YVBhdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhdGgoY29uc3QgY2hhciAqIGFQYXRo KSA9IDA7CiMgMTUxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVVJJLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBFcXVhbHMobnNJVVJJICpvdGhlciwgUFJCb29sICpfcmV0dmFsKSA9IDA7CiMg MTYwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBTY2hlbWVJcyhjb25zdCBjaGFyICpzY2hlbWUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDE2 OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg Q2xvbmUobnNJVVJJICoqX3JldHZhbCkgPSAwOwojIDE3OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZShjb25zdCBjaGFyICpyZWxh dGl2ZVBhdGgsIGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDYyICJuc0Zvcm1Db250cm9sSGVs cGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHJpbmdCdW5kbGUu aCIgMQojIDM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3RyaW5nQnVuZGxlLmgiCmNs YXNzIG5zSVN0cmluZ0J1bmRsZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhk ODVhMTdjMiwgMHhhYTdjLCAweDExZDIsIHsgMHg5YiwgMHg4YywgMHgwMCwgMHg4MCwgMHg1Ziwg MHg4YSwgMHgxNiwgMHhkOSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFN0cmluZ0Zyb21JRChQUkludDMyIGFJRCwgUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRTdHJpbmdGcm9tTmFtZShjb25zdCBQUlVuaWNoYXIgKmFOYW1l LCBQUlVuaWNoYXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZvcm1hdFN0 cmluZ0Zyb21JRChQUkludDMyIGFJRCwgY29uc3QgUFJVbmljaGFyICoqcGFyYW1zLCBQUlVpbnQz MiBsZW5ndGgsIFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg Rm9ybWF0U3RyaW5nRnJvbU5hbWUoY29uc3QgUFJVbmljaGFyICphTmFtZSwgY29uc3QgUFJVbmlj aGFyICoqcGFyYW1zLCBQUlVpbnQzMiBsZW5ndGgsIFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW51bWVyYXRpb24obnNJQmlkaXJlY3Rpb25hbEVudW1l cmF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpbXBsZUVudW1l cmF0aW9uKG5zSVNpbXBsZUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldExvYWRlZChQUkJvb2wgKmFMb2FkZWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldExvYWRlZChQUkJvb2wgYUxvYWRlZCkgPSAwOwoKfTsKIyAxODcgIi4uLy4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lTdHJpbmdCdW5kbGUuaCIKY2xhc3MgbnNJU3RyaW5nQnVuZGxlU2Vydmlj ZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkODVhMTdjMCwgMHhhYTdjLCAw eDExZDIsIHsgMHg5YiwgMHg4YywgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHgxNiwgMHhkOSB9 fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUJ1bmRsZShjb25zdCBj aGFyICphVVJMU3BlYywgbnNJU3RyaW5nQnVuZGxlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDcmVhdGVBc3luY0J1bmRsZShjb25zdCBjaGFyICphVVJMU3BlYywgbnNJU3Ry aW5nQnVuZGxlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVFeHRl bnNpYmxlQnVuZGxlKGNvbnN0IGNoYXIgKmFSZWdpc3RyeUtleSwgbnNJU3RyaW5nQnVuZGxlICoq X3JldHZhbCkgPSAwOwojIDIxMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0cmluZ0J1 bmRsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRm9ybWF0U3RhdHVzTWVzc2FnZShuc3Jlc3VsdCBh U3RhdHVzLCBjb25zdCBQUlVuaWNoYXIgKmFTdGF0dXNBcmcsIFBSVW5pY2hhciAqKl9yZXR2YWwp ID0gMDsKIyAyMjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHJpbmdCdW5kbGUuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoQnVuZGxlcyh2b2lkKSA9IDA7Cgp9OwojIDYzICJuc0Zv cm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lU ZXh0Q29udGVudC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0Q29u dGVudC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAxCiMgMjYg Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0Q29udGVudC5oIiAyCiMgMSAiLi4vLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbnNJVGV4dENvbnRlbnQuaCIgMgpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNUZXh0 RnJhZ21lbnQ7CiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0Q29udGVudC5o IgpjbGFzcyBuc0lUZXh0Q29udGVudCA6IHB1YmxpYyBuc0lDb250ZW50IHsKcHVibGljOgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0gezB4YTZjZjkw NjUsIDB4MTViMywgMHgxMWQyLCB7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhkZCwgMHgzMn19OyByZXR1cm4gaWlkOyB9CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4 dChjb25zdCBuc1RleHRGcmFnbWVudCoqIGFGcmFnbWVudHNSZXN1bHQpID0gMDsKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRUZXh0TGVuZ3RoKFBSSW50MzIqIGFMZW5ndGhSZXN1bHQpID0gMDsK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VGV4dChuc0FXcml0YWJsZVN0cmluZyYgYVJlc3Vs dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUZXh0KGNvbnN0IFBSVW5pY2hhciog YUJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTGVuZ3RoLAogICAgICAgICAg ICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRUZXh0KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3RyLAogICAgICAgICAgICAgICAgICAg ICBQUkJvb2wgYU5vdGlmeSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUZXh0KGNv bnN0IGNoYXIqIGFCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUxlbmd0aCwK ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFOb3RpZnkpID0gMDsKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBJc09ubHlXaGl0ZXNwYWNlKFBSQm9vbCogYVJlc3VsdCkgPSAwOwoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBDbG9uZUNvbnRlbnQoUFJCb29sIGFDbG9uZVRleHQsIG5zSVRleHRDb250 ZW50KiogYUNsb25lKSA9IDA7Cn07CiMgMTAwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ VGV4dENvbnRlbnQuaCIKY2xhc3MgbnNJVGV4dENvbnRlbnRDaGFuZ2VEYXRhIDogcHVibGljIG5z SVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA1ZSwgMHgxNWIzLCAweDExZDIsIHsweDkzLCAw eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfX07IHJldHVybiBpaWQ7fTsK CiAgZW51bSBDaGFuZ2VUeXBlIHsKICAgIEluc2VydCwKICAgIEFwcGVuZCwKICAgIFJlcGxhY2UK ICB9OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGFuZ2VUeXBlKENoYW5nZVR5cGUqIGFS ZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbnNlcnREYXRhKFBSSW50MzIqIGFP ZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIGFJbnNlcnRMZW5ndGgp ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcHBlbmREYXRhKFBSSW50MzIqIGFPZmZzZXQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIGFBcHBlbmRMZW5ndGgpID0gMDsK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZXBsYWNlRGF0YShQUkludDMyKiBhT2Zmc2V0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiogYVNvdXJjZUxlbmd0aCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIGFSZXBsYWNlTGVuZ3RoKSA9IDA7Cn07CgoKZXh0 ZXJuIG5zcmVzdWx0Ck5TX05ld1RleHROb2RlKG5zSUNvbnRlbnQqKiBhUmVzdWx0KTsKCmV4dGVy biBuc3Jlc3VsdApOU19OZXdDb21tZW50Tm9kZShuc0lDb250ZW50KiogYVJlc3VsdCk7CiMgNjQg Im5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25zSVN1cHBvcnRzQXJyYXkuaCIgMQojIDE0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ U3VwcG9ydHNBcnJheS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb2xsZWN0 aW9uLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbGxlY3Rpb24uaCIK Y2xhc3MgbnNJQ29sbGVjdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4 M2I2MDE5YywgMHhjYmM0LCAweDExZDIsIHsgMHg4YywgMHhjYSwgMHgwMCwgMHg2MCwgMHhiMCwg MHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENv dW50KFBSVWludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVsZW1l bnRBdChQUlVpbnQzMiBpbmRleCwgbnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFF1ZXJ5RWxlbWVudEF0KFBSVWludDMyIGluZGV4LCBjb25zdCBuc0lJRCAm IHV1aWQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEVsZW1l bnRBdChQUlVpbnQzMiBpbmRleCwgbnNJU3VwcG9ydHMgKml0ZW0pID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgQXBwZW5kRWxlbWVudChuc0lTdXBwb3J0cyAqaXRlbSkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBSZW1vdmVFbGVtZW50KG5zSVN1cHBvcnRzICppdGVtKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEVudW1lcmF0ZShuc0lFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBDbGVhcih2b2lkKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNBcnJheS5oIiAyCgoKCgoKCmNsYXNzIG5zSUJpZGlyZWN0 aW9uYWxFbnVtZXJhdG9yOwojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9y dHNBcnJheS5oIgp0eXBlZGVmIFBSQm9vbCAoKm5zSVN1cHBvcnRzQXJyYXlFbnVtRnVuYykobnNJ U3VwcG9ydHMqIGFFbGVtZW50LCB2b2lkICphRGF0YSk7CiMgNDQgIi4uLy4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lTdXBwb3J0c0FycmF5LmgiCmNsYXNzIG5zSVN1cHBvcnRzQXJyYXkgOiBwdWJs aWMgbnNJQ29sbGVjdGlvbiB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg3OTFlYWZhMCwgMHhiOWU2LCAweDExZDEs IHsgMHg4MCwgMHgzMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHgxNSwgMHg5YiwgMHg1YSB9fTsgcmV0 dXJuIGlpZDt9CgoKICB2aXJ0dWFsIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNJU3VwcG9ydHNBcnJh eSAqb3RoZXIpID0gMDsKCgogIHZpcnR1YWwgbnNJU3VwcG9ydHMgKiBFbGVtZW50QXQoUFJVaW50 MzIgYUluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIFBSSW50MzIgSW5kZXhPZihjb25zdCBuc0lTdXBw b3J0cyAqYVBvc3NpYmxlRWxlbWVudCkgPSAwOwoKCiAgdmlydHVhbCBQUkludDMyIEluZGV4T2ZT dGFydGluZ0F0KGNvbnN0IG5zSVN1cHBvcnRzICphUG9zc2libGVFbGVtZW50LCBQUlVpbnQzMiBh U3RhcnRJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBQUkludDMyIExhc3RJbmRleE9mKGNvbnN0IG5z SVN1cHBvcnRzICphUG9zc2libGVFbGVtZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEluZGV4T2YobnNJU3VwcG9ydHMgKmFQb3NzaWJsZUVsZW1lbnQsIFBSSW50MzIgKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5kZXhPZlN0YXJ0aW5nQXQobnNJU3VwcG9y dHMgKmFQb3NzaWJsZUVsZW1lbnQsIFBSVWludDMyIGFTdGFydEluZGV4LCBQUkludDMyICpfcmV0 dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhc3RJbmRleE9mKG5zSVN1cHBvcnRz ICphUG9zc2libGVFbGVtZW50LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIFBS Qm9vbCBJbnNlcnRFbGVtZW50QXQobnNJU3VwcG9ydHMgKmFFbGVtZW50LCBQUlVpbnQzMiBhSW5k ZXgpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIFJlcGxhY2VFbGVtZW50QXQobnNJU3VwcG9ydHMg KmFFbGVtZW50LCBQUlVpbnQzMiBhSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIFJlbW92 ZUVsZW1lbnRBdChQUlVpbnQzMiBhSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIFJlbW92 ZUxhc3RFbGVtZW50KGNvbnN0IG5zSVN1cHBvcnRzICphRWxlbWVudCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBEZWxldGVMYXN0RWxlbWVudChuc0lTdXBwb3J0cyAqYUVsZW1lbnQpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlRWxlbWVudEF0KFBSVWludDMyIGFJbmRleCkgPSAw OwoKCiAgdmlydHVhbCBQUkJvb2wgQXBwZW5kRWxlbWVudHMobnNJU3VwcG9ydHNBcnJheSAqYUVs ZW1lbnRzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBhY3Qodm9pZCkgPSAwOwoKCiAg dmlydHVhbCBQUkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNJU3VwcG9ydHNBcnJheUVudW1GdW5j IGFGdW5jLCB2b2lkICogYURhdGEpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIEVudW1lcmF0ZUJh Y2t3YXJkcyhuc0lTdXBwb3J0c0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQgKiBhRGF0YSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lTdXBwb3J0c0FycmF5ICoqX3JldHZhbCkg PSAwOwoKcHJpdmF0ZToKCiAgdmlydHVhbCBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc0lTdXBw b3J0c0FycmF5JiBvdGhlcikgPSAwOwogIHZpcnR1YWwgbnNJU3VwcG9ydHMqIG9wZXJhdG9yW10o UFJVaW50MzIgYUluZGV4KSA9IDA7Cn07CiMgMzI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv bnNJU3VwcG9ydHNBcnJheS5oIgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SVN1cHBvcnRzQXJyYXko bnNJU3VwcG9ydHNBcnJheSoqIGFJbnN0YW5jZVB0clJlc3VsdCk7CgpleHRlcm4gbnNyZXN1bHQK TlNfTmV3SVN1cHBvcnRzQXJyYXlFbnVtZXJhdG9yKG5zSVN1cHBvcnRzQXJyYXkqIGFycmF5LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3Iq ICphSW5zdGFuY2VQdHJSZXN1bHQpOwojIDY1ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgoj IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiIDEKIyA5MSAiLi4v Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJRExTdHJpbmcuaCIKIyAxICIuLi8uLi8uLi8uLi9k aXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyA5MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z WFBJRExTdHJpbmcuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbS5oIiAx CiMgOTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiIDIKIyAxICIv d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5o IiAxCiMgOTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiIDIKIyAx MDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiCmNsYXNzIG5zWFBJ RExTdHJpbmcgewpwcml2YXRlOgogICAgUFJVbmljaGFyKiBtQnVmOwoKICAgIFBSVW5pY2hhcioq IFN0YXJ0QXNzaWdubWVudEJ5VmFsdWUoKTsKCnB1YmxpYzoKCgoKICAgIG5zWFBJRExTdHJpbmco KSA6IG1CdWYoMCkge30KCiAgICB+bnNYUElETFN0cmluZygpOwoKCgoKICAgIG9wZXJhdG9yIGNv bnN0IFBSVW5pY2hhciooKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQoKCgoKICAgIGNvbnN0IFBS VW5pY2hhciogZ2V0KCkgY29uc3QgeyByZXR1cm4gbUJ1ZjsgfQoKCgoKICAgIGNsYXNzIEdldHRl ckNvcGllcyB7CiAgICBwcml2YXRlOgogICAgICAgIG5zWFBJRExTdHJpbmcmIG1YUElETFN0cmlu ZzsKCiAgICBwdWJsaWM6CiAgICAgICAgR2V0dGVyQ29waWVzKG5zWFBJRExTdHJpbmcmIGFYUElE TFN0cmluZykKICAgICAgICAgICAgOiBtWFBJRExTdHJpbmcoYVhQSURMU3RyaW5nKSB7fQoKICAg ICAgICBvcGVyYXRvciBQUlVuaWNoYXIqKigpIHsKICAgICAgICAgICAgcmV0dXJuIG1YUElETFN0 cmluZy5TdGFydEFzc2lnbm1lbnRCeVZhbHVlKCk7CiAgICAgICAgfQoKICAgICAgICBmcmllbmQg R2V0dGVyQ29waWVzIGdldHRlcl9Db3BpZXMobnNYUElETFN0cmluZyYgYVhQSURMU3RyaW5nKTsK ICAgIH07CgogICAgZnJpZW5kIGNsYXNzIEdldHRlckNvcGllczsKCiAgICBpbmxpbmUgdm9pZCBB ZG9wdCggUFJVbmljaGFyKiApOwoKcHJpdmF0ZToKCiAgICBuc1hQSURMU3RyaW5nKG5zWFBJRExT dHJpbmcmICkge30KICAgIHZvaWQgb3BlcmF0b3I9KG5zWFBJRExTdHJpbmcmICkge30KfTsKCgoK CgppbmxpbmUgbnNYUElETFN0cmluZzo6R2V0dGVyQ29waWVzCmdldHRlcl9Db3BpZXMobnNYUElE TFN0cmluZyYgYVhQSURMU3RyaW5nKQp7CiAgICByZXR1cm4gbnNYUElETFN0cmluZzo6R2V0dGVy Q29waWVzKGFYUElETFN0cmluZyk7Cn0KCmlubGluZQp2b2lkCm5zWFBJRExTdHJpbmc6OkFkb3B0 KCBQUlVuaWNoYXIqIGFOZXdWYWx1ZSApCiAgewogICAgKlN0YXJ0QXNzaWdubWVudEJ5VmFsdWUo KSA9IGFOZXdWYWx1ZTsKICB9CgoKaW5saW5lClBSQm9vbApvcGVyYXRvcj09KGNvbnN0IFBSVW5p Y2hhciogbGhzLCBjb25zdCBuc1hQSURMU3RyaW5nJiByaHMpCnsKICAgIHJldHVybiBsaHMgPT0g cmhzLmdldCgpOwp9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPT0oY29uc3QgbnNYUElETFN0cmlu ZyYgbGhzLCBjb25zdCBQUlVuaWNoYXIqIHJocykKewogICAgcmV0dXJuIGxocy5nZXQoKSA9PSBy aHM7Cn0KIyAyMjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiCmNs YXNzIG5zWFBJRExDU3RyaW5nIHsKcHJpdmF0ZToKICAgIGNoYXIqIG1CdWY7CgogICAgY2hhcioq IFN0YXJ0QXNzaWdubWVudEJ5VmFsdWUoKTsKCnB1YmxpYzoKCgoKICAgIG5zWFBJRExDU3RyaW5n KCkgOiBtQnVmKDApIHt9CgogICAgfm5zWFBJRExDU3RyaW5nKCk7CgoKCgogICAgb3BlcmF0b3Ig Y29uc3QgY2hhciooKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQoKCgoKICAgIGNvbnN0IGNoYXIq IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1CdWY7IH0KCgoKCiAgICBjbGFzcyBHZXR0ZXJDb3BpZXMg ewogICAgcHJpdmF0ZToKICAgICAgICBuc1hQSURMQ1N0cmluZyYgbVhQSURMU3RyaW5nOwoKICAg IHB1YmxpYzoKICAgICAgICBHZXR0ZXJDb3BpZXMobnNYUElETENTdHJpbmcmIGFYUElETFN0cmlu ZykKICAgICAgICAgICAgOiBtWFBJRExTdHJpbmcoYVhQSURMU3RyaW5nKSB7fQoKICAgICAgICBv cGVyYXRvciBjaGFyKiooKSB7CiAgICAgICAgICAgIHJldHVybiBtWFBJRExTdHJpbmcuU3RhcnRB c3NpZ25tZW50QnlWYWx1ZSgpOwogICAgICAgIH0KCiAgICAgICAgZnJpZW5kIEdldHRlckNvcGll cyBnZXR0ZXJfQ29waWVzKG5zWFBJRExDU3RyaW5nJiBhWFBJRExTdHJpbmcpOwogICAgfTsKCiAg ICBmcmllbmQgY2xhc3MgR2V0dGVyQ29waWVzOwoKICAgIGlubGluZSB2b2lkIEFkb3B0KCBjaGFy KiApOwoKcHJpdmF0ZToKCiAgICBuc1hQSURMQ1N0cmluZyhuc1hQSURMQ1N0cmluZyYgKSB7fQog ICAgdm9pZCBvcGVyYXRvcj0obnNYUElETENTdHJpbmcmICkge30KfTsKCgoKCgppbmxpbmUgbnNY UElETENTdHJpbmc6OkdldHRlckNvcGllcwpnZXR0ZXJfQ29waWVzKG5zWFBJRExDU3RyaW5nJiBh WFBJRExTdHJpbmcpCnsKICAgIHJldHVybiBuc1hQSURMQ1N0cmluZzo6R2V0dGVyQ29waWVzKGFY UElETFN0cmluZyk7Cn0KCmlubGluZQp2b2lkCm5zWFBJRExDU3RyaW5nOjpBZG9wdCggY2hhciog YU5ld1ZhbHVlICkKICB7CiAgICAqU3RhcnRBc3NpZ25tZW50QnlWYWx1ZSgpID0gYU5ld1ZhbHVl OwogIH0KCgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPT0oY29uc3QgY2hhciogbGhzLCBjb25zdCBu c1hQSURMQ1N0cmluZyYgcmhzKQp7CiAgICByZXR1cm4gbGhzID09IHJocy5nZXQoKTsKfQoKaW5s aW5lClBSQm9vbApvcGVyYXRvcj09KGNvbnN0IG5zWFBJRExDU3RyaW5nJiBsaHMsIGNvbnN0IGNo YXIqIHJocykKewogICAgcmV0dXJuIGxocy5nZXQoKSA9PSByaHM7Cn0KIyA2NiAibnNGb3JtQ29u dHJvbEhlbHBlci5jcHAiIDIKCnN0YXRpYyBjb25zdCBuc0NJRCBrSU9TZXJ2aWNlQ0lEID0geyAw eDlhYzllNzcwLCAweDE4YmMsIDB4MTFkMywgezB4OTMsIDB4MzcsIDB4MDAsIDB4MTAsIDB4NGIs IDB4YTAsIDB4ZmQsIDB4NDB9IH07CnN0YXRpYyBjb25zdCBuc0NJRCBrU3RyaW5nQnVuZGxlU2Vy dmljZUNJRCA9IHsgMHhkODVhMTdjMSwgMHhhYTdjLCAweDExZDIsIHsgMHg5YiwgMHg4YywgMHgw LCAweDgwLCAweDVmLCAweDhhLCAweDE2LCAweGQ5IH0gfTsKCgoKc3RhdGljIGNvbnN0IG5zSUlE IGtJU3VwcG9ydHNJSUQgPSB7IDB4MDAwMDAwMDAsIDB4MDAwMCwgMHgwMDAwLCB7MHhjMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0Nn0gfTsKc3RhdGljIGNvbnN0IG5z SUlEIGtWaWV3Q0lEID0geyAweGM5NWYxODMyLCAweGMzNzYsIDB4MTFkMSwgezB4YjcsIDB4MjEs IDB4MCwgMHg2MCwgMHg4LCAweDkxLCAweGQ4LCAweGM5fX07CiMgODggIm5zRm9ybUNvbnRyb2xI ZWxwZXIuY3BwIgpuc0Zvcm1Db250cm9sSGVscGVyOjpuc0Zvcm1Db250cm9sSGVscGVyKCkKewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9Cgpuc0Zvcm1Db250cm9sSGVs cGVyOjp+bnNGb3JtQ29udHJvbEhlbHBlcigpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKfQoKdm9pZCBuc0Zvcm1Db250cm9sSGVscGVyOjpGb3JjZURyYXdGcmFtZShu c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqIGFGcmFtZSkKewoKICBpZiAo YUZyYW1lID09IDApIHsKICAgIHJldHVybjsKICB9CiAgbnNSZWN0IHJlY3Q7CiAgbnNJVmlldyAq IHZpZXc7CiAgbnNQb2ludCBwbnQ7CiAgYUZyYW1lLT5HZXRPZmZzZXRGcm9tVmlldyhhUHJlc0Nv bnRleHQsIHBudCwgJnZpZXcpOwogIGFGcmFtZS0+R2V0UmVjdChyZWN0KTsKICByZWN0LnggPSBw bnQueDsKICByZWN0LnkgPSBwbnQueTsKICBpZiAodmlldyAhPSAwKSB7CiAgICBuc0lWaWV3TWFu YWdlciAqIHZpZXdNZ3I7CiAgICB2aWV3LT5HZXRWaWV3TWFuYWdlcih2aWV3TWdyKTsKICAgIGlm ICh2aWV3TWdyICE9IDApIHsKICAgICAgdmlld01nci0+VXBkYXRlVmlldyh2aWV3LCByZWN0LCAw eDAwMDQpOwogICAgICBkbyB7ICh2aWV3TWdyKS0+UmVsZWFzZSgpOyAodmlld01ncikgPSAwOyB9 IHdoaWxlICgwKTsKICAgIH0KICB9Cgp9Cgp2b2lkIG5zRm9ybUNvbnRyb2xIZWxwZXI6OlBsYXRm b3JtVG9ET01MaW5lQnJlYWtzKG5zU3RyaW5nICZhU3RyaW5nKQp7CgogIGFTdHJpbmcuUmVwbGFj ZVN1YnN0cmluZyhOU19Db252ZXJ0QVNDSUl0b1VDUzIoIlxyXG4iKSwgTlNfQ29udmVydEFTQ0lJ dG9VQ1MyKCJcbiIpKTsKCgogIGFTdHJpbmcuUmVwbGFjZVN1YnN0cmluZyhOU19Db252ZXJ0QVND SUl0b1VDUzIoIlxyIiksIE5TX0NvbnZlcnRBU0NJSXRvVUNTMigiXG4iKSk7Cn0KClBSQm9vbCBu c0Zvcm1Db250cm9sSGVscGVyOjpHZXRCb29sKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVmFs dWUpCnsKICByZXR1cm4gYVZhbHVlLkVxdWFscyhzdGF0aWNfY2FzdDwgY29uc3QgbnNBRmxhdFN0 cmluZyYgPihuc0RlcGVuZGVudFN0cmluZyhyZWludGVycHJldF9jYXN0PCBjb25zdCBQUlVuaWNo YXIqID4oTCIxIiksIFBSVWludDMyKChzaXplb2YoTCIxIikvc2l6ZW9mKHdjaGFyX3QpKS0xKSkp KTsKfQoKdm9pZCBuc0Zvcm1Db250cm9sSGVscGVyOjpHZXRCb29sU3RyaW5nKGNvbnN0IFBSQm9v bCBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FXcml0 YWJsZVN0cmluZyYgYVJlc3VsdCkKewogIGlmIChhVmFsdWUpCiAgICBhUmVzdWx0LkFzc2lnbihz dGF0aWNfY2FzdDwgY29uc3QgbnNBRmxhdFN0cmluZyYgPihuc0RlcGVuZGVudFN0cmluZyhyZWlu dGVycHJldF9jYXN0PCBjb25zdCBQUlVuaWNoYXIqID4oTCIxIiksIFBSVWludDMyKChzaXplb2Yo TCIxIikvc2l6ZW9mKHdjaGFyX3QpKS0xKSkpKTsKICBlbHNlCiAgICBhUmVzdWx0LkFzc2lnbihz dGF0aWNfY2FzdDwgY29uc3QgbnNBRmxhdFN0cmluZyYgPihuc0RlcGVuZGVudFN0cmluZyhyZWlu dGVycHJldF9jYXN0PCBjb25zdCBQUlVuaWNoYXIqID4oTCIwIiksIFBSVWludDMyKChzaXplb2Yo TCIwIikvc2l6ZW9mKHdjaGFyX3QpKS0xKSkpKTsKfQoKCm5zQ29tcGF0aWJpbGl0eQpuc0Zvcm1D b250cm9sSGVscGVyOjpHZXRSZXBDaGFycyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBj aGFyJiBjaGFyMSwgY2hhciYgY2hhcjIpCnsKICBuc0NvbXBhdGliaWxpdHkgbW9kZTsKICBhUHJl c0NvbnRleHQtPkdldENvbXBhdGliaWxpdHlNb2RlKCZtb2RlKTsKICBpZiAoZUNvbXBhdGliaWxp dHlfU3RhbmRhcmQgPT0gbW9kZSkgewogICAgY2hhcjEgPSAnVyc7CiAgICBjaGFyMiA9ICd3JzsK ICAgIHJldHVybiBlQ29tcGF0aWJpbGl0eV9TdGFuZGFyZDsKICB9IGVsc2UgewogICAgY2hhcjEg PSAnVyc7CiAgICBjaGFyMiA9ICd3JzsKICAgIHJldHVybiBlQ29tcGF0aWJpbGl0eV9OYXZRdWly a3M7CiAgfQp9Cgpuc3Jlc3VsdCBuc0Zvcm1Db250cm9sSGVscGVyOjpHZXRGcmFtZUZvbnRGTShu c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zSUZvcm1Db250cm9sRnJhbWUgKiBhRnJhbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRm9udE1ldHJpY3MqKiBhRm9udE1ldCkKewoK ICBjb25zdCBuc0ZvbnQgKiBmb250ID0gMDsKCiAgaWYgKCghKChhRnJhbWUtPkdldEZvbnQoYVBy ZXNDb250ZXh0LCBmb250KSkgJiAweDgwMDAwMDAwKSkpIHsKICAgIG5zQ09NUHRyPG5zSURldmlj ZUNvbnRleHQ+IGRldmljZUNvbnRleHQ7CiAgICBhUHJlc0NvbnRleHQtPkdldERldmljZUNvbnRl eHQoZ2V0dGVyX0FkZFJlZnMoZGV2aWNlQ29udGV4dCkpOwogICAge307CiAgICBpZiAoZm9udCAh PSAwKSB7CiAgICAgIHJldHVybiBkZXZpY2VDb250ZXh0LT5HZXRNZXRyaWNzRm9yKCpmb250LCAq YUZvbnRNZXQpOwogICAgfQogIH0KICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwNUwpOwp9 Cgpuc3Jlc3VsdApuc0Zvcm1Db250cm9sSGVscGVyOjpHZXRXcmFwUHJvcGVydHkobnNJQ29udGVu dCAqIGFDb250ZW50LCBuc1N0cmluZyAmYU91dFZhbHVlKQp7CiAgYU91dFZhbHVlLlNldExlbmd0 aCgwKTsKICBuc3Jlc3VsdCByZXN1bHQgPSAoKG5zcmVzdWx0KSAoKChQUlVpbnQzMikoMCk8PDMx KSB8ICgoUFJVaW50MzIpKDggKzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSgxKSkpICk7CiAgbnNJ SFRNTENvbnRlbnQqIGNvbnRlbnQgPSAwOwogIGFDb250ZW50LT5RdWVyeUludGVyZmFjZShrSUhU TUxDb250ZW50SUlELCAodm9pZCoqKSAmY29udGVudCk7CiAgaWYgKDAgIT0gY29udGVudCkgewog ICAgbnNIVE1MVmFsdWUgdmFsdWU7CiAgICByZXN1bHQgPSBjb250ZW50LT5HZXRIVE1MQXR0cmli dXRlKG5zSFRNTEF0b21zOjp3cmFwLCB2YWx1ZSk7CiAgICBpZiAoZUhUTUxVbml0X1N0cmluZyA9 PSB2YWx1ZS5HZXRVbml0KCkpIHsKICAgICAgdmFsdWUuR2V0U3RyaW5nVmFsdWUoYU91dFZhbHVl KTsKICAgIH0KICAgIGRvIHsgKGNvbnRlbnQpLT5SZWxlYXNlKCk7IChjb250ZW50KSA9IDA7IH0g d2hpbGUgKDApOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CgoKbnNyZXN1bHQKbnNGb3JtQ29udHJv bEhlbHBlcjo6R2V0V3JhcFByb3BlcnR5RW51bShuc0lDb250ZW50ICogYUNvbnRlbnQsIG5zSFRN TFRleHRXcmFwJiBhV3JhcFByb3ApCnsKICBuc1N0cmluZyB3cmFwOwogIGFXcmFwUHJvcCA9IGVI VE1MVGV4dFdyYXBfT2ZmOwoKICBuc3Jlc3VsdCByZXN1bHQgPSBHZXRXcmFwUHJvcGVydHkoYUNv bnRlbnQsIHdyYXApOwoKICBpZiAoKChuc3Jlc3VsdCkgKCgoUFJVaW50MzIpKDApPDwzMSkgfCAo KFBSVWludDMyKSg4ICsweDQ1KTw8MTYpIHwgKChQUlVpbnQzMikoMSkpKSApICE9IHJlc3VsdCkg ewoKICAgIG5zQXV0b1N0cmluZyB3cmFwSGFyZDsgd3JhcEhhcmQuQXNzaWduV2l0aENvbnZlcnNp b24oIkhBUkQiKTsKICAgIG5zQXV0b1N0cmluZyB3cmFwUGh5c2ljYWw7IHdyYXBQaHlzaWNhbC5B c3NpZ25XaXRoQ29udmVyc2lvbigiUEhZU0lDQUwiKTsKICAgIGlmICh3cmFwLkVxdWFsc0lnbm9y ZUNhc2Uod3JhcEhhcmQpKSB7CiAgICAgIGFXcmFwUHJvcCA9IGVIVE1MVGV4dFdyYXBfSGFyZDsK ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBuc0F1dG9TdHJpbmcgd3JhcFNvZnQ7IHdy YXBTb2Z0LkFzc2lnbldpdGhDb252ZXJzaW9uKCJTT0ZUIik7CiAgICBuc0F1dG9TdHJpbmcgd3Jh cFZpcnR1YWw7IHdyYXBWaXJ0dWFsLkFzc2lnbldpdGhDb252ZXJzaW9uKCJWSVJUVUFMIik7CiAg ICBpZiAod3JhcC5FcXVhbHNJZ25vcmVDYXNlKHdyYXBTb2Z0KSB8fAogICAgICAgIHdyYXAuRXF1 YWxzSWdub3JlQ2FzZSh3cmFwVmlydHVhbCkgfHwKICAgICAgICB3cmFwLkVxdWFsc0lnbm9yZUNh c2Uod3JhcFBoeXNpY2FsKSkgewogICAgICBhV3JhcFByb3AgPSBlSFRNTFRleHRXcmFwX1NvZnQ7 CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCm5zY29v cmQKbnNGb3JtQ29udHJvbEhlbHBlcjo6Q2FsY05hdlF1aXJrU2l6aW5nKG5zSVByZXNDb250ZXh0 KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lSZW5kZXJpbmdDb250ZXh0KiBhUmVuZENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lGb250TWV0cmljcyogYUZvbnRNZXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGb3JtQ29udHJvbEZyYW1lKiBhRnJhbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lucHV0RGltZW5zaW9uU3Bl YyYgYVNwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpemUm IGFTaXplKQp7CiAgZmxvYXQgcDJ0OwogIGZsb2F0IHQycDsKICBhUHJlc0NvbnRleHQtPkdldFBp eGVsc1RvVHdpcHMoJnAydCk7CiAgYVByZXNDb250ZXh0LT5HZXRUd2lwc1RvUGl4ZWxzKCZ0MnAp OwoKICBuc2Nvb3JkIGFzY2VudDsKICBuc2Nvb3JkIGRlc2NlbnQ7CiAgbnNjb29yZCBtYXhDaGFy V2lkdGg7CiAgYUZvbnRNZXQtPkdldE1heEFzY2VudChhc2NlbnQpOwogIGFGb250TWV0LT5HZXRN YXhEZXNjZW50KGRlc2NlbnQpOwogIGFGb250TWV0LT5HZXRNYXhBZHZhbmNlKG1heENoYXJXaWR0 aCk7CgogIGFzY2VudCA9IE5TVG9Db29yZFJvdW5kKGFzY2VudCAqIHQycCk7CiAgZGVzY2VudCA9 IE5TVG9Db29yZFJvdW5kKGRlc2NlbnQgKiB0MnApOwogIG1heENoYXJXaWR0aCA9IE5TVG9Db29y ZFJvdW5kKG1heENoYXJXaWR0aCAqIHQycCk7CgogIGNoYXIgY2hhcjEsIGNoYXIyOwogIEdldFJl cENoYXJzKGFQcmVzQ29udGV4dCwgY2hhcjEsIGNoYXIyKTsKCiAgbnNjb29yZCBjaGFyMVdpZHRo LCBjaGFyMldpZHRoOwogIGFSZW5kQ29udGV4dC0+R2V0V2lkdGgoY2hhcjEsIGNoYXIxV2lkdGgp OwogIGFSZW5kQ29udGV4dC0+R2V0V2lkdGgoY2hhcjIsIGNoYXIyV2lkdGgpOwogIGNoYXIxV2lk dGggPSBOU1RvQ29vcmRSb3VuZChjaGFyMVdpZHRoICogdDJwKTsKICBjaGFyMldpZHRoID0gTlNU b0Nvb3JkUm91bmQoY2hhcjJXaWR0aCAqIHQycCk7CgoKICBQUkludDMyIHR5cGU7CiAgYUZyYW1l LT5HZXRUeXBlKCZ0eXBlKTsKICBuc2Nvb3JkIHdpZHRoOwogIG5zY29vcmQgaGd0OwogIG5zY29v cmQgaGVpZ2h0OwogIG5zY29vcmQgYXZlcmFnZSA9IDA7CiAgaWYgKCgxNCA9PSB0eXBlKSB8fCAo MTEgPT0gdHlwZSkpIHsKICAgIGF2ZXJhZ2UgPSAoY2hhcjFXaWR0aCArIGNoYXIyV2lkdGgpIC8g MjsKICAgIHdpZHRoID0gbWF4Q2hhcldpZHRoOwogICAgaGd0ID0gYXNjZW50ICsgZGVzY2VudDsK ICAgIGhlaWdodCA9IGhndCArIChoZ3QgLyAyKTsKICAgIHdpZHRoICs9IGFTcGVjLm1Db2xEZWZh dWx0U2l6ZSAqIGF2ZXJhZ2U7CiAgfSBlbHNlIGlmICgyMCA9PSB0eXBlKSB7CiAgICBuc2Nvb3Jk IGxpbmVzID0gMTsKICAgIG5zY29vcmQgc2Nyb2xsYmFyV2lkdGggPSAwOwogICAgbnNjb29yZCBz Y3JvbGxiYXJIZWlnaHQgPSAwOwogICAgZmxvYXQgc2NhbGU7CiAgICBuc0NPTVB0cjxuc0lEZXZp Y2VDb250ZXh0PiBkeDsKICAgIGFQcmVzQ29udGV4dC0+R2V0RGV2aWNlQ29udGV4dChnZXR0ZXJf QWRkUmVmcyhkeCkpOwogICAgaWYgKGR4KSB7CiAgICAgIGZsb2F0IHNiV2lkdGg7CiAgICAgIGZs b2F0IHNiSGVpZ2h0OwogICAgICBkeC0+R2V0Q2Fub25pY2FsUGl4ZWxTY2FsZShzY2FsZSk7CiAg ICAgIGR4LT5HZXRTY3JvbGxCYXJEaW1lbnNpb25zKHNiV2lkdGgsIHNiSGVpZ2h0KTsKICAgICAg c2Nyb2xsYmFyV2lkdGggPSBQUkludDMyKHNiV2lkdGggKiBzY2FsZSk7CiAgICAgIHNjcm9sbGJh ckhlaWdodCA9IFBSSW50MzIoc2JIZWlnaHQgKiBzY2FsZSk7CiAgICAgIHNjcm9sbGJhcldpZHRo ID0gTlNUb0Nvb3JkUm91bmQoc2Nyb2xsYmFyV2lkdGggKiB0MnApOwogICAgICBzY3JvbGxiYXJI ZWlnaHQgPSBOU1RvQ29vcmRSb3VuZChzY3JvbGxiYXJIZWlnaHQgKiB0MnApOwogICAgfSBlbHNl IHsKICAgICAge307CiAgICAgIHNjcm9sbGJhcldpZHRoID0gMTY7CiAgICAgIHNjcm9sbGJhckhl aWdodCA9IDE2OwogICAgfQogICAgbnNJQ29udGVudCAqIGNvbnRlbnQ7CiAgICBhRnJhbWUtPkdl dEZvcm1Db250ZW50KGNvbnRlbnQpOwogICAgbnNDT01QdHI8bnNJSFRNTENvbnRlbnQ+IGhDb250 ZW50KGRvX1F1ZXJ5SW50ZXJmYWNlKGNvbnRlbnQpKTsKCgogICAgbnNIVE1MVmFsdWUgcm93QXR0 cjsKICAgIG5zcmVzdWx0IHJvd1N0YXR1cyA9ICgobnNyZXN1bHQpICgoKFBSVWludDMyKSgwKTw8 MzEpIHwgKChQUlVpbnQzMikoOCArMHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEpKSkgKTsKICAg IGlmICgwICE9IGFTcGVjLm1Sb3dTaXplQXR0cikgewogICAgICByb3dTdGF0dXMgPSBoQ29udGVu dC0+R2V0SFRNTEF0dHJpYnV0ZShhU3BlYy5tUm93U2l6ZUF0dHIsIHJvd0F0dHIpOwogICAgfQog ICAgaWYgKDAgPT0gcm93U3RhdHVzKSB7CiAgICAgIFBSSW50MzIgcm93QXR0ckludCA9ICgocm93 QXR0ci5HZXRVbml0KCkgPT0gZUhUTUxVbml0X1BpeGVsKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA/IHJvd0F0dHIuR2V0UGl4ZWxWYWx1ZSgpIDogcm93QXR0ci5HZXRJbnRWYWx1ZSgp KTsKICAgICAgbGluZXMgPSAocm93QXR0ckludCA+IDApID8gcm93QXR0ckludCA6IDE7CiAgICB9 IGVsc2UgewogICAgICBsaW5lcyA9IGFTcGVjLm1Sb3dEZWZhdWx0U2l6ZTsKICAgIH0KCiAgICBh dmVyYWdlID0gKGNoYXIxV2lkdGggKyBjaGFyMldpZHRoKSAvIDI7CiAgICB3aWR0aCA9ICgoYVNw ZWMubUNvbERlZmF1bHRTaXplICsgMSkgKiBhdmVyYWdlKSArIHNjcm9sbGJhcldpZHRoOwogICAg aGd0ID0gYXNjZW50ICsgZGVzY2VudDsKICAgIGhlaWdodCA9IChsaW5lcyArIDEpICogaGd0OwoK CiAgICBuc0hUTUxUZXh0V3JhcCB3cmFwUHJvcDsKICAgIG5zRm9ybUNvbnRyb2xIZWxwZXI6Okdl dFdyYXBQcm9wZXJ0eUVudW0oY29udGVudCwgd3JhcFByb3ApOwogICAgaWYgKHdyYXBQcm9wID09 IGVIVE1MVGV4dFdyYXBfT2ZmKSB7CiAgICAgIGhlaWdodCArPSBzY3JvbGxiYXJIZWlnaHQ7CiAg ICB9CiAgICBkbyB7IChjb250ZW50KS0+UmVsZWFzZSgpOyAoY29udGVudCkgPSAwOyB9IHdoaWxl ICgwKTsKICB9IGVsc2UgaWYgKDUgPT0gdHlwZSB8fAogICAgICAgICAgICAgMTMgPT0gdHlwZSB8 fAogICAgICAgICAgICAgOSA9PSB0eXBlKSB7CiAgICBHZXRUZXh0U2l6ZShhUHJlc0NvbnRleHQs IGFGcmFtZSwgKmFTcGVjLm1Db2xEZWZhdWx0VmFsdWUsIGFTaXplLCBhUmVuZENvbnRleHQpOwog ICAgYVNpemUud2lkdGggPSBOU1RvQ29vcmRSb3VuZChhU2l6ZS53aWR0aCAqIHQycCk7CiAgICBh U2l6ZS5oZWlnaHQgPSBOU1RvQ29vcmRSb3VuZChhU2l6ZS5oZWlnaHQgKiB0MnApOwogICAgd2lk dGggPSAzICogYVNpemUud2lkdGggLyAyOwogICAgaGVpZ2h0ID0gMyAqIGFTaXplLmhlaWdodCAv IDI7CiAgfSBlbHNlIGlmICg4ID09IHR5cGUpIHsKICAgIHdpZHRoID0gMDsKICAgIGhlaWdodCA9 IDA7CiAgfSBlbHNlIHsKICAgIHdpZHRoID0gMDsKICAgIGhlaWdodCA9IDA7CiAgfQoKCgoKCgog IGFTaXplLndpZHRoID0gTlNJbnRQaXhlbHNUb1R3aXBzKHdpZHRoLCBwMnQpOwogIGFTaXplLmhl aWdodCA9IE5TSW50UGl4ZWxzVG9Ud2lwcyhoZWlnaHQsIHAydCk7CiAgYXZlcmFnZSA9IE5TSW50 UGl4ZWxzVG9Ud2lwcyhhdmVyYWdlLCBwMnQpOwoKICByZXR1cm4gYXZlcmFnZTsKCn0KCm5zY29v cmQKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0VGV4dFNpemUobnNJUHJlc0NvbnRleHQqIGFQcmVz Q29udGV4dCwgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLCBuc1NpemUmIGFTaXplLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQgKmFSZW5kQ29u dGV4dCkKewogIG5zQ09NUHRyPG5zSUZvbnRNZXRyaWNzPiBmb250TWV0OwogIG5zcmVzdWx0IHJl cyA9IEdldEZyYW1lRm9udEZNKGFQcmVzQ29udGV4dCwgYUZyYW1lLCBnZXR0ZXJfQWRkUmVmcyhm b250TWV0KSk7CiAgaWYgKCghKChyZXMpICYgMHg4MDAwMDAwMCkpICYmIGZvbnRNZXQpIHsKICAg IGFSZW5kQ29udGV4dC0+U2V0Rm9udChmb250TWV0KTsKCgogICAgYVJlbmRDb250ZXh0LT5HZXRX aWR0aChhU3RyaW5nLCBhU2l6ZS53aWR0aCk7CiAgICBmb250TWV0LT5HZXRIZWlnaHQoYVNpemUu aGVpZ2h0KTsKICB9IGVsc2UgewogICAge307CiAgICBhU2l6ZS53aWR0aCA9IDA7CiAgfQoKICBj aGFyIGNoYXIxLCBjaGFyMjsKICBuc0NvbXBhdGliaWxpdHkgbW9kZSA9IEdldFJlcENoYXJzKGFQ cmVzQ29udGV4dCwgY2hhcjEsIGNoYXIyKTsKICBuc2Nvb3JkIGNoYXIxV2lkdGgsIGNoYXIyV2lk dGg7CiAgYVJlbmRDb250ZXh0LT5HZXRXaWR0aChjaGFyMSwgY2hhcjFXaWR0aCk7CiAgYVJlbmRD b250ZXh0LT5HZXRXaWR0aChjaGFyMiwgY2hhcjJXaWR0aCk7CgogIGlmIChlQ29tcGF0aWJpbGl0 eV9TdGFuZGFyZCA9PSBtb2RlKSB7CiAgICByZXR1cm4gKChjaGFyMVdpZHRoICsgY2hhcjJXaWR0 aCkgLyAyKSArIDE7CiAgfSBlbHNlIHsKICAgIHJldHVybiAoY2hhcjFXaWR0aCArIGNoYXIyV2lk dGgpIC8gMjsKICB9Cn0KCm5zY29vcmQKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0VGV4dFNpemUo bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU51bUNoYXJzLCBuc1Np emUmIGFTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0Nv bnRleHQgKmFSZW5kQ29udGV4dCkKewogIG5zQXV0b1N0cmluZyB2YWw7CiAgY2hhciBjaGFyMSwg Y2hhcjI7CiAgR2V0UmVwQ2hhcnMoYVByZXNDb250ZXh0LCBjaGFyMSwgY2hhcjIpOwogIGludCBp OwogIGZvciAoaSA9IDA7IGkgPCBhTnVtQ2hhcnM7IGkrPTIpIHsKICAgIHZhbC5BcHBlbmRXaXRo Q29udmVyc2lvbihjaGFyMSk7CiAgfQogIGZvciAoaSA9IDE7IGkgPCBhTnVtQ2hhcnM7IGkrPTIp IHsKICAgIHZhbC5BcHBlbmRXaXRoQ29udmVyc2lvbihjaGFyMik7CiAgfQogIHJldHVybiBHZXRU ZXh0U2l6ZShhUHJlc0NvbnRleHQsIGFGcmFtZSwgdmFsLCBhU2l6ZSwgYVJlbmRDb250ZXh0KTsK fQoKUFJJbnQzMgpuc0Zvcm1Db250cm9sSGVscGVyOjpDYWxjdWxhdGVTaXplIChuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lSZW5kZXJpbmdDb250ZXh0KiBhUmVuZENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zSUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTaXplJiBhQ1NTU2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJbnB1dERpbWVuc2lvblNwZWMmIGFTcGVjLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpemUmIGFEZXNpcmVkU2l6ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTaXplJiBhTWluU2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhV2lkdGhFeHBsaWNpdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhSGVpZ2h0RXhwbGljaXQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQmIGFSb3dIZWlnaHQp CnsKICBuc2Nvb3JkIGNoYXJXaWR0aCA9IDA7CiAgUFJJbnQzMiBudW1Sb3dzID0gLTE7CiAgYVdp ZHRoRXhwbGljaXQgPSAwOwogIGFIZWlnaHRFeHBsaWNpdCA9IDA7CgogIGFEZXNpcmVkU2l6ZS53 aWR0aCA9IC0xOwogIGFEZXNpcmVkU2l6ZS5oZWlnaHQgPSAtMTsKCiAgbnNJQ29udGVudCogaUNv bnRlbnQgPSAwOwogIGFGcmFtZS0+R2V0Rm9ybUNvbnRlbnQoKG5zSUNvbnRlbnQqJikgaUNvbnRl bnQpOwogIGlmICghaUNvbnRlbnQpIHsKICAgIHJldHVybiAwOwogIH0KICBuc0lIVE1MQ29udGVu dCogaENvbnRlbnQgPSAwOwogIG5zcmVzdWx0IHJlc3VsdCA9IGlDb250ZW50LT5RdWVyeUludGVy ZmFjZShrSUhUTUxDb250ZW50SUlELCAodm9pZCoqKSZoQ29udGVudCk7CiAgaWYgKCgwICE9IHJl c3VsdCkgfHwgIWhDb250ZW50KSB7CiAgICBkbyB7IChpQ29udGVudCktPlJlbGVhc2UoKTsgKGlD b250ZW50KSA9IDA7IH0gd2hpbGUgKDApOwogICAgcmV0dXJuIDA7CiAgfQogIG5zQXV0b1N0cmlu ZyB2YWxBdHRyOwogIG5zcmVzdWx0IHZhbFN0YXR1cyA9ICgobnNyZXN1bHQpICgoKFBSVWludDMy KSgwKTw8MzEpIHwgKChQUlVpbnQzMikoOCArMHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEpKSkg KTsKICBpZiAoMCAhPSBhU3BlYy5tQ29sVmFsdWVBdHRyKSB7CiAgICB2YWxTdGF0dXMgPSBoQ29u dGVudC0+R2V0QXR0cmlidXRlKDMsIGFTcGVjLm1Db2xWYWx1ZUF0dHIsIHZhbEF0dHIpOwogIH0K ICBuc0hUTUxWYWx1ZSBjb2xBdHRyOwogIG5zcmVzdWx0IGNvbFN0YXR1cyA9ICgobnNyZXN1bHQp ICgoKFBSVWludDMyKSgwKTw8MzEpIHwgKChQUlVpbnQzMikoOCArMHg0NSk8PDE2KSB8ICgoUFJV aW50MzIpKDEpKSkgKTsKICBpZiAoMCAhPSBhU3BlYy5tQ29sU2l6ZUF0dHIpIHsKICAgIGNvbFN0 YXR1cyA9IGhDb250ZW50LT5HZXRIVE1MQXR0cmlidXRlKGFTcGVjLm1Db2xTaXplQXR0ciwgY29s QXR0cik7CiAgfQogIGZsb2F0IHAydDsKICBhUHJlc0NvbnRleHQtPkdldFNjYWxlZFBpeGVsc1Rv VHdpcHMoJnAydCk7CiMgNDY2ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIKICBuc0NvbXBhdGli aWxpdHkgcU1vZGU7CiAgYVByZXNDb250ZXh0LT5HZXRDb21wYXRpYmlsaXR5TW9kZSgmcU1vZGUp OwoKCiAgaWYgKDAgPT0gY29sU3RhdHVzKSB7CiAgICBQUkludDMyIGNvbCA9ICgoY29sQXR0ci5H ZXRVbml0KCkgPT0gZUhUTUxVbml0X1BpeGVsKSA/IGNvbEF0dHIuR2V0UGl4ZWxWYWx1ZSgpIDog Y29sQXR0ci5HZXRJbnRWYWx1ZSgpKTsKICAgIGlmIChhU3BlYy5tQ29sU2l6ZUF0dHJJblBpeGVs cykgewoKICAgICAgY2hhcldpZHRoID0gR2V0VGV4dFNpemUoYVByZXNDb250ZXh0LCBhRnJhbWUs IDEsIGFEZXNpcmVkU2l6ZSwgYVJlbmRDb250ZXh0KTsKICAgICAgY29sID0gKGNvbCA8PSAwKSA/ IDE1IDogY29sOwoKICAgICAgYURlc2lyZWRTaXplLndpZHRoID0gTlNJbnRQaXhlbHNUb1R3aXBz KGNvbCwgcDJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbCA9IChjb2wgPD0gMCkgPyAxIDogY29s OwogICAgICBpZiAoZUNvbXBhdGliaWxpdHlfTmF2UXVpcmtzID09IHFNb2RlKSB7CiAgICAgICAg bnNDT01QdHI8bnNJRm9udE1ldHJpY3M+IGZvbnRNZXQ7CiAgICAgICAgbnNyZXN1bHQgcmVzID0g R2V0RnJhbWVGb250Rk0oYVByZXNDb250ZXh0LCBhRnJhbWUsIGdldHRlcl9BZGRSZWZzKGZvbnRN ZXQpKTsKICAgICAgICBpZiAoKCEoKHJlcykgJiAweDgwMDAwMDAwKSkgJiYgZm9udE1ldCkgewog ICAgICAgICAgYVJlbmRDb250ZXh0LT5TZXRGb250KGZvbnRNZXQpOwogICAgICAgICAgYVNwZWMu bUNvbERlZmF1bHRTaXplID0gY29sOwogICAgICAgICAgY2hhcldpZHRoID0gQ2FsY05hdlF1aXJr U2l6aW5nKGFQcmVzQ29udGV4dCwgYVJlbmRDb250ZXh0LCBmb250TWV0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFGcmFtZSwgYVNwZWMsIGFEZXNpcmVkU2l6ZSk7 CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNoYXJXaWR0aCA9IEdldFRleHRTaXplKGFQcmVz Q29udGV4dCwgYUZyYW1lLCBjb2wsIGFEZXNpcmVkU2l6ZSwgYVJlbmRDb250ZXh0KTsKICAgICAg ICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChlQ29tcGF0aWJpbGl0eV9TdGFuZGFyZCA9PSBxTW9k ZSkgewogICAgICBpZiAoYVNwZWMubUNvbFNpemVBdHRySW5QaXhlbHMpIHsKICAgICAgICBhV2lk dGhFeHBsaWNpdCA9IDE7CiAgICAgIH0KICAgIH0KICAgIGFNaW5TaXplLndpZHRoID0gYURlc2ly ZWRTaXplLndpZHRoOwogIH0gZWxzZSB7CgogICAgaWYgKDAgPT0gdmFsU3RhdHVzKSB7CiAgICAg IGNoYXJXaWR0aCA9IEdldFRleHRTaXplKGFQcmVzQ29udGV4dCwgYUZyYW1lLCB2YWxBdHRyLCBh RGVzaXJlZFNpemUsIGFSZW5kQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGFTcGVjLm1Db2xEZWZh dWx0VmFsdWUpIHsKICAgICAgY2hhcldpZHRoID0gR2V0VGV4dFNpemUoYVByZXNDb250ZXh0LCBh RnJhbWUsICphU3BlYy5tQ29sRGVmYXVsdFZhbHVlLCBhRGVzaXJlZFNpemUsIGFSZW5kQ29udGV4 dCk7CiAgICB9IGVsc2UgaWYgKGFTcGVjLm1Db2xEZWZhdWx0U2l6ZUluUGl4ZWxzKSB7CiAgICAg IGNoYXJXaWR0aCA9IEdldFRleHRTaXplKGFQcmVzQ29udGV4dCwgYUZyYW1lLCAxLCBhRGVzaXJl ZFNpemUsIGFSZW5kQ29udGV4dCk7CiAgICAgIGFEZXNpcmVkU2l6ZS53aWR0aCA9IGFTcGVjLm1D b2xEZWZhdWx0U2l6ZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChlQ29tcGF0aWJpbGl0eV9OYXZR dWlya3MgPT0gcU1vZGUpIHsKICAgICAgICBuc0NPTVB0cjxuc0lGb250TWV0cmljcz4gZm9udE1l dDsKICAgICAgICBuc3Jlc3VsdCByZXMgPSBHZXRGcmFtZUZvbnRGTShhUHJlc0NvbnRleHQsIGFG cmFtZSwgZ2V0dGVyX0FkZFJlZnMoZm9udE1ldCkpOwogICAgICAgIGlmICgoISgocmVzKSAmIDB4 ODAwMDAwMDApKSAmJiBmb250TWV0KSB7CiAgICAgICAgICBhUmVuZENvbnRleHQtPlNldEZvbnQo Zm9udE1ldCk7CgogICAgICAgICAgY2hhcldpZHRoID0gQ2FsY05hdlF1aXJrU2l6aW5nKGFQcmVz Q29udGV4dCwgYVJlbmRDb250ZXh0LCBmb250TWV0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFGcmFtZSwgYVNwZWMsIGFEZXNpcmVkU2l6ZSk7CiAgICAgICAgfSBl bHNlIHsKICAgICAgICAgIHt9OwogICAgICAgICAgYURlc2lyZWRTaXplLndpZHRoID0gMzAwOwog ICAgICAgICAgYURlc2lyZWRTaXplLndpZHRoID0gMTUwMDsKICAgICAgICB9CiAgICAgIH0gZWxz ZSB7CiAgICAgICAgY2hhcldpZHRoID0gR2V0VGV4dFNpemUoYVByZXNDb250ZXh0LCBhRnJhbWUs IGFTcGVjLm1Db2xEZWZhdWx0U2l6ZSwgYURlc2lyZWRTaXplLCBhUmVuZENvbnRleHQpOwogICAg ICB9CiAgICB9CiAgICBhTWluU2l6ZS53aWR0aCA9IGFEZXNpcmVkU2l6ZS53aWR0aDsKICAgIGlm ICgtMSAhPSBhQ1NTU2l6ZS53aWR0aCkgewogICAgICB7fTsKICAgICAgaWYgKG5zY29vcmQoMSA8 PCAzMCkgIT0gYUNTU1NpemUud2lkdGgpIHsKICAgICAgICBhRGVzaXJlZFNpemUud2lkdGggPSAo KGFEZXNpcmVkU2l6ZS53aWR0aCk+KGFDU1NTaXplLndpZHRoKT8oYURlc2lyZWRTaXplLndpZHRo KTooYUNTU1NpemUud2lkdGgpKTsKICAgICAgICBhV2lkdGhFeHBsaWNpdCA9IDE7CiAgICAgIH0K ICAgIH0KICB9CiAgYVJvd0hlaWdodCA9IGFEZXNpcmVkU2l6ZS5oZWlnaHQ7CiAgYU1pblNpemUu aGVpZ2h0ID0gYURlc2lyZWRTaXplLmhlaWdodDsKCgogIGlmIChlQ29tcGF0aWJpbGl0eV9TdGFu ZGFyZCA9PSBxTW9kZSkgewogICAgbnNIVE1MVmFsdWUgcm93QXR0cjsKICAgIG5zcmVzdWx0IHJv d1N0YXR1cyA9ICgobnNyZXN1bHQpICgoKFBSVWludDMyKSgwKTw8MzEpIHwgKChQUlVpbnQzMiko OCArMHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEpKSkgKTsKICAgIGlmICgwICE9IGFTcGVjLm1S b3dTaXplQXR0cikgewogICAgICByb3dTdGF0dXMgPSBoQ29udGVudC0+R2V0SFRNTEF0dHJpYnV0 ZShhU3BlYy5tUm93U2l6ZUF0dHIsIHJvd0F0dHIpOwogICAgfQogICAgaWYgKDAgPT0gcm93U3Rh dHVzKSB7CiAgICAgIFBSSW50MzIgcm93QXR0ckludCA9ICgocm93QXR0ci5HZXRVbml0KCkgPT0g ZUhUTUxVbml0X1BpeGVsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd0F0dHIu R2V0UGl4ZWxWYWx1ZSgpIDogcm93QXR0ci5HZXRJbnRWYWx1ZSgpKTsKICAgICAgbnVtUm93cyA9 IChyb3dBdHRySW50ID4gMCkgPyByb3dBdHRySW50IDogMTsKICAgICAgYURlc2lyZWRTaXplLmhl aWdodCA9IGFEZXNpcmVkU2l6ZS5oZWlnaHQgKiBudW1Sb3dzOwogICAgfSBlbHNlIHsKICAgICAg YURlc2lyZWRTaXplLmhlaWdodCA9IGFEZXNpcmVkU2l6ZS5oZWlnaHQgKiBhU3BlYy5tUm93RGVm YXVsdFNpemU7CiAgICAgIGlmICgtMSAhPSBhQ1NTU2l6ZS5oZWlnaHQpIHsKICAgICAgICB7fTsK ICAgICAgICBpZiAobnNjb29yZCgxIDw8IDMwKSAhPSBhQ1NTU2l6ZS5oZWlnaHQpIHsKICAgICAg ICAgIGFEZXNpcmVkU2l6ZS5oZWlnaHQgPSAoKGFEZXNpcmVkU2l6ZS5oZWlnaHQpPihhQ1NTU2l6 ZS5oZWlnaHQpPyhhRGVzaXJlZFNpemUuaGVpZ2h0KTooYUNTU1NpemUuaGVpZ2h0KSk7CiAgICAg ICAgICBhSGVpZ2h0RXhwbGljaXQgPSAxOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAg ZG8geyAoaENvbnRlbnQpLT5SZWxlYXNlKCk7IChoQ29udGVudCkgPSAwOyB9IHdoaWxlICgwKTsK ICBpZiAoLTEgPT0gbnVtUm93cykgewogICAgbnVtUm93cyA9IChhUm93SGVpZ2h0ID4gMCkgPyAo YURlc2lyZWRTaXplLmhlaWdodCAvIGFSb3dIZWlnaHQpIDogMDsKICB9CgogIGRvIHsgKGlDb250 ZW50KS0+UmVsZWFzZSgpOyAoaUNvbnRlbnQpID0gMDsgfSB3aGlsZSAoMCk7CgogIHJldHVybiBu dW1Sb3dzOwp9CgoKCm5zcmVzdWx0Cm5zRm9ybUNvbnRyb2xIZWxwZXI6OkdldEZvbnQobnNJRm9y bUNvbnRyb2xGcmFtZSAqIGFGb3JtRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lTdHlsZUNvbnRleHQgKiBhU3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IG5zRm9udComIGFGb250KQp7CiAgY29uc3QgbnNTdHlsZUZvbnQqIHN0eWxl Rm9udCA9IChjb25zdCBuc1N0eWxlRm9udCopYVN0eWxlQ29udGV4dC0+R2V0U3R5bGVEYXRhKGVT dHlsZVN0cnVjdF9Gb250KTsKCiAgbnNXaWRnZXRSZW5kZXJpbmcgbTsKICBhUHJlc0NvbnRleHQt PkdldFdpZGdldFJlbmRlcmluZ01vZGUoJm0pOwoKCiAgUFJCb29sIHJlcXVpcmVzV2lkZ2V0ID0g MDsKICBhRm9ybUZyYW1lLT5SZXF1aXJlc1dpZGdldChyZXF1aXJlc1dpZGdldCk7CgogIFBSSW50 MzIgdHlwZTsKICBhRm9ybUZyYW1lLT5HZXRUeXBlKCZ0eXBlKTsKCiAgaWYgKHR5cGUhPTE0ICYm CiAgICAgIHR5cGUhPTIwICYmCiAgICAgIHR5cGUhPTExKSB7CiAgICBpZiAoMSAhPSByZXF1aXJl c1dpZGdldCAmJiBlV2lkZ2V0UmVuZGVyaW5nX0dmeCA9PSBtKSB7CiAgICAgIGFGb250ID0gJnN0 eWxlRm9udC0+bUZvbnQ7CiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgbnNDb21wYXRpYmls aXR5IG1vZGU7CiAgYVByZXNDb250ZXh0LT5HZXRDb21wYXRpYmlsaXR5TW9kZSgmbW9kZSk7Cgog IGlmIChlQ29tcGF0aWJpbGl0eV9TdGFuZGFyZCA9PSBtb2RlKSB7CiAgICBhRm9udCA9ICZzdHls ZUZvbnQtPm1Gb250OwogICAgcmV0dXJuIDA7CiAgfQoKICBzd2l0Y2ggKHR5cGUpIHsKICAgIGNh c2UgMTQ6CiAgICBjYXNlIDIwOgogICAgY2FzZSAxMToKICAgICAgYUZvbnQgPSAmc3R5bGVGb250 LT5tRm9udDsKICAgICAgYnJlYWs7CiAgICBjYXNlIDU6CiAgICBjYXNlIDEzOgogICAgY2FzZSA5 OgogICAgY2FzZSAxOToKICAgICAge307CiMgNjQzICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIK ICAgICAgYnJlYWs7CiAgfQogIHJldHVybiAwOwp9CiMgNjU1ICJuc0Zvcm1Db250cm9sSGVscGVy LmNwcCIKdm9pZApuc0Zvcm1Db250cm9sSGVscGVyOjpQYWludExpbmUobnNJUmVuZGVyaW5nQ29u dGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z Y29vcmQgYVNYLCBuc2Nvb3JkIGFTWSwgbnNjb29yZCBhRVgsIG5zY29vcmQgYUVZLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUhvcnosIG5zY29vcmQgYVdpZHRoLCBuc2Nv b3JkIGFPbmVQaXhlbCkKewoKICBuc1BvaW50IHBbNV07CiAgaWYgKGFIb3J6KSB7CiAgICBhRVgr KzsKICAgIHBbMF0ueCA9IG5zY29vcmQoZmxvYXQoYVNYKSphT25lUGl4ZWwpOwogICAgcFswXS55 ID0gbnNjb29yZChmbG9hdChhU1kpKmFPbmVQaXhlbCk7CiAgICBwWzFdLnggPSBuc2Nvb3JkKGZs b2F0KGFFWCkqYU9uZVBpeGVsKTsKICAgIHBbMV0ueSA9IG5zY29vcmQoZmxvYXQoYUVZKSphT25l UGl4ZWwpOwogICAgcFsyXS54ID0gbnNjb29yZChmbG9hdChhRVgpKmFPbmVQaXhlbCk7CiAgICBw WzJdLnkgPSBuc2Nvb3JkKGZsb2F0KGFFWSsxKSphT25lUGl4ZWwpOwogICAgcFszXS54ID0gbnNj b29yZChmbG9hdChhU1gpKmFPbmVQaXhlbCk7CiAgICBwWzNdLnkgPSBuc2Nvb3JkKGZsb2F0KGFT WSsxKSphT25lUGl4ZWwpOwogICAgcFs0XS54ID0gbnNjb29yZChmbG9hdChhU1gpKmFPbmVQaXhl bCk7CiAgICBwWzRdLnkgPSBuc2Nvb3JkKGZsb2F0KGFTWSkqYU9uZVBpeGVsKTsKICB9IGVsc2Ug ewogICAgYUVZKys7CiAgICBwWzBdLnggPSBuc2Nvb3JkKGZsb2F0KGFTWCkqYU9uZVBpeGVsKTsK ICAgIHBbMF0ueSA9IG5zY29vcmQoZmxvYXQoYVNZKSphT25lUGl4ZWwpOwogICAgcFsxXS54ID0g bnNjb29yZChmbG9hdChhRVgpKmFPbmVQaXhlbCk7CiAgICBwWzFdLnkgPSBuc2Nvb3JkKGZsb2F0 KGFFWSkqYU9uZVBpeGVsKTsKICAgIHBbMl0ueCA9IG5zY29vcmQoZmxvYXQoYUVYKzEpKmFPbmVQ aXhlbCk7CiAgICBwWzJdLnkgPSBuc2Nvb3JkKGZsb2F0KGFFWSkqYU9uZVBpeGVsKTsKICAgIHBb M10ueCA9IG5zY29vcmQoZmxvYXQoYVNYKzEpKmFPbmVQaXhlbCk7CiAgICBwWzNdLnkgPSBuc2Nv b3JkKGZsb2F0KGFTWSkqYU9uZVBpeGVsKTsKICAgIHBbNF0ueCA9IG5zY29vcmQoZmxvYXQoYVNY KSphT25lUGl4ZWwpOwogICAgcFs0XS55ID0gbnNjb29yZChmbG9hdChhU1kpKmFPbmVQaXhlbCk7 CiAgfQogIGFSZW5kZXJpbmdDb250ZXh0LkZpbGxQb2x5Z29uKHAsIDUpOwoKfQoKCnZvaWQKbnNG b3JtQ29udHJvbEhlbHBlcjo6U2V0dXBQb2ludHMoUFJVaW50MzIgYU51bWJlck9mUG9pbnRzLCBu c2Nvb3JkKiBhUG9pbnRzLCBuc1BvaW50KiBhUG9seWdvbiwgbnNjb29yZCBhU2NhbGVGYWN0b3Is IG5zY29vcmQgYVgsIG5zY29vcmQgYVksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNjb29yZCBhQ2VudGVyWCwgbnNjb29yZCBhQ2VudGVyWSkKewogIGNvbnN0IG5zY29vcmQgb2Zm c2V0WCA9IGFDZW50ZXJYICogYVNjYWxlRmFjdG9yOwogIGNvbnN0IG5zY29vcmQgb2Zmc2V0WSA9 IGFDZW50ZXJZICogYVNjYWxlRmFjdG9yOwoKICBQUlVpbnQzMiBpID0gMDsKICBQUlVpbnQzMiBj b3VudCA9IDA7CiAgZm9yIChpID0gMDsgaSA8IGFOdW1iZXJPZlBvaW50czsgaSsrKSB7CiAgICBh UG9seWdvbltpXS54ID0gKGFQb2ludHNbY291bnRdICogYVNjYWxlRmFjdG9yKSArIGFYIC0gb2Zm c2V0WDsKICAgIGNvdW50Kys7CiAgICBhUG9seWdvbltpXS55ID0gKGFQb2ludHNbY291bnRdICog YVNjYWxlRmFjdG9yKSArIGFZIC0gb2Zmc2V0WTsKICAgIGNvdW50Kys7CiAgfQp9CgoKdm9pZApu c0Zvcm1Db250cm9sSGVscGVyOjpQYWludEZpeGVkU2l6ZUNoZWNrTWFyayhuc0lSZW5kZXJpbmdD b250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0 IGFQaXhlbHNUb1R3aXBzKQp7CgoKCiAgY29uc3QgUFJVaW50MzIgb3ggPSAzOwogIGNvbnN0IFBS VWludDMyIG95ID0gMzsKCiAgbnNjb29yZCBvbmVQaXhlbCA9IE5TSW50UGl4ZWxzVG9Ud2lwcygx LCBhUGl4ZWxzVG9Ud2lwcyk7CgoKCgoKICBQYWludExpbmUoYVJlbmRlcmluZ0NvbnRleHQsIDAg KyBveCwgMiArIG95LCAwICsgb3gsIDQgKyBveSwgMCwgMSwgb25lUGl4ZWwpOwogIFBhaW50TGlu ZShhUmVuZGVyaW5nQ29udGV4dCwgMSArIG94LCAzICsgb3ksIDEgKyBveCwgNSArIG95LCAwLCAx LCBvbmVQaXhlbCk7CiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdDb250ZXh0LCAyICsgb3gsIDQgKyBv eSwgMiArIG94LCA2ICsgb3ksIDAsIDEsIG9uZVBpeGVsKTsKICBQYWludExpbmUoYVJlbmRlcmlu Z0NvbnRleHQsIDMgKyBveCwgMyArIG95LCAzICsgb3gsIDUgKyBveSwgMCwgMSwgb25lUGl4ZWwp OwogIFBhaW50TGluZShhUmVuZGVyaW5nQ29udGV4dCwgNCArIG94LCAyICsgb3ksIDQgKyBveCwg NCArIG95LCAwLCAxLCBvbmVQaXhlbCk7CiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdDb250ZXh0LCA1 ICsgb3gsIDEgKyBveSwgNSArIG94LCAzICsgb3ksIDAsIDEsIG9uZVBpeGVsKTsKICBQYWludExp bmUoYVJlbmRlcmluZ0NvbnRleHQsIDYgKyBveCwgMCArIG95LCA2ICsgb3gsIDIgKyBveSwgMCwg MSwgb25lUGl4ZWwpOwp9Cgp2b2lkCm5zRm9ybUNvbnRyb2xIZWxwZXI6OlBhaW50Rml4ZWRTaXpl Q2hlY2tNYXJrQm9yZGVyKG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVBpeGVsc1RvVHdpcHMsIGNvbnN0IG5zU3R5 bGVDb2xvciYgYUJhY2tncm91bmRDb2xvcikKewoKICBQUlVpbnQzMiBveCA9IDA7CiAgUFJVaW50 MzIgb3kgPSAwOwoKICBuc2Nvb3JkIG9uZVBpeGVsID0gTlNJbnRQaXhlbHNUb1R3aXBzKDEsIGFQ aXhlbHNUb1R3aXBzKTsKICBuc2Nvb3JkIHR3ZWx2ZVBpeGVscyA9IE5TSW50UGl4ZWxzVG9Ud2lw cygxMiwgYVBpeGVsc1RvVHdpcHMpOwoKCiAgYVJlbmRlcmluZ0NvbnRleHQuU2V0Q29sb3IoYUJh Y2tncm91bmRDb2xvci5tQ29sb3IpOwogIG5zUmVjdCByZWN0KDAsIDAsIHR3ZWx2ZVBpeGVscywg dHdlbHZlUGl4ZWxzKTsKICBhUmVuZGVyaW5nQ29udGV4dC5GaWxsUmVjdChyZWN0KTsKCgogIGFS ZW5kZXJpbmdDb250ZXh0LlNldENvbG9yKCgobnNjb2xvcikgKCgyNTUgPDwgMjQpIHwgKCgxMjgp PDwxNikgfCAoKDEyOCk8PDgpIHwgKDEyOCkpKSk7CiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdDb250 ZXh0LCAwICsgb3gsIDAgKyBveSwgMTEgKyBveCwgMCArIG95LCAxLCAxLCBvbmVQaXhlbCk7CiAg UGFpbnRMaW5lKGFSZW5kZXJpbmdDb250ZXh0LCAwICsgb3gsIDAgKyBveSwgMCArIG94LCAxMSAr IG95LCAwLCAxLCBvbmVQaXhlbCk7CgogIGFSZW5kZXJpbmdDb250ZXh0LlNldENvbG9yKCgobnNj b2xvcikgKCgyNTUgPDwgMjQpIHwgKCgxOTIpPDwxNikgfCAoKDE5Mik8PDgpIHwgKDE5MikpKSk7 CiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdDb250ZXh0LCAxICsgb3gsIDExICsgb3ksIDExICsgb3gs IDExICsgb3ksIDEsIDEsIG9uZVBpeGVsKTsKICBQYWludExpbmUoYVJlbmRlcmluZ0NvbnRleHQs IDExICsgb3gsIDEgKyBveSwgMTEgKyBveCwgMTEgKyBveSwgMCwgMSwgb25lUGl4ZWwpOwoKICBh UmVuZGVyaW5nQ29udGV4dC5TZXRDb2xvcigoKG5zY29sb3IpICgoMjU1IDw8IDI0KSB8ICgoMCk8 PDE2KSB8ICgoMCk8PDgpIHwgKDApKSkpOwogIFBhaW50TGluZShhUmVuZGVyaW5nQ29udGV4dCwg MSArIG94LCAxICsgb3ksIDEwICsgb3gsIDEgKyBveSwgMSwgMSwgb25lUGl4ZWwpOwogIFBhaW50 TGluZShhUmVuZGVyaW5nQ29udGV4dCwgMSArIG94LCAxICsgb3ksIDEgKyBveCwgMTAgKyBveSwg MCwgMSwgb25lUGl4ZWwpOwoKfQoKCnZvaWQKbnNGb3JtQ29udHJvbEhlbHBlcjo6UGFpbnRDaGVj a01hcmsobnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFQaXhlbHNUb1R3aXBzLCBjb25zdCBuc1Jl Y3QgJiBhUmVjdCkKewoKICBjb25zdCBQUkludDMyIGZpeGVkU2l6ZUNoZWNrbWFya1dpZHRoID0g MTY1OwogIGNvbnN0IFBSSW50MzIgZml4ZWRTaXplQ2hlY2ttYXJrSGVpZ2h0ID0gMTY1OwoKICBp ZiAoKGZpeGVkU2l6ZUNoZWNrbWFya1dpZHRoID09IGFSZWN0LndpZHRoKSAmJgogICAgICAoZml4 ZWRTaXplQ2hlY2ttYXJrSGVpZ2h0ID09IGFSZWN0LmhlaWdodCkpIHsKCiAgICAgIFBhaW50Rml4 ZWRTaXplQ2hlY2tNYXJrKGFSZW5kZXJpbmdDb250ZXh0LCBhUGl4ZWxzVG9Ud2lwcyk7CiAgICBy ZXR1cm47CiAgfQoKICBjb25zdCBQUlVpbnQzMiBjaGVja3BvaW50cyA9IDc7CiAgY29uc3QgUFJV aW50MzIgY2hlY2tzaXplID0gOTsKCgoKCgogIG5zY29vcmQgY2hlY2tlZFBvbHlnb25EZWZbXSA9 IHswLDIsIDIsNCwgNiwwICwgNiwyLCAyLDYsIDAsNCwgMCwyIH07CgogIGNvbnN0IFBSVWludDMy IGNlbnRlcnggPSAzOwogIGNvbnN0IFBSVWludDMyIGNlbnRlcnkgPSAzOwoKICBuc1BvaW50IGNo ZWNrZWRQb2x5Z29uW2NoZWNrcG9pbnRzXTsKICBQUlVpbnQzMiBkZWZJbmRleCA9IDA7CiAgUFJV aW50MzIgcG9seUluZGV4ID0gMDsKCgogIFBSVWludDMyIHNpemUgPSBhUmVjdC53aWR0aCAvIGNo ZWNrc2l6ZTsKICBpZiAoYVJlY3QuaGVpZ2h0IDwgYVJlY3Qud2lkdGgpIHsKICAgc2l6ZSA9IGFS ZWN0LmhlaWdodCAvIGNoZWNrc2l6ZTsKICB9CgoKICBmb3IgKGRlZkluZGV4ID0gMDsgZGVmSW5k ZXggPCAoY2hlY2twb2ludHMgKiAyKTsgZGVmSW5kZXgrKykgewogICAgY2hlY2tlZFBvbHlnb25b cG9seUluZGV4XS54ID0gbnNjb29yZCgoKChjaGVja2VkUG9seWdvbkRlZltkZWZJbmRleF0pIC0g Y2VudGVyeCkgKiAoc2l6ZSkpICsgKGFSZWN0LndpZHRoIC8gMikgKyBhUmVjdC54KTsKICAgIGRl ZkluZGV4Kys7CiAgICBjaGVja2VkUG9seWdvbltwb2x5SW5kZXhdLnkgPSBuc2Nvb3JkKCgoKGNo ZWNrZWRQb2x5Z29uRGVmW2RlZkluZGV4XSkgLSBjZW50ZXJ5KSAqIChzaXplKSkgKyAoYVJlY3Qu aGVpZ2h0IC8gMikgKyBhUmVjdC55KTsKICAgIHBvbHlJbmRleCsrOwogIH0KCiAgYVJlbmRlcmlu Z0NvbnRleHQuRmlsbFBvbHlnb24oY2hlY2tlZFBvbHlnb24sIGNoZWNrcG9pbnRzKTsKfQoKbnNy ZXN1bHQKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0TmFtZShuc0lDb250ZW50KiBhQ29udGVudCxu c1N0cmluZyogYVJlc3VsdCkKewogIG5zcmVzdWx0IHJlc3VsdCA9IDB4RkZGRkZGRjc7CiAgaWYg KDAgIT0gYUNvbnRlbnQpIHsKICAgIG5zSUhUTUxDb250ZW50KiBmb3JtQ29udHJvbCA9IDA7CiAg ICByZXN1bHQgPSBhQ29udGVudC0+UXVlcnlJbnRlcmZhY2Uoa0lIVE1MQ29udGVudElJRCwgKHZv aWQqKikmZm9ybUNvbnRyb2wpOwogICAgaWYgKCgwID09IHJlc3VsdCkgJiYgZm9ybUNvbnRyb2wp IHsKICAgICAgbnNIVE1MVmFsdWUgdmFsdWU7CiAgICAgIHJlc3VsdCA9IGZvcm1Db250cm9sLT5H ZXRIVE1MQXR0cmlidXRlKG5zSFRNTEF0b21zOjpuYW1lLCB2YWx1ZSk7CiAgICAgIGlmICgwID09 IHJlc3VsdCkgewogICAgICAgIGlmIChlSFRNTFVuaXRfU3RyaW5nID09IHZhbHVlLkdldFVuaXQo KSkgewogICAgICAgICAgdmFsdWUuR2V0U3RyaW5nVmFsdWUoKmFSZXN1bHQpOwogICAgICAgIH0K ICAgICAgfQogICAgICBkbyB7IChmb3JtQ29udHJvbCktPlJlbGVhc2UoKTsgKGZvcm1Db250cm9s KSA9IDA7IH0gd2hpbGUgKDApOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CgoKbnNyZXN1 bHQKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0VmFsdWUobnNJQ29udGVudCogYUNvbnRlbnQsIG5z U3RyaW5nKiBhUmVzdWx0KQp7CiAgbnNyZXN1bHQgcmVzdWx0ID0gMHhGRkZGRkZGNzsKICBpZiAo MCAhPSBhQ29udGVudCkgewogICAgbnNJSFRNTENvbnRlbnQqIGZvcm1Db250cm9sID0gMDsKICAg IHJlc3VsdCA9IGFDb250ZW50LT5RdWVyeUludGVyZmFjZShrSUhUTUxDb250ZW50SUlELCAodm9p ZCoqKSZmb3JtQ29udHJvbCk7CiAgICBpZiAoKDAgPT0gcmVzdWx0KSAmJiBmb3JtQ29udHJvbCkg ewogICAgICBuc0hUTUxWYWx1ZSB2YWx1ZTsKICAgICAgcmVzdWx0ID0gZm9ybUNvbnRyb2wtPkdl dEhUTUxBdHRyaWJ1dGUobnNIVE1MQXRvbXM6OnZhbHVlLCB2YWx1ZSk7CiAgICAgIGlmICgwID09 IHJlc3VsdCkgewogICAgICAgIGlmIChlSFRNTFVuaXRfU3RyaW5nID09IHZhbHVlLkdldFVuaXQo KSkgewogICAgICAgICAgdmFsdWUuR2V0U3RyaW5nVmFsdWUoKmFSZXN1bHQpOwogICAgICAgIH0K ICAgICAgfQogICAgICBkbyB7IChmb3JtQ29udHJvbCktPlJlbGVhc2UoKTsgKGZvcm1Db250cm9s KSA9IDA7IH0gd2hpbGUgKDApOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9Cgpuc3Jlc3Vs dApuc0Zvcm1Db250cm9sSGVscGVyOjpHZXRJbnB1dEVsZW1lbnRWYWx1ZShuc0lDb250ZW50KiBh Q29udGVudCwgbnNTdHJpbmcqIGFUZXh0LCBQUkJvb2wgYUluaXRpYWxWYWx1ZSkKewogIG5zcmVz dWx0IHJlc3VsdCA9IDA7CiAgbnNJRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtID0gMDsK ICByZXN1bHQgPSBhQ29udGVudC0+UXVlcnlJbnRlcmZhY2UobnNDT01UeXBlSW5mbzxuc0lET01I VE1MSW5wdXRFbGVtZW50Pjo6R2V0SUlEKCksICh2b2lkKiopJmlucHV0RWxlbSk7CiAgaWYgKCgw ID09IHJlc3VsdCkgJiYgaW5wdXRFbGVtKSB7CiAgICBpZiAoMSA9PSBhSW5pdGlhbFZhbHVlKSB7 CiAgICAgIHJlc3VsdCA9IGlucHV0RWxlbS0+R2V0RGVmYXVsdFZhbHVlKCphVGV4dCk7CiAgICB9 CiAgICBlbHNlIHsKICAgICAgcmVzdWx0ID0gaW5wdXRFbGVtLT5HZXRWYWx1ZSgqYVRleHQpOwog ICAgfQoKICAgIGRvIHsgKGlucHV0RWxlbSktPlJlbGVhc2UoKTsgKGlucHV0RWxlbSkgPSAwOyB9 IHdoaWxlICgwKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKCgoKbnNyZXN1bHQKbnNGb3JtQ29u dHJvbEhlbHBlcjo6R2V0TG9jYWxpemVkU3RyaW5nKGNvbnN0IGNoYXIgKiBhUHJvcEZpbGVOYW1l LCBjb25zdCBjaGFyKiBhS2V5LCBuc1N0cmluZyYgb1ZhbCkKewogIG5zcmVzdWx0IHJ2OwogIG5z Q09NUHRyPG5zSVN0cmluZ0J1bmRsZT4gYnVuZGxlOwoKCgogIG5zQ09NUHRyPG5zSUlPU2Vydmlj ZT4gcE5ldFNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKGtJT1NlcnZpY2VDSUQsICZydik7OwogIGlm ICgoISgocnYpICYgMHg4MDAwMDAwMCkpICYmIHBOZXRTZXJ2aWNlKSB7CiAgICBuc0NPTVB0cjxu c0lVUkk+IHVyaTsKICAgIHJ2ID0gcE5ldFNlcnZpY2UtPk5ld1VSSShhUHJvcEZpbGVOYW1lLCAw LCBnZXR0ZXJfQWRkUmVmcyh1cmkpKTsKICAgIGlmICgoISgocnYpICYgMHg4MDAwMDAwMCkpICYm IHVyaSkgewoKCiAgICAgIG5zQ09NUHRyPG5zSVN0cmluZ0J1bmRsZVNlcnZpY2U+IHN0cmluZ1Nl cnZpY2UgPSBkb19HZXRTZXJ2aWNlKGtTdHJpbmdCdW5kbGVTZXJ2aWNlQ0lELCAmcnYpOzsKICAg ICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkgJiYgc3RyaW5nU2VydmljZSkgewogICAgICAg IG5zWFBJRExDU3RyaW5nIHNwZWM7CiAgICAgICAgcnYgPSB1cmktPkdldFNwZWMoZ2V0dGVyX0Nv cGllcyhzcGVjKSk7CiAgICAgICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkgJiYgc3BlYykg ewogICAgICAgICAgcnYgPSBzdHJpbmdTZXJ2aWNlLT5DcmVhdGVCdW5kbGUoc3BlYywgZ2V0dGVy X0FkZFJlZnMoYnVuZGxlKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKCiAgaWYgKCgh KChydikgJiAweDgwMDAwMDAwKSkgJiYgYnVuZGxlICYmIGFLZXkpIHsKICAgIG5zWFBJRExTdHJp bmcgdmFsVW5pOwogICAgbnNBdXRvU3RyaW5nIGtleTsga2V5LkFzc2lnbldpdGhDb252ZXJzaW9u KGFLZXkpOwogICAgcnYgPSBidW5kbGUtPkdldFN0cmluZ0Zyb21OYW1lKGtleS5HZXRVbmljb2Rl KCksIGdldHRlcl9Db3BpZXModmFsVW5pKSk7CiAgICBpZiAoKCEoKHJ2KSAmIDB4ODAwMDAwMDAp KSAmJiB2YWxVbmkpIHsKICAgICAgb1ZhbC5Bc3NpZ24odmFsVW5pKTsKICAgIH0gZWxzZSB7CiAg ICAgIG9WYWwuVHJ1bmNhdGUoKTsKICAgIH0KICB9CiAgcmV0dXJuIHJ2Owp9CgoKbnNyZXN1bHQK bnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0RGlzYWJsZWQobnNJQ29udGVudCogYUNvbnRlbnQsIFBS Qm9vbCogb0lzRGlzYWJsZWQpCnsKICBuc0NPTVB0cjxuc0lIVE1MQ29udGVudD4gZm9ybUNvbnRy b2wgPSBkb19RdWVyeUludGVyZmFjZShhQ29udGVudCk7CiAgbnNIVE1MVmFsdWUgdmFsdWU7CiAg bnNyZXN1bHQgcmVzdWx0ID0gZm9ybUNvbnRyb2wtPkdldEhUTUxBdHRyaWJ1dGUobnNIVE1MQXRv bXM6OmRpc2FibGVkLCB2YWx1ZSk7CiAgaWYgKDAgPT0gcmVzdWx0KSB7CiAgICBpZiAoZUhUTUxV bml0X0VtcHR5ID09IHZhbHVlLkdldFVuaXQoKSkgewogICAgICAqb0lzRGlzYWJsZWQgPSAxOwog ICAgfSBlbHNlIHsKICAgICAgKm9Jc0Rpc2FibGVkID0gMDsKICAgIH0KICB9IGVsc2UgewogICAg Km9Jc0Rpc2FibGVkID0gMDsKICB9CiAgcmV0dXJuIDA7Cn0KIyA5NDcgIm5zRm9ybUNvbnRyb2xI ZWxwZXIuY3BwIgpuc3Jlc3VsdApuc0Zvcm1Db250cm9sSGVscGVyOjpEb01hbnVhbFN1Ym1pdE9y UmVzZXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRm9ybUZyYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGb3Jt Q29udHJvbEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UFJCb29sIGFEb1N1Ym1pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBSQm9vbCBhRG9ET01FdmVudCkKewogIGRvIHsgaWYoKCEoYVByZXNDb250ZXh0KSA/IDEg OiAwKSkgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDNMKTsgfSB3aGlsZSAoMCk7CiAgZG8g eyBpZigoIShhRm9ybUZyYW1lKSA/IDEgOiAwKSkgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQw MDNMKTsgfSB3aGlsZSAoMCk7CgogIG5zcmVzdWx0IHJlc3VsdCA9IDA7CgogIG5zQ09NUHRyPG5z SUNvbnRlbnQ+IGZvcm1Db250ZW50OwogIGFGb3JtRnJhbWUtPkdldENvbnRlbnQoZ2V0dGVyX0Fk ZFJlZnMoZm9ybUNvbnRlbnQpKTsKIyA5NzAgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIgogIG5z Q09NUHRyPG5zSUNvbnRlbnQ+IGNvbnRyb2xDb250ZW50OwogIGlmIChhRG9TdWJtaXQgJiYgYUZv cm1Db250cm9sRnJhbWUgIT0gMCkgewogICAgYUZvcm1Db250cm9sRnJhbWUtPkdldENvbnRlbnQo Z2V0dGVyX0FkZFJlZnMoY29udHJvbENvbnRlbnQpKTsKICB9CgogIGlmIChmb3JtQ29udGVudCkg ewoKICAgIG5zQ09NUHRyPG5zSVByZXNTaGVsbD4gc2hlbGw7CiAgICBpZiAoYVByZXNTaGVsbCA9 PSAwKSB7CiAgICAgIHJlc3VsdCA9IGFQcmVzQ29udGV4dC0+R2V0U2hlbGwoZ2V0dGVyX0FkZFJl ZnMoc2hlbGwpKTsKICAgICAgYVByZXNTaGVsbCA9IHNoZWxsLmdldCgpOwogICAgfQoKCiAgICBp ZiAoKCEoKHJlc3VsdCkgJiAweDgwMDAwMDAwKSkgJiYgMCAhPSBhUHJlc1NoZWxsKSB7CgoKICAg ICAgbnNDT01QdHI8bnNJQ29udGVudD4gZm9ybUNvbnRyb2w7CiAgICAgIGFGb3JtQ29udHJvbEZy YW1lLT5HZXRDb250ZW50KGdldHRlcl9BZGRSZWZzKGZvcm1Db250cm9sKSk7CgogICAgICBuc0Zv cm1FdmVudCBldmVudDsKICAgICAgZXZlbnQuZXZlbnRTdHJ1Y3RUeXBlID0gMjE7CiAgICAgIGV2 ZW50Lm1lc3NhZ2UgPSBhRG9TdWJtaXQ/KDEyMDApOigxMjAwICsgMSk7CiAgICAgIGV2ZW50Lm9y aWdpbmF0b3IgPSBmb3JtQ29udHJvbDsKICAgICAgbnNFdmVudFN0YXR1cyBzdGF0dXMgPSBuc0V2 ZW50U3RhdHVzX2VJZ25vcmU7CiAgICAgIGlmIChhRG9ET01FdmVudCkgewogICAgICAgIGFQcmVz U2hlbGwtPkhhbmRsZURPTUV2ZW50V2l0aFRhcmdldChmb3JtQ29udGVudCwgJmV2ZW50LCAmc3Rh dHVzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhUHJlc1NoZWxsLT5IYW5kbGVFdmVudFdpdGhU YXJnZXQoJmV2ZW50LCAwLCBmb3JtQ29udGVudCwgMHgwMDAxLCAmc3RhdHVzKTsKICAgICAgfQog ICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9Cg==