>Number: 10874 >Category: c++ >Synopsis: ICE: unrecognized symbol type "" >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Mon May 19 21:36:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Paul Jones >Release: gcc version 3.2.2 >Organization: >Environment: gentoo rc1.4 >Description: Configured with: /var/tmp/portage/gcc-3.2.2/work/gcc-3.2.2/configure --prefix=/usr --bindir=/usr/i586-pc-linux-gnu/gcc-bin/3.2 --includedir=/usr/lib/gcc-lib/i586-pc-linux-gnu/3.2.2/include --datadir=/usr/share/gcc-data/i586-pc-linux-gnu/3.2 --mandir=/usr/share/gcc-data/i586-pc-linux-gnu/3.2/man --infodir=/usr/share/gcc-data/i586-pc-linux-gnu/3.2/info --enable-shared --host=i586-pc-linux-gnu --target=i586-pc-linux-gnu --with-system-zlib --enable-languages=c,c++,ada,f77,objc,java --enable-threads=posix --enable-long-long --disable-checking --enable-cstdio=stdio --enable-clocale=generic --enable-__cxa_atexit --enable-version-specific-runtime-libs --with-gxx-include-dir=/usr/lib/gcc-lib/i586-pc-linux-gnu/3.2.2/include/g++-v3 --with-local-prefix=/usr/local --enable-shared --enable-nls --without-included-gettext Thread model: posix gcc version 3.2.2 This command line triggers the bug: g++ -o nsDOMClassInfo.o -c -DOSTYPE=\"Linux2.4\" -DOSARCH=\"Linux\" -DOJI -I../../../dist/include/xpcom -I../../../dist/include/string -I../../../dist/include/webbrwsr -I../../../dist/include/js -I../../../dist/include/widget -I../../../dist/include/gfx -I../../../dist/include/layout -I../../../dist/include/content -I../../../dist/include/caps -I../../../dist/include/docshell -I../../../dist/include/xpconnect -I../../../dist/include/pref -I../../../dist/include/oji -I../../../dist/include/necko -I../../../dist/include/java -I../../../dist/include/locale -I../../../dist/include/uriloader -I../../../dist/include/sidebar -I../../../dist/include/xuldoc -I../../../dist/include/webshell -I../../../dist/include/view -I../../../dist/include/uconv -I../../../dist/include/shistory -I../../../dist/include/plugin -I../../../dist/include/windowwatcher -I../../../dist/include/htmlparser -I../../../dist/include/chardet -I../../../dist/include/find -I../../../dist/include/appshell -I../../../dist/include/intl -I../../../dist/include/dom -I../../../dist/include -I/var/tmp/portage/mozilla-1.3-r1/work/mozilla/dist/include/nspr -I/usr/X11R6/include -fPIC -I/usr/X11R6/include -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Wcast-align -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-long-long -march=pentium2 -pipe -Wno-deprecated -fshort-wchar -pthread -pipe -DNDEBUG -DTRIMMED -ffunction-sections -O2 -I. -I./../build -I/usr/X11R6/include -DMOZILLA_CLIENT -include ../../../mozilla-config.h -Wp,-MD,.deps/nsDOMClassInfo.pp nsDOMClassInfo.cpp Error Output: {standard input}: Assembler messages: {standard input}:6542: Warning: end of file not at end of a line; newline inserted {standard input}:7087: Error: unrecognized symbol type "" g++: Internal error: Terminated (program cc1plus) Please submit a full bug report. See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions. make[4]: *** [nsDOMClassInfo.o] Error 1 make[4]: *** Deleting file `nsDOMClassInfo.o' >How-To-Repeat: emerge mozilla-1.3 under gentoo Does not crash when only the one file is compiled >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="nsDOMClassInfo.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="nsDOMClassInfo.ii" IyAxICJuc0RPTUNsYXNzSW5mby5jcHAiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBs aW5lPiIKIyAxICIuLi8uLi8uLi9tb3ppbGxhLWNvbmZpZy5oIiAxCiMgMiAiPGNvbW1hbmQgbGlu ZT4iIDIKIyAxICJuc0RPTUNsYXNzSW5mby5jcHAiCiMgNDAgIm5zRE9NQ2xhc3NJbmZvLmNwcCIK IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNjb3JlLmgiIDEKIyA0MyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zY29yZS5oIgojIDEgIi92YXIvdG1wL3BvcnRhZ2UvbW96 aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQoj IDU1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcnR5cGVzLmgiCiMgMSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJjcHVjZmcuaCIgMQojIDU2ICIvdmFy L3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcnR5cGVzLmgiIDIKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTUxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt cGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlm Zl90OwojIDIxMyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs dWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA1OSAiL3Zhci90 bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJ0eXBlcy5oIiAyCiMgMjUyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCmV4dGVybiAiQyIgewojIDI2MiAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgUFJVaW50ODsKIyAyNzYgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3BydHlwZXMuaCIKdHlwZWRlZiBzaWduZWQgY2hhciBQUkludDg7CiMgMzAxICIvdmFyL3Rt cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cnR5cGVzLmgiCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUFJVaW50MTY7CnR5cGVkZWYgc2hvcnQg UFJJbnQxNjsKIyAzMjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiB1bnNpZ25lZCBpbnQgUFJV aW50MzI7CnR5cGVkZWYgaW50IFBSSW50MzI7CiMgMzcyICIvdmFyL3RtcC9wb3J0YWdlL21vemls bGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVk ZWYgbG9uZyBsb25nIFBSSW50NjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFBSVWludDY0 OwojIDM5NiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIGludCBQUkludG47CnR5cGVkZWYgdW5z aWduZWQgaW50IFBSVWludG47CiMgNDA3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgZG91Ymxl IFBSRmxvYXQ2NDsKCgoKCgoKdHlwZWRlZiBzaXplX3QgUFJTaXplOwoKCgoKCgoKdHlwZWRlZiBQ UkludDMyIFBST2Zmc2V0MzI7CnR5cGVkZWYgUFJJbnQ2NCBQUk9mZnNldDY0OwoKCgoKCgoKdHlw ZWRlZiBwdHJkaWZmX3QgUFJQdHJkaWZmOwoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBS VXB0cmRpZmY7CiMgNDQ5ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgUFJJbnRuIFBSQm9vbDsK IyA0NTkgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBQUlVpbnQ4IFBSUGFja2VkQm9vbDsKCgoK Cgp0eXBlZGVmIGVudW0geyBQUl9GQUlMVVJFID0gLTEsIFBSX1NVQ0NFU1MgPSAwIH0gUFJTdGF0 dXM7CiMgNDkyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgbG9uZyBQUldvcmQ7CnR5cGVkZWYg dW5zaWduZWQgbG9uZyBQUlV3b3JkOwojIDUzNCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgojIDEgIi92YXIv dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L29ic29sZXRlL3Byb3R5cGVzLmgiIDEKIyA0NSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIK dHlwZWRlZiBQUlVpbnRuIHVpbnRuOwoKdHlwZWRlZiBQUkludG4gaW50bjsKIyA4MyAiL3Zhci90 bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv b2Jzb2xldGUvcHJvdHlwZXMuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwoj IDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCIgMSAzCiMgMjkxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjkyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAz CiMgMzIwICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUv c3R1YnMuaCIgMSAzCiMgMzIxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMK IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVm IHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0 Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191 X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3Vf cXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0 OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50 OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9y dCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0 eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQz Ml90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRf dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRf dDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rl dl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5 cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVm IF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19x dWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVf dDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0 X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBf X3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBj aGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBl ZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5 cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlw ZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRf dDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQg X19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3Vf bG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0 eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxj bnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZf dCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5z aWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoK CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0 eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3Iv aW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQg X19zY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlw ZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1 czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2Ny X3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0 dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0 IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQg X19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2 b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7 CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7 CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50 IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25l cjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9 IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsK fSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoK CnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz dGxvY2sgX19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19y d193cml0ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRf ZGVzY3IgX19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNo YXJlZDsKfSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9j a2tpbmQ7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVk ZWYgdm9sYXRpbGUgaW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAg c3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsK ICBpbnQgX19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhy ZWFkX2JhcnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhy ZWFkX2JhcnJpZXJhdHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFk X3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAzMSAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYg X191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9u ZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9x dWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2Zm X3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5v NjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRf dDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3Qgbmxp bmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2Zm X3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3Qg cGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3Np emVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBj YWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzIgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDU4ICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAzCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKIyA3NCAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMwoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgojIDkyICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDEw NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwojIDEz MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VzZWNvbmRzX3Qg dXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYg dW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9y dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJ X18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ X18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ X18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJ X18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQz Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk IGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBl ZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7 CiMgMjEyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5k aWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMg MjEzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2Vs ZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIzICIv dXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsK CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQg LyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAz NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBz aWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDExNiAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7 CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0 LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2lu Y2x1ZGUvYml0cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9z ZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRl ZiBsb25nIGludCBfX2ZkX21hc2s7CiMgNjcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMK dHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICog c2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2Zk X21hc2sgZmRfbWFzazsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4g IkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0 cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193 cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZk cywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91 dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQg Kl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0 cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBf X2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f cmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3Qg Kl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAz CiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3Np emVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlw ZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNm aWxjbnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxr Y250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsK dHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDg0ICIvdmFyL3RtcC9w b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNv bGV0ZS9wcm90eXBlcy5oIiAyCiMgMTA1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBl ZGVmIFBSVWludDY0IHVpbnQ2NDsKIyAxMTQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMt cjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL29ic29sZXRlL3Byb3R5cGVzLmgiCnR5 cGVkZWYgUFJVaW50MzIgdWludDMyOwojIDEyNSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIK dHlwZWRlZiBQUlVpbnQxNiB1aW50MTY7CgoKCgoKCgp0eXBlZGVmIFBSVWludDggdWludDg7CiMg MTQyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50NjQgaW50NjQ7CiMg MTU0ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50MzIgaW50MzI7CiMg MTY4ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50MTYgaW50MTY7CiMg MTc4ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50OCBpbnQ4OwoKCnR5 cGVkZWYgUFJGbG9hdDY0IGZsb2F0NjQ7CnR5cGVkZWYgUFJVcHRyZGlmZiB1cHRyZGlmZl90Owp0 eXBlZGVmIFBSVXdvcmQgdXByd29yZF90Owp0eXBlZGVmIFBSV29yZCBwcndvcmRfdDsKIyA1MzUg Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BydHlwZXMuaCIgMgoKCgoKCn0KIyA0NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zY29yZS5oIiAyCiMgMTQ5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNjb3Jl LmgiCnR5cGVkZWYgUFJVaW50MzIgbnNyZXN1bHQ7CgoKCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3hwY29tL25zRXJyb3IuaCIgMQojIDI5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zRXJyb3IuaCIKZXh0ZXJuIG5zcmVzdWx0Ck5TX0Vycm9yQWNjb3JkaW5nVG9OU1BSKCk7 CiMgMTU3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNjb3JlLmgiIDIKIyAyMjQgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc2NvcmUuaCIKICAgIHR5cGVkZWYgUFJVaW50MTYg UFJVbmljaGFyOwojIDQxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICJuc0RPTUNsYXNzSW5m by5oIiAxCiMgNDMgIm5zRE9NQ2xhc3NJbmZvLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2RvbS9uc0lET01DbGFzc0luZm8uaCIgMQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t L25zSURPTUNsYXNzSW5mby5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lD bGFzc0luZm8uaCIgMQojIDEwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ2xhc3NJ bmZvLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiIDEK IyAxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zcm9vdGlkbC5oIiAxCiMgMTIgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc3Jvb3RpZGwuaCIKIyAxICIvdmFyL3RtcC9wb3J0YWdlL21vemls bGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIgMQojIDQ4 ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcnRpbWUuaCIKIyAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIgMQojIDQ4ICIvdmFyL3RtcC9w b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxv bmcuaCIKZXh0ZXJuICJDIiB7CiMgNjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEv d29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIgpleHRlcm4gUFJJbnQ2NCBM TF9NYXhJbnQodm9pZCk7CmV4dGVybiBQUkludDY0IExMX01pbkludCh2b2lkKTsKZXh0ZXJuIFBS SW50NjQgTExfWmVybyh2b2lkKTsKIyA0MjMgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMt cjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIgp9CiMgNDkgIi92YXIv dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3BydGltZS5oIiAyCgpleHRlcm4gIkMiIHsKIyA3NyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxh LTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCnR5cGVkZWYg UFJJbnQ2NCBQUlRpbWU7CgoKCgoKCnR5cGVkZWYgc3RydWN0IFBSVGltZVBhcmFtZXRlcnMgewog ICAgUFJJbnQzMiB0cF9nbXRfb2Zmc2V0OwogICAgUFJJbnQzMiB0cF9kc3Rfb2Zmc2V0Owp9IFBS VGltZVBhcmFtZXRlcnM7CiMgMTEyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKdHlwZWRlZiBzdHJ1Y3QgUFJF eHBsb2RlZFRpbWUgewogICAgUFJJbnQzMiB0bV91c2VjOwogICAgUFJJbnQzMiB0bV9zZWM7Cgog ICAgUFJJbnQzMiB0bV9taW47CiAgICBQUkludDMyIHRtX2hvdXI7CiAgICBQUkludDMyIHRtX21k YXk7CgogICAgUFJJbnQzMiB0bV9tb250aDsKICAgIFBSSW50MTYgdG1feWVhcjsKCgogICAgUFJJ bnQ4IHRtX3dkYXk7CgogICAgUFJJbnQxNiB0bV95ZGF5OwoKCiAgICBQUlRpbWVQYXJhbWV0ZXJz IHRtX3BhcmFtczsKfSBQUkV4cGxvZGVkVGltZTsKIyAxNTUgIi92YXIvdG1wL3BvcnRhZ2UvbW96 aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgp0eXBl ZGVmIFBSVGltZVBhcmFtZXRlcnMgKCAqUFJUaW1lUGFyYW1GbikoY29uc3QgUFJFeHBsb2RlZFRp bWUgKmdtdCk7CiMgMTc3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKZXh0ZXJuIFBSVGltZQoKUFJfTm93KHZv aWQpOwojIDE5MSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBSX0V4cGxvZGVUaW1lKAog ICAgUFJUaW1lIHVzZWNzLCBQUlRpbWVQYXJhbUZuIHBhcmFtcywgUFJFeHBsb2RlZFRpbWUgKmV4 cGxvZGVkKTsKCgoKCgpleHRlcm4gUFJUaW1lCgpQUl9JbXBsb2RlVGltZShjb25zdCBQUkV4cGxv ZGVkVGltZSAqZXhwbG9kZWQpOwojIDIxNCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBS X05vcm1hbGl6ZVRpbWUoCiAgICBQUkV4cGxvZGVkVGltZSAqZXhwbG9kZWQsIFBSVGltZVBhcmFt Rm4gcGFyYW1zKTsKCgoKCgoKZXh0ZXJuIFBSVGltZVBhcmFtZXRlcnMgUFJfTG9jYWxUaW1lUGFy YW1ldGVycyhjb25zdCBQUkV4cGxvZGVkVGltZSAqZ210KTsKCgpleHRlcm4gUFJUaW1lUGFyYW1l dGVycyBQUl9HTVRQYXJhbWV0ZXJzKGNvbnN0IFBSRXhwbG9kZWRUaW1lICpnbXQpOwoKCgoKCmV4 dGVybiBQUlRpbWVQYXJhbWV0ZXJzIFBSX1VTUGFjaWZpY1RpbWVQYXJhbWV0ZXJzKGNvbnN0IFBS RXhwbG9kZWRUaW1lICpnbXQpOwojIDI2NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiBQUlN0YXR1 cyBQUl9QYXJzZVRpbWVTdHJpbmcgKAogICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZywKICAgICAg ICBQUkJvb2wgZGVmYXVsdF90b19nbXQsCiAgICAgICAgUFJUaW1lICpyZXN1bHQpOwojIDI4MSAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJ0aW1lLmgiCmV4dGVybiBQUlVpbnQzMiBQUl9Gb3JtYXRUaW1lKGNoYXIgKmJ1Ziwg aW50IGJ1ZmxlbiwgY29uc3QgY2hhciAqZm10LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUFJFeHBsb2RlZFRpbWUgKnRtKTsKCgoKCmV4dGVybiBQUlVp bnQzMgpQUl9Gb3JtYXRUaW1lVVNFbmdsaXNoKCBjaGFyKiBidWYsIFBSVWludDMyIGJ1ZlNpemUs CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZvcm1hdCwgY29uc3QgUFJFeHBs b2RlZFRpbWUqIHRtICk7CgoKCn0KIyAxMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z cm9vdGlkbC5oIiAyCgoKCmNsYXNzIG5zQVN0cmluZzsKY2xhc3MgbnNBQ1N0cmluZzsKIyAxMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiIDIKIyAxMTYgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0cy5oIgojIDEgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c0Jhc2UuaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJU3VwcG9ydHNCYXNlLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUQuaCIgMQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRC5o IgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdHJp bmcuaCIgMwpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxp bnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19k ZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMs IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rl c3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2 b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6 ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpf X3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChf X2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hy IChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAo X19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f Yywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpz dHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0 ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChj aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAog ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz dHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9f Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jl c3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgojIDEgIi91c3IvaW5jbHVk ZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYg c3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVz WzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGlu dCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwoKCiAgY29u c3QgY2hhciAqX19uYW1lc1sxM107Cn0gKl9fbG9jYWxlX3Q7CiMgMTE1ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDIgMwoKCmV4dGVybiBpbnQgc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEs IF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm1fbCAoY2hhciAqX19k ZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAg ICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAo X19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7 CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTYw ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0 IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJu dWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19z LCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19j b25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj aGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBj aGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9f c3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpz dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9w dHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAq X19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2 b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5 ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIHZv aWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19j b25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9f ZXJybnVtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJu dW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv aWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZv aWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9p ZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4 IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4g aW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIg Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEs IF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXBfbCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICBf X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4 dGVybiBpbnQgc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg Kl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBf X2xvYykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRl cm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg Kl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19z dHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zcmMpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJp Y3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7 CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf dCBfX24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBf X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z cmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9f c3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXpl X3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNo YXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwojIDM3OSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz Cn0KIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUQuaCIgMgojIDUyICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRC5oIgpzdHJ1Y3QgbnNJRCB7CgoKCgoKICBQUlVp bnQzMiBtMDsKICBQUlVpbnQxNiBtMTsKICBQUlVpbnQxNiBtMjsKICBQUlVpbnQ4IG0zWzhdOwoj IDc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRC5oIgogIGlubGluZSBQUkJvb2wg RXF1YWxzKGNvbnN0IG5zSUQmIG90aGVyKSBjb25zdCB7CgoKCgoKCgogICAgcmV0dXJuIChQUkJv b2wpCiAgICAgICgoKChQUlVpbnQzMiopICZtMClbMF0gPT0gKChQUlVpbnQzMiopICZvdGhlci5t MClbMF0pICYmCiAgICAgICAoKChQUlVpbnQzMiopICZtMClbMV0gPT0gKChQUlVpbnQzMiopICZv dGhlci5tMClbMV0pICYmCiAgICAgICAoKChQUlVpbnQzMiopICZtMClbMl0gPT0gKChQUlVpbnQz MiopICZvdGhlci5tMClbMl0pICYmCiAgICAgICAoKChQUlVpbnQzMiopICZtMClbM10gPT0gKChQ UlVpbnQzMiopICZvdGhlci5tMClbM10pKTsKICB9CgoKCgoKICBQUkJvb2wgUGFyc2UoY29uc3Qg Y2hhciAqYUlEU3RyKTsKCgoKCgogIGNoYXIqIFRvU3RyaW5nKCkgY29uc3Q7Cgp9OwoKCgoKCnR5 cGVkZWYgbnNJRCBuc0NJRDsKIyAxMjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lE LmgiCnR5cGVkZWYgbnNJRCBuc0lJRDsKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L25zSVN1cHBvcnRzQmFzZS5oIiAyCiMgNzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c0lTdXBwb3J0c0Jhc2UuaCIKdHlwZWRlZiBQUlVpbnQzMiBuc3JlZmNudDsKIyA4MCAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzQmFzZS5oIgpjbGFzcyBuc0lTdXBwb3J0 cyB7CnB1YmxpYzoKIyA5NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRz QmFzZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJ SUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3JlZmNudCBB ZGRSZWYodm9pZCkgPSAwOwojIDExNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1 cHBvcnRzQmFzZS5oIgogIHZpcnR1YWwgbnNyZWZjbnQgUmVsZWFzZSh2b2lkKSA9IDA7CgoKfTsK IyAxMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0cy5oIiAyCgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1V0aWxzLmgiIDEKIyA1NyAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzVXRpbHMuaCIKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNEZWJ1Zy5oIiAxCiMgNjIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0RlYnVnLmgiCmNsYXNzIG5zRGVidWcgewpwdWJsaWM6CgoKCgoKCiAg c3RhdGljIHZvaWQgQWJvcnRJZkZhbHNlKGNvbnN0IGNoYXIqIGFTdHIsIGNvbnN0IGNoYXIqIGFF eHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUs IFBSSW50biBhTGluZSk7CiMgODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0RlYnVn LmgiCiAgc3RhdGljIHZvaWQgV2FybklmRmFsc2UoY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hh ciogYUV4cHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFG aWxlLCBQUkludG4gYUxpbmUpOwojIDk4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNE ZWJ1Zy5oIgogIHN0YXRpYyB2b2lkIFNldFdhcm5pbmdNZXNzYWdlQm94RW5hYmxlKFBSQm9vbCBh T25PZmYpOwoKCgoKICBzdGF0aWMgUFJCb29sIEdldFdhcm5pbmdNZXNzYWdlQm94RW5hYmxlKHZv aWQpOwojIDExNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zRGVidWcuaCIKICBzdGF0 aWMgdm9pZCBBYm9ydChjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3Rh dGljIHZvaWQgQnJlYWsoY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0 YXRpYyB2b2lkIFByZUNvbmRpdGlvbihjb25zdCBjaGFyKiBhU3RyLCBjb25zdCBjaGFyKiBhRXhw ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQ UkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBQb3N0Q29uZGl0aW9uKGNvbnN0IGNoYXIq IGFTdHIsIGNvbnN0IGNoYXIqIGFFeHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBB c3NlcnRpb24oY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hhciogYUV4cHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoK CiAgc3RhdGljIHZvaWQgTm90WWV0SW1wbGVtZW50ZWQoY29uc3QgY2hhciogYU1lc3NhZ2UsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQ UkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBOb3RSZWFjaGVkKGNvbnN0IGNoYXIqIGFN ZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxl LCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBFcnJvcihjb25zdCBjaGFyKiBhTWVz c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50 biBhTGluZSk7CgoKCgogIHN0YXRpYyB2b2lkIFdhcm5pbmcoY29uc3QgY2hhciogYU1lc3NhZ2Us CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBh TGluZSk7Cn07CiMgNTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1V0 aWxzLmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNJ bXBsLmgiIDEKIyA0OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzSW1w bC5oIgojIDEgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIiAxCiMgNDQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxs YS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgojIDEgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3BybG9jay5oIiAxCiMgNTAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29y ay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgpleHRlcm4gIkMiIHsKIyA2MyAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJsb2NrLmgiCnR5cGVkZWYgc3RydWN0IFBSTG9jayBQUkxvY2s7CiMgODAgIi92YXIv dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3BybG9jay5oIgpleHRlcm4gUFJMb2NrKiBQUl9OZXdMb2NrKHZvaWQpOwojIDkxICIvdmFyL3Rt cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cmxvY2suaCIKZXh0ZXJuIHZvaWQgUFJfRGVzdHJveUxvY2soUFJMb2NrICpsb2NrKTsKIyAxMDIg Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BybG9jay5oIgpleHRlcm4gdm9pZCBQUl9Mb2NrKFBSTG9jayAqbG9jayk7CiMgMTE0 ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmxvY2suaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1VubG9jayhQUkxvY2sgKmxvY2sp OwoKfQojIDQ1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIgMgoKZXh0ZXJuICJDIiB7CiMgNTcgIi92YXIvdG1w L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By YXRvbS5oIgpleHRlcm4gUFJJbnQzMiBQUl9BdG9taWNJbmNyZW1lbnQoUFJJbnQzMiAqdmFsKTsK IyA2OCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQUkludDMyIFBSX0F0b21pY0RlY3JlbWVudChQ UkludDMyICp2YWwpOwojIDgwICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSSW50MzIgUFJfQXRv bWljU2V0KFBSSW50MzIgKnZhbCwgUFJJbnQzMiBuZXd2YWwpOwojIDkyICIvdmFyL3RtcC9wb3J0 YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20u aCIKZXh0ZXJuIFBSSW50MzIgUFJfQXRvbWljQWRkKFBSSW50MzIgKnB0ciwgUFJJbnQzMiB2YWwp OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJTdGFja0VsZW1TdHIgUFJTdGFja0VsZW07CgpzdHJ1Y3Qg UFJTdGFja0VsZW1TdHIgewogICAgUFJTdGFja0VsZW0gKnByc3RrX2VsZW1fbmV4dDsKCn07Cgp0 eXBlZGVmIHN0cnVjdCBQUlN0YWNrU3RyIFBSU3RhY2s7CiMgMTE1ICIvdmFyL3RtcC9wb3J0YWdl L21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIK ZXh0ZXJuIFBSU3RhY2sgKiBQUl9DcmVhdGVTdGFjayhjb25zdCBjaGFyICpzdGFja19uYW1lKTsK IyAxMjcgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gdm9pZCBQUl9TdGFja1B1c2goUFJTdGFjayAq c3RhY2ssIFBSU3RhY2tFbGVtICpzdGFja19lbGVtKTsKIyAxNDAgIi92YXIvdG1wL3BvcnRhZ2Uv bW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpl eHRlcm4gUFJTdGFja0VsZW0gKiBQUl9TdGFja1BvcChQUlN0YWNrICpzdGFjayk7CiMgMTU0ICIv dmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0Rlc3Ryb3lTdGFjayhQUlN0YWNrICpz dGFjayk7Cgp9CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c0lt cGwuaCIgMgojIDYyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNJbXBs LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zVHJhY2VSZWZjbnQuaCIgMQoj IDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNUcmFjZVJlZmNudC5oIgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbS5oIiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc1RyYWNlUmVmY250LmgiIDIKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p NTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2xp Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl cm4gIkMiIHsKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4y L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNTMgIi91c3IvbGliL2djYy1saWIv aTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKdHlwZWRlZiBzdHJ1 Y3QgX0lPX0ZJTEUgRklMRTsKCgoKCgojIDcxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBf X0ZJTEU7CiMgODEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5j bHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMg MTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4 Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzU0ICIvdXNyL2xp Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi IDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIv Z2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0 OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hh ci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDYzICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMwoKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1 bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1 ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5 cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0g X0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0 ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2dj b252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVk ZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIu Mi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoj IDYzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252Lmgi IDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVu dW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwK ICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9P VVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBV VCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJP Ugp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05P UkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2dj b252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2Nv bnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2dj b252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hh ciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90 ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3Qg X19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3Qg X19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3Ry dWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKios CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBp bnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9f Z2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKios CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlw ZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAq KTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVj dCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsK ICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29u dl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0 IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsK ICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0 IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7 CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRf ZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19t aW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVk ZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lk ICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hh ciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxh Z3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3Vz ZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAg c3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3Qg X19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAq X19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEg W107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlw ZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAg IHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBf X2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQx Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19p bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2ln bmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251 LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt cGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5f dmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoj IDE2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBf SU9fRklMRTsKIyAxNzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9f bG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25l eHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTUgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVj dnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2 dF9ub2NvbnYKfTsKIyAyNjMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklM RSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19y ZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwog IGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9f YnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAg Y2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9J T19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9m aWxlbm87CgoKCiAgaW50IF9mbGFnczI7CgogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5z aWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAg Y2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzExICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQx OwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6 ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklM RV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRl cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9J T19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM1MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAq X19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dy aXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lv X3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0 eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9f aW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4g Y29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVr X2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25f dDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVf Zm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsK fSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rp b25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpl eHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2Zp bGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq X19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJD IiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy biBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxv dyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cg KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAq KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90 KSB0aHJvdyAoKTsKIyA0MzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lP X2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50 IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9f RklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9f ZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19m cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikg dGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cg KCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMg NDYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9f RklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpf X3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93 ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVf dCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICos IHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklM RSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9f c2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZv aWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwojIDUyMCAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDMKfQojIDgyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9s aXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA5NSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4 LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7 CgoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxNDcgIi91c3IvbGliL2djYy1s aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDE0OCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2 LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gc3RydWN0 IF9JT19GSUxFICpzdGRpbjsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4g c3RydWN0IF9JT19GSUxFICpzdGRlcnI7CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25z dCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0 IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE4MCAiL3Vzci9saWIvZ2NjLWxpYi9p NTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRt cG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9p ZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93 ICgpOwojIDIwMiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIs IF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpmb3Bl biAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJ TEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAg ICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyNDgg Ii91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5o IiAzCgoKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zp bGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bW9kZXMpIHRocm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9f ZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZv cGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAg ICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhy b3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwg X19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21l bXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0 cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg ICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0 YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm LAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVy biB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0 ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251 Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv dyAoKTsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNu cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFf bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMywgMCkpKTsKCgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jl c3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50 ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYg KGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChp bnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAg ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQg X19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgoKZXh0 ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg dGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg Li4uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3Qg X19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoK CmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3NjYW5mX18sIDIsIDApKSk7CgoKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGdl dGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFy X3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19j LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhy b3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19j LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAo aW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50 IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJu IGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHNf dW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDQ3MCAi L3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgi IDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVw dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19u LCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAo Y2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl cm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0cyAoX19j b25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpf X3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXpl X3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZv aWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0 IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2Up IHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCiMgNTM3 ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGlu dCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKIyA1NTMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgp OwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9f cG9zKSB0aHJvdyAoKTsKIyA1NzIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9f c3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBf X29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBm Z2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0 IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJl YW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNs ZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAo KTsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAxIDMKIyAyNyAi L3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMwpleHRlcm4gaW50IHN5c19uZXJyOwpl eHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBf c3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CiMg NjA5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk aW8uaCIgMiAzCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19j b25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3Mp IHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgp OwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0 IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGlu dCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg MCkpKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMg NjgzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk aW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2lu Y2x1ZGUvYml0cy9zdGRpby5oIiAzCmlubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVy biB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFy ICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGlu ZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9f ZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2Zw KSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGlu ZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGlu KS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGlu KSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlu bGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAo X19jLCBzdGRvdXQpOwp9CgoKCgppbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0 ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVh bSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSkt Pl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2Nr ZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3Ry ZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3Zl cmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIp ICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQK cHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiAoKChzdGRvdXQp LT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cg KHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRv dXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApn ZXRsaW5lIChjaGFyICoqX19saW5lcHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRo cm93ICgpCnsKICByZXR1cm4gX19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3Ry ZWFtKTsKfQoKCgoKCmlubGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoK CmlubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewog IHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjg0ICIvdXNy L2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAz CgoKfQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNUcmFjZVJlZmNudC5oIiAy CgpjbGFzcyBuc0lTdXBwb3J0czsKIyAxNTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c1RyYWNlUmVmY250LmgiCnN0cnVjdCBuc1RyYWNlUmVmY250U3RhdHMgewogIG5zcmVmY250IG1B ZGRSZWZzOwogIG5zcmVmY250IG1SZWxlYXNlczsKICBuc3JlZmNudCBtQ3JlYXRlczsKICBuc3Jl ZmNudCBtRGVzdHJveXM7CiAgZG91YmxlIG1SZWZzT3V0c3RhbmRpbmdUb3RhbDsKICBkb3VibGUg bVJlZnNPdXRzdGFuZGluZ1NxdWFyZWQ7CiAgZG91YmxlIG1PYmpzT3V0c3RhbmRpbmdUb3RhbDsK ICBkb3VibGUgbU9ianNPdXRzdGFuZGluZ1NxdWFyZWQ7Cn07CiMgMTczICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb20vbnNUcmFjZVJlZmNudC5oIgp0eXBlZGVmIFBSQm9vbCAoICpuc1RyYWNl UmVmY250U3RhdEZ1bmMpCiAgKGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgUFJVaW50MzIgYUlu c3RhbmNlU2l6ZSwKICAgbnNUcmFjZVJlZmNudFN0YXRzKiBhQ3VycmVudFN0YXRzLAogICBuc1Ry YWNlUmVmY250U3RhdHMqIGFQcmV2U3RhdHMsCiAgIHZvaWQgKmFDbG9zdXJlKTsKCgoKCgpjbGFz cyBuc1RyYWNlUmVmY250IHsKcHVibGljOgogIHN0YXRpYyB2b2lkIFN0YXJ0dXAoKTsKCiAgc3Rh dGljIHZvaWQgU2h1dGRvd24oKTsKCiAgc3RhdGljIHZvaWQgTG9nQWRkUmVmKHZvaWQqIGFQdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmQ250LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVR5cGVOYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0YXRp YyB2b2lkIExvZ1JlbGVhc2Uodm9pZCogYVB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc3JlZmNudCBhTmV3UmVmQ250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIqIGFUeXBlTmFtZSk7CgogIHN0YXRpYyB2b2lkIExvZ05ld1hQQ09NKHZvaWQq IGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFUeXBl TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNl U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhTGluZSk7CgogIHN0YXRpYyB2 b2lkIExvZ0RlbGV0ZVhQQ09NKHZvaWQqIGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgYUxpbmUpOwoKICBzdGF0aWMgbnNyZWZjbnQgTG9nQWRkUmVmQ2FsbCh2b2lk KiBhUHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBh TmV3UmVmY250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFM aW5lKTsKCiAgc3RhdGljIG5zcmVmY250IExvZ1JlbGVhc2VDYWxsKHZvaWQqIGFQdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmY250LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYUxpbmUpOwoKICBz dGF0aWMgdm9pZCBMb2dDdG9yKHZvaWQqIGFQdHIsIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplKTsKCiAgc3Rh dGljIHZvaWQgTG9nRHRvcih2b2lkKiBhUHRyLCBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0YXRp YyB2b2lkIExvZ0FkZENPTVB0cih2b2lkICphQ09NUHRyLCBuc0lTdXBwb3J0cyAqYU9iamVjdCk7 CgogIHN0YXRpYyB2b2lkIExvZ1JlbGVhc2VDT01QdHIodm9pZCAqYUNPTVB0ciwgbnNJU3VwcG9y dHMgKmFPYmplY3QpOwoKICBlbnVtIFN0YXRpc3RpY3NUeXBlIHsKICAgIEFMTF9TVEFUUywKICAg IE5FV19TVEFUUwogIH07CgogIHN0YXRpYyBuc3Jlc3VsdCBEdW1wU3RhdGlzdGljcyhTdGF0aXN0 aWNzVHlwZSB0eXBlID0gQUxMX1NUQVRTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRklMRSogb3V0ID0gMCk7CgogIHN0YXRpYyB2b2lkIFJlc2V0U3RhdGlzdGljcyh2 b2lkKTsKCiAgc3RhdGljIHZvaWQgR2F0aGVyU3RhdGlzdGljcyhuc1RyYWNlUmVmY250U3RhdEZ1 bmMgYUZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUNs b3N1cmUpOwoKICBzdGF0aWMgdm9pZCBMb2FkTGlicmFyeVN5bWJvbHMoY29uc3QgY2hhciogYUxp YnJhcnlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCog YUxpYnJheUhhbmRsZSk7CgogIHN0YXRpYyB2b2lkIERlbWFuZ2xlU3ltYm9sKGNvbnN0IGNoYXIg KiBhU3ltYm9sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogYUJ1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFCdWZMZW4pOwoK ICBzdGF0aWMgdm9pZCBXYWxrVGhlU3RhY2soRklMRSogYVN0cmVhbSk7CgogIHN0YXRpYyB2b2lk IFNldFByZWZTZXJ2aWNlQXZhaWxhYmlsaXR5KFBSQm9vbCBhdmFpbCk7CgoKCgoKCiAgc3RhdGlj IHZvaWQgU2V0QWN0aXZpdHlJc0xlZ2FsKFBSQm9vbCBhTGVnYWwpOwp9OwoKCgoKZXh0ZXJuICJD IiB2b2lkCk5TX01lYW5BbmRTdGREZXYoZG91YmxlIG4sIGRvdWJsZSBzdW1PZlZhbHVlcywgZG91 YmxlIHN1bU9mU3F1YXJlZFZhbHVlcywKICAgICAgICAgICAgICAgICBkb3VibGUgKm1lYW5SZXN1 bHQsIGRvdWJsZSAqc3RkRGV2UmVzdWx0KTsKIyA2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSVN1cHBvcnRzSW1wbC5oIiAyCiMgOTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lTdXBwb3J0c0ltcGwuaCIKY2xhc3MgbnNBdXRvUmVmQ250IHsKCiBwdWJsaWM6CiAgICBu c0F1dG9SZWZDbnQoKSA6IG1WYWx1ZSgwKSB7fQogICAgbnNBdXRvUmVmQ250KG5zcmVmY250IGFW YWx1ZSkgOiBtVmFsdWUoYVZhbHVlKSB7fQoKCiAgICBuc3JlZmNudCBvcGVyYXRvcisrKCkgeyBy ZXR1cm4gKyttVmFsdWU7IH0KICAgIG5zcmVmY250IG9wZXJhdG9yLS0oKSB7IHJldHVybiAtLW1W YWx1ZTsgfQoKICAgIG5zcmVmY250IG9wZXJhdG9yPShuc3JlZmNudCBhVmFsdWUpIHsgcmV0dXJu IChtVmFsdWUgPSBhVmFsdWUpOyB9CiAgICBvcGVyYXRvciBuc3JlZmNudCgpIGNvbnN0IHsgcmV0 dXJuIG1WYWx1ZTsgfQogICAgbnNyZWZjbnQgZ2V0KCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9 CiBwcml2YXRlOgoKICAgIG5zcmVmY250IG9wZXJhdG9yKysoaW50KTsKICAgIG5zcmVmY250IG9w ZXJhdG9yLS0oaW50KTsKICAgIG5zcmVmY250IG1WYWx1ZTsKfTsKIyA4MjkgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c0ltcGwuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJQ2xhc3NJbmZvLmgiIDEKIyA4MzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbS9uc0lTdXBwb3J0c0ltcGwuaCIgMgojIDYyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJU3VwcG9ydHNVdGlscy5oIiAyCiMgMTA2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJU3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMrKyIgewoKCgp0ZW1wbGF0ZSA8Y2xh c3MgVD4KaW5saW5lCm5zcmVmY250Cm5zX2lmX2FkZHJlZiggVCBleHByICkKCgoKICB7CiAgICBy ZXR1cm4gZXhwciA/IGV4cHItPkFkZFJlZigpIDogMDsKICB9Cgp9CiMgMjM0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMrKyIgewoKCgpj bGFzcyBuc0lTdXBwb3J0czsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgbnNDT01UeXBlSW5m bwogIHsKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyByZXR1cm4gVDo6R2V0SUlE KCk7IH0KICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+ CiAgewogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7CiAgICAgICAgc3RhdGljIGNv bnN0IG5zSUlEIGlpZF9OU19JU1VQUE9SVFNfSUlEID0geyAweDAwMDAwMDAwLCAweDAwMDAsIDB4 MDAwMCwgezB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDZ9IH07 IHJldHVybiBpaWRfTlNfSVNVUFBPUlRTX0lJRDsKICAgIH0KICB9OwoKCgoKdGVtcGxhdGUgPGNs YXNzIFQsIGNsYXNzIERlc3RpbmF0aW9uVHlwZT4KaW5saW5lCm5zcmVzdWx0CkNhbGxRdWVyeUlu dGVyZmFjZSggVCogYVNvdXJjZSwgRGVzdGluYXRpb25UeXBlKiogYURlc3RpbmF0aW9uICkKICB7 CiAgICA7CiAgICA7CgogICAgcmV0dXJuIGFTb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKG5zQ09NVHlw ZUluZm88RGVzdGluYXRpb25UeXBlPjo6R2V0SUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9uKSk7CiAg fQoKfQojIDExOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiIDIK IyAxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNsYXNzSW5mby5oIiAyCgoKCiMg MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVByb2dyYW1taW5nTGFuZ3VhZ2UuaCIg MQojIDMyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJUHJvZ3JhbW1pbmdMYW5ndWFn ZS5oIgpjbGFzcyBuc0lQcm9ncmFtbWluZ0xhbmd1YWdlIDogcHVibGljIG5zSVN1cHBvcnRzIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGVhNjA0ZTkwLCAweDQwYmEsIDB4MTFkNSwgeyAweDkwLCAweGJiLCAweDAw LCAweDEwLCAweGE0LCAweGU3LCAweDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCgoKCiAgZW51 bSB7IFVOS05PV04gPSAwVSB9OwoKICBlbnVtIHsgQ1BMVVNQTFVTID0gMVUgfTsKCiAgZW51bSB7 IEpBVkFTQ1JJUFQgPSAyVSB9OwoKICBlbnVtIHsgUFlUSE9OID0gM1UgfTsKCiAgZW51bSB7IFBF UkwgPSA0VSB9OwoKICBlbnVtIHsgSkFWQSA9IDVVIH07CgogIGVudW0geyBaWDgxX0JBU0lDID0g NlUgfTsKCiAgZW51bSB7IEpBVkFTQ1JJUFQyID0gN1UgfTsKCn07CiMgMTUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0lDbGFzc0luZm8uaCIgMgojIDMzICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJQ2xhc3NJbmZvLmgiCmNsYXNzIG5zSUNsYXNzSW5mbyA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5ODZjMTFkMCwgMHhmMzQwLCAweDExZDQsIHsgMHg5 MCwgMHg3NSwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlp ZDt9CiMgNDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDbGFzc0luZm8uaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEludGVyZmFjZXMoUFJVaW50MzIgKmNvdW50LCBuc0lJRCAqICoq YXJyYXkpID0gMDsKIyA2MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNsYXNzSW5m by5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVscGVyRm9yTGFuZ3VhZ2UoUFJVaW50MzIgbGFu Z3VhZ2UsIG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Q29udHJhY3RJRChjaGFyICogKmFDb250cmFjdElEKSA9IDA7CgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldENsYXNzRGVzY3JpcHRpb24oY2hhciAqICphQ2xhc3NEZXNjcmlwdGlvbikg PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NJRChuc0NJRCAqICphQ2xhc3NJ RCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbXBsZW1lbnRhdGlvbkxhbmd1YWdl KFBSVWludDMyICphSW1wbGVtZW50YXRpb25MYW5ndWFnZSkgPSAwOwoKCgoKICBlbnVtIHsgU0lO R0xFVE9OID0gMVUgfTsKCiAgZW51bSB7IFRIUkVBRFNBRkUgPSAyVSB9OwoKICBlbnVtIHsgTUFJ Tl9USFJFQURfT05MWSA9IDRVIH07CgogIGVudW0geyBET01fT0JKRUNUID0gOFUgfTsKCiAgZW51 bSB7IFBMVUdJTl9PQkpFQ1QgPSAxNlUgfTsKCiAgZW51bSB7IEVBR0VSX0NMQVNTSU5GTyA9IDMy VSB9OwoKCgoKCiAgZW51bSB7IENPTlRFTlRfTk9ERSA9IDY0VSB9OwoKICBlbnVtIHsgUkVTRVJW RUQgPSAyMTQ3NDgzNjQ4VSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGbGFncyhQUlVpbnQz MiAqYUZsYWdzKSA9IDA7CiMgMTI0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ2xh c3NJbmZvLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc0lETm9BbGxvYyhuc0NJRCAqYUNs YXNzSUROb0FsbG9jKSA9IDA7Cgp9OwojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUNsYXNzSW5mby5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zVm9p ZEFycmF5LmgiIDEKIyA0MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zVm9pZEFycmF5 LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0FTdHJpbmcuaCIgMQojIDI4 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0cmluZy5oIgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmdGd2QuaCIgMQojIDMwICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nRndkLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3N0cmluZy9uc1N0cmluZ0RlZmluZXMuaCIgMQojIDMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv c3RyaW5nL25zU3RyaW5nRndkLmgiIDIKCgoKCgoKCmNsYXNzIG5zQVN0cmluZzsKY2xhc3MgbnNB Q1N0cmluZzsKCgoKCgoKY2xhc3MgbnNBRmxhdFN0cmluZzsKY2xhc3MgbnNBRmxhdENTdHJpbmc7 CgoKCgoKCmNsYXNzIG5zRGVwZW5kZW50U3RyaW5nOwpjbGFzcyBuc0RlcGVuZGVudENTdHJpbmc7 CiMgMjkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiIDIKCgoKIyAx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQnVmZmVySGFuZGxlLmgiIDEKIyA4OSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0J1ZmZlckhhbmRsZS5oIgp0ZW1wbGF0ZSA8 Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zQnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgogICAgICB0 eXBlZGVmIFBSVWludDMyIHNpemVfdHlwZTsKCiAgICAgIG5zQnVmZmVySGFuZGxlKCkgeyB9CiAg ICAgIG5zQnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFydCwgQ2hhclQqIGFEYXRhRW5kICkg OiBtRGF0YVN0YXJ0KGFEYXRhU3RhcnQpLCBtRGF0YUVuZChhRGF0YUVuZCkgeyB9CgogICAgICB2 b2lkIERhdGFTdGFydCggQ2hhclQqIGFOZXdEYXRhU3RhcnQgKSB7IG1EYXRhU3RhcnQgPSBhTmV3 RGF0YVN0YXJ0OyB9CiAgICAgIENoYXJUKiBEYXRhU3RhcnQoKSB7IHJldHVybiBtRGF0YVN0YXJ0 OyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhU3RhcnQoKSBjb25zdCB7IHJldHVybiBtRGF0YVN0 YXJ0OyB9CgogICAgICB2b2lkIERhdGFFbmQoIENoYXJUKiBhTmV3RGF0YUVuZCApIHsgbURhdGFF bmQgPSBhTmV3RGF0YUVuZDsgfQogICAgICBDaGFyVCogRGF0YUVuZCgpIHsgcmV0dXJuIG1EYXRh RW5kOyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhRW5kKCkgY29uc3QgeyByZXR1cm4gbURhdGFF bmQ7IH0KCiAgICAgIHNpemVfdHlwZSBEYXRhTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbURhdGFF bmQgLSBtRGF0YVN0YXJ0OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBDaGFyVCogbURhdGFTdGFy dDsKICAgICAgQ2hhclQqIG1EYXRhRW5kOwogIH07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIENoYXJU PgpjbGFzcyBuc0NvbnN0QnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVm IFBSVWludDMyIHNpemVfdHlwZTsKCiAgICAgIG5zQ29uc3RCdWZmZXJIYW5kbGUoKSB7IH0KICAg ICAgbnNDb25zdEJ1ZmZlckhhbmRsZSggY29uc3QgQ2hhclQqIGFEYXRhU3RhcnQsIGNvbnN0IENo YXJUKiBhRGF0YUVuZCApIDogbURhdGFTdGFydChhRGF0YVN0YXJ0KSwgbURhdGFFbmQoYURhdGFF bmQpIHsgfQoKICAgICAgdm9pZCBEYXRhU3RhcnQoIGNvbnN0IENoYXJUKiBhTmV3RGF0YVN0YXJ0 ICkgeyBtRGF0YVN0YXJ0ID0gYU5ld0RhdGFTdGFydDsgfQogICAgICBjb25zdCBDaGFyVCogRGF0 YVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbURhdGFTdGFydDsgfQoKICAgICAgdm9pZCBEYXRhRW5k KCBjb25zdCBDaGFyVCogYU5ld0RhdGFFbmQgKSB7IG1EYXRhRW5kID0gYU5ld0RhdGFFbmQ7IH0K ICAgICAgY29uc3QgQ2hhclQqIERhdGFFbmQoKSBjb25zdCB7IHJldHVybiBtRGF0YUVuZDsgfQoK ICAgICAgc2l6ZV90eXBlIERhdGFMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtRGF0YUVuZCAtIG1E YXRhU3RhcnQ7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IENoYXJUKiBtRGF0YVN0YXJ0 OwogICAgICBjb25zdCBDaGFyVCogbURhdGFFbmQ7CiAgfTsKCgoKCgoKCnRlbXBsYXRlIDxjbGFz cyBDaGFyVD4KY2xhc3MgbnNTdHJpbmdBbGxvY2F0b3IKICB7CiAgICBwdWJsaWM6CgogICAgICB2 aXJ0dWFsIHZvaWQgRGVhbGxvY2F0ZSggQ2hhclQqICkgY29uc3QgPSAwOwogIH07CgoKCgogbnNT dHJpbmdBbGxvY2F0b3I8Y2hhcj4mIFN0cmluZ0FsbG9jYXRvcl9jaGFyKCk7CiBuc1N0cmluZ0Fs bG9jYXRvcjxQUlVuaWNoYXI+JiBTdHJpbmdBbGxvY2F0b3Jfd2NoYXJfdCgpOwoKCgoKCnRlbXBs YXRlIDxjbGFzcyBUPgpzdHJ1Y3QgbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHMKICB7CiAgfTsKCnRl bXBsYXRlIDw+CnN0cnVjdCBuc1N0cmluZ0FsbG9jYXRvclRyYWl0czxjaGFyPgogIHsKICAgIHN0 YXRpYyBuc1N0cmluZ0FsbG9jYXRvcjxjaGFyPiYgZ2xvYmFsX3N0cmluZ19hbGxvY2F0b3IoKSB7 IHJldHVybiBTdHJpbmdBbGxvY2F0b3JfY2hhcigpOyB9CiAgfTsKCnRlbXBsYXRlIDw+CnN0cnVj dCBuc1N0cmluZ0FsbG9jYXRvclRyYWl0czxQUlVuaWNoYXI+CiAgewogICAgc3RhdGljIG5zU3Ry aW5nQWxsb2NhdG9yPFBSVW5pY2hhcj4mIGdsb2JhbF9zdHJpbmdfYWxsb2NhdG9yKCkgeyByZXR1 cm4gU3RyaW5nQWxsb2NhdG9yX3djaGFyX3QoKTsgfQogIH07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg Q2hhclQ+CmNsYXNzIG5zU2hhcmVkQnVmZmVySGFuZGxlCiAgICA6IHB1YmxpYyBuc0J1ZmZlckhh bmRsZTxDaGFyVD4KICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgUFJVaW50MzIgc2l6ZV90 eXBlOwoKICAgICAgZW51bQogICAgICAgIHsKICAgICAgICAgIGtJc0ltbXV0YWJsZSA9IDB4MDEw MDAwMDAsCiAgICAgICAgICBrSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1ZmZlciA9IDB4MDIwMDAw MDAsCiAgICAgICAgICBrSXNVc2VyQWxsb2NhdG9yID0gMHgwNDAwMDAwMCwKCgogICAgICAgICAg a0lzTlVMTCA9IDB4ODAwMDAwMDAsCiAgICAgICAgICBrSW1wbGVtZW50YXRpb25GbGFnc01hc2sg PSAweEYwMDAwMDAwLAoKICAgICAgICAgIGtGbGFnc01hc2sgPSAweEZGMDAwMDAwLAogICAgICAg ICAga1JlZkNvdW50TWFzayA9IDB4MDBGRkZGRkYKICAgICAgICB9OwoKICAgIHB1YmxpYzoKICAg ICAgbnNTaGFyZWRCdWZmZXJIYW5kbGUoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFF bmQsIHNpemVfdHlwZSBhU3RvcmFnZUxlbmd0aCwgUFJCb29sIGlzU2luZ2xlQWxsb2NhdGlvbiAp CiAgICAgICAgICA6IG5zQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCks CiAgICAgICAgICAgIG1GbGFncygwKSwKICAgICAgICAgICAgbVN0b3JhZ2VMZW5ndGgoYVN0b3Jh Z2VMZW5ndGgpCiAgICAgICAgewogICAgICAgICAgaWYgKCBpc1NpbmdsZUFsbG9jYXRpb24gKQog ICAgICAgICAgICBtRmxhZ3MgfD0ga0lzU2luZ2xlQWxsb2NhdGlvbldpdGhCdWZmZXI7CiAgICAg ICAgfQoKICAgICAgfm5zU2hhcmVkQnVmZmVySGFuZGxlKCk7CgogICAgICB2b2lkCiAgICAgIEFj cXVpcmVSZWZlcmVuY2UoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIG5zU2hhcmVkQnVmZmVy SGFuZGxlPENoYXJUPiogbXV0YWJsZV90aGlzID0gY29uc3RfY2FzdDwgbnNTaGFyZWRCdWZmZXJI YW5kbGU8Q2hhclQ+KiA+KHRoaXMpOwogICAgICAgICAgbXV0YWJsZV90aGlzLT5zZXRfcmVmY291 bnQoIGdldF9yZWZjb3VudCgpKzEgKTsKICAgICAgICB9CgogICAgICB2b2lkIFJlbGVhc2VSZWZl cmVuY2UoKSBjb25zdDsKCiAgICAgIFBSQm9vbAogICAgICBJc1JlZmVyZW5jZWQoKSBjb25zdAog ICAgICAgIHsKICAgICAgICAgIHJldHVybiBnZXRfcmVmY291bnQoKSAhPSAwOwogICAgICAgIH0K CiAgICAgIFBSQm9vbAogICAgICBJc011dGFibGUoKSBjb25zdAogICAgICAgIHsKCiAgICAgICAg ICByZXR1cm4gKG1GbGFncyAmIChrUmVmQ291bnRNYXNrIHwga0lzSW1tdXRhYmxlKSA9PSAxKTsK ICAgICAgICB9CgogICAgICB2b2lkIFN0b3JhZ2VMZW5ndGgoIHNpemVfdHlwZSBhTmV3U3RvcmFn ZUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgbVN0b3JhZ2VMZW5ndGggPSBhTmV3U3RvcmFn ZUxlbmd0aDsKICAgICAgICB9CgogICAgICBzaXplX3R5cGUKICAgICAgU3RvcmFnZUxlbmd0aCgp IGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1TdG9yYWdlTGVuZ3RoOwogICAgICAg IH0KCiAgICAgIFBSVWludDMyCiAgICAgIEdldEltcGxlbWVudGF0aW9uRmxhZ3MoKSBjb25zdAog ICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRmxhZ3MgJiBrSW1wbGVtZW50YXRpb25GbGFnc01h c2s7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBTZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCBQ UlVpbnQzMiBhTmV3RmxhZ3MgKQogICAgICAgIHsKICAgICAgICAgIG1GbGFncyA9IChtRmxhZ3Mg JiB+a0ltcGxlbWVudGF0aW9uRmxhZ3NNYXNrKSB8IChhTmV3RmxhZ3MgJiBrSW1wbGVtZW50YXRp b25GbGFnc01hc2spOwogICAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIFBSVWludDMyIG1G bGFnczsKICAgICAgc2l6ZV90eXBlIG1TdG9yYWdlTGVuZ3RoOwoKICAgICAgUFJVaW50MzIKICAg ICAgZ2V0X3JlZmNvdW50KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbUZsYWdz ICYga1JlZkNvdW50TWFzazsKICAgICAgICB9CgogICAgICBQUlVpbnQzMgogICAgICBzZXRfcmVm Y291bnQoIFBSVWludDMyIGFOZXdSZWZDb3VudCApCiAgICAgICAgewogICAgICAgICAgOwoKICAg ICAgICAgIG1GbGFncyA9IChtRmxhZ3MgJiBrRmxhZ3NNYXNrKSB8IGFOZXdSZWZDb3VudDsKICAg ICAgICAgIHJldHVybiBhTmV3UmVmQ291bnQ7CiAgICAgICAgfQoKICAgICAgbnNTdHJpbmdBbGxv Y2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29uc3Q7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xh c3MgQ2hhclQ+CmNsYXNzIG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aEFsbG9jYXRvcgogICAgOiBw dWJsaWMgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAgcHVibGljOgoKICAgICAg dHlwZWRlZiBQUlVpbnQzMiBzaXplX3R5cGU7CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdp dGhBbGxvY2F0b3IoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQsIHNpemVfdHlw ZSBhU3RvcmFnZUxlbmd0aCwgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBhQWxsb2NhdG9yICkK ICAgICAgICAgIDogbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRh RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVN0b3JhZ2VMZW5n dGgsIDApLAogICAgICAgICAgICBtQWxsb2NhdG9yKGFBbGxvY2F0b3IpCiAgICAgICAgewogICAg ICAgICAgdGhpcy0+bUZsYWdzIHw9IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3I7CiAgICAgICAgfQoK ICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy ZXR1cm4gbUFsbG9jYXRvcjsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgbnNTdHJpbmdBbGxvY2F0 b3I8Q2hhclQ+JiBtQWxsb2NhdG9yOwogIH07CgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xh c3MgbnNTaGFyZWRCdWZmZXJIYW5kbGVXaXRoRGVzdHJveQogICAgOiBwdWJsaWMgbnNTaGFyZWRC dWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBQUlVpbnQz MiBzaXplX3R5cGU7CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdpdGhEZXN0cm95KCBDaGFy VCogYURhdGFTdGFydCwgQ2hhclQqIGFEYXRhRW5kLCBzaXplX3R5cGUgYVN0b3JhZ2VMZW5ndGgp CiAgICAgICAgICA6IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0 YUVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFTdG9yYWdlTGVu Z3RoLCAwKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPm1GbGFncyB8PQogICAgICAgICAgICAg IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3IgfCB0aGlzLT5rSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1 ZmZlcjsKICAgICAgICB9CgogICAgICB2aXJ0dWFsIHZvaWQgRGVzdHJveSgpID0gMDsKCgoKCiAg ICAgIHZpcnR1YWwgfm5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aERlc3Ryb3koKSB7IH0KCgogIH07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zTm9uRGVzdHJ1Y3RpbmdTaGFyZWRCdWZm ZXJIYW5kbGUKICAgIDogcHVibGljIG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aERlc3Ryb3k8Q2hh clQ+CiAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBzaXplX3R5cGU7Cgog ICAgICBuc05vbkRlc3RydWN0aW5nU2hhcmVkQnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFy dCwgQ2hhclQqIGFEYXRhRW5kLCBzaXplX3R5cGUgYVN0b3JhZ2VMZW5ndGgpCiAgICAgICAgICA6 IG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aERlc3Ryb3k8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRh RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh U3RvcmFnZUxlbmd0aCkKICAgICAgICB7CiAgICAgICAgfQoKICAgICAgdmlydHVhbCB2b2lkIERl c3Ryb3koKQogICAgICAgIHsKCgogICAgICAgICAgdGhpcy0+c2V0X3JlZmNvdW50KDEpOwogICAg ICAgIH0KCiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+Cm5zU3RyaW5nQWxsb2NhdG9yPENo YXJUPiYKbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+OjpnZXRfYWxsb2NhdG9yKCkgY29uc3QK CiAgewogICAgaWYgKCBtRmxhZ3MgJiBrSXNVc2VyQWxsb2NhdG9yICkKICAgICAgewogICAgICAg IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdpdGhB bGxvY2F0b3I8Q2hhclQ+KiA+KHRoaXMpLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgIH0KCiAgICBy ZXR1cm4gbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHM8Q2hhclQ+OjpnbG9iYWxfc3RyaW5nX2FsbG9j YXRvcigpOwogIH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+Cm5zU2hhcmVkQnVmZmVySGFuZGxl PENoYXJUPjo6fm5zU2hhcmVkQnVmZmVySGFuZGxlKCkKCiAgewogICAgOwoKICAgIGlmICggISht RmxhZ3MgJiBrSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1ZmZlcikgKQogICAgICB7CiAgICAgICAg Q2hhclQqIHN0cmluZ19zdG9yYWdlID0gdGhpcy0+bURhdGFTdGFydDsKICAgICAgICBnZXRfYWxs b2NhdG9yKCkuRGVhbGxvY2F0ZShzdHJpbmdfc3RvcmFnZSk7CiAgICAgIH0KICB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgQ2hhclQ+CnZvaWQKbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+OjpSZWxlYXNl UmVmZXJlbmNlKCkgY29uc3QKICB7CiAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qIG11 dGFibGVfdGhpcyA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogPih0 aGlzKTsKICAgIGlmICggIW11dGFibGVfdGhpcy0+c2V0X3JlZmNvdW50KCBnZXRfcmVmY291bnQo KS0xICkgKQogICAgICB7CiAgICAgICAgaWYgKCB+bUZsYWdzICYgKGtJc1VzZXJBbGxvY2F0b3J8 a0lzU2luZ2xlQWxsb2NhdGlvbldpdGhCdWZmZXIpICkKICAgICAgICAgIGRlbGV0ZSBtdXRhYmxl X3RoaXM7CiAgICAgICAgZWxzZQoKCgogICAgICAgICAgc3RhdGljX2Nhc3Q8IG5zU2hhcmVkQnVm ZmVySGFuZGxlV2l0aERlc3Ryb3k8Q2hhclQ+KiA+KG11dGFibGVfdGhpcyktPkRlc3Ryb3koKTsK CiAgICAgIH0KICB9CiMgMzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5n LmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQ2hhclRyYWl0cy5o IiAxCiMgNDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNDaGFyVHJhaXRzLmgiCiMg MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg MwpleHRlcm4gIkMiIHsKIyA0OCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZW51bQp7CiAgX0lT dXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkp LAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkp ID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEg PDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgp IDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0 KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgo MSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8 IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9 ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lT YmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkp LAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkp ID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgo MSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkg PDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgODEgIi91c3IvaW5jbHVkZS9jdHlwZS5o IiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqKl9fY3R5cGVfYl9sb2MgKHZv aWQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3QpKTsKZXh0ZXJuIF9fY29uc3QgX19pbnQz Ml90ICoqX19jdHlwZV90b2xvd2VyX2xvYyAodm9pZCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19j b25zdCkpOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKipfX2N0eXBlX3RvdXBwZXJfbG9jICh2 b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0KSk7CiMgOTYgIi91c3IvaW5jbHVkZS9j dHlwZS5oIiAzCgoKCgoKCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhy b3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xv d2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQp IHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg aXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgaXNibGFuayAo aW50KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2N0eXBlIChpbnQgX19jLCBpbnQgX19t YXNrKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJv dyAoKTsKIyAyNDcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bV9s IChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzYWxwaGFfbCAoaW50LCBf X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2NudHJsX2wgKGludCwgX19sb2NhbGVf dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93 ICgpOwpleHRlcm4gaW50IGlzbG93ZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBpc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg aXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3Rf bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3NwYWNlX2wgKGludCwg X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlcl9sIChpbnQsIF9fbG9jYWxl X3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhy b3cgKCk7CgpleHRlcm4gaW50IGlzYmxhbmtfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93 ICgpOwpleHRlcm4gaW50IHRvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCB0b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0 aHJvdyAoKTsKIyAzMjMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0KIyA0NyAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3N0cmluZy9uc0NoYXJUcmFpdHMuaCIgMgojIDcwICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvc3RyaW5nL25zQ2hhclRyYWl0cy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvclV0aWxzLmgiIDEKIyAzMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3N0cmluZy9uc1N0cmluZ0l0ZXJhdG9yVXRpbHMuaCIKdGVtcGxhdGUgPGNsYXNzIEl0 ZXJhdG9yPgppbmxpbmUKUFJCb29sClNhbWVGcmFnbWVudCggY29uc3QgSXRlcmF0b3ImIGxocywg Y29uc3QgSXRlcmF0b3ImIHJocyApCiAgewogICAgcmV0dXJuIGxocy5mcmFnbWVudCgpLm1TdGFy dCA9PSByaHMuZnJhZ21lbnQoKS5tU3RhcnQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPiBj bGFzcyBuc1JlYWRpbmdJdGVyYXRvcjsKCgoKCiBzaXplX3QgRGlzdGFuY2UoIGNvbnN0IG5zUmVh ZGluZ0l0ZXJhdG9yPFBSVW5pY2hhcj4mLCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxQUlVuaWNo YXI+JiApOwogc2l6ZV90IERpc3RhbmNlKCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxjaGFyPiYs IGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXI+JiApOwojIDcxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvc3RyaW5nL25zQ2hhclRyYWl0cy5oIiAyCgoKCgoKICB0eXBlZGVmIFBSQm9vbCBuc0No YXJUcmFpdHNfYm9vbDsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+IHN0cnVjdCBuc0NoYXJUcmFp dHMge307Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNDaGFyVHJhaXRzPFBSVW5pY2hhcj4KICB7CiAg ICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIFBSVWludDE2IHVuc2ln bmVkX2NoYXJfdHlwZTsKICAgIHR5cGVkZWYgY2hhciBpbmNvbXBhdGlibGVfY2hhcl90eXBlOwoK ICAgIHN0YXRpYwogICAgdm9pZAogICAgYXNzaWduKCBjaGFyX3R5cGUmIGxocywgY2hhcl90eXBl IHJocyApCiAgICAgIHsKICAgICAgICBsaHMgPSByaHM7CiAgICAgIH0KCgoKCgoKCiAgICB0eXBl ZGVmIGludCBpbnRfdHlwZTsKCgogICAgc3RhdGljCiAgICBjaGFyX3R5cGUKICAgIHRvX2NoYXJf dHlwZSggaW50X3R5cGUgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gY2hhcl90eXBlKGMpOwog ICAgICB9CgogICAgc3RhdGljCiAgICBpbnRfdHlwZQogICAgdG9faW50X3R5cGUoIGNoYXJfdHlw ZSBjICkKICAgICAgewogICAgICAgIHJldHVybiBpbnRfdHlwZSggc3RhdGljX2Nhc3Q8IHVuc2ln bmVkX2NoYXJfdHlwZSA+KGMpICk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0 c19ib29sCiAgICBlcV9pbnRfdHlwZSggaW50X3R5cGUgbGhzLCBpbnRfdHlwZSByaHMgKQogICAg ICB7CiAgICAgICAgcmV0dXJuIGxocyA9PSByaHM7CiAgICAgIH0KCgoKCiAgICBzdGF0aWMKICAg IG5zQ2hhclRyYWl0c19ib29sCiAgICBlcSggY2hhcl90eXBlIGxocywgY2hhcl90eXBlIHJocyAp CiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAgfQoKICAgIHN0YXRpYwog ICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjaGFyX3R5cGUgbGhzLCBjaGFyX3R5cGUgcmhz ICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPCByaHM7CiAgICAgIH0KCgoKCiAgICBzdGF0 aWMKICAgIGNoYXJfdHlwZSoKICAgIG1vdmUoIGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlw ZSogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY2hh cl90eXBlKiA+KG1lbW1vdmUoczEsIHMyLCBuICogc2l6ZW9mKGNoYXJfdHlwZSkpKTsKICAgICAg fQoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlKgogICAgY29weSggY2hhcl90eXBlKiBzMSwgY29u c3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRp Y19jYXN0PCBjaGFyX3R5cGUqID4obWVtY3B5KHMxLCBzMiwgbiAqIHNpemVvZihjaGFyX3R5cGUp KSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAgIGFzc2lnbiggY2hhcl90 eXBlKiBzLCBzaXplX3QgbiwgY2hhcl90eXBlIGMgKQogICAgICB7CgoKCiAgICAgICAgY2hhcl90 eXBlKiByZXN1bHQgPSBzOwogICAgICAgIHdoaWxlICggbi0tICkKICAgICAgICAgIGFzc2lnbigq cysrLCBjKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwoKICAgICAgfQoKICAgIHN0YXRpYwogICAg aW50CiAgICBjb21wYXJlKCBjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMy LCBzaXplX3QgbiApCiAgICAgIHsKCgoKICAgICAgICBmb3IgKCA7IG4tLTsgKytzMSwgKytzMiAp CiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICggbHQoKnMxLCAqczIpICkKICAgICAgICAgICAg ICByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmICggbHQoKnMyLCAqczEpICkKICAgICAgICAgICAg ICByZXR1cm4gMTsKICAgICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDA7CgogICAgICB9CgogICAg c3RhdGljCiAgICBzaXplX3QKICAgIGxlbmd0aCggY29uc3QgY2hhcl90eXBlKiBzICkKICAgICAg ewoKCgogICAgICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgICAgIHdoaWxlICggIWVxKCpzKyss IGNoYXJfdHlwZSgwKSkgKQogICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgcmV0dXJuIHJlc3Vs dDsKCiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgIGZpbmQoIGNv bnN0IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNoYXJfdHlwZSBjICkKICAgICAgewoKCgogICAg ICAgIHdoaWxlICggbi0tICkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKCBlcSgqcywgYykg KQogICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICArK3M7CiAgICAgICAgICB9Cgog ICAgICAgIHJldHVybiAwOwoKICAgICAgfQojIDI1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0 cmluZy9uc0NoYXJUcmFpdHMuaCIKICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IG5zQ2hhclRyYWl0 czxjaGFyPgogIHsKICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIHVuc2ln bmVkIGNoYXIgdW5zaWduZWRfY2hhcl90eXBlOwogICAgdHlwZWRlZiBQUlVuaWNoYXIgaW5jb21w YXRpYmxlX2NoYXJfdHlwZTsKCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFzc2lnbiggY2hhcl90 eXBlJiBsaHMsIGNoYXJfdHlwZSByaHMgKQogICAgICB7CiAgICAgICAgbGhzID0gcmhzOwogICAg ICB9CgoKCgogICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CgogICAgc3RhdGljCiAgICBjaGFyX3R5 cGUKICAgIHRvX2NoYXJfdHlwZSggaW50X3R5cGUgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4g Y2hhcl90eXBlKGMpOwogICAgICB9CgogICAgc3RhdGljCiAgICBpbnRfdHlwZQogICAgdG9faW50 X3R5cGUoIGNoYXJfdHlwZSBjICkKICAgICAgewogICAgICAgIHJldHVybiBpbnRfdHlwZSggc3Rh dGljX2Nhc3Q8IHVuc2lnbmVkX2NoYXJfdHlwZSA+KGMpICk7CiAgICAgIH0KCiAgICBzdGF0aWMK ICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBlcV9pbnRfdHlwZSggaW50X3R5cGUgbGhzLCBpbnRf dHlwZSByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGxocyA9PSByaHM7CiAgICAgIH0KCgoK CiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBlcSggY2hhcl90eXBlIGxocywg Y2hhcl90eXBlIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAg fQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjaGFyX3R5cGUgbGhz LCBjaGFyX3R5cGUgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPCByaHM7CiAgICAg IH0KCgoKCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAgIG1vdmUoIGNoYXJfdHlwZSogczEs IGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIHJldHVybiBz dGF0aWNfY2FzdDwgY2hhcl90eXBlKiA+KG1lbW1vdmUoczEsIHMyLCBuICogc2l6ZW9mKGNoYXJf dHlwZSkpKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlKgogICAgY29weSggY2hh cl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAg ICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyX3R5cGUqID4obWVtY3B5KHMxLCBzMiwgbiAqIHNp emVvZihjaGFyX3R5cGUpKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAg IGFzc2lnbiggY2hhcl90eXBlKiBzLCBzaXplX3QgbiwgY2hhcl90eXBlIGMgKQogICAgICB7CiAg ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyX3R5cGUqID4obWVtc2V0KHMsIHRvX2ludF90 eXBlKGMpLCBuKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGludAogICAgY29tcGFyZSggY29u c3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7 CiAgICAgICAgcmV0dXJuIG1lbWNtcChzMSwgczIsIG4pOwogICAgICB9CgogICAgc3RhdGljCiAg ICBzaXplX3QKICAgIGxlbmd0aCggY29uc3QgY2hhcl90eXBlKiBzICkKICAgICAgewogICAgICAg IHJldHVybiBzdHJsZW4ocyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXJfdHlw ZSoKICAgIGZpbmQoIGNvbnN0IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNoYXJfdHlwZSBjICkK ICAgICAgewogICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBjaGFyX3R5cGUq ID4obWVtY2hyKHMsIHRvX2ludF90eXBlKGMpLCBuKSk7CiAgICAgIH0KIyAzNzggIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNDaGFyVHJhaXRzLmgiCiAgfTsKCnRlbXBsYXRlIDxjbGFz cyBJbnB1dEl0ZXJhdG9yPgpzdHJ1Y3QgbnNDaGFyU291cmNlVHJhaXRzCiAgewogICAgdHlwZWRl ZiB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBl OwojIDM5NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0NoYXJUcmFpdHMuaCIKICAg IHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJlYWRhYmxlX2Rpc3RhbmNlKCBjb25zdCBJbnB1dEl0 ZXJhdG9yJiBpdGVyICkKICAgICAgewogICAgICAgIHJldHVybiBpdGVyLnNpemVfZm9yd2FyZCgp OwogICAgICB9CgogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgcmVhZGFibGVfZGlzdGFuY2Uo IGNvbnN0IElucHV0SXRlcmF0b3ImIGZpcnN0LCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBsYXN0ICkK ICAgICAgewogICAgICAgIHJldHVybiBQUlVpbnQzMihTYW1lRnJhZ21lbnQoZmlyc3QsIGxhc3Qp ID8gbGFzdC5nZXQoKS1maXJzdC5nZXQoKSA6IGZpcnN0LnNpemVfZm9yd2FyZCgpKTsKICAgICAg fQoKICAgIHN0YXRpYwogICAgY29uc3QgdHlwZW5hbWUgSW5wdXRJdGVyYXRvcjo6dmFsdWVfdHlw ZSoKICAgIHJlYWQoIGNvbnN0IElucHV0SXRlcmF0b3ImIGl0ZXIgKQogICAgICB7CiAgICAgICAg cmV0dXJuIGl0ZXIuZ2V0KCk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFkdmFu Y2UoIElucHV0SXRlcmF0b3ImIHMsIGRpZmZlcmVuY2VfdHlwZSBuICkKICAgICAgewogICAgICAg IHMuYWR2YW5jZShuKTsKICAgICAgfQogIH07CgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4Kc3Ry dWN0IG5zQ2hhclNvdXJjZVRyYWl0czxDaGFyVCo+CiAgewogICAgdHlwZWRlZiBwdHJkaWZmX3Qg ZGlmZmVyZW5jZV90eXBlOwojIDQzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0No YXJUcmFpdHMuaCIKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJlYWRhYmxlX2Rpc3RhbmNl KCBDaGFyVCogcyApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIobnNDaGFyVHJhaXRz PENoYXJUPjo6bGVuZ3RoKHMpKTsKCiAgICAgIH0KCiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAg ICByZWFkYWJsZV9kaXN0YW5jZSggQ2hhclQqIGZpcnN0LCBDaGFyVCogbGFzdCApCiAgICAgIHsK ICAgICAgICByZXR1cm4gUFJVaW50MzIobGFzdC1maXJzdCk7CiAgICAgIH0KCiAgICBzdGF0aWMK ICAgIGNvbnN0IENoYXJUKgogICAgcmVhZCggQ2hhclQqIHMgKQogICAgICB7CiAgICAgICAgcmV0 dXJuIHM7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFkdmFuY2UoIENoYXJUKiYg cywgZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICB7CiAgICAgICAgcyArPSBuOwogICAgICB9CiAg fTsKIyA1NjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNDaGFyVHJhaXRzLmgiCnRl bXBsYXRlIDxjbGFzcyBPdXRwdXRJdGVyYXRvcj4Kc3RydWN0IG5zQ2hhclNpbmtUcmFpdHMKICB7 CiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICB3cml0ZSggT3V0cHV0SXRlcmF0b3ImIGl0ZXIs IGNvbnN0IHR5cGVuYW1lIE91dHB1dEl0ZXJhdG9yOjp2YWx1ZV90eXBlKiBzLCBQUlVpbnQzMiBu ICkKICAgICAgewogICAgICAgIHJldHVybiBpdGVyLndyaXRlKHMsIG4pOwogICAgICB9CiAgfTsK CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNDaGFyU2lua1RyYWl0czxDaGFyVCo+ CiAgewogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgd3JpdGUoIENoYXJUKiYgaXRlciwgY29u c3QgQ2hhclQqIHMsIFBSVWludDMyIG4gKQogICAgICB7CiAgICAgICAgbnNDaGFyVHJhaXRzPENo YXJUPjo6bW92ZShpdGVyLCBzLCBuKTsKICAgICAgICBpdGVyICs9IG47CiAgICAgICAgcmV0dXJu IG47CiAgICAgIH0KICB9OwojIDM3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0 cmluZy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0l0 ZXJhdG9yLmgiIDEKIyAyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0l0 ZXJhdG9yLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0ZyYWdt ZW50LmgiIDEKIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0ZyYWdt ZW50LmgiCmVudW0gbnNGcmFnbWVudFJlcXVlc3QgeyBrUHJldkZyYWdtZW50LCBrRmlyc3RGcmFn bWVudCwga0xhc3RGcmFnbWVudCwga05leHRGcmFnbWVudCwga0ZyYWdtZW50QXQgfTsKIyA1NyAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0ZyYWdtZW50LmgiCnRlbXBsYXRl IDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zUmVhZGFibGVGcmFnbWVudAogIHsKICAgIGNvbnN0IENo YXJUKiBtU3RhcnQ7CiAgICBjb25zdCBDaGFyVCogbUVuZDsKICAgIGNvbnN0IHZvaWQqIG1GcmFn bWVudElkZW50aWZpZXI7CgogICAgbnNSZWFkYWJsZUZyYWdtZW50KCkKICAgICAgICA6IG1TdGFy dCgwKSwgbUVuZCgwKSwgbUZyYWdtZW50SWRlbnRpZmllcigwKQogICAgICB7CgogICAgICB9Cgog ICAgY29uc3Qgdm9pZCoKICAgIEdldElEKCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiBt RnJhZ21lbnRJZGVudGlmaWVyOwogICAgICB9CgogICAgdW5zaWduZWQgbG9uZwogICAgR2V0SURB c0ludCgpIGNvbnN0CiAgICAgIHsKICAgICAgICB0eXBlZGVmIGNoYXIqIGNoYXJfcHRyOwogICAg ICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKICAgICAgICByZXR1cm4gdWxvbmcoY2hh cl9wdHIobUZyYWdtZW50SWRlbnRpZmllciktY2hhcl9wdHIoMCkpOwogICAgICB9CgogICAgdm9p ZAogICAgU2V0SUQoIGNvbnN0IHZvaWQqIGFJRCApCiAgICAgIHsKICAgICAgICBtRnJhZ21lbnRJ ZGVudGlmaWVyID0gYUlEOwogICAgICB9CgogICAgdm9pZAogICAgU2V0SUQoIHVuc2lnbmVkIGxv bmcgYUlEICkKICAgICAgewogICAgICAgIHR5cGVkZWYgY2hhciogY2hhcl9wdHI7CiAgICAgICAg dHlwZWRlZiB2b2lkKiB2b2lkX3B0cjsKICAgICAgICBtRnJhZ21lbnRJZGVudGlmaWVyID0gdm9p ZF9wdHIoY2hhcl9wdHIoMCkrYUlEKTsKICAgICAgfQogIH07CiMgMTEzICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nRnJhZ21lbnQuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJU PgpzdHJ1Y3QgbnNXcml0YWJsZUZyYWdtZW50CiAgewogICAgQ2hhclQqIG1TdGFydDsKICAgIENo YXJUKiBtRW5kOwogICAgdm9pZCogbUZyYWdtZW50SWRlbnRpZmllcjsKCiAgICBuc1dyaXRhYmxl RnJhZ21lbnQoKQogICAgICAgIDogbVN0YXJ0KDApLCBtRW5kKDApLCBtRnJhZ21lbnRJZGVudGlm aWVyKDApCiAgICAgIHsKCiAgICAgIH0KICB9OwojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv c3RyaW5nL25zU3RyaW5nSXRlcmF0b3IuaCIgMgoKCgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvc3RyaW5nL25zU3RyaW5nVHJhaXRzLmgiIDEKIyA0NCAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3N0cmluZy9uc1N0cmluZ1RyYWl0cy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVj dCBuc1N0cmluZ1RyYWl0cwogIHsKICAgIHR5cGVkZWYgbnNBU3RyaW5nIGFic3RyYWN0X3N0cmlu Z190eXBlOwogICAgdHlwZWRlZiBuc0FGbGF0U3RyaW5nIGFic3RyYWN0X2ZsYXRfdHlwZTsKICAg IHR5cGVkZWYgY29uc3QgbnNEZXBlbmRlbnRTdHJpbmcgbGl0ZXJhbF9zdHJpbmdfdHlwZTsKICB9 OwojIDY0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nVHJhaXRzLmgiCnRl bXBsYXRlIDw+CnN0cnVjdCBuc1N0cmluZ1RyYWl0czxjaGFyPgogIHsKICAgIHR5cGVkZWYgbnNB Q1N0cmluZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTsKICAgIHR5cGVkZWYgbnNBRmxhdENTdHJpbmcg YWJzdHJhY3RfZmxhdF90eXBlOwogICAgdHlwZWRlZiBjb25zdCBuc0RlcGVuZGVudENTdHJpbmcg bGl0ZXJhbF9zdHJpbmdfdHlwZTsKICB9OwojIDM3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry aW5nL25zU3RyaW5nSXRlcmF0b3IuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNBbGdvcml0aG0uaCIgMQojIDUyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n L25zQWxnb3JpdGhtLmgiCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3QgVCYKTlNfTUlO KCBjb25zdCBUJiBhLCBjb25zdCBUJiBiICkKICB7CiAgICByZXR1cm4gYiA8IGEgPyBiIDogYTsK ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNvbnN0IFQmCk5TX01BWCggY29uc3QgVCYg YSwgY29uc3QgVCYgYiApCiAgewogICAgcmV0dXJuIGEgPiBiID8gYSA6IGI7CiAgfQoKdGVtcGxh dGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIFQ+CmlubGluZQpQUlVpbnQzMgpOU19DT1VO VCggSW5wdXRJdGVyYXRvciYgZmlyc3QsIGNvbnN0IElucHV0SXRlcmF0b3ImIGxhc3QsIGNvbnN0 IFQmIHZhbHVlICkKICB7CiAgICBQUlVpbnQzMiByZXN1bHQgPSAwOwogICAgZm9yICggOyBmaXJz dCAhPSBsYXN0OyArK2ZpcnN0ICkKICAgICAgaWYgKCAqZmlyc3QgPT0gdmFsdWUgKQogICAgICAg ICsrcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJ dGVyYXRvciwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+CmlubGluZQpPdXRwdXRJdGVyYXRvciYKY29w eV9zdHJpbmcoIElucHV0SXRlcmF0b3ImIGZpcnN0LCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBsYXN0 LCBPdXRwdXRJdGVyYXRvciYgcmVzdWx0ICkKICB7CiAgICB0eXBlZGVmIG5zQ2hhclNvdXJjZVRy YWl0czxJbnB1dEl0ZXJhdG9yPiBzb3VyY2VfdHJhaXRzOwogICAgdHlwZWRlZiBuc0NoYXJTaW5r VHJhaXRzPE91dHB1dEl0ZXJhdG9yPiBzaW5rX3RyYWl0czsKCiAgICB3aGlsZSAoIGZpcnN0ICE9 IGxhc3QgKQogICAgICB7CiAgICAgICAgUFJJbnQzMiBjb3VudF9jb3BpZWQgPSBQUkludDMyKHNp bmtfdHJhaXRzOjp3cml0ZShyZXN1bHQsIHNvdXJjZV90cmFpdHM6OnJlYWQoZmlyc3QpLCBzb3Vy Y2VfdHJhaXRzOjpyZWFkYWJsZV9kaXN0YW5jZShmaXJzdCwgbGFzdCkpKTsKICAgICAgICA7CiAg ICAgICAgc291cmNlX3RyYWl0czo6YWR2YW5jZShmaXJzdCwgY291bnRfY29waWVkKTsKICAgICAg fQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3Is IGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpPdXRwdXRJdGVyYXRvciYKY29weV9zdHJpbmdfYmFja3dh cmQoIGNvbnN0IElucHV0SXRlcmF0b3ImIGZpcnN0LCBJbnB1dEl0ZXJhdG9yJiBsYXN0LCBPdXRw dXRJdGVyYXRvciYgcmVzdWx0ICkKICB7CiAgICB3aGlsZSAoIGZpcnN0ICE9IGxhc3QgKQogICAg ICB7CiAgICAgICAgbGFzdC5ub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICByZXN1bHQubm9y bWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgUFJVaW50MzIgbGVuZ3RoVG9Db3B5ID0gUFJVaW50 MzIoIE5TX01JTihsYXN0LnNpemVfYmFja3dhcmQoKSwgcmVzdWx0LnNpemVfYmFja3dhcmQoKSkg KTsKICAgICAgICBpZiAoIGZpcnN0LmZyYWdtZW50KCkubVN0YXJ0ID09IGxhc3QuZnJhZ21lbnQo KS5tU3RhcnQgKQogICAgICAgICAgbGVuZ3RoVG9Db3B5ID0gTlNfTUlOKGxlbmd0aFRvQ29weSwg UFJVaW50MzIobGFzdC5nZXQoKSAtIGZpcnN0LmdldCgpKSk7CgogICAgICAgIDsKCgoKCgogICAg ICAgIG5zQ2hhclRyYWl0czx0eXBlbmFtZSBPdXRwdXRJdGVyYXRvcjo6dmFsdWVfdHlwZT46Om1v dmUocmVzdWx0LmdldCgpLWxlbmd0aFRvQ29weSwgbGFzdC5nZXQoKS1sZW5ndGhUb0NvcHksIGxl bmd0aFRvQ29weSk7CgoKICAgICAgICBsYXN0LmFkdmFuY2UoIC1QUkludDMyKGxlbmd0aFRvQ29w eSkgKTsKICAgICAgICByZXN1bHQuYWR2YW5jZSggLVBSSW50MzIobGVuZ3RoVG9Db3B5KSApOwog ICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvci5oIiAyCiMgNTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNz IG5zUmVhZGluZ0l0ZXJhdG9yCgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBwdHJkaWZm X3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIENoYXJUIHZhbHVlX3R5cGU7CiAgICAg IHR5cGVkZWYgY29uc3QgQ2hhclQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgQ2hhclQm IHJlZmVyZW5jZTsKCgogICAgICB0eXBlZGVmIG5zUmVhZGFibGVGcmFnbWVudDxDaGFyVD4gY29u c3RfZnJhZ21lbnRfdHlwZTsKICAgICAgdHlwZWRlZiBuc1dyaXRhYmxlRnJhZ21lbnQ8Q2hhclQ+ IGZyYWdtZW50X3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgZnJpZW5kIGNsYXNzIG5zQVN0cmlu ZzsKICAgICAgZnJpZW5kIGNsYXNzIG5zQUNTdHJpbmc7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg bnNTdHJpbmdUcmFpdHM8Q2hhclQ+OjphYnN0cmFjdF9zdHJpbmdfdHlwZSBhYnN0cmFjdF9zdHJp bmdfdHlwZTsKCiAgICAgIGNvbnN0X2ZyYWdtZW50X3R5cGUgbUZyYWdtZW50OwogICAgICBjb25z dCBDaGFyVCogbVBvc2l0aW9uOwogICAgICBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSogbU93 bmluZ1N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yKCkgeyB9CgoK CiAgICAgIGlubGluZSB2b2lkIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgIGlubGluZSB2b2lk IG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwoKICAgICAgcG9pbnRlcgogICAgICBnZXQoKSBjb25zdAog ICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAgQ2hh clQKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKmdl dCgpOwogICAgICAgIH0KIyAxMDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJp bmdJdGVyYXRvci5oIgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4mCiAgICAgIG9wZXJh dG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFs aXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBu c1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3IrKyggaW50ICkKICAgICAgICB7 CiAgICAgICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4gcmVzdWx0KCp0aGlzKTsKICAgICAg ICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAg IHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+ JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAgICBub3JtYWxpemVfYmFja3dh cmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICAgIH0KCiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVyYXRvci0tKCBp bnQgKQogICAgICAgIHsKICAgICAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiByZXN1bHQo KnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAtLW1Qb3Np dGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgY29uc3QgY29u c3RfZnJhZ21lbnRfdHlwZSYKICAgICAgZnJhZ21lbnQoKSBjb25zdAogICAgICAgIHsKICAgICAg ICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgY29uc3QgYWJzdHJhY3Rfc3Ry aW5nX3R5cGUmCiAgICAgIHN0cmluZygpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgOwogICAg ICAgICAgcmV0dXJuICptT3duaW5nU3RyaW5nOwogICAgICAgIH0KCiAgICAgIGRpZmZlcmVuY2Vf dHlwZQogICAgICBzaXplX2ZvcndhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVy biBtRnJhZ21lbnQubUVuZCAtIG1Qb3NpdGlvbjsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNl X3R5cGUKICAgICAgc2l6ZV9iYWNrd2FyZCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0 dXJuIG1Qb3NpdGlvbiAtIG1GcmFnbWVudC5tU3RhcnQ7CiAgICAgICAgfQoKICAgICAgbnNSZWFk aW5nSXRlcmF0b3I8Q2hhclQ+JgogICAgICBhZHZhbmNlKCBkaWZmZXJlbmNlX3R5cGUgbiApCiAg ICAgICAgewogICAgICAgICAgd2hpbGUgKCBuID4gMCApCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBkaWZmZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01JTihuLCBzaXplX2ZvcndhcmQoKSk7 CgogICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgIG1Qb3NpdGlvbiArPSBvbmVfaG9wOwog ICAgICAgICAgICAgIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgICAgICAgICAgbiAtPSBvbmVf aG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgd2hpbGUgKCBuIDwgMCApCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgICAgICBkaWZm ZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01BWChuLCAtc2l6ZV9iYWNrd2FyZCgpKTsKCiAgICAg ICAgICAgICAgOwoKCiAgICAgICAgICAgICAgbVBvc2l0aW9uICs9IG9uZV9ob3A7CiAgICAgICAg ICAgICAgbiAtPSBvbmVfaG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuICp0aGlz OwogICAgICAgIH0KICB9OwojIDIwNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0 cmluZ0l0ZXJhdG9yLmgiCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNXcml0aW5nSXRl cmF0b3IKCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl X3R5cGU7CiAgICAgIHR5cGVkZWYgQ2hhclQgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBDaGFy VCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBDaGFyVCYgcmVmZXJlbmNlOwoKCiAgICAgIHR5cGVk ZWYgbnNSZWFkYWJsZUZyYWdtZW50PENoYXJUPiBjb25zdF9mcmFnbWVudF90eXBlOwogICAgICB0 eXBlZGVmIG5zV3JpdGFibGVGcmFnbWVudDxDaGFyVD4gZnJhZ21lbnRfdHlwZTsKCiAgICBwcml2 YXRlOgogICAgICBmcmllbmQgY2xhc3MgbnNBU3RyaW5nOwogICAgICBmcmllbmQgY2xhc3MgbnNB Q1N0cmluZzsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBuc1N0cmluZ1RyYWl0czxDaGFyVD46OmFi c3RyYWN0X3N0cmluZ190eXBlIGFic3RyYWN0X3N0cmluZ190eXBlOwoKICAgICAgZnJhZ21lbnRf dHlwZSBtRnJhZ21lbnQ7CiAgICAgIENoYXJUKiBtUG9zaXRpb247CiAgICAgIGFic3RyYWN0X3N0 cmluZ190eXBlKiBtT3duaW5nU3RyaW5nOwoKICAgIHB1YmxpYzoKICAgICAgbnNXcml0aW5nSXRl cmF0b3IoKSB7IH0KCgoKICAgICAgaW5saW5lIHZvaWQgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAg ICAgaW5saW5lIHZvaWQgbm9ybWFsaXplX2JhY2t3YXJkKCk7CgogICAgICBwb2ludGVyCiAgICAg IGdldCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1Qb3NpdGlvbjsKICAgICAg ICB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAg ICAgICAgICByZXR1cm4gKmdldCgpOwogICAgICAgIH0KIyAyNTkgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvci5oIgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxD aGFyVD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9u OwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsK ICAgICAgICB9CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3Ir KyggaW50ICkKICAgICAgICB7CiAgICAgICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4gcmVz dWx0KCp0aGlzKTsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2Zv cndhcmQoKTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNXcml0 aW5nSXRlcmF0b3I8Q2hhclQ+JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAg ICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPgog ICAgICBvcGVyYXRvci0tKCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zV3JpdGluZ0l0ZXJh dG9yPENoYXJUPiByZXN1bHQoKnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7 CiAgICAgICAgICAtLW1Qb3NpdGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg fQoKICAgICAgY29uc3QgZnJhZ21lbnRfdHlwZSYKICAgICAgZnJhZ21lbnQoKSBjb25zdAogICAg ICAgIHsKICAgICAgICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgZnJhZ21l bnRfdHlwZSYKICAgICAgZnJhZ21lbnQoKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRnJh Z21lbnQ7CiAgICAgICAgfQoKICAgICAgY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmCiAgICAg IHN0cmluZygpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgOwogICAgICAgICAgcmV0dXJuICpt T3duaW5nU3RyaW5nOwogICAgICAgIH0KCiAgICAgIGFic3RyYWN0X3N0cmluZ190eXBlJgogICAg ICBzdHJpbmcoKQogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIHJldHVybiAqbU93bmlu Z1N0cmluZzsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNlX3R5cGUKICAgICAgc2l6ZV9mb3J3 YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbUZyYWdtZW50Lm1FbmQgLSBt UG9zaXRpb247CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIHNpemVfYmFj a3dhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb24gLSBtRnJh Z21lbnQubVN0YXJ0OwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYK ICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICAgIHsKICAgICAgICAgIHdo aWxlICggbiA+IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl IG9uZV9ob3AgPSBOU19NSU4obiwgc2l6ZV9mb3J3YXJkKCkpOwoKICAgICAgICAgICAgICA7CgoK ICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBub3JtYWxp emVfZm9yd2FyZCgpOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAgICAgfQoK ICAgICAgICAgIHdoaWxlICggbiA8IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbm9y bWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9uZV9ob3Ag PSBOU19NQVgobiwgLXNpemVfYmFja3dhcmQoKSk7CgogICAgICAgICAgICAgIDsKCgogICAgICAg ICAgICAgIG1Qb3NpdGlvbiArPSBvbmVfaG9wOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsK ICAgICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBQ UlVpbnQzMgogICAgICB3cml0ZSggY29uc3QgdmFsdWVfdHlwZSogcywgUFJVaW50MzIgbiApCiAg ICAgICAgewogICAgICAgICAgOwoKICAgICAgICAgIG4gPSBOU19NSU4obiwgUFJVaW50MzIoc2l6 ZV9mb3J3YXJkKCkpKTsKICAgICAgICAgIG5zQ2hhclRyYWl0czx2YWx1ZV90eXBlPjo6bW92ZSht UG9zaXRpb24sIHMsIG4pOwogICAgICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBlKG4pICk7 CiAgICAgICAgICByZXR1cm4gbjsKICAgICAgICB9CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBDaGFy VD4KaW5saW5lCnZvaWQKbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+Ojpub3JtYWxpemVfZm9yd2Fy ZCgpCiAgewogICAgd2hpbGUgKCBtUG9zaXRpb24gPT0gbUZyYWdtZW50Lm1FbmQKICAgICAgICAg JiYgbU93bmluZ1N0cmluZy0+R2V0UmVhZGFibGVGcmFnbWVudChtRnJhZ21lbnQsIGtOZXh0RnJh Z21lbnQpICkKICAgICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQubVN0YXJ0OwogIH0KCnRlbXBs YXRlIDxjbGFzcyBDaGFyVD4KaW5saW5lCnZvaWQKbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+Ojpu b3JtYWxpemVfYmFja3dhcmQoKQogIHsKICAgIHdoaWxlICggbVBvc2l0aW9uID09IG1GcmFnbWVu dC5tU3RhcnQKICAgICAgICAgJiYgbU93bmluZ1N0cmluZy0+R2V0UmVhZGFibGVGcmFnbWVudCht RnJhZ21lbnQsIGtQcmV2RnJhZ21lbnQpICkKICAgICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQu bUVuZDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3I9 PSggY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zUmVhZGluZ0l0 ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpID09IHJocy5nZXQo KTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSgg Y29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zUmVhZGluZ0l0ZXJh dG9yPENoYXJUPiYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpICE9IHJocy5nZXQoKTsK ICB9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KaW5saW5lCnZvaWQKbnNXcml0aW5nSXRl cmF0b3I8Q2hhclQ+Ojpub3JtYWxpemVfZm9yd2FyZCgpCiAgewogICAgd2hpbGUgKCBtUG9zaXRp b24gPT0gbUZyYWdtZW50Lm1FbmQKICAgICAgICAgJiYgbU93bmluZ1N0cmluZy0+R2V0V3JpdGFi bGVGcmFnbWVudChtRnJhZ21lbnQsIGtOZXh0RnJhZ21lbnQpICkKICAgICAgbVBvc2l0aW9uID0g bUZyYWdtZW50Lm1TdGFydDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lk Cm5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2JhY2t3YXJkKCkKICB7CiAgICB3 aGlsZSAoIG1Qb3NpdGlvbiA9PSBtRnJhZ21lbnQubVN0YXJ0CiAgICAgICAgICYmIG1Pd25pbmdT dHJpbmctPkdldFdyaXRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrUHJldkZyYWdtZW50KSApCiAg ICAgIG1Qb3NpdGlvbiA9IG1GcmFnbWVudC5tRW5kOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBDaGFy VD4KaW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc1dyaXRpbmdJdGVyYXRvcjxDaGFy VD4mIGxocywgY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+JiByaHMgKQogIHsKICAgIHJl dHVybiBsaHMuZ2V0KCkgPT0gcmhzLmdldCgpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4K aW5saW5lClBSQm9vbApvcGVyYXRvciE9KCBjb25zdCBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4m IGxocywgY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+JiByaHMgKQogIHsKICAgIHJldHVy biBsaHMuZ2V0KCkgIT0gcmhzLmdldCgpOwogIH0KIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3N0cmluZy9uc0FTdHJpbmcuaCIgMgoKCgoKCgpjbGFzcyBuc1N0cmluZ0NvbXBhcmF0b3IKICB7 CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGNoYXJfdHlwZTsKCiAgICAgIHZp cnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IGNoYXJfdHlwZSosIGNvbnN0IGNoYXJfdHlwZSos IFBSVWludDMyIGFMZW5ndGggKSBjb25zdCA9IDA7CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9y KCkoIGNoYXJfdHlwZSwgY2hhcl90eXBlICkgY29uc3QgPSAwOwogIH07CgpjbGFzcyBuc0RlZmF1 bHRTdHJpbmdDb21wYXJhdG9yCiAgICA6IHB1YmxpYyBuc1N0cmluZ0NvbXBhcmF0b3IKICB7CiAg ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IGNoYXJfdHlwZSos IGNvbnN0IGNoYXJfdHlwZSosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdDsKICAgICAgdmlydHVh bCBpbnQgb3BlcmF0b3IoKSAoIGNoYXJfdHlwZSwgY2hhcl90eXBlICkgY29uc3Q7CiAgfTsKCgoK CgoKY2xhc3MgbnNDU3RyaW5nQ29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl ZiBjaGFyIGNoYXJfdHlwZTsKCiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IGNo YXJfdHlwZSosIGNvbnN0IGNoYXJfdHlwZSosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdCA9IDA7 CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkgKCBjaGFyX3R5cGUsIGNoYXJfdHlwZSApIGNv bnN0ID0gMDsKICB9OwoKY2xhc3MgbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IKICAgIDogcHVi bGljIG5zQ1N0cmluZ0NvbXBhcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgaW50 IG9wZXJhdG9yKCkoIGNvbnN0IGNoYXJfdHlwZSosIGNvbnN0IGNoYXJfdHlwZSosIFBSVWludDMy IGFMZW5ndGggKSBjb25zdDsKICAgICAgdmlydHVhbCBpbnQgb3BlcmF0b3IoKSggY2hhcl90eXBl LCBjaGFyX3R5cGUgKSBjb25zdDsKICB9OwojIDk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry aW5nL25zQVN0cmluZy5oIgpjbGFzcyBuc0FTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5 cGVkZWYgUFJVbmljaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGluY29tcGF0aWJs ZV9jaGFyX3R5cGU7CgogICAgICB0eXBlZGVmIG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4gYnVm ZmVyX2hhbmRsZV90eXBlOwogICAgICB0eXBlZGVmIG5zQ29uc3RCdWZmZXJIYW5kbGU8Y2hhcl90 eXBlPiBjb25zdF9idWZmZXJfaGFuZGxlX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNTaGFyZWRCdWZm ZXJIYW5kbGU8Y2hhcl90eXBlPiBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlOwoKICAgICAgdHlw ZWRlZiBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiBjb25zdF9mcmFnbWVudF90eXBlOwog ICAgICB0eXBlZGVmIG5zV3JpdGFibGVGcmFnbWVudDxjaGFyX3R5cGU+IGZyYWdtZW50X3R5cGU7 CgogICAgICB0eXBlZGVmIG5zQVN0cmluZyBzZWxmX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU3Ry aW5nIGFic3RyYWN0X3N0cmluZ190eXBlOwoKICAgICAgdHlwZWRlZiBuc1JlYWRpbmdJdGVyYXRv cjxjaGFyX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIG5zV3JpdGluZ0l0ZXJh dG9yPGNoYXJfdHlwZT4gaXRlcmF0b3I7CgogICAgICB0eXBlZGVmIFBSVWludDMyIHNpemVfdHlw ZTsKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBpbmRleF90eXBlOwoKCiAgICBwdWJsaWM6CgoKICAg ICAgdmlydHVhbCB+bnNBU3RyaW5nKCkgeyB9CgogICAgICBlbnVtIHsKICAgICAgICBrSGFzU3Rh Y2tCdWZmZXIgPSAweDAwMDAwMDAxCgoKCgogICAgICB9OwogICAgICB2aXJ0dWFsIFBSVWludDMy IEdldEltcGxlbWVudGF0aW9uRmxhZ3MoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgYnVm ZmVyX2hhbmRsZV90eXBlKiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1 YWwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAg ICAgdmlydHVhbCBjb25zdCBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRTaGFyZWRCdWZm ZXJIYW5kbGUoKSBjb25zdDsKIyAxNDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNB U3RyaW5nLmgiCiAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvciYgQmVnaW5SZWFkaW5nKCBjb25z dF9pdGVyYXRvciYgKSBjb25zdDsKICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yJiBFbmRSZWFk aW5nKCBjb25zdF9pdGVyYXRvciYgKSBjb25zdDsKCiAgICAgIGlubGluZSBpdGVyYXRvciYgQmVn aW5Xcml0aW5nKCBpdGVyYXRvciYgKTsKICAgICAgaW5saW5lIGl0ZXJhdG9yJiBFbmRXcml0aW5n KCBpdGVyYXRvciYgKTsKCiAgICAgIHZpcnR1YWwgc2l6ZV90eXBlIExlbmd0aCgpIGNvbnN0ID0g MDsKICAgICAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7IHJldHVybiBMZW5ndGgoKSA9PSAwOyB9 CgogICAgICBpbmxpbmUgUFJCb29sIEVxdWFscyggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUm LCBjb25zdCBuc1N0cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRvcigp ICkgY29uc3Q7CiAgICAgIFBSQm9vbCBFcXVhbHMoIGNvbnN0IGNoYXJfdHlwZSosIGNvbnN0IG5z U3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRTdHJpbmdDb21wYXJhdG9yKCkgKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgUFJCb29sIElzVm9pZCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQg U2V0SXNWb2lkKCBQUkJvb2wgKTsKIyAxNzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcv bnNBU3RyaW5nLmgiCiAgICAgIGNoYXJfdHlwZSBGaXJzdCgpIGNvbnN0OwogICAgICBjaGFyX3R5 cGUgTGFzdCgpIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlIENvdW50Q2hhciggY2hhcl90eXBlICkg Y29uc3Q7CgoKCgogICAgICBQUkludDMyIEZpbmRDaGFyKCBjaGFyX3R5cGUsIGluZGV4X3R5cGUg YU9mZnNldCA9IDAgKSBjb25zdDsKIyAxOTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcv bnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9pZCBTZXRDYXBhY2l0eSggc2l6ZV90eXBlICkg eyB9CiMgMjE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0cmluZy5oIgogICAg ICB2aXJ0dWFsIHZvaWQgU2V0TGVuZ3RoKCBzaXplX3R5cGUgKSB7IH0KCgogICAgICB2b2lkCiAg ICAgIFRydW5jYXRlKCBzaXplX3R5cGUgYU5ld0xlbmd0aD0wICkKICAgICAgICB7CiAgICAgICAg ICA7CgoKICAgICAgICAgIFNldExlbmd0aChhTmV3TGVuZ3RoKTsKICAgICAgICB9CiMgMjU4ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0cmluZy5oIgogICAgICB2b2lkIEFzc2ln biggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IGRvX0Fzc2lnbkZyb21SZWFkYWJsZShh UmVhZGFibGUpOyB9CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7 IGFQdHIgPyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0cihhUHRyKSA6IFNldExlbmd0aCgwKTsgfQog ICAgICB2b2lkIEFzc2lnbiggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBzaXplX3R5cGUgYUxlbmd0 aCApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYUxlbmd0aCk7IH0KICAg ICAgdm9pZCBBc3NpZ24oIGNoYXJfdHlwZSBhQ2hhciApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnQo YUNoYXIpOyB9CgoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlwZSYg YVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogICAgICBz ZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBc3NpZ24oYVB0 cik7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY2hhcl90eXBl IGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgoKCiAgICAgIHZv aWQgQXBwZW5kKCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgZG9fQXBwZW5kRnJvbVJl YWRhYmxlKGFSZWFkYWJsZSk7IH0KICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSog YVB0ciApIHsgaWYgKGFQdHIpIGRvX0FwcGVuZEZyb21FbGVtZW50UHRyKGFQdHIpOyB9CiAgICAg IHZvaWQgQXBwZW5kKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkg eyBkb19BcHBlbmRGcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2 b2lkIEFwcGVuZCggY2hhcl90eXBlIGFDaGFyICkgeyBkb19BcHBlbmRGcm9tRWxlbWVudChhQ2hh cik7IH0KCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY29uc3Qgc2VsZl90eXBlJiBhUmVh ZGFibGUgKSB7IEFwcGVuZChhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90 eXBlJiBvcGVyYXRvcis9KCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IEFwcGVuZChhUHRyKTsg cmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY2hhcl90eXBlIGFD aGFyICkgeyBBcHBlbmQoYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KIyAyOTUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiCiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBz ZWxmX3R5cGUmIGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBkb19JbnNlcnRG cm9tUmVhZGFibGUoYVJlYWRhYmxlLCBhdFBvc2l0aW9uKTsgfQogICAgICB2b2lkIEluc2VydCgg Y29uc3QgY2hhcl90eXBlKiBhUHRyLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGlmIChhUHRy KSBkb19JbnNlcnRGcm9tRWxlbWVudFB0cihhUHRyLCBhdFBvc2l0aW9uKTsgfQogICAgICB2b2lk IEluc2VydCggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBpbmRleF90eXBlIGF0UG9zaXRpb24sIHNp emVfdHlwZSBhTGVuZ3RoICkgeyBkb19JbnNlcnRGcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBh dFBvc2l0aW9uLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEluc2VydCggY2hhcl90eXBlIGFDaGFy LCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGRvX0luc2VydEZyb21FbGVtZW50KGFDaGFyLCBh dFBvc2l0aW9uKTsgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQgQ3V0KCBpbmRleF90eXBlIGN1dFN0 YXJ0LCBzaXplX3R5cGUgY3V0TGVuZ3RoICk7CgoKCiAgICAgIHZvaWQgUmVwbGFjZSggaW5kZXhf dHlwZSBjdXRTdGFydCwgc2l6ZV90eXBlIGN1dExlbmd0aCwgY29uc3Qgc2VsZl90eXBlJiBhUmVh ZGFibGUgKSB7IGRvX1JlcGxhY2VGcm9tUmVhZGFibGUoY3V0U3RhcnQsIGN1dExlbmd0aCwgYVJl YWRhYmxlKTsgfQoKICAgIHByaXZhdGU6CgogICAgICBpbmRleF90eXBlIENvdW50Q2hhciggaW5j b21wYXRpYmxlX2NoYXJfdHlwZSApIGNvbnN0OwogICAgICB2b2lkIG9wZXJhdG9yPSAoIGluY29t cGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBBc3NpZ24gKCBpbmNvbXBhdGlibGVfY2hh cl90eXBlICk7CiAgICAgIHZvaWQgb3BlcmF0b3IrPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUg KTsKICAgICAgdm9pZCBBcHBlbmQgKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZv aWQgSW5zZXJ0ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSwgaW5kZXhfdHlwZSApOwoKCiAgICBw cm90ZWN0ZWQ6CiAgICAgICAgICAgICAgdm9pZCBVbmNoZWNrZWRBc3NpZ25Gcm9tUmVhZGFibGUo IGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21SZWFk YWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJv bUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fz c2lnbkZyb21FbGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsK ICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAg ICAgICAgICAgICAgdm9pZCBVbmNoZWNrZWRBcHBlbmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZf dHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21SZWFkYWJsZSggY29uc3Qg c2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIo IGNvbnN0IGNoYXJfdHlwZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21FbGVt ZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsKICAgICAgdmlydHVh bCB2b2lkIGRvX0FwcGVuZEZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAgICAgICAgICAgICAg dm9pZCBVbmNoZWNrZWRJbnNlcnRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYsIGluZGV4 X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21SZWFkYWJsZSggY29uc3Qg c2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJv bUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUgKTsKICAgICAgdmlydHVh bCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBp bmRleF90eXBlLCBzaXplX3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21F bGVtZW50KCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgKTsKCiAgICAgICAgICAgICAgdm9pZCBVbmNo ZWNrZWRSZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXplX3R5cGUsIGNvbnN0IHNl bGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX1JlcGxhY2VGcm9tUmVhZGFibGUoIGlu ZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwoKCgogICAgcHVibGljOgog ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFnbWVudCggY29uc3Rf ZnJhZ21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiA9IDAgKSBjb25zdCA9 IDA7CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBmcmFnbWVu dF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApID0gMDsKCiAgICAgIFBS Qm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzZWxmX3R5cGUmIGFTdHJpbmcgKSBjb25zdDsKICB9 OwoKCgoKCmNsYXNzIG5zQUNTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgY2hh ciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5 cGU7CgogICAgICB0eXBlZGVmIG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4gYnVmZmVyX2hhbmRs ZV90eXBlOwogICAgICB0eXBlZGVmIG5zQ29uc3RCdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiBjb25z dF9idWZmZXJfaGFuZGxlX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNTaGFyZWRCdWZmZXJIYW5kbGU8 Y2hhcl90eXBlPiBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlOwoKICAgICAgdHlwZWRlZiBuc1Jl YWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiBjb25zdF9mcmFnbWVudF90eXBlOwogICAgICB0eXBl ZGVmIG5zV3JpdGFibGVGcmFnbWVudDxjaGFyX3R5cGU+IGZyYWdtZW50X3R5cGU7CgogICAgICB0 eXBlZGVmIG5zQUNTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQUNTdHJpbmcgYWJz dHJhY3Rfc3RyaW5nX3R5cGU7CgogICAgICB0eXBlZGVmIG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXJf dHlwZT4gY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgbnNXcml0aW5nSXRlcmF0b3I8Y2hh cl90eXBlPiBpdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgUFJVaW50MzIgc2l6ZV90eXBlOwogICAg ICB0eXBlZGVmIFBSVWludDMyIGluZGV4X3R5cGU7CgoKCgoKCiAgICAgIHZpcnR1YWwgfm5zQUNT dHJpbmcoKSB7IH0KCiAgICAgIGVudW0gewogICAgICAgIGtIYXNTdGFja0J1ZmZlciA9IDB4MDAw MDAwMDEKCgoKCiAgICAgIH07CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgR2V0SW1wbGVtZW50YXRp b25GbGFncygpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxlX3R5cGUq IEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJf aGFuZGxlX3R5cGUqIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0 IHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0 OwojIDQwMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0FTdHJpbmcuaCIKICAgICAg aW5saW5lIGNvbnN0X2l0ZXJhdG9yJiBCZWdpblJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiApIGNv bnN0OwogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3ImIEVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJh dG9yJiApIGNvbnN0OwoKICAgICAgaW5saW5lIGl0ZXJhdG9yJiBCZWdpbldyaXRpbmcoIGl0ZXJh dG9yJiApOwogICAgICBpbmxpbmUgaXRlcmF0b3ImIEVuZFdyaXRpbmcoIGl0ZXJhdG9yJiApOwoK ICAgICAgdmlydHVhbCBzaXplX3R5cGUgTGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICBQUkJvb2wg SXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIExlbmd0aCgpID09IDA7IH0KCiAgICAgIGlubGluZSBQ UkJvb2wgRXF1YWxzKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYsIGNvbnN0IG5zQ1N0cmlu Z0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IoKSApIGNvbnN0OwogICAg ICBQUkJvb2wgRXF1YWxzKCBjb25zdCBjaGFyX3R5cGUqLCBjb25zdCBuc0NTdHJpbmdDb21wYXJh dG9yJiA9IG5zRGVmYXVsdENTdHJpbmdDb21wYXJhdG9yKCkgKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgUFJCb29sIElzVm9pZCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgU2V0SXNWb2lkKCBQ UkJvb2wgKTsKIyA0MzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgi CiAgICAgIGNoYXJfdHlwZSBGaXJzdCgpIGNvbnN0OwogICAgICBjaGFyX3R5cGUgTGFzdCgpIGNv bnN0OwoKICAgICAgc2l6ZV90eXBlIENvdW50Q2hhciggY2hhcl90eXBlICkgY29uc3Q7CgoKCiAg ICAgIFBSSW50MzIgRmluZENoYXIoIGNoYXJfdHlwZSwgaW5kZXhfdHlwZSBhT2Zmc2V0ID0gMCAp IGNvbnN0OwojIDQ1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0FTdHJpbmcuaCIK ICAgICAgdmlydHVhbCB2b2lkIFNldENhcGFjaXR5KCBzaXplX3R5cGUgKSB7IH0KIyA0NzMgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9p ZCBTZXRMZW5ndGgoIHNpemVfdHlwZSApIHsgfQoKCiAgICAgIHZvaWQKICAgICAgVHJ1bmNhdGUo IHNpemVfdHlwZSBhTmV3TGVuZ3RoPTAgKQogICAgICAgIHsKICAgICAgICAgIDsKCgogICAgICAg ICAgU2V0TGVuZ3RoKGFOZXdMZW5ndGgpOwogICAgICAgIH0KIyA1MTIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiCiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBzZWxm X3R5cGUmIGFSZWFkYWJsZSApIHsgZG9fQXNzaWduRnJvbVJlYWRhYmxlKGFSZWFkYWJsZSk7IH0K ICAgICAgdm9pZCBBc3NpZ24oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgYVB0ciA/IGRvX0Fz c2lnbkZyb21FbGVtZW50UHRyKGFQdHIpIDogU2V0TGVuZ3RoKDApOyB9CiAgICAgIHZvaWQgQXNz aWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19Bc3Np Z25Gcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEFzc2ln biggY2hhcl90eXBlIGFDaGFyICkgeyBkb19Bc3NpZ25Gcm9tRWxlbWVudChhQ2hhcik7IH0KCgog ICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7 IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHNlbGZfdHlwZSYgb3Bl cmF0b3I9KCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0 aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFz c2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQoKCgoKCgoKICAgICAgdm9pZCBBcHBlbmQoIGNv bnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBkb19BcHBlbmRGcm9tUmVhZGFibGUoYVJlYWRh YmxlKTsgfQogICAgICB2b2lkIEFwcGVuZCggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBpZiAo YVB0cikgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIoYVB0cik7IH0KICAgICAgdm9pZCBBcHBlbmQo IGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgc2l6ZV90eXBlIGFMZW5ndGggKSB7IGRvX0FwcGVuZEZy b21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIHZvaWQgQXBwZW5kKCBj aGFyX3R5cGUgYUNoYXIgKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50KGFDaGFyKTsgfQoKICAgICAg c2VsZl90eXBlJiBvcGVyYXRvcis9KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBw ZW5kKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9y Kz0oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgQXBwZW5kKGFQdHIpOyByZXR1cm4gKnRoaXM7 IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFwcGVu ZChhQ2hhcik7IHJldHVybiAqdGhpczsgfQojIDU0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0 cmluZy9uc0FTdHJpbmcuaCIKICAgICAgdm9pZCBJbnNlcnQoIGNvbnN0IHNlbGZfdHlwZSYgYVJl YWRhYmxlLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGRvX0luc2VydEZyb21SZWFkYWJsZShh UmVhZGFibGUsIGF0UG9zaXRpb24pOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFyX3R5 cGUqIGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApIHsgaWYgKGFQdHIpIGRvX0luc2VydEZy b21FbGVtZW50UHRyKGFQdHIsIGF0UG9zaXRpb24pOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25z dCBjaGFyX3R5cGUqIGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiwgc2l6ZV90eXBlIGFMZW5n dGggKSB7IGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGF0UG9zaXRpb24sIGFM ZW5ndGgpOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjaGFyX3R5cGUgYUNoYXIsIGluZGV4X3R5cGUg YXRQb3NpdGlvbiApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoYUNoYXIsIGF0UG9zaXRpb24pOyB9 CgoKCiAgICAgIHZpcnR1YWwgdm9pZCBDdXQoIGluZGV4X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlw ZSBjdXRMZW5ndGggKTsKCgoKICAgICAgdm9pZCBSZXBsYWNlKCBpbmRleF90eXBlIGN1dFN0YXJ0 LCBzaXplX3R5cGUgY3V0TGVuZ3RoLCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgZG9f UmVwbGFjZUZyb21SZWFkYWJsZShjdXRTdGFydCwgY3V0TGVuZ3RoLCBhUmVhZGFibGUpOyB9Cgog ICAgcHJpdmF0ZToKCiAgICAgIGluZGV4X3R5cGUgQ291bnRDaGFyKCBpbmNvbXBhdGlibGVfY2hh cl90eXBlICkgY29uc3Q7CiAgICAgIHZvaWQgb3BlcmF0b3I9ICggaW5jb21wYXRpYmxlX2NoYXJf dHlwZSApOwogICAgICB2b2lkIEFzc2lnbiAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAg ICAgdm9pZCBvcGVyYXRvcis9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lk IEFwcGVuZCAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBJbnNlcnQgKCBp bmNvbXBhdGlibGVfY2hhcl90eXBlLCBpbmRleF90eXBlICk7CgoKICAgIHByb3RlY3RlZDoKICAg ICAgICAgICAgICB2b2lkIFVuY2hlY2tlZEFzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90 eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbVJlYWRhYmxlKCBjb25zdCBz ZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0cigg Y29uc3QgY2hhcl90eXBlKiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1l bnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIHNpemVfdHlwZSApOwogICAgICB2aXJ0dWFs IHZvaWQgZG9fQXNzaWduRnJvbUVsZW1lbnQoIGNoYXJfdHlwZSApOwoKICAgICAgICAgICAgICB2 b2lkIFVuY2hlY2tlZEFwcGVuZEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAg ICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7 CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90 eXBlKiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHJMZW5ndGgo IGNvbnN0IGNoYXJfdHlwZSosIHNpemVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBw ZW5kRnJvbUVsZW1lbnQoIGNoYXJfdHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIFVuY2hlY2tl ZEluc2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAg ICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBp bmRleF90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudFB0cigg Y29uc3QgY2hhcl90eXBlKiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5z ZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUsIHNp emVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoIGNoYXJf dHlwZSwgaW5kZXhfdHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIFVuY2hlY2tlZFJlcGxhY2VG cm9tUmVhZGFibGUoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwog ICAgICB2aXJ0dWFsIHZvaWQgZG9fUmVwbGFjZUZyb21SZWFkYWJsZSggaW5kZXhfdHlwZSwgc2l6 ZV90eXBlLCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBjb25zdF9mcmFnbWVudF90eXBl JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApIGNvbnN0ID0gMDsKICAgICAgdmly dHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50X3R5cGUmLCBuc0Zy YWdtZW50UmVxdWVzdCwgUFJVaW50MzIgPSAwICkgPSAwOwoKICAgICAgUFJCb29sIElzRGVwZW5k ZW50T24oIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhU3RyaW5nICkgY29uc3Q7CiAgfTsK CgoKCmlubGluZQpuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FTdHJpbmc6OkJlZ2luUmVh ZGluZyggY29uc3RfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogIHsKICAgIGFSZXN1bHQubU93 bmluZ1N0cmluZyA9IHRoaXM7CiAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGFSZXN1bHQubUZyYWdt ZW50LCBrRmlyc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZy YWdtZW50Lm1TdGFydDsKICAgIGFSZXN1bHQubm9ybWFsaXplX2ZvcndhcmQoKTsKICAgIHJldHVy biBhUmVzdWx0OwogIH0KCmlubGluZQpuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FTdHJp bmc6OkVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBh UmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVz dWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFS ZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKaW5saW5lCm5z QVN0cmluZzo6aXRlcmF0b3ImCm5zQVN0cmluZzo6QmVnaW5Xcml0aW5nKCBpdGVyYXRvciYgYVJl c3VsdCApCiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRh YmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtGaXJzdEZyYWdtZW50KTsKICAgIGFSZXN1 bHQubVBvc2l0aW9uID0gYVJlc3VsdC5tRnJhZ21lbnQubVN0YXJ0OwogICAgYVJlc3VsdC5ub3Jt YWxpemVfZm9yd2FyZCgpOwogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKCmlubGluZQpuc0FTdHJp bmc6Oml0ZXJhdG9yJgpuc0FTdHJpbmc6OkVuZFdyaXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0ICkK ICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFibGVGcmFn bWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3Np dGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoK IGludCBDb21wYXJlKCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMs IGNvbnN0IG5zU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRTdHJpbmdDb21wYXJhdG9yKCkg KTsKCmlubGluZQpQUkJvb2wKbnNBU3RyaW5nOjpFcXVhbHMoIGNvbnN0IGFic3RyYWN0X3N0cmlu Z190eXBlJiByaHMsIGNvbnN0IG5zU3RyaW5nQ29tcGFyYXRvciYgYUNvbXBhcmF0b3IgKSBjb25z dAogIHsKICAgIHJldHVybiBMZW5ndGgoKT09cmhzLkxlbmd0aCgpICYmIENvbXBhcmUoKnRoaXMs IHJocywgYUNvbXBhcmF0b3IpPT0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29u c3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4g IWxocy5FcXVhbHMocmhzKTsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPCAoIGNvbnN0IG5z QVN0cmluZyYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBh cmUobGhzLCByaHMpPCAwOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I8PSggY29uc3QgbnNB U3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFy ZShsaHMsIHJocyk8PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc0FT dHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBsaHMuRXF1 YWxzKHJocyk7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj49KCBjb25zdCBuc0FTdHJpbmcm IGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywg cmhzKT49MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPiAoIGNvbnN0IG5zQVN0cmluZyYg bGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCBy aHMpPiAwOwogIH0KCgoKCgoKaW5saW5lCm5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FD U3RyaW5nOjpCZWdpblJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7 CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVu dChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRp b24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3 YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsKICB9CgppbmxpbmUKbnNBQ1N0cmluZzo6Y29uc3Rf aXRlcmF0b3ImCm5zQUNTdHJpbmc6OkVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0 ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVh ZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVz dWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1 bHQ7CiAgfQoKaW5saW5lCm5zQUNTdHJpbmc6Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpCZWdpbldy aXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0ICkKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcg PSB0aGlzOwogICAgR2V0V3JpdGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0 RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3Rh cnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsK ICB9CgoKaW5saW5lCm5zQUNTdHJpbmc6Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpFbmRXcml0aW5n KCBpdGVyYXRvciYgYVJlc3VsdCApCiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhp czsKICAgIEdldFdyaXRhYmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21l bnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAg IHJldHVybiBhUmVzdWx0OwogIH0KCgpjbGFzcyBuc0Nhc2VJbnNlbnNpdGl2ZUNTdHJpbmdDb21w YXJhdG9yCiAgICA6IHB1YmxpYyBuc0NTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgog ICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBjaGFyX3R5cGUqLCBjb25zdCBjaGFy X3R5cGUqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgaW50IG9wZXJh dG9yKCkoIGNoYXJfdHlwZSwgY2hhcl90eXBlICkgY29uc3Q7CiAgfTsKCiBpbnQgQ29tcGFyZSgg Y29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMsIGNvbnN0IG5zQ1N0 cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IoKSApOwoKaW5saW5l ClBSQm9vbApuc0FDU3RyaW5nOjpFcXVhbHMoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBy aHMsIGNvbnN0IG5zQ1N0cmluZ0NvbXBhcmF0b3ImIGFDb21wYXJhdG9yICkgY29uc3QKICB7CiAg ICByZXR1cm4gTGVuZ3RoKCk9PXJocy5MZW5ndGgoKSAmJiBDb21wYXJlKCp0aGlzLCByaHMsIGFD b21wYXJhdG9yKT09MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yIT0oIGNvbnN0IG5zQUNT dHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gIWxocy5F cXVhbHMocmhzKTsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPCAoIGNvbnN0IG5zQUNTdHJp bmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShs aHMsIHJocyk8IDA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcjw9KCBjb25zdCBuc0FDU3Ry aW5nJiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUo bGhzLCByaHMpPD0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNBQ1N0 cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBsaHMuRXF1 YWxzKHJocyk7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj49KCBjb25zdCBuc0FDU3RyaW5n JiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhz LCByaHMpPj0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I+ICggY29uc3QgbnNBQ1N0cmlu ZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxo cywgcmhzKT4gMDsKICB9CgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNE ZXBlbmRlbnRDb25jYXRlbmF0aW9uLmgiIDEKIyA1MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0 cmluZy9uc0RlcGVuZGVudENvbmNhdGVuYXRpb24uaCIKY2xhc3MgbnNEZXBlbmRlbnRDb25jYXRl bmF0aW9uCiAgICA6IHB1YmxpYyBuc0FTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVk ZWYgbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uIHNlbGZfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBjb25zdF9m cmFnbWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAg IHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBmcmFnbWVudF90eXBlJiwg bnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgeyByZXR1cm4gMDsgfQoKICAgICAgZW51bSB7 IGtGaXJzdFN0cmluZywga0xhc3RTdHJpbmcgfTsKCiAgICAgIGludAogICAgICBHZXRDdXJyZW50 U3RyaW5nRnJvbUZyYWdtZW50KCBjb25zdCBjb25zdF9mcmFnbWVudF90eXBlJiBhRnJhZ21lbnQg KSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAoYUZyYWdtZW50LkdldElEQXNJbnQo KSAmIG1GcmFnbWVudElkZW50aWZpZXJNYXNrKSA/IGtMYXN0U3RyaW5nIDoga0ZpcnN0U3RyaW5n OwogICAgICAgIH0KCiAgICAgIGludAogICAgICBTZXRGaXJzdFN0cmluZ0luRnJhZ21lbnQoIGNv bnN0X2ZyYWdtZW50X3R5cGUmIGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAg YUZyYWdtZW50LlNldElEKGFGcmFnbWVudC5HZXRJREFzSW50KCkgJiB+bUZyYWdtZW50SWRlbnRp Zmllck1hc2spOwogICAgICAgICAgcmV0dXJuIGtGaXJzdFN0cmluZzsKICAgICAgICB9CgogICAg ICBpbnQKICAgICAgU2V0TGFzdFN0cmluZ0luRnJhZ21lbnQoIGNvbnN0X2ZyYWdtZW50X3R5cGUm IGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgYUZyYWdtZW50LlNldElEKGFG cmFnbWVudC5HZXRJREFzSW50KCkgfCBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAg ICByZXR1cm4ga0xhc3RTdHJpbmc7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgbnNEZXBl bmRlbnRDb25jYXRlbmF0aW9uKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUZpcnN0U3Ry aW5nLCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUxhc3RTdHJpbmcsIFBSVWludDMyIGFN YXNrID0gMSApCiAgICAgICAgICA6IG1GcmFnbWVudElkZW50aWZpZXJNYXNrKGFNYXNrKQogICAg ICAgIHsKICAgICAgICAgIG1TdHJpbmdzW2tGaXJzdFN0cmluZ10gPSAmYUZpcnN0U3RyaW5nOwog ICAgICAgICAgbVN0cmluZ3Nba0xhc3RTdHJpbmddID0gJmFMYXN0U3RyaW5nOwogICAgICAgIH0K CiAgICAgIG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbiggY29uc3Qgc2VsZl90eXBlJiBhRmlyc3RT dHJpbmcsIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhTGFzdFN0cmluZyApCiAgICAgICAg ICA6IG1GcmFnbWVudElkZW50aWZpZXJNYXNrKGFGaXJzdFN0cmluZy5tRnJhZ21lbnRJZGVudGlm aWVyTWFzazw8MSkKICAgICAgICB7CiAgICAgICAgICBtU3RyaW5nc1trRmlyc3RTdHJpbmddID0g JmFGaXJzdFN0cmluZzsKICAgICAgICAgIG1TdHJpbmdzW2tMYXN0U3RyaW5nXSA9ICZhTGFzdFN0 cmluZzsKICAgICAgICB9CgoKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBj b25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVibGljOgoKICAgICAgdmlydHVhbCBQUlVpbnQzMiBM ZW5ndGgoKSBjb25zdDsKCgoKCiAgICAgIFBSVWludDMyIEdldEZyYWdtZW50SWRlbnRpZmllck1h c2soKSBjb25zdCB7IHJldHVybiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzazsgfQoKICAgIHByaXZh dGU6CiAgICAgIHZvaWQgb3BlcmF0b3IrKCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBwcml2 YXRlOgogICAgICBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSogbVN0cmluZ3NbMl07CiAgICAg IFBSVWludDMyIG1GcmFnbWVudElkZW50aWZpZXJNYXNrOwogIH07CgpjbGFzcyBuc0RlcGVuZGVu dENDb25jYXRlbmF0aW9uCiAgICA6IHB1YmxpYyBuc0FDU3RyaW5nCiAgewogICAgcHVibGljOgog ICAgICB0eXBlZGVmIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24gc2VsZl90eXBlOwoKICAgIHBy b3RlY3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21l bnQoIGNvbnN0X2ZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBj b25zdDsKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdt ZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9Cgog ICAgICBlbnVtIHsga0ZpcnN0U3RyaW5nLCBrTGFzdFN0cmluZyB9OwoKICAgICAgaW50CiAgICAg IEdldEN1cnJlbnRTdHJpbmdGcm9tRnJhZ21lbnQoIGNvbnN0IGNvbnN0X2ZyYWdtZW50X3R5cGUm IGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIChhRnJhZ21lbnQu R2V0SURBc0ludCgpICYgbUZyYWdtZW50SWRlbnRpZmllck1hc2spID8ga0xhc3RTdHJpbmcgOiBr Rmlyc3RTdHJpbmc7CiAgICAgICAgfQoKICAgICAgaW50CiAgICAgIFNldEZpcnN0U3RyaW5nSW5G cmFnbWVudCggY29uc3RfZnJhZ21lbnRfdHlwZSYgYUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7 CiAgICAgICAgICBhRnJhZ21lbnQuU2V0SUQoYUZyYWdtZW50LkdldElEQXNJbnQoKSAmIH5tRnJh Z21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga0ZpcnN0U3RyaW5nOwogICAg ICAgIH0KCiAgICAgIGludAogICAgICBTZXRMYXN0U3RyaW5nSW5GcmFnbWVudCggY29uc3RfZnJh Z21lbnRfdHlwZSYgYUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBhRnJhZ21l bnQuU2V0SUQoYUZyYWdtZW50LkdldElEQXNJbnQoKSB8IG1GcmFnbWVudElkZW50aWZpZXJNYXNr KTsKICAgICAgICAgIHJldHVybiBrTGFzdFN0cmluZzsKICAgICAgICB9CgogICAgcHVibGljOgog ICAgICBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlw ZSYgYUZpcnN0U3RyaW5nLCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUxhc3RTdHJpbmcs IFBSVWludDMyIGFNYXNrID0gMSApCiAgICAgICAgICA6IG1GcmFnbWVudElkZW50aWZpZXJNYXNr KGFNYXNrKQogICAgICAgIHsKICAgICAgICAgIG1TdHJpbmdzW2tGaXJzdFN0cmluZ10gPSAmYUZp cnN0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nba0xhc3RTdHJpbmddID0gJmFMYXN0U3RyaW5n OwogICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24oIGNvbnN0IHNlbGZf dHlwZSYgYUZpcnN0U3RyaW5nLCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUxhc3RTdHJp bmcgKQogICAgICAgICAgOiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayhhRmlyc3RTdHJpbmcubUZy YWdtZW50SWRlbnRpZmllck1hc2s8PDEpCiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nba0Zp cnN0U3RyaW5nXSA9ICZhRmlyc3RTdHJpbmc7CiAgICAgICAgICBtU3RyaW5nc1trTGFzdFN0cmlu Z10gPSAmYUxhc3RTdHJpbmc7CiAgICAgICAgfQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lk IG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiApOwoKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1 YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CgoKCgogICAgICBQUlVpbnQzMiBHZXRGcmFnbWVu dElkZW50aWZpZXJNYXNrKCkgY29uc3QgeyByZXR1cm4gbUZyYWdtZW50SWRlbnRpZmllck1hc2s7 IH0KCiAgICBwcml2YXRlOgogICAgICB2b2lkIG9wZXJhdG9yKyggY29uc3Qgc2VsZl90eXBlJiAp OwoKCgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUqIG1TdHJp bmdzWzJdOwogICAgICBQUlVpbnQzMiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzazsKICB9OwojIDIx NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudENvbmNhdGVuYXRpb24u aCIKaW5saW5lCmNvbnN0IG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbgpvcGVyYXRvcisoIGNvbnN0 IG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbiYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAg ewogICAgcmV0dXJuIG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbihsaHMsIHJocywgbGhzLkdldEZy YWdtZW50SWRlbnRpZmllck1hc2soKTw8MSk7CiAgfQoKaW5saW5lCmNvbnN0IG5zRGVwZW5kZW50 Q0NvbmNhdGVuYXRpb24Kb3BlcmF0b3IrKCBjb25zdCBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9u JiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIG5zRGVwZW5kZW50 Q0NvbmNhdGVuYXRpb24obGhzLCByaHMsIGxocy5HZXRGcmFnbWVudElkZW50aWZpZXJNYXNrKCk8 PDEpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24Kb3BlcmF0b3Ir KCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJl dHVybiBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24obGhzLCByaHMpOwogIH0KCmlubGluZQpjb25z dCBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uCm9wZXJhdG9yKyggY29uc3QgbnNBQ1N0cmluZyYg bGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudEND b25jYXRlbmF0aW9uKGxocywgcmhzKTsKICB9CiMgODE2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv c3RyaW5nL25zQVN0cmluZy5oIiAyCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c1ZvaWRBcnJheS5oIiAyCgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKCnR5cGVkZWYgaW50ICgq IG5zVm9pZEFycmF5Q29tcGFyYXRvckZ1bmMpCiAgICAgICAgICAgIChjb25zdCB2b2lkKiBhRWxl bWVudDEsIGNvbnN0IHZvaWQqIGFFbGVtZW50Miwgdm9pZCogYURhdGEpOwoKCnR5cGVkZWYgUFJC b29sICgqIG5zVm9pZEFycmF5RW51bUZ1bmMpKHZvaWQqIGFFbGVtZW50LCB2b2lkICphRGF0YSk7 CgoKY2xhc3MgbnNWb2lkQXJyYXkgewpwdWJsaWM6CiAgbnNWb2lkQXJyYXkoKTsKICBuc1ZvaWRB cnJheShQUkludDMyIGFDb3VudCk7CiAgdmlydHVhbCB+bnNWb2lkQXJyYXkoKTsKCiAgbnNWb2lk QXJyYXkmIG9wZXJhdG9yPShjb25zdCBuc1ZvaWRBcnJheSYgb3RoZXIpOwoKCgoKCiAgaW5saW5l IFBSSW50MzIgQ291bnQoKSBjb25zdCB7CiAgICByZXR1cm4gbUltcGwgPyBtSW1wbC0+bUNvdW50 IDogMDsKICB9CgogIGlubGluZSBQUkludDMyIEdldEFycmF5U2l6ZSgpIGNvbnN0IHsKICAgIHJl dHVybiBtSW1wbCA/IChQUkludDMyKG1JbXBsLT5tQml0cykgJiBrQXJyYXlTaXplTWFzaykgOiAw OwogIH0KCiAgdm9pZCogRWxlbWVudEF0KFBSSW50MzIgYUluZGV4KSBjb25zdAogIHsKICAgIDsK ICAgIDsKCgoKICAgIGlmIChhSW5kZXggPj0gQ291bnQoKSkKICAgIHsKICAgICAgcmV0dXJuIDA7 CiAgICB9CiAgICByZXR1cm4gbUltcGwgPyBtSW1wbC0+bUFycmF5W2FJbmRleF0gOiAwOwogIH0K CgogIHZvaWQqIFNhZmVFbGVtZW50QXQoUFJJbnQzMiBhSW5kZXgpIGNvbnN0CiAgewogICAgaWYg KGFJbmRleCA8IDAgfHwgYUluZGV4ID49IENvdW50KCkpCiAgICB7CiAgICAgIHJldHVybiAwOwog ICAgfQogICAgcmV0dXJuIG1JbXBsID8gbUltcGwtPm1BcnJheVthSW5kZXhdIDogMDsKICB9Cgog IHZvaWQqIG9wZXJhdG9yW10oUFJJbnQzMiBhSW5kZXgpIGNvbnN0IHsgcmV0dXJuIEVsZW1lbnRB dChhSW5kZXgpOyB9CgogIFBSSW50MzIgSW5kZXhPZih2b2lkKiBhUG9zc2libGVFbGVtZW50KSBj b25zdDsKCiAgUFJCb29sIEluc2VydEVsZW1lbnRBdCh2b2lkKiBhRWxlbWVudCwgUFJJbnQzMiBh SW5kZXgpOwogIFBSQm9vbCBJbnNlcnRFbGVtZW50c0F0KGNvbnN0IG5zVm9pZEFycmF5ICZvdGhl ciwgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZUVsZW1lbnRBdCh2b2lkKiBhRWxl bWVudCwgUFJJbnQzMiBhSW5kZXgpOwoKCiAgUFJCb29sIE1vdmVFbGVtZW50KFBSSW50MzIgYUZy b20sIFBSSW50MzIgYVRvKTsKCiAgUFJCb29sIEFwcGVuZEVsZW1lbnQodm9pZCogYUVsZW1lbnQp IHsKICAgIHJldHVybiBJbnNlcnRFbGVtZW50QXQoYUVsZW1lbnQsIENvdW50KCkpOwogIH0KCiAg UFJCb29sIEFwcGVuZEVsZW1lbnRzKG5zVm9pZEFycmF5JiBhRWxlbWVudHMpIHsKICAgIHJldHVy biBJbnNlcnRFbGVtZW50c0F0KGFFbGVtZW50cywgQ291bnQoKSk7CiAgfQoKICBQUkJvb2wgUmVt b3ZlRWxlbWVudCh2b2lkKiBhRWxlbWVudCk7CiAgUFJCb29sIFJlbW92ZUVsZW1lbnRzQXQoUFJJ bnQzMiBhSW5kZXgsIFBSSW50MzIgYUNvdW50KTsKICBQUkJvb2wgUmVtb3ZlRWxlbWVudEF0KFBS SW50MzIgYUluZGV4KSB7IHJldHVybiBSZW1vdmVFbGVtZW50c0F0KGFJbmRleCwxKTsgfQoKICB2 aXJ0dWFsIHZvaWQgQ2xlYXIoKTsKCiAgdmlydHVhbCBQUkJvb2wgU2l6ZVRvKFBSSW50MzIgYU1p bik7CgoKICB2aXJ0dWFsIHZvaWQgQ29tcGFjdCgpOwoKICB2b2lkIFNvcnQobnNWb2lkQXJyYXlD b21wYXJhdG9yRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwoKICBQUkJvb2wgRW51bWVyYXRlRm9y d2FyZHMobnNWb2lkQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwogIFBSQm9vbCBF bnVtZXJhdGVCYWNrd2FyZHMobnNWb2lkQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEp OwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgUFJCb29sIEdyb3dBcnJheUJ5KFBSSW50MzIgYUdyb3dC eSk7CgogIHN0cnVjdCBJbXBsIHsKCgoKCgoKICAgIFBSVWludDMyIG1CaXRzOwoKCgoKICAgIFBS SW50MzIgbUNvdW50OwoKCgoKICAgIHZvaWQqIG1BcnJheVsxXTsKICB9OwoKICBJbXBsKiBtSW1w bDsKCgoKCgoKICBlbnVtIHsKICAgIGtBcnJheU93bmVyTWFzayA9IDEgPDwgMzEsCiAgICBrQXJy YXlTaXplTWFzayA9IH5rQXJyYXlPd25lck1hc2sKICB9OwoKCgogIHZvaWQgU2V0QXJyYXkoSW1w bCAqbmV3SW1wbCwgUFJJbnQzMiBhU2l6ZSwgUFJJbnQzMiBhQ291bnQsIFBSQm9vbCBvd25lcik7 CiAgaW5saW5lIFBSQm9vbCBJc0FycmF5T3duZXIoKSBjb25zdCB7CiAgICByZXR1cm4gbUltcGwg PyAoUFJCb29sKG1JbXBsLT5tQml0cykgJiBrQXJyYXlPd25lck1hc2spIDogMDsKICB9Cgpwcml2 YXRlOgoKICBuc1ZvaWRBcnJheShjb25zdCBuc1ZvaWRBcnJheSYgb3RoZXIpOwp9OwoKCgpjbGFz cyBuc0F1dG9Wb2lkQXJyYXkgOiBwdWJsaWMgbnNWb2lkQXJyYXkgewpwdWJsaWM6CiAgbnNBdXRv Vm9pZEFycmF5KCk7CiAgdm9pZCBDbGVhcigpOwoKICB2aXJ0dWFsIFBSQm9vbCBTaXplVG8oUFJJ bnQzMiBhTWluKTsKICB2aXJ0dWFsIHZvaWQgQ29tcGFjdCgpOwoKcHJvdGVjdGVkOgoKICBlbnVt IHsga0F1dG9CdWZTaXplID0gOCB9OwogIGNoYXIgbUF1dG9CdWZbc2l6ZW9mKEltcGwpICsgKGtB dXRvQnVmU2l6ZSAtIDEpICogc2l6ZW9mKHZvaWQqKV07Cn07CgoKY2xhc3MgbnNTdHJpbmc7Cgp0 eXBlZGVmIGludCAoKiBuc1N0cmluZ0FycmF5Q29tcGFyYXRvckZ1bmMpCiAgICAgICAgICAgIChj b25zdCBuc1N0cmluZyogYUVsZW1lbnQxLCBjb25zdCBuc1N0cmluZyogYUVsZW1lbnQyLCB2b2lk KiBhRGF0YSk7Cgp0eXBlZGVmIFBSQm9vbCAoKm5zU3RyaW5nQXJyYXlFbnVtRnVuYykobnNTdHJp bmcmIGFFbGVtZW50LCB2b2lkICphRGF0YSk7CgpjbGFzcyBuc1N0cmluZ0FycmF5OiBwcm90ZWN0 ZWQgbnNWb2lkQXJyYXkKewpwdWJsaWM6CiAgbnNTdHJpbmdBcnJheSh2b2lkKTsKICBuc1N0cmlu Z0FycmF5KFBSSW50MzIgYUNvdW50KTsKICB2aXJ0dWFsIH5uc1N0cmluZ0FycmF5KHZvaWQpOwoK ICBuc1N0cmluZ0FycmF5JiBvcGVyYXRvcj0oY29uc3QgbnNTdHJpbmdBcnJheSYgb3RoZXIpOwoK CgoKCiAgUFJJbnQzMiBDb3VudCh2b2lkKSBjb25zdCB7CiAgICByZXR1cm4gbnNWb2lkQXJyYXk6 OkNvdW50KCk7CiAgfQoKICB2b2lkIFN0cmluZ0F0KFBSSW50MzIgYUluZGV4LCBuc0FTdHJpbmcm IGFTdHJpbmcpIGNvbnN0OwogIG5zU3RyaW5nKiBTdHJpbmdBdChQUkludDMyIGFJbmRleCkgY29u c3Q7CiAgbnNTdHJpbmcqIG9wZXJhdG9yW10oUFJJbnQzMiBhSW5kZXgpIGNvbnN0IHsgcmV0dXJu IFN0cmluZ0F0KGFJbmRleCk7IH0KCiAgUFJJbnQzMiBJbmRleE9mKGNvbnN0IG5zQVN0cmluZyYg YVBvc3NpYmxlU3RyaW5nKSBjb25zdDsKCiAgUFJCb29sIEluc2VydFN0cmluZ0F0KGNvbnN0IG5z QVN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZVN0cmlu Z0F0KGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wg QXBwZW5kU3RyaW5nKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZykgewogICAgcmV0dXJuIEluc2Vy dFN0cmluZ0F0KGFTdHJpbmcsIENvdW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92ZVN0cmluZyhj b25zdCBuc0FTdHJpbmcmIGFTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVTdHJpbmdBdChQUkludDMy IGFJbmRleCk7CiAgdm9pZCBDbGVhcih2b2lkKTsKCiAgdm9pZCBDb21wYWN0KHZvaWQpIHsKICAg IG5zVm9pZEFycmF5OjpDb21wYWN0KCk7CiAgfQoKICB2b2lkIFNvcnQodm9pZCk7CiAgdm9pZCBT b3J0KG5zU3RyaW5nQXJyYXlDb21wYXJhdG9yRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwoKICBQ UkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNTdHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lk KiBhRGF0YSk7CiAgUFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc1N0cmluZ0FycmF5RW51bUZ1 bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6CgogIG5zU3RyaW5nQXJyYXkoY29uc3Qg bnNTdHJpbmdBcnJheSYgb3RoZXIpOwp9OwoKCmNsYXNzIG5zQ1N0cmluZzsKCnR5cGVkZWYgaW50 ICgqIG5zQ1N0cmluZ0FycmF5Q29tcGFyYXRvckZ1bmMpCiAgICAgICAgICAgIChjb25zdCBuc0NT dHJpbmcqIGFFbGVtZW50MSwgY29uc3QgbnNDU3RyaW5nKiBhRWxlbWVudDIsIHZvaWQqIGFEYXRh KTsKCnR5cGVkZWYgUFJCb29sICgqbnNDU3RyaW5nQXJyYXlFbnVtRnVuYykobnNDU3RyaW5nJiBh RWxlbWVudCwgdm9pZCAqYURhdGEpOwoKY2xhc3MgbnNDU3RyaW5nQXJyYXk6IHByb3RlY3RlZCBu c1ZvaWRBcnJheQp7CnB1YmxpYzoKICBuc0NTdHJpbmdBcnJheSh2b2lkKTsKICBuc0NTdHJpbmdB cnJheShQUkludDMyIGFDb3VudCk7CiAgdmlydHVhbCB+bnNDU3RyaW5nQXJyYXkodm9pZCk7Cgog IG5zQ1N0cmluZ0FycmF5JiBvcGVyYXRvcj0oY29uc3QgbnNDU3RyaW5nQXJyYXkmIG90aGVyKTsK CgoKCgoKICB2b2lkIFBhcnNlU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZywgY29uc3QgY2hhciog ZGVsaW1pdGVyKTsKCgoKCgogIFBSSW50MzIgQ291bnQodm9pZCkgY29uc3QgewogICAgcmV0dXJu IG5zVm9pZEFycmF5OjpDb3VudCgpOwogIH0KCiAgdm9pZCBDU3RyaW5nQXQoUFJJbnQzMiBhSW5k ZXgsIG5zQ1N0cmluZyYgYUNTdHJpbmcpIGNvbnN0OwogIG5zQ1N0cmluZyogQ1N0cmluZ0F0KFBS SW50MzIgYUluZGV4KSBjb25zdDsKICBuc0NTdHJpbmcqIG9wZXJhdG9yW10oUFJJbnQzMiBhSW5k ZXgpIGNvbnN0IHsgcmV0dXJuIENTdHJpbmdBdChhSW5kZXgpOyB9CgogIFBSSW50MzIgSW5kZXhP Zihjb25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7CiAgUFJJbnQzMiBJbmRl eE9mSWdub3JlQ2FzZShjb25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7Cgog IFBSQm9vbCBJbnNlcnRDU3RyaW5nQXQoY29uc3QgbnNDU3RyaW5nJiBhQ1N0cmluZywgUFJJbnQz MiBhSW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZUNTdHJpbmdBdChjb25zdCBuc0NTdHJpbmcmIGFD U3RyaW5nLCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBBcHBlbmRDU3RyaW5nKGNvbnN0IG5z Q1N0cmluZyYgYUNTdHJpbmcpIHsKICAgIHJldHVybiBJbnNlcnRDU3RyaW5nQXQoYUNTdHJpbmcs IENvdW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92ZUNTdHJpbmcoY29uc3QgbnNDU3RyaW5nJiBh Q1N0cmluZyk7CiAgUFJCb29sIFJlbW92ZUNTdHJpbmdJZ25vcmVDYXNlKGNvbnN0IG5zQ1N0cmlu ZyYgYUNTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVDU3RyaW5nQXQoUFJJbnQzMiBhSW5kZXgpOwog IHZvaWQgQ2xlYXIodm9pZCk7CgogIHZvaWQgQ29tcGFjdCh2b2lkKSB7CiAgICBuc1ZvaWRBcnJh eTo6Q29tcGFjdCgpOwogIH0KCiAgdm9pZCBTb3J0KHZvaWQpOwogIHZvaWQgU29ydElnbm9yZUNh c2Uodm9pZCk7CiAgdm9pZCBTb3J0KG5zQ1N0cmluZ0FycmF5Q29tcGFyYXRvckZ1bmMgYUZ1bmMs IHZvaWQqIGFEYXRhKTsKCiAgUFJCb29sIEVudW1lcmF0ZUZvcndhcmRzKG5zQ1N0cmluZ0FycmF5 RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKICBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRz KG5zQ1N0cmluZ0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6Cgog IG5zQ1N0cmluZ0FycmF5KGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBvdGhlcik7Cn07CiMgMzQ5ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNWb2lkQXJyYXkuaCIKY2xhc3MgbnNTbWFsbFZv aWRBcnJheQp7CnB1YmxpYzoKICBuc1NtYWxsVm9pZEFycmF5KCk7CiAgfm5zU21hbGxWb2lkQXJy YXkoKTsKCiAgbnNTbWFsbFZvaWRBcnJheSYgb3BlcmF0b3I9KG5zU21hbGxWb2lkQXJyYXkmIG90 aGVyKTsKICB2b2lkKiBvcGVyYXRvcltdKFBSSW50MzIgYUluZGV4KSBjb25zdCB7IHJldHVybiBF bGVtZW50QXQoYUluZGV4KTsgfQoKCgoKICBQUkludDMyIEdldEFycmF5U2l6ZSgpIGNvbnN0OwoK ICBQUkludDMyIENvdW50KCkgY29uc3Q7CiAgdm9pZCogRWxlbWVudEF0KFBSSW50MzIgYUluZGV4 KSBjb25zdDsKICB2b2lkKiBTYWZlRWxlbWVudEF0KFBSSW50MzIgYUluZGV4KSBjb25zdCB7Cgog ICAgaWYgKGFJbmRleCA8IDAgfHwgYUluZGV4ID49IENvdW50KCkpCiAgICAgIHJldHVybiAwOwog ICAgcmV0dXJuIEVsZW1lbnRBdChhSW5kZXgpOwogIH0KICBQUkludDMyIEluZGV4T2Yodm9pZCog YVBvc3NpYmxlRWxlbWVudCkgY29uc3Q7CiAgUFJCb29sIEluc2VydEVsZW1lbnRBdCh2b2lkKiBh RWxlbWVudCwgUFJJbnQzMiBhSW5kZXgpOwogIFBSQm9vbCBJbnNlcnRFbGVtZW50c0F0KGNvbnN0 IG5zVm9pZEFycmF5ICZvdGhlciwgUFJJbnQzMiBhSW5kZXgpOwogIFBSQm9vbCBSZXBsYWNlRWxl bWVudEF0KHZvaWQqIGFFbGVtZW50LCBQUkludDMyIGFJbmRleCk7CiAgUFJCb29sIE1vdmVFbGVt ZW50KFBSSW50MzIgYUZyb20sIFBSSW50MzIgYVRvKTsKICBQUkJvb2wgQXBwZW5kRWxlbWVudCh2 b2lkKiBhRWxlbWVudCk7CiAgUFJCb29sIEFwcGVuZEVsZW1lbnRzKG5zVm9pZEFycmF5JiBhRWxl bWVudHMpIHsKICAgIHJldHVybiBJbnNlcnRFbGVtZW50c0F0KGFFbGVtZW50cywgQ291bnQoKSk7 CiAgfQogIFBSQm9vbCBSZW1vdmVFbGVtZW50KHZvaWQqIGFFbGVtZW50KTsKICBQUkJvb2wgUmVt b3ZlRWxlbWVudHNBdChQUkludDMyIGFJbmRleCwgUFJJbnQzMiBhQ291bnQpOwogIFBSQm9vbCBS ZW1vdmVFbGVtZW50QXQoUFJJbnQzMiBhSW5kZXgpOwoKICB2b2lkIENsZWFyKCk7CiAgUFJCb29s IFNpemVUbyhQUkludDMyIGFNaW4pOwogIHZvaWQgQ29tcGFjdCgpOwogIHZvaWQgU29ydChuc1Zv aWRBcnJheUNvbXBhcmF0b3JGdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7CgogIFBSQm9vbCBFbnVt ZXJhdGVGb3J3YXJkcyhuc1ZvaWRBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7CiAg UFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc1ZvaWRBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lk KiBhRGF0YSk7Cgpwcml2YXRlOgogIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBQdHJCaXRzOwoKICBQ UkJvb2wgSGFzU2luZ2xlQ2hpbGQoKSBjb25zdAogIHsKICAgIHJldHVybiAobUNoaWxkcmVuICYm IChQdHJCaXRzKG1DaGlsZHJlbikgJiAweDEpKTsKICB9CiAgUFJCb29sIEhhc1ZlY3RvcigpIGNv bnN0CiAgewogICAgcmV0dXJuIChtQ2hpbGRyZW4gJiYgIShQdHJCaXRzKG1DaGlsZHJlbikgJiAw eDEpKTsKICB9CiAgdm9pZCogR2V0U2luZ2xlQ2hpbGQoKSBjb25zdAogIHsKICAgIHJldHVybiAo bUNoaWxkcmVuID8gKCh2b2lkKikoUHRyQml0cyhtQ2hpbGRyZW4pICYgfjB4MSkpIDogMCk7CiAg fQogIHZvaWQgU2V0U2luZ2xlQ2hpbGQodm9pZCAqYUNoaWxkKTsKICBuc1ZvaWRBcnJheSogR2V0 Q2hpbGRWZWN0b3IoKSBjb25zdAogIHsKICAgIHJldHVybiAobnNWb2lkQXJyYXkqKW1DaGlsZHJl bjsKICB9CiAgbnNWb2lkQXJyYXkqIFN3aXRjaFRvVmVjdG9yKCk7CgoKCgoKICB2b2lkICptQ2hp bGRyZW47Cn07CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ2xhc3NJbmZv LmgiIDIKCmVudW0gbnNET01DbGFzc0luZm9JRCB7CgogIGVET01DbGFzc0luZm9fV2luZG93X2lk LAogIGVET01DbGFzc0luZm9fTG9jYXRpb25faWQsCiAgZURPTUNsYXNzSW5mb19OYXZpZ2F0b3Jf aWQsCiAgZURPTUNsYXNzSW5mb19QbHVnaW5faWQsCiAgZURPTUNsYXNzSW5mb19QbHVnaW5BcnJh eV9pZCwKICBlRE9NQ2xhc3NJbmZvX01pbWVUeXBlX2lkLAogIGVET01DbGFzc0luZm9fTWltZVR5 cGVBcnJheV9pZCwKICBlRE9NQ2xhc3NJbmZvX0JhclByb3BfaWQsCiAgZURPTUNsYXNzSW5mb19I aXN0b3J5X2lkLAogIGVET01DbGFzc0luZm9fU2NyZWVuX2lkLAoKCiAgZURPTUNsYXNzSW5mb19Y TUxEb2N1bWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0RvY3VtZW50VHlwZV9pZCwKICBlRE9NQ2xh c3NJbmZvX0RPTUltcGxlbWVudGF0aW9uX2lkLAogIGVET01DbGFzc0luZm9fRE9NRXhjZXB0aW9u X2lkLAogIGVET01DbGFzc0luZm9fRG9jdW1lbnRGcmFnbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZv X0VsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19BdHRyX2lkLAogIGVET01DbGFzc0luZm9fVGV4 dF9pZCwKICBlRE9NQ2xhc3NJbmZvX0NvbW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19DREFUQVNl Y3Rpb25faWQsCiAgZURPTUNsYXNzSW5mb19Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25faWQsCiAgZURP TUNsYXNzSW5mb19FbnRpdHlfaWQsCiAgZURPTUNsYXNzSW5mb19FbnRpdHlSZWZlcmVuY2VfaWQs CiAgZURPTUNsYXNzSW5mb19Ob3RhdGlvbl9pZCwKICBlRE9NQ2xhc3NJbmZvX05vZGVMaXN0X2lk LAogIGVET01DbGFzc0luZm9fTmFtZWROb2RlTWFwX2lkLAoKCiAgZURPTUNsYXNzSW5mb19Eb2N1 bWVudFN0eWxlU2hlZXRMaXN0X2lkLAoKCiAgZURPTUNsYXNzSW5mb19FdmVudF9pZCwKICBlRE9N Q2xhc3NJbmZvX011dGF0aW9uRXZlbnRfaWQsCgoKICBlRE9NQ2xhc3NJbmZvX0hUTUxEb2N1bWVu dF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxDb2xsZWN0aW9uX2lkLAogIGVET01DbGFzc0luZm9f SFRNTE9wdGlvbkNvbGxlY3Rpb25faWQsCiAgZURPTUNsYXNzSW5mb19IVE1MRm9ybUNvbnRyb2xD b2xsZWN0aW9uX2lkLAogIGVET01DbGFzc0luZm9fSFRNTEdlbmVyaWNDb2xsZWN0aW9uX2lkLAoK CiAgZURPTUNsYXNzSW5mb19IVE1MQW5jaG9yRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hU TUxBcHBsZXRFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTEFyZWFFbGVtZW50X2lkLAog IGVET01DbGFzc0luZm9fSFRNTEJSRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxCYXNl RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxCYXNlRm9udEVsZW1lbnRfaWQsCiAgZURP TUNsYXNzSW5mb19IVE1MQm9keUVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MQnV0dG9u RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxETGlzdEVsZW1lbnRfaWQsCiAgZURPTUNs YXNzSW5mb19IVE1MRGVsRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxEaXJlY3RvcnlF bGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTERpdkVsZW1lbnRfaWQsCiAgZURPTUNsYXNz SW5mb19IVE1MRW1iZWRFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTEZpZWxkU2V0RWxl bWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxGb250RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJ bmZvX0hUTUxGb3JtRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxGcmFtZUVsZW1lbnRf aWQsCiAgZURPTUNsYXNzSW5mb19IVE1MRnJhbWVTZXRFbGVtZW50X2lkLAogIGVET01DbGFzc0lu Zm9fSFRNTEhSRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxIZWFkRWxlbWVudF9pZCwK ICBlRE9NQ2xhc3NJbmZvX0hUTUxIZWFkaW5nRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hU TUxIdG1sRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxJRnJhbWVFbGVtZW50X2lkLAog IGVET01DbGFzc0luZm9fSFRNTEltYWdlRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxJ bnB1dEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MSW5zRWxlbWVudF9pZCwKICBlRE9N Q2xhc3NJbmZvX0hUTUxJc0luZGV4RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxMSUVs ZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MTGFiZWxFbGVtZW50X2lkLAogIGVET01DbGFz c0luZm9fSFRNTExlZ2VuZEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MTGlua0VsZW1l bnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MTWFwRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZv X0hUTUxNZW51RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxNZXRhRWxlbWVudF9pZCwK ICBlRE9NQ2xhc3NJbmZvX0hUTUxNb2RFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTE9M aXN0RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxPYmplY3RFbGVtZW50X2lkLAogIGVE T01DbGFzc0luZm9fSFRNTE9wdEdyb3VwRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxP cHRpb25FbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFBhcmFncmFwaEVsZW1lbnRfaWQs CiAgZURPTUNsYXNzSW5mb19IVE1MUGFyYW1FbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRN TFByZUVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MUXVvdGVFbGVtZW50X2lkLAogIGVE T01DbGFzc0luZm9fSFRNTFNjcmlwdEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MU2Vs ZWN0RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxTcGFjZXJFbGVtZW50X2lkLAogIGVE T01DbGFzc0luZm9fSFRNTFNwYW5FbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFN0eWxl RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxUYWJsZUNhcHRpb25FbGVtZW50X2lkLAog IGVET01DbGFzc0luZm9fSFRNTFRhYmxlQ2VsbEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19I VE1MVGFibGVDb2xFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFRhYmxlQ29sR3JvdXBF bGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFRhYmxlRWxlbWVudF9pZCwKICBlRE9NQ2xh c3NJbmZvX0hUTUxUYWJsZVJvd0VsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MVGFibGVT ZWN0aW9uRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxUZXh0QXJlYUVsZW1lbnRfaWQs CiAgZURPTUNsYXNzSW5mb19IVE1MVGl0bGVFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRN TFVMaXN0RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxVbmtub3duRWxlbWVudF9pZCwK ICBlRE9NQ2xhc3NJbmZvX0hUTUxXQlJFbGVtZW50X2lkLAoKCiAgZURPTUNsYXNzSW5mb19DU1NT dHlsZVJ1bGVfaWQsCiAgZURPTUNsYXNzSW5mb19DU1NDaGFyc2V0UnVsZV9pZCwKICBlRE9NQ2xh c3NJbmZvX0NTU0ltcG9ydFJ1bGVfaWQsCiAgZURPTUNsYXNzSW5mb19DU1NNZWRpYVJ1bGVfaWQs CiAgZURPTUNsYXNzSW5mb19DU1NOYW1lU3BhY2VSdWxlX2lkLAogIGVET01DbGFzc0luZm9fQ1NT UnVsZUxpc3RfaWQsCiAgZURPTUNsYXNzSW5mb19DU1NHcm91cFJ1bGVSdWxlTGlzdF9pZCwKICBl RE9NQ2xhc3NJbmZvX01lZGlhTGlzdF9pZCwKICBlRE9NQ2xhc3NJbmZvX1N0eWxlU2hlZXRMaXN0 X2lkLAogIGVET01DbGFzc0luZm9fQ1NTU3R5bGVTaGVldF9pZCwKICBlRE9NQ2xhc3NJbmZvX0NT U1N0eWxlRGVjbGFyYXRpb25faWQsCiAgZURPTUNsYXNzSW5mb19Db21wdXRlZENTU1N0eWxlRGVj bGFyYXRpb25faWQsCiAgZURPTUNsYXNzSW5mb19ST0NTU1ByaW1pdGl2ZVZhbHVlX2lkLAoKCiAg ZURPTUNsYXNzSW5mb19SYW5nZV9pZCwKICBlRE9NQ2xhc3NJbmZvX1NlbGVjdGlvbl9pZCwKCgog IGVET01DbGFzc0luZm9fWFVMRG9jdW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19YVUxFbGVtZW50 X2lkLAogIGVET01DbGFzc0luZm9fWFVMQ29tbWFuZERpc3BhdGNoZXJfaWQsCiAgZURPTUNsYXNz SW5mb19YVUxOb2RlTGlzdF9pZCwKICBlRE9NQ2xhc3NJbmZvX1hVTE5hbWVkTm9kZU1hcF9pZCwK ICBlRE9NQ2xhc3NJbmZvX1hVTEF0dHJfaWQsCiAgZURPTUNsYXNzSW5mb19YVUxDb250cm9sbGVy c19pZCwKICBlRE9NQ2xhc3NJbmZvX0JveE9iamVjdF9pZCwKICBlRE9NQ2xhc3NJbmZvX1RyZWVT ZWxlY3Rpb25faWQsCiAgZURPTUNsYXNzSW5mb19UcmVlQ29udGVudFZpZXdfaWQsCgoKICBlRE9N Q2xhc3NJbmZvX0NyeXB0b19pZCwKICBlRE9NQ2xhc3NJbmZvX0NSTUZPYmplY3RfaWQsCiAgZURP TUNsYXNzSW5mb19Qa2NzMTFfaWQsCiMgMjQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUNsYXNzSW5mby5oIgogIGVET01DbGFzc0luZm9fVHJlZVdhbGtlcl9pZCwKCgoKCgoKICBl RE9NQ2xhc3NJbmZvX0NTU1JlY3RfaWQsCgoKICBlRE9NQ2xhc3NJbmZvX0Nocm9tZVdpbmRvd19p ZCwKCgogIGVET01DbGFzc0luZm9fQ1NTUkdCQ29sb3JfaWQsCgogIGVET01DbGFzc0luZm9fUmFu Z2VFeGNlcHRpb25faWQsCgoKCiAgZURPTUNsYXNzSW5mb19DU1NWYWx1ZUxpc3RfaWQsCgoKICBl RE9NQ2xhc3NJbmZvX0NvbnRlbnRMaXN0X2lkLAoKCiAgZURPTUNsYXNzSW5mb19YTUxTdHlsZXNo ZWV0UHJvY2Vzc2luZ0luc3RydWN0aW9uX2lkLAoKICBlRE9NQ2xhc3NJbmZvX0ltYWdlRG9jdW1l bnRfaWQsCgoKICBlRE9NQ2xhc3NJbmZvSURDb3VudAp9OwoKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIgMQojIDE0ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIiAxCiMgMTggIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiIDEKIyAxNCAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29ubmVjdC94cGNleGNlcHRpb24uaCIgMQojIDE0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb25uZWN0L3hwY2V4Y2VwdGlvbi5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lFeGNlcHRpb24uaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ RXhjZXB0aW9uLmgiCmNsYXNzIG5zSVN0YWNrRnJhbWUgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ SUQgaWlkID0gezB4OTFkODIxMDUsIDB4N2M2MiwgMHg0ZjhiLCB7IDB4OTcsIDB4NzksIDB4MTUs IDB4NDIsIDB4NzcsIDB4YzAsIDB4ZWUsIDB4OTAgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRMYW5ndWFnZShQUlVpbnQzMiAqYUxhbmd1YWdlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldExhbmd1YWdlTmFtZShjaGFyICogKmFMYW5ndWFnZU5hbWUpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZW5hbWUoY2hhciAqICphRmlsZW5hbWUpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShjaGFyICogKmFOYW1lKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldExpbmVOdW1iZXIoUFJJbnQzMiAqYUxpbmVOdW1iZXIpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0U291cmNlTGluZShjaGFyICogKmFTb3VyY2VMaW5lKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlcihuc0lTdGFja0ZyYW1lICogKmFDYWxsZXIp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsK Cn07CiMgMTgwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRXhjZXB0aW9uLmgiCmNs YXNzIG5zSUV4Y2VwdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmM2E4 ZDNiNCwgMHhjNDI0LCAweDRlZGMsIHsgMHg4YiwgMHhmNiwgMHg4OSwgMHg3NCwgMHhjOSwgMHg4 MywgMHhiYSwgMHg3OCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1l c3NhZ2UoY2hhciAqICphTWVzc2FnZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZXN1 bHQobnNyZXN1bHQgKmFSZXN1bHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShj aGFyICogKmFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVuYW1lKGNoYXIg KiAqYUZpbGVuYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpbmVOdW1iZXIoUFJV aW50MzIgKmFMaW5lTnVtYmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbHVtbk51 bWJlcihQUlVpbnQzMiAqYUNvbHVtbk51bWJlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRMb2NhdGlvbihuc0lTdGFja0ZyYW1lICogKmFMb2NhdGlvbikgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRJbm5lcihuc0lFeGNlcHRpb24gKiAqYUlubmVyKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldERhdGEobnNJU3VwcG9ydHMgKiAqYURhdGEpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgVG9TdHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTUgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBjZXhjZXB0aW9uLmgiIDIKIyAyOSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNleGNlcHRpb24uaCIKY2xhc3MgbnNJWFBDRXhjZXB0 aW9uIDogcHVibGljIG5zSUV4Y2VwdGlvbiB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhiMmEzNDAxMCwgMHgzOTgz LCAweDExZDMsIHsgMHg5OCwgMHg4OCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgy MiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXRpYWxpemUoY29uc3Qg Y2hhciAqYU1lc3NhZ2UsIG5zcmVzdWx0IGFSZXN1bHQsIGNvbnN0IGNoYXIgKmFOYW1lLCBuc0lT dGFja0ZyYW1lICphTG9jYXRpb24sIG5zSVN1cHBvcnRzICphRGF0YSwgbnNJRXhjZXB0aW9uICph SW5uZXIpID0gMDsKCn07CiMgMTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBj Y29tcG9uZW50cy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94 cGNqc2lkLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNqc2lk LmgiCmNsYXNzIG5zSUpTSUQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4Yzg2 YWUxMzEsIDB4ZDEwMSwgMHgxMWQyLCB7IDB4OTgsIDB4NDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4 OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRO YW1lKGNoYXIgKiAqYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TnVtYmVyKGNo YXIgKiAqYU51bWJlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJZChuc0lEICogKmFJ ZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWxpZChQUkJvb2wgKmFWYWxpZCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFcXVhbHMobnNJSlNJRCAqb3RoZXIsIFBSQm9vbCAqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0aWFsaXplKGNvbnN0IGNoYXIgKmlk U3RyaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFs KSA9IDA7Cgp9OwojIDE2NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNqc2lk LmgiCmNsYXNzIG5zSUpTSUlEIDogcHVibGljIG5zSUpTSUQgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZTA4ZGNk YTAsIDB4ZDY1MSwgMHgxMWQyLCB7IDB4OTgsIDB4NDMsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYs IDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKfTsKIyAyMjIgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbm5lY3QveHBjanNpZC5oIgpjbGFzcyBuc0lKU0NJRCA6IHB1YmxpYyBuc0lKU0lE IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweGUzYTI0YTYwLCAweGQ2NTEsIDB4MTFkMiwgeyAweDk4LCAweDQzLCAw eDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZp cnR1YWwgbnNyZXN1bHQgQ3JlYXRlSW5zdGFuY2UobnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlcnZpY2UobnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9 IDA7Cgp9OwojIDE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVu dHMuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRN YW5hZ2VyLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVu dE1hbmFnZXIuaCIKY2xhc3MgbnNJRmFjdG9yeTsKIyAyNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKY2xhc3MgbnNJQ29tcG9uZW50TWFuYWdlciA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhODhlNWE2MCwgMHgyMDVhLCAweDRi YjEsIHsgMHg5NCwgMHhlMSwgMHgyNiwgMHgyOCwgMHhkYSwgMHhmNSwgMHgxZSwgMHhhZSB9fTsg cmV0dXJuIGlpZDt9CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25l bnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc09iamVjdChjb25zdCBuc0NJ RCAmIGFDbGFzcywgY29uc3QgbnNJSUQgJiBhSUlELCB2b2lkICogKnJlc3VsdCkgPSAwOwojIDUy ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NPYmplY3RCeUNvbnRyYWN0SUQoY29uc3QgY2hhciAqYUNv bnRyYWN0SUQsIGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAqICpyZXN1bHQpID0gMDsKIyA2NCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lTdXBw b3J0cyAqYURlbGVnYXRlLCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7 CiMgNzcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRChjb25zdCBjaGFy ICphQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0ZSwgY29uc3QgbnNJSUQgJiBhSUlE LCB2b2lkICogKnJlc3VsdCkgPSAwOwoKfTsKIyAxNTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiIDEKIyAyOCAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29tL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3hwY29tL25zQ09NUHRyLmgiIDEKIyAxMjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0NPTVB0ci5oIgogIHR5cGVkZWYgUFJCb29sIE5TQ0FQX0JPT0w7CiMgMTc0ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmNs YXNzIG5zRGVyaXZlZFNhZmUgOiBwdWJsaWMgVAojIDE4NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zQ09NUHRyLmgiCiAgewogICAgcHJpdmF0ZToKCiAgICAgIHVzaW5nIFQ6OkFkZFJl ZjsKICAgICAgdXNpbmcgVDo6UmVsZWFzZTsKCgoKCgoKICAgICAgdm9pZCBvcGVyYXRvciBkZWxl dGUoIHZvaWQqLCBzaXplX3QgKTsKCgoKICAgICAgbnNEZXJpdmVkU2FmZTxUPiYgb3BlcmF0b3I9 KCBjb25zdCBUJiApOwojIDIwOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRy LmgiCiAgfTsKIyAyMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgp0 ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IGFscmVhZHlfQWRkUmVmZWQKIyAyNDcgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgogIHsKICAgIGFscmVhZHlfQWRkUmVmZWQo IFQqIGFSYXdQdHIgKQogICAgICAgIDogbVJhd1B0cihhUmF3UHRyKQogICAgICB7CgogICAgICB9 CgogICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbVJhd1B0cjsgfQoKICAgIFQqIG1SYXdQdHI7 CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxU PgpnZXR0ZXJfQWRkUmVmcyggVCogYVJhd1B0ciApCgoKCgogIHsKICAgIHJldHVybiBhbHJlYWR5 X0FkZFJlZmVkPFQ+KGFSYXdQdHIpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29u c3QgYWxyZWFkeV9BZGRSZWZlZDxUPgpnZXR0ZXJfQWRkUmVmcyggY29uc3QgYWxyZWFkeV9BZGRS ZWZlZDxUPiYgYUFscmVhZHlBZGRSZWZlZFB0ciApCiAgewogICAgcmV0dXJuIGFBbHJlYWR5QWRk UmVmZWRQdHI7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBhbHJlYWR5X0Fk ZFJlZmVkPFQ+CmRvbnRfQWRkUmVmKCBUKiBhUmF3UHRyICkKICB7CiAgICByZXR1cm4gYWxyZWFk eV9BZGRSZWZlZDxUPihhUmF3UHRyKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNv bnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4KZG9udF9BZGRSZWYoIGNvbnN0IGFscmVhZHlfQWRkUmVm ZWQ8VD4gYUFscmVhZHlBZGRSZWZlZFB0ciApCiAgewogICAgcmV0dXJuIGFBbHJlYWR5QWRkUmVm ZWRQdHI7CiAgfQojIDMwNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgi CnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKVCoKZG9udF9RdWVyeUludGVyZmFjZSggVCogZXhw ciApCiAgewogICAgcmV0dXJuIGV4cHI7CiAgfQoKCgpjbGFzcyBuc0NPTVB0cl9oZWxwZXIKIyAz MzIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgogIHsKICAgIHB1Ymxp YzoKICAgICAgdmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQq KiApIGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNRdWVyeUludGVyZmFjZSA6IHB1YmxpYyBuc0NP TVB0cl9oZWxwZXIKICB7CiAgICBwdWJsaWM6CiAgICAgIG5zUXVlcnlJbnRlcmZhY2UoIG5zSVN1 cHBvcnRzKiBhUmF3UHRyLCBuc3Jlc3VsdCogZXJyb3IgKQogICAgICAgICAgOiBtUmF3UHRyKGFS YXdQdHIpLAogICAgICAgICAgICBtRXJyb3JQdHIoZXJyb3IpCiAgICAgICAgewoKICAgICAgICB9 CgogICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiBhSUlELCB2 b2lkKiogKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBuc0lTdXBwb3J0cyogbVJhd1B0cjsK ICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICB9OwoKaW5saW5lCmNvbnN0IG5zUXVlcnlJbnRl cmZhY2UKZG9fUXVlcnlJbnRlcmZhY2UoIG5zSVN1cHBvcnRzKiBhUmF3UHRyLCBuc3Jlc3VsdCog ZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNRdWVyeUludGVyZmFjZShhUmF3UHRyLCBlcnJv cik7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQp2b2lkCmRvX1F1ZXJ5SW50ZXJmYWNl KCBhbHJlYWR5X0FkZFJlZmVkPFQ+JiApCiAgewoKCgogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgpp bmxpbmUKdm9pZApkb19RdWVyeUludGVyZmFjZSggYWxyZWFkeV9BZGRSZWZlZDxUPiYsIG5zcmVz dWx0KiApCiAgewoKCgogIH0KCgoKY2xhc3MgbnNDT01QdHJfYmFzZQojIDM5NiAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgiCiAgewogICAgcHVibGljOgoKICAgICAgbnND T01QdHJfYmFzZSggbnNJU3VwcG9ydHMqIHJhd1B0ciA9IDAgKQogICAgICAgICAgOiBtUmF3UHRy KHJhd1B0cikKICAgICAgICB7CgogICAgICAgIH0KCgogICAgICB+bnNDT01QdHJfYmFzZSgpOwoK CgoKCgogICAgICB2b2lkIGFzc2lnbl93aXRoX0FkZFJlZiggbnNJU3VwcG9ydHMqICk7CiAgICAg IHZvaWQgYXNzaWduX2Zyb21faGVscGVyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImLCBjb25zdCBu c0lJRCYgKTsKICAgICAgdm9pZCoqIGJlZ2luX2Fzc2lnbm1lbnQoKTsKCiAgICBwcm90ZWN0ZWQ6 CiAgICAgIG5zSVN1cHBvcnRzKiBtUmF3UHRyOwoKICAgICAgdm9pZAogICAgICBhc3NpZ25fYXNz dW1pbmdfQWRkUmVmKCBuc0lTdXBwb3J0cyogbmV3UHRyICkKICAgICAgICB7CiMgNDMxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgICAgIG5zSVN1cHBvcnRz KiBvbGRQdHIgPSBtUmF3UHRyOwogICAgICAgICAgbVJhd1B0ciA9IG5ld1B0cjsKICAgICAgICAg IDs7CiAgICAgICAgICBpZiAoIG9sZFB0ciApCiAgICAgICAgICAgIChvbGRQdHIpLT5SZWxlYXNl KCk7CiAgICAgICAgfQogIH07CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBuc0NPTVB0cgoK ICAgIDogcHJpdmF0ZSBuc0NPTVB0cl9iYXNlCgogIHsKICAgIGVudW0geyBfZm9yY2VfZXZlbl9j b21wbGlhbnRfY29tcGlsZXJzX3RvX2ZhaWxfID0gc2l6ZW9mKFQpIH07CiMgNDgzICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl ZiBUIGVsZW1lbnRfdHlwZTsKIyA1MTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NP TVB0ci5oIgogICAgICBuc0NPTVB0cigpCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoK ICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBu c0NPTVB0cjxUPiYgYVNtYXJ0UHRyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNlKGFTbWFy dFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAg ICAgICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBu c0NPTVB0ciggVCogYVJhd1B0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhUmF3UHRy KQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAgICAobVJhd1B0 ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICAgIDsKICAgICAgICB9CgogICAgICBu c0NPTVB0ciggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgYVNtYXJ0UHRyICkKICAgICAgICAg ICAgOiBuc0NPTVB0cl9iYXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAg ICA7OwogICAgICAgICAgOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0 cl9oZWxwZXImIGhlbHBlciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoKCiAgICAg ICAgewogICAgICAgICAgOzsKICAgICAgICAgIGFzc2lnbl9mcm9tX2hlbHBlcihoZWxwZXIsIG5z Q09NVHlwZUluZm88VD46OkdldElJRCgpKTsKICAgICAgICAgIDsKICAgICAgICB9CiMgNTcyICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHI8VD4m CiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNDT01QdHI8VD4mIHJocyApCgogICAgICAgIHsKICAg ICAgICAgIGFzc2lnbl93aXRoX0FkZFJlZihyaHMubVJhd1B0cik7CiAgICAgICAgICByZXR1cm4g KnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8VD4mCiAgICAgIG9wZXJhdG9yPSggVCog cmhzICkKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX3dpdGhfQWRkUmVmKHJocyk7CiAgICAg ICAgICA7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8 VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgcmhzICkKCiAg ICAgICAgewogICAgICAgICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZihyaHMubVJhd1B0cik7CiAg ICAgICAgICA7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01Q dHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNDT01QdHJfaGVscGVyJiByaHMgKQoKCiAg ICAgICAgewogICAgICAgICAgYXNzaWduX2Zyb21faGVscGVyKHJocywgbnNDT01UeXBlSW5mbzxU Pjo6R2V0SUlEKCkpOwogICAgICAgICAgOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAg IH0KIyA2MjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgogICAgICBu c0Rlcml2ZWRTYWZlPFQ+KgogICAgICBnZXQoKSBjb25zdAoKCgoKCgogICAgICAgIHsKICAgICAg ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0Rlcml2ZWRTYWZlPFQ+KiA+KG1SYXdQdHIp OwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zRGVyaXZlZFNhZmU8VD4qKCkgY29uc3QKCgoK CgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0KCiAgICAgIG5z RGVyaXZlZFNhZmU8VD4qCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAgIHsKICAgICAg ICAgIDsKICAgICAgICAgIHJldHVybiBnZXQoKTsKICAgICAgICB9CiMgNjY3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHI8VD4qCiAgICAgIGdl dF9hZGRyZXNzKCkKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0K CiAgICAgIGNvbnN0IG5zQ09NUHRyPFQ+KgogICAgICBnZXRfYWRkcmVzcygpIGNvbnN0CgoKICAg ICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgoKCiAgICBwdWJsaWM6CiAg ICAgIG5zRGVyaXZlZFNhZmU8VD4mCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgewog ICAgICAgICAgOwogICAgICAgICAgcmV0dXJuICpnZXQoKTsKICAgICAgICB9CgoKCgoKCiAgICAg IFQqKgogICAgICBTdGFydEFzc2lnbm1lbnQoKQogICAgICAgIHsKCiAgICAgICAgICByZXR1cm4g cmVpbnRlcnByZXRfY2FzdDwgVCoqID4oYmVnaW5fYXNzaWdubWVudCgpKTsKCgoKCiAgICAgICAg fQogIH07CiMgNzIxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKdGVt cGxhdGUgPD4KY2xhc3MgbnNDT01QdHI8bnNJU3VwcG9ydHM+CiAgICA6IHByaXZhdGUgbnNDT01Q dHJfYmFzZQogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0lTdXBwb3J0cyBlbGVtZW50 X3R5cGU7CiMgNzM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAg ICAgbnNDT01QdHIoKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoMCkKCiAgICAgICAgewog ICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggY29uc3QgbnNDT01QdHI8bnNJ U3VwcG9ydHM+JiBhU21hcnRQdHIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoYVNtYXJ0 UHRyLm1SYXdQdHIpCgogICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAg ICAgIChtUmF3UHRyKS0+QWRkUmVmKCk7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5z Q09NUHRyKCBuc0lTdXBwb3J0cyogYVJhd1B0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFz ZShhUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAg ICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NP TVB0ciggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxuc0lTdXBwb3J0cz4mIGFTbWFydFB0ciApCiAg ICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhU21hcnRQdHIubVJhd1B0cikKCiAgICAgICAgewog ICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggY29uc3QgbnNDT01QdHJfaGVs cGVyJiBoZWxwZXIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoMCkKCgogICAgICAgIHsK ICAgICAgICAgIDs7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIoaGVscGVyLCBuc0NPTVR5 cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0SUlEKCkpOwogICAgICAgIH0KCgoKCiAgICAgIG5zQ09N UHRyPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0NPTVB0cjxuc0lTdXBw b3J0cz4mIHJocyApCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl93aXRoX0FkZFJlZihyaHMu bVJhd1B0cik7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01Q dHI8bnNJU3VwcG9ydHM+JgogICAgICBvcGVyYXRvcj0oIG5zSVN1cHBvcnRzKiByaHMgKQoKICAg ICAgICB7CiAgICAgICAgICBhc3NpZ25fd2l0aF9BZGRSZWYocmhzKTsKICAgICAgICAgIHJldHVy biAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mCiAgICAgIG9w ZXJhdG9yPSggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxuc0lTdXBwb3J0cz4mIHJocyApCgogICAg ICAgIHsKICAgICAgICAgIGFzc2lnbl9hc3N1bWluZ19BZGRSZWYocmhzLm1SYXdQdHIpOwogICAg ICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRz PiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0NPTVB0cl9oZWxwZXImIHJocyApCgoKICAgICAg ICB7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIocmhzLCBuc0NPTVR5cGVJbmZvPG5zSVN1 cHBvcnRzPjo6R2V0SUlEKCkpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCgoK CiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+KgogICAgICBnZXQoKSBjb25zdAoKCgoK CgogICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0Rlcml2ZWRT YWZlPG5zSVN1cHBvcnRzPiogPihtUmF3UHRyKTsKICAgICAgICB9CgogICAgICBvcGVyYXRvciBu c0Rlcml2ZWRTYWZlPG5zSVN1cHBvcnRzPiooKSBjb25zdAoKCgoKCgoKICAgICAgICB7CiAgICAg ICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAgICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBw b3J0cz4qCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIDsKICAg ICAgICAgIHJldHVybiBnZXQoKTsKICAgICAgICB9CiMgODYzICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+KgogICAgICBn ZXRfYWRkcmVzcygpCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9 CgogICAgICBjb25zdCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4qCiAgICAgIGdldF9hZGRyZXNzKCkg Y29uc3QKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCgoKICAg IHB1YmxpYzoKCiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+JgogICAgICBvcGVyYXRv ciooKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIHJldHVybiAqZ2V0KCk7 CiAgICAgICAgfQoKCgoKCgogICAgICBuc0lTdXBwb3J0cyoqCiAgICAgIFN0YXJ0QXNzaWdubWVu dCgpCiAgICAgICAgewoKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0lTdXBw b3J0cyoqID4oYmVnaW5fYXNzaWdubWVudCgpKTsKCgoKCiAgICAgICAgfQogIH07CiMgOTUwICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+ CmlubGluZQpuc0NPTVB0cjxUPioKYWRkcmVzc19vZiggbnNDT01QdHI8VD4mIGFQdHIgKQogIHsK ICAgIHJldHVybiBhUHRyLmdldF9hZGRyZXNzKCk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+Cmlu bGluZQpjb25zdCBuc0NPTVB0cjxUPioKYWRkcmVzc19vZiggY29uc3QgbnNDT01QdHI8VD4mIGFQ dHIgKQogIHsKICAgIHJldHVybiBhUHRyLmdldF9hZGRyZXNzKCk7CiAgfQoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4KY2xhc3MgbnNHZXR0ZXJBZGRSZWZzCiMgOTg3ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNDT01QdHIuaCIKICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAg IG5zR2V0dGVyQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciApCiAgICAgICAgICA6IG1U YXJnZXRTbWFydFB0cihhU21hcnRQdHIpCiAgICAgICAgewoKICAgICAgICB9CiMgMTAwOSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgiCiAgICAgIG9wZXJhdG9yIHZvaWQq KigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+ KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKSk7CiAgICAgICAgfQoKICAgICAgb3Bl cmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJw cmV0X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihtVGFyZ2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50 KCkpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIFQqKigpCiAgICAgICAgewogICAgICAgICAg cmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKTsKICAgICAgICB9CgogICAg ICBUKiYKICAgICAgb3BlcmF0b3IqKCkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKihtVGFy Z2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgog ICAgICBuc0NPTVB0cjxUPiYgbVRhcmdldFNtYXJ0UHRyOwogIH07CgoKdGVtcGxhdGUgPD4KY2xh c3MgbnNHZXR0ZXJBZGRSZWZzPG5zSVN1cHBvcnRzPgogIHsKICAgIHB1YmxpYzoKICAgICAgZXhw bGljaXQKICAgICAgbnNHZXR0ZXJBZGRSZWZzKCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mIGFTbWFy dFB0ciApCiAgICAgICAgICA6IG1UYXJnZXRTbWFydFB0cihhU21hcnRQdHIpCiAgICAgICAgewoK ICAgICAgICB9CiMgMTA1MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgi CiAgICAgIG9wZXJhdG9yIHZvaWQqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50 ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKSk7 CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAgICAgewogICAg ICAgICAgcmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKTsKICAgICAgICB9 CgogICAgICBuc0lTdXBwb3J0cyomCiAgICAgIG9wZXJhdG9yKigpCiAgICAgICAgewogICAgICAg ICAgcmV0dXJuICoobVRhcmdldFNtYXJ0UHRyLlN0YXJ0QXNzaWdubWVudCgpKTsKICAgICAgICB9 CgogICAgcHJpdmF0ZToKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+JiBtVGFyZ2V0U21hcnRQ dHI7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5zR2V0dGVyQWRkUmVmczxUPgpn ZXR0ZXJfQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciApCgoKCgogIHsKICAgIHJldHVy biBuc0dldHRlckFkZFJlZnM8VD4oYVNtYXJ0UHRyKTsKICB9CgoKCgoKdGVtcGxhdGUgPGNsYXNz IFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IG5zQ09NUHRy PFQ+JiBsaHMsIGNvbnN0IG5zQ09NUHRyPFU+JiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNf Y2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRpY19jYXN0PCBjb25zdCB2b2lk KiA+KHJocy5nZXQoKSk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUK TlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBuc0NP TVB0cjxVPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4o bGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0K CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRv cj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBVKiByaHMgKQogIHsKICAgIHJldHVy biBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRpY19jYXN0PCBj b25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGlu ZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IFUqIGxocywgY29uc3QgbnNDT01QdHI8VD4m IHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocykgPT0g c3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xh c3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29uc3QgbnNDT01Q dHI8VD4mIGxocywgY29uc3QgVSogcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNv bnN0IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMp OwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVy YXRvciE9KCBjb25zdCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMgKQogIHsKICAgIHJl dHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9IHN0YXRpY19jYXN0PCBjb25z dCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDExNTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQ X0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgVSogcmhzICkKICB7CiAg ICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSBzdGF0aWNf Y2FzdDwgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxp bmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMg KQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgdm9pZCogPihsaHMpID09IHN0YXRpY19jYXN0 PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz IFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0oIGNvbnN0IG5zQ09NUHRyPFQ+JiBsaHMs IFUqIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5n ZXQoKSkgIT0gc3RhdGljX2Nhc3Q8IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggVSogbGhzLCBjb25zdCBu c0NPTVB0cjxUPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IHZvaWQqID4obGhz KSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KCgoKCgoKY2xh c3MgTlNDQVBfWmVybzsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBfQk9PTApvcGVy YXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBOU0NBUF9aZXJvKiByaHMgKQoKICB7CiAg ICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSByZWludGVy cHJldF9jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+Cmlu bGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIE5TQ0FQX1plcm8qIGxocywgY29uc3QgbnNDT01Q dHI8VD4mIHJocyApCgogIHsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCB2b2lk KiA+KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsKICB9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29uc3QgbnND T01QdHI8VD4mIGxocywgTlNDQVBfWmVybyogcmhzICkKCiAgewogICAgcmV0dXJuIHN0YXRpY19j YXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkgIT0gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qg dm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBfQk9PTApv cGVyYXRvciE9KCBOU0NBUF9aZXJvKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMgKQoKICB7 CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9IHN0YXRp Y19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDEyNjAgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgppbmxpbmUKTlNDQVBfQk9PTApTYW1lQ09NSWRl bnRpdHkoIG5zSVN1cHBvcnRzKiBsaHMsIG5zSVN1cHBvcnRzKiByaHMgKQogIHsKICAgIHJldHVy biBuc0NPTVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKGxocykgKSA9PSBuc0NP TVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKHJocykgKTsKICB9CgoKCnRlbXBs YXRlIDxjbGFzcyBTb3VyY2VUeXBlLCBjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jl c3VsdApDYWxsUXVlcnlJbnRlcmZhY2UoIG5zQ09NUHRyPFNvdXJjZVR5cGU+JiBhU291cmNlUHRy LCBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdFB0ciApCiAgewogICAgcmV0dXJuIENhbGxRdWVyeUlu dGVyZmFjZShhU291cmNlUHRyLmdldCgpLCBhRGVzdFB0cik7CiAgfQojIDI5ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIgMgoKCgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIiAx CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJPYnNv bGV0ZS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5h Z2VyLmgiIDEKIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ29tcG9uZW50TWFu YWdlck9ic29sZXRlLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29t cG9uZW50TWFuYWdlck9ic29sZXRlLmgiIDEKIyAxNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lGYWN0b3J5LmgiIDEKIyAzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUZhY3RvcnkuaCIKY2xhc3MgbnNJRmFjdG9yeSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHgwMDAwMDAwMSwgMHgwMDAwLCAweDAwMDAsIHsgMHhjMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiB9fTsgcmV0dXJuIGlpZDt9CiMgNTMgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lGYWN0b3J5LmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBDcmVhdGVJbnN0YW5jZShuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJRCAmIGlpZCwg dm9pZCAqICpyZXN1bHQpID0gMDsKIyA2NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SUZhY3RvcnkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IExvY2tGYWN0b3J5KFBSQm9vbCBsb2NrKSA9 IDA7Cgp9OwojIDE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFu YWdlck9ic29sZXRlLmgiIDIKCgoKCgoKY2xhc3MgbnNJRmlsZTsKCmNsYXNzIG5zSUVudW1lcmF0 b3I7CiMgMzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2Vy T2Jzb2xldGUuaCIKY2xhc3MgbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlIDogcHVibGljIG5z SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDg0NThhNzQwLCAweGQ1ZGMsIDB4MTFkMiwgeyAweDky LCAweGZiLCAweDAwLCAweGUwLCAweDk4LCAweDA1LCAweDU3LCAweDBmIH19OyByZXR1cm4gaWlk O30KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJP YnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZEZhY3RvcnkoY29uc3QgbnNDSUQgJiBh Q2xhc3MsIG5zSUZhY3RvcnkgKipfcmV0dmFsKSA9IDA7CiMgNTggIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyT2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IEdldENsYXNzT2JqZWN0KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBuc0lJRCAmIGFJ SUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDcxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBj b20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb250 cmFjdElEVG9DbGFzc0lEKGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBuc0NJRCAqYUNsYXNzKSA9 IDA7CiMgODQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2Vy T2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENMU0lEVG9Db250cmFjdElEKGNvbnN0IG5z Q0lEICYgYUNsYXNzLCBjaGFyICoqYUNsYXNzTmFtZSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA5 NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0 ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlSW5zdGFuY2UoY29uc3QgbnNDSUQgJiBhQ2xh c3MsIG5zSVN1cHBvcnRzICphRGVsZWdhdGUsIGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAqICpf cmV0dmFsKSA9IDA7CiMgMTEwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9u ZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZUJ5 Q29udHJhY3RJRChjb25zdCBjaGFyICphQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0 ZSwgY29uc3QgbnNJSUQgJiBJSUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDEyMiAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZp cnR1YWwgbnNyZXN1bHQgUmVnaXN0cnlMb2NhdGlvbkZvclNwZWMobnNJRmlsZSAqYVNwZWMsIGNo YXIgKipfcmV0dmFsKSA9IDA7CiMgMTMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ Q29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTcGVjRm9yUmVn aXN0cnlMb2NhdGlvbihjb25zdCBjaGFyICphTG9jYXRpb24sIG5zSUZpbGUgKipfcmV0dmFsKSA9 IDA7CiMgMTQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdl ck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckZhY3RvcnkoY29uc3QgbnND SUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFDb250cmFj dElELCBuc0lGYWN0b3J5ICphRmFjdG9yeSwgUFJCb29sIGFSZXBsYWNlKSA9IDA7CiMgMTY3ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudChjb25zdCBuc0NJRCAmIGFDbGFz cywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIGNvbnN0 IGNoYXIgKmFMb2NhdGlvbiwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QpID0gMDsK IyAxODkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyT2Jz b2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50V2l0aFR5cGUoY29u c3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFD b250cmFjdElELCBuc0lGaWxlICphU3BlYywgY29uc3QgY2hhciAqYUxvY2F0aW9uLCBQUkJvb2wg YVJlcGxhY2UsIFBSQm9vbCBhUGVyc2lzdCwgY29uc3QgY2hhciAqYVR5cGUpID0gMDsKIyAyMDcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyT2Jzb2xldGUu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAm IGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQs IG5zSUZpbGUgKmFMaWJyYXJ5LCBQUkJvb2wgYVJlcGxhY2UsIFBSQm9vbCBhUGVyc2lzdCkgPSAw OwojIDIyNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJP YnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRMaWIoY29uc3Qg bnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFDb250 cmFjdElELCBjb25zdCBjaGFyICphRGxsTmFtZSwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBl cnNpc3QpID0gMDsKIyAyMzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25l bnRNYW5hZ2VyT2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJGYWN0b3J5 KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lGYWN0b3J5ICphRmFjdG9yeSkgPSAwOwojIDI1MiAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5o IgogIHZpcnR1YWwgbnNyZXN1bHQgVW5yZWdpc3RlckNvbXBvbmVudChjb25zdCBuc0NJRCAmIGFD bGFzcywgY29uc3QgY2hhciAqYUxvY2F0aW9uKSA9IDA7CiMgMjYxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAmIGFDbGFzcywgbnNJRmls ZSAqYUxpYnJhcnlTcGVjKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRnJlZUxpYnJh cmllcyh2b2lkKSA9IDA7CgoKCgogIGVudW0geyBOU19TdGFydHVwID0gMCB9OwoKICBlbnVtIHsg TlNfU2NyaXB0ID0gMSB9OwoKICBlbnVtIHsgTlNfVGltZXIgPSAyIH07CgogIGVudW0geyBOU19T aHV0ZG93biA9IDMgfTsKIyAyOTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21w b25lbnRNYW5hZ2VyT2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEF1dG9SZWdpc3RlcihQ UkludDMyIHdoZW4sIG5zSUZpbGUgKmRpcmVjdG9yeSkgPSAwOwojIDMwNiAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZpcnR1YWwg bnNyZXN1bHQgQXV0b1JlZ2lzdGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAqYUZp bGVMb2NhdGlvbikgPSAwOwojIDMxNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNv bXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQXV0b1VucmVnaXN0 ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICphRmlsZUxvY2F0aW9uKSA9IDA7CiMg MzI3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29s ZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1JlZ2lzdGVyZWQoY29uc3QgbnNDSUQgJiBhQ2xh c3MsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDMzNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRW51 bWVyYXRlQ0xTSURzKG5zSUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CiMgMzQ3ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBFbnVtZXJhdGVDb250cmFjdElEcyhuc0lFbnVtZXJhdG9yICoqX3JldHZh bCkgPSAwOwoKfTsKIyA1OTkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25l bnRNYW5hZ2VyT2Jzb2xldGUuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnND b21wb25lbnRNYW5hZ2VyVXRpbHMuaCIgMQojIDYwMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIiAyCiMgNDIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIiAyCgpjbGFzcyBuc0lF bnVtZXJhdG9yOwpjbGFzcyBuc0lGYWN0b3J5OwpjbGFzcyBuc0lGaWxlOwojIDY4ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb20vbnNDb21wb25lbnRNYW5hZ2VyT2Jzb2xldGUuaCIKZXh0ZXJu IG5zcmVzdWx0Ck5TX0dldEdsb2JhbENvbXBvbmVudE1hbmFnZXIobnNJQ29tcG9uZW50TWFuYWdl ciogKnJlc3VsdCk7CgoKCgpjbGFzcyBuc0NvbXBvbmVudE1hbmFnZXIgewpwdWJsaWM6CiAgc3Rh dGljIG5zcmVzdWx0IEluaXRpYWxpemUodm9pZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRmluZEZh Y3RvcnkoY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJRmFjdG9yeSAqKmFGYWN0b3J5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRDbGFzc09iamVj dChjb25zdCBuc0NJRCAmYUNsYXNzLCBjb25zdCBuc0lJRCAmYUlJRCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IENv bnRyYWN0SURUb0NsYXNzSUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNDSUQgKmFDbGFzcyk7CgoKCiAgc3RhdGljIG5zcmVzdWx0IENM U0lEVG9Db250cmFjdElEKG5zQ0lEICphQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciogKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciogKmFDb250cmFjdElEKTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZShj b25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lT dXBwb3J0cyAqYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBuc0lJRCAmYUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFS ZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKGNvbnN0IGNoYXIgKmFD b250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAq YURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAm YUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoK CiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmYUNsYXNzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElE LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqYUZhY3Rvcnks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxhY2UpOwojIDEy MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ29tcG9uZW50TWFuYWdlck9ic29sZXRl LmgiCiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50KGNvbnN0IG5zQ0lEICZhQ2xh c3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ2xhc3NOYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphTGlicmFyeVBlcnNp c3RlbnREZXNjcmlwdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFS ZXBsYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsK CgoKICBzdGF0aWMgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRTcGVjKGNvbnN0IG5zQ0lEICZh Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNs YXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICph Q29udHJhY3RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxlICph TGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxh Y2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsK CgoKCiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50TGliKGNvbnN0IG5zQ0lEICZh Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICphZGxsTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJCb29sIGFSZXBsYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUkJvb2wgYVBlcnNpc3QpOwoKCgogIHN0YXRpYyBuc3Jlc3VsdCBVbnJlZ2lzdGVyRmFj dG9yeShjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lGYWN0b3J5ICphRmFjdG9yeSk7CgoKICBzdGF0aWMgbnNyZXN1bHQgVW5yZWdpc3Rl ckNvbXBvbmVudChjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFMaWJyYXJ5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBV bnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxlICphTGlicmFyeVNwZWMpOwoKCiAg c3RhdGljIG5zcmVzdWx0IEZyZWVMaWJyYXJpZXModm9pZCk7CgoKCgoKICBzdGF0aWMgbnNyZXN1 bHQgQXV0b1JlZ2lzdGVyKFBSSW50MzIgd2hlbiwgbnNJRmlsZSogZGlyZWN0b3J5KTsKICBzdGF0 aWMgbnNyZXN1bHQgQXV0b1JlZ2lzdGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAq Y29tcG9uZW50KTsKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1VucmVnaXN0ZXJDb21wb25lbnQoUFJJ bnQzMiB3aGVuLCBuc0lGaWxlICpjb21wb25lbnQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IElzUmVn aXN0ZXJlZChjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJCb29sICphUmVnaXN0ZXJlZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51bWVyYXRlQ0xT SURzKG5zSUVudW1lcmF0b3IqKiBhRW11bWVyYXRvcik7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51 bWVyYXRlQ29udHJhY3RJRHMobnNJRW51bWVyYXRvcioqIGFFbXVtZXJhdG9yKTsKCn07CiMgMzMg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJVdGlscy5oIiAy CiMgNDMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJVdGls cy5oIgpjbGFzcyBuc0NyZWF0ZUluc3RhbmNlQnlDSUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVy CnsKcHVibGljOgogICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKCBjb25zdCBuc0NJRCYgYUNJRCwg bnNJU3VwcG9ydHMqIGFPdXRlciwgbnNyZXN1bHQqIGFFcnJvclB0ciApCiAgICAgICAgOiBtQ0lE KGFDSUQpLAogICAgICAgICAgbU91dGVyKGFPdXRlciksCiAgICAgICAgICBtRXJyb3JQdHIoYUVy cm9yUHRyKQogICAgewoKICAgIH0KCiAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNv bnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3Q7Cgpwcml2YXRlOgogICAgY29uc3QgbnNDSUQmIG1D SUQ7CiAgICBuc0lTdXBwb3J0cyogbU91dGVyOwogICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKfTsK CmNsYXNzIG5zQ3JlYXRlSW5zdGFuY2VCeUNvbnRyYWN0SUQgOiBwdWJsaWMgbnNDT01QdHJfaGVs cGVyCnsKcHVibGljOgogICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRCggY29uc3QgY2hh ciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIg KQogICAgICAgIDogbUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQpLAogICAgICAgICAgbU91dGVyKGFP dXRlciksCiAgICAgICAgICBtRXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgIHZp cnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsK CnByaXZhdGU6CiAgICBjb25zdCBjaGFyKiBtQ29udHJhY3RJRDsKICAgIG5zSVN1cHBvcnRzKiBt T3V0ZXI7CiAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5zQ3JlYXRl SW5zdGFuY2VCeUNJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgbnNDSUQmIGFDSUQsIG5zcmVz dWx0KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKGFDSUQs IDAsIGVycm9yKTsKfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VCeUNJRApkb19DcmVh dGVJbnN0YW5jZSggY29uc3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVz dWx0KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKGFDSUQs IGFPdXRlciwgZXJyb3IpOwp9CgppbmxpbmUKY29uc3QgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJh Y3RJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zcmVzdWx0 KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRChh Q29udHJhY3RJRCwgMCwgZXJyb3IpOwp9CgppbmxpbmUKY29uc3QgbnNDcmVhdGVJbnN0YW5jZUJ5 Q29udHJhY3RJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5z SVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnND cmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRChhQ29udHJhY3RJRCwgYU91dGVyLCBlcnJvcik7Cn0K Cgp0ZW1wbGF0ZSA8Y2xhc3MgRGVzdGluYXRpb25UeXBlPgppbmxpbmUKbnNyZXN1bHQKQ2FsbENy ZWF0ZUluc3RhbmNlKCBjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgIG5z SVN1cHBvcnRzICphRGVsZWdhdGUsCiAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb25UeXBl KiogYURlc3RpbmF0aW9uICkKewogICAgOwoKICAgIHJldHVybiBuc0NvbXBvbmVudE1hbmFnZXI6 OkNyZWF0ZUluc3RhbmNlKGFDbGFzcywgYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpH ZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl aW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KGFEZXN0aW5hdGlvbikpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgRGVzdGluYXRpb25UeXBlPgppbmxpbmUKbnNyZXN1bHQKQ2FsbENyZWF0ZUluc3RhbmNlKCBj b25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uVHlwZSoq IGFEZXN0aW5hdGlvbiApCnsKICAgIDsKCiAgICByZXR1cm4gbnNDb21wb25lbnRNYW5hZ2VyOjpD cmVhdGVJbnN0YW5jZShhQ2xhc3MsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf Y2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9uKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBEZXN0aW5h dGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsQ3JlYXRlSW5zdGFuY2UoIGNvbnN0IGNoYXIg KmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICphRGVsZWdhdGUs CiAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb25UeXBlKiogYURlc3RpbmF0aW9uICkKewog ICAgOwogICAgOwoKICAgIHJldHVybiBuc0NvbXBvbmVudE1hbmFnZXI6OkNyZWF0ZUluc3RhbmNl KGFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJSUQoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQq KiA+KGFEZXN0aW5hdGlvbikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRGVzdGluYXRpb25UeXBlPgpp bmxpbmUKbnNyZXN1bHQKQ2FsbENyZWF0ZUluc3RhbmNlKCBjb25zdCBjaGFyICphQ29udHJhY3RJ RCwKICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdGluYXRpb24gKQp7 CiAgICA7CiAgICA7CgogICAgcmV0dXJuIG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRlSW5zdGFu Y2UoYUNvbnRyYWN0SUQsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwg dm9pZCoqID4oYURlc3RpbmF0aW9uKSk7Cn0KCgpleHRlcm4gY29uc3QgY2hhciB4cGNvbUtleU5h bWVbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgeHBjb21Db21wb25lbnRzS2V5TmFtZVtdOwpleHRlcm4g Y29uc3QgY2hhciBsYXN0TW9kVmFsdWVOYW1lW107CmV4dGVybiBjb25zdCBjaGFyIGZpbGVTaXpl VmFsdWVOYW1lW107CmV4dGVybiBjb25zdCBjaGFyIG5hdGl2ZUNvbXBvbmVudFR5cGVbXTsKZXh0 ZXJuIGNvbnN0IGNoYXIgc3RhdGljQ29tcG9uZW50VHlwZVtdOwojIDE1OSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXIuaCIgMgojIDIzICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIgMgoKCgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJU2NyaXB0YWJsZUludGVyZmFjZXMuaCIgMQojIDE0 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVNjcmlwdGFibGVJbnRlcmZhY2Vz LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUludGVyZmFjZUluZm9NYW5h Z2VyLmgiIDEKIyAxNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUludGVyZmFjZUlu Zm9NYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUludGVyZmFj ZUluZm8uaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW50ZXJmYWNl SW5mby5oIgpjbGFzcyBuc1hQVE1ldGhvZEluZm87CmNsYXNzIG5zWFBUQ29uc3RhbnQ7CmNsYXNz IG5zWFBUUGFyYW1JbmZvOwpjbGFzcyBuc1hQVFR5cGU7CiMgMjkgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lJbnRlcmZhY2VJbmZvLmgiCmNsYXNzIG5zSUludGVyZmFjZUluZm8gOiBw dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MjE1ZGJlMDQsIDB4OTRhNywgMHgxMWQy LCB7IDB4YmEsIDB4NTgsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4NWQsIDB4ZDcgfX07IHJl dHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lKGNoYXIgKiAqYU5hbWUpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJmYWNlSUlEKG5zSUlEICogKmFJbnRlcmZh Y2VJSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTY3JpcHRhYmxlKFBSQm9vbCAqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJSW50ZXJmYWNlSW5m byAqICphUGFyZW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldGhvZENvdW50 KFBSVWludDE2ICphTWV0aG9kQ291bnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29u c3RhbnRDb3VudChQUlVpbnQxNiAqYUNvbnN0YW50Q291bnQpID0gMDsKCgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRNZXRob2RJbmZvKFBSVWludDE2IGluZGV4LCBjb25zdCBuc1hQVE1ldGhv ZEluZm8gKiAqaW5mbykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRob2RJbmZvRm9y TmFtZShjb25zdCBjaGFyICptZXRob2ROYW1lLCBQUlVpbnQxNiAqaW5kZXgsIGNvbnN0IG5zWFBU TWV0aG9kSW5mbyAqICppbmZvKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnN0YW50 KFBSVWludDE2IGluZGV4LCBjb25zdCBuc1hQVENvbnN0YW50ICogKmNvbnN0YW50KSA9IDA7CgoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbmZvRm9yUGFyYW0oUFJVaW50MTYgbWV0aG9kSW5k ZXgsIGNvbnN0IG5zWFBUUGFyYW1JbmZvICogcGFyYW0sIG5zSUludGVyZmFjZUluZm8gKipfcmV0 dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElJREZvclBhcmFtKFBSVWludDE2IG1l dGhvZEluZGV4LCBjb25zdCBuc1hQVFBhcmFtSW5mbyAqIHBhcmFtLCBuc0lJRCAqICpfcmV0dmFs KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGVGb3JQYXJhbShQUlVpbnQxNiBt ZXRob2RJbmRleCwgY29uc3QgbnNYUFRQYXJhbUluZm8gKiBwYXJhbSwgUFJVaW50MTYgZGltZW5z aW9uLCBuc1hQVFR5cGUgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2l6 ZUlzQXJnTnVtYmVyRm9yUGFyYW0oUFJVaW50MTYgbWV0aG9kSW5kZXgsIGNvbnN0IG5zWFBUUGFy YW1JbmZvICogcGFyYW0sIFBSVWludDE2IGRpbWVuc2lvbiwgUFJVaW50OCAqX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGhJc0FyZ051bWJlckZvclBhcmFtKFBSVWlu dDE2IG1ldGhvZEluZGV4LCBjb25zdCBuc1hQVFBhcmFtSW5mbyAqIHBhcmFtLCBQUlVpbnQxNiBk aW1lbnNpb24sIFBSVWludDggKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 SW50ZXJmYWNlSXNBcmdOdW1iZXJGb3JQYXJhbShQUlVpbnQxNiBtZXRob2RJbmRleCwgY29uc3Qg bnNYUFRQYXJhbUluZm8gKiBwYXJhbSwgUFJVaW50OCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBJc0lJRChjb25zdCBuc0lJRCAqIElJRCwgUFJCb29sICpfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVTaGFyZWQoY29uc3QgY2hhciAqKm5hbWUpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SUlEU2hhcmVkKGNvbnN0IG5zSUlEICogKmlpZCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0Z1bmN0aW9uKFBSQm9vbCAqX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNBbmNlc3Rvcihjb25zdCBuc0lJRCAqIGlpZCwgUFJC b29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElJREZvclBhcmFtTm9B bGxvYyhQUlVpbnQxNiBtZXRob2RJbmRleCwgY29uc3QgbnNYUFRQYXJhbUluZm8gKiBwYXJhbSwg bnNJSUQgKmlpZCkgPSAwOwoKfTsKIyAxNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SUludGVyZmFjZUluZm9NYW5hZ2VyLmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJRW51bWVyYXRvci5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lFbnVtZXJhdG9yLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNp bXBsZUVudW1lcmF0b3IuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ U2ltcGxlRW51bWVyYXRvci5oIgpjbGFzcyBuc0lTaW1wbGVFbnVtZXJhdG9yIDogcHVibGljIG5z SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQxODk5MjQwLCAweGY5ZDIsIDB4MTFkMiwgeyAweGJk LCAweGQ2LCAweDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAweDc0IH19OyByZXR1cm4gaWlk O30KIyA1MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNpbXBsZUVudW1lcmF0b3Iu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc01vcmVFbGVtZW50cyhQUkJvb2wgKl9yZXR2YWwpID0g MDsKIyA2OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNpbXBsZUVudW1lcmF0b3Iu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5leHQobnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7 Cgp9OwojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRW51bWVyYXRvci5oIiAy CgoKCgoKCgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX05ld0VtcHR5RW51bWVyYXRvcihuc0lTaW1w bGVFbnVtZXJhdG9yKiogYVJlc3VsdCk7CiMgMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSUVudW1lcmF0b3IgOiBwdWJsaWMgbnNJU3VwcG9y dHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4YWQzODUyODYsIDB4Y2JjNCwgMHgxMWQyLCB7IDB4OGMsIDB4Y2Es IDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEZpcnN0KHZvaWQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBOZXh0KHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3VycmVudEl0ZW0obnNJ U3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRG9uZSh2 b2lkKSA9IDA7Cgp9OwojIDE0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUVudW1l cmF0b3IuaCIKY2xhc3MgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IgOiBwdWJsaWMgbnNJRW51 bWVyYXRvciB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg3NWYxNThhMCwgMHhjYWRkLCAweDExZDIsIHsgMHg4Yywg MHhjYSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9 CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGFzdCh2b2lkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgUHJldih2b2lkKSA9IDA7Cgp9OwojIDE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBj b20vbnNJSW50ZXJmYWNlSW5mb01hbmFnZXIuaCIgMgojIDM3ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNJSW50ZXJmYWNlSW5mb01hbmFnZXIuaCIKY2xhc3MgbnNJSW50ZXJmYWNlSW5m b01hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OGIxNjE5MDAsIDB4 YmUyYiwgMHgxMWQyLCB7IDB4OTgsIDB4MzEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQs IDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbmZvRm9ySUlE KGNvbnN0IG5zSUlEICogaWlkLCBuc0lJbnRlcmZhY2VJbmZvICoqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRJbmZvRm9yTmFtZShjb25zdCBjaGFyICpuYW1lLCBuc0lJbnRl cmZhY2VJbmZvICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJSURGb3JO YW1lKGNvbnN0IGNoYXIgKm5hbWUsIG5zSUlEICogKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0TmFtZUZvcklJRChjb25zdCBuc0lJRCAqIGlpZCwgY2hhciAqKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW51bWVyYXRlSW50ZXJmYWNlcyhuc0lFbnVtZXJh dG9yICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRvUmVnaXN0ZXJJbnRl cmZhY2VzKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW51bWVyYXRlSW50ZXJmYWNl c1dob3NlTmFtZXNTdGFydFdpdGgoY29uc3QgY2hhciAqcHJlZml4LCBuc0lFbnVtZXJhdG9yICoq X3JldHZhbCkgPSAwOwoKfTsKIyAxNzYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJ bnRlcmZhY2VJbmZvTWFuYWdlci5oIgpjbGFzcyBuc0lJbnRlcmZhY2VJbmZvU3VwZXJNYW5hZ2Vy IDogcHVibGljIG5zSUludGVyZmFjZUluZm9NYW5hZ2VyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDBlZTIyODUw LCAweGJjNmEsIDB4MTFkNSwgeyAweDkxLCAweDM0LCAweDAwLCAweDEwLCAweGE0LCAweGU3LCAw eDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkQWRkaXRp b25hbE1hbmFnZXIobnNJSW50ZXJmYWNlSW5mb01hbmFnZXIgKm1hbmFnZXIpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgUmVtb3ZlQWRkaXRpb25hbE1hbmFnZXIobnNJSW50ZXJmYWNlSW5mb01h bmFnZXIgKm1hbmFnZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzQWRkaXRpb25hbE1h bmFnZXJzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJh dGVBZGRpdGlvbmFsTWFuYWdlcnMobnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsK Cn07CiMgMTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJU2NyaXB0YWJsZUlu dGVyZmFjZXMuaCIgMgojIDMzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVNj cmlwdGFibGVJbnRlcmZhY2VzLmgiCmNsYXNzIG5zSVNjcmlwdGFibGVJbnRlcmZhY2VzIDogcHVi bGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDAxYzc4YzY1LCAweDMxZGEsIDB4NDU2Yiwg eyAweDkwLCAweGJmLCAweGRhLCAweDM5LCAweGQwLCAweDlmLCAweGRjLCAweGJmIH19OyByZXR1 cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFuYWdlcihuc0lJbnRlcmZhY2VJbmZv TWFuYWdlciAqICphTWFuYWdlcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWFuYWdlcihu c0lJbnRlcmZhY2VJbmZvTWFuYWdlciAqIGFNYW5hZ2VyKSA9IDA7Cgp9OwojIDI3ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIgMgojIDQ1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBDQ29t cG9uZW50c19DbGFzc2VzIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDk3OGZm NTIwLCAweGQyNmMsIDB4MTFkMiwgeyAweDk4LCAweDQyLCAweDAwLCAweDYwLCAweDA4LCAweDk2 LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCn07CiMgMTA3ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBDQ29tcG9uZW50c19D bGFzc2VzQnlJRCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMzZhOTU5MCwg MHg0ZDE5LCAweDExZDMsIHsgMHg5OCwgMHg5MywgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgy NCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDE2OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCmNsYXNzIG5zSVhQQ0NvbXBvbmVudHNfUmVzdWx0 cyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyZmMyMjlhMCwgMHg1ODYwLCAw eDExZDMsIHsgMHg5OCwgMHg5OSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9 fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDIzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVj dC94cGNjb21wb25lbnRzLmgiCmNsYXNzIG5zSVhQQ0NvbXBvbmVudHNfSUQgOiBwdWJsaWMgbnNJ U3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4Nzk5NGE2ZTAsIDB4ZTAyOCwgMHgxMWQzLCB7IDB4OGYs IDB4NWQsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7 fQoKfTsKIyAyOTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBjY29tcG9uZW50 cy5oIgpjbGFzcyBuc0lYUENDb21wb25lbnRzX0V4Y2VwdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0 cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z dCBuc0lJRCBpaWQgPSB7MHg1YmYwMzljMCwgMHhlMDI4LCAweDExZDMsIHsgMHg4ZiwgMHg1ZCwg MHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9Cgp9Owoj IDM1NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCmNs YXNzIG5zSVhQQ0NvbXBvbmVudHNfQ29uc3RydWN0b3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ SUQgaWlkID0gezB4ODg2NTU2NDAsIDB4ZTAyOCwgMHgxMWQzLCB7IDB4OGYsIDB4NWQsIDB4MDAs IDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7fQoKfTsKIyA0MTcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBjY29tcG9uZW50cy5oIgpjbGFzcyBu c0lYUENDb25zdHJ1Y3RvciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhjODE0 Y2EyMCwgMHhlMGRjLCAweDExZDMsIHsgMHg4ZiwgMHg1ZiwgMHgwMCwgMHgxMCwgMHhhNCwgMHhl NywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENs YXNzSUQobnNJSlNDSUQgKiAqYUNsYXNzSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 SW50ZXJmYWNlSUQobnNJSlNJSUQgKiAqYUludGVyZmFjZUlEKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEluaXRpYWxpemVyKGNoYXIgKiAqYUluaXRpYWxpemVyKSA9IDA7Cgp9OwojIDUx MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCmNsYXNz IG5zSVhQQ0NvbXBvbmVudHMgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NDI2 MjRmODAsIDB4ZDI2YywgMHgxMWQyLCB7IDB4OTgsIDB4NDIsIDB4MDAsIDB4NjAsIDB4MDgsIDB4 OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJ bnRlcmZhY2VzKG5zSVNjcmlwdGFibGVJbnRlcmZhY2VzICogKmFJbnRlcmZhY2VzKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNzZXMobnNJWFBDQ29tcG9uZW50c19DbGFzc2VzICog KmFDbGFzc2VzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNzZXNCeUlEKG5zSVhQ Q0NvbXBvbmVudHNfQ2xhc3Nlc0J5SUQgKiAqYUNsYXNzZXNCeUlEKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFN0YWNrKG5zSVN0YWNrRnJhbWUgKiAqYVN0YWNrKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFJlc3VsdHMobnNJWFBDQ29tcG9uZW50c19SZXN1bHRzICogKmFSZXN1 bHRzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1hbmFnZXIobnNJQ29tcG9uZW50TWFu YWdlciAqICphTWFuYWdlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJRChuc0lYUEND b21wb25lbnRzX0lEICogKmFJRCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeGNlcHRp b24obnNJWFBDQ29tcG9uZW50c19FeGNlcHRpb24gKiAqYUV4Y2VwdGlvbikgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDb25zdHJ1Y3Rvcihuc0lYUENDb21wb25lbnRzX0NvbnN0cnVjdG9y ICogKmFDb25zdHJ1Y3RvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1N1Y2Nlc3NDb2Rl KG5zcmVzdWx0IHJlc3VsdCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IExvb2t1cE1ldGhvZCh2b2lkKSA9IDA7Cgp9OwojIDE5ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIiAyCiMgMzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUV4Y2VwdGlvblNlcnZpY2UuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJRXhjZXB0aW9uU2VydmljZS5oIgpjbGFzcyBuc0lFeGNlcHRpb25Qcm92aWRlciA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwNTc3NzQ0YywgMHhjMWQyLCAweDQ3 ZjIsIHsgMHg4YiwgMHhjYywgMHhjZSwgMHg3YSwgMHg5ZSwgMHg1YSwgMHg4OCwgMHhmYyB9fTsg cmV0dXJuIGlpZDt9CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeGNlcHRpb24obnNyZXN1bHQg cmVzdWx0LCBuc0lFeGNlcHRpb24gKmRlZmF1bHRFeGNlcHRpb24sIG5zSUV4Y2VwdGlvbiAqKl9y ZXR2YWwpID0gMDsKCn07CiMgOTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lFeGNl cHRpb25TZXJ2aWNlLmgiCmNsYXNzIG5zSUV4Y2VwdGlvbk1hbmFnZXIgOiBwdWJsaWMgbnNJU3Vw cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4ZWZjOWQwMGIsIDB4MjMxYywgMHg0ZmViLCB7IDB4ODUsIDB4 MmMsIDB4YWMsIDB4MDEsIDB4NzIsIDB4NjYsIDB4YTQsIDB4MTUgfX07IHJldHVybiBpaWQ7fQoK CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q3VycmVudEV4Y2VwdGlvbihuc0lFeGNlcHRpb24gKmVy cm9yKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50RXhjZXB0aW9uKG5zSUV4 Y2VwdGlvbiAqKl9yZXR2YWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeGNlcHRp b25Gcm9tUHJvdmlkZXIobnNyZXN1bHQgcmMsIG5zSUV4Y2VwdGlvbiAqZGVmYXVsdEV4Y2VwdGlv biwgbnNJRXhjZXB0aW9uICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxOTIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0lFeGNlcHRpb25TZXJ2aWNlLmgiCmNsYXNzIG5zSUV4Y2VwdGlvblNl cnZpY2UgOiBwdWJsaWMgbnNJRXhjZXB0aW9uTWFuYWdlciB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzNWE4OGY1 NCwgMHhmMjY3LCAweDQ0MTQsIHsgMHg5MiwgMHhhNywgMHgxOSwgMHgxZiwgMHg2NCwgMHg1NCwg MHhhYiwgMHg1MiB9fTsgcmV0dXJuIGlpZDt9CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJy ZW50RXhjZXB0aW9uTWFuYWdlcihuc0lFeGNlcHRpb25NYW5hZ2VyICogKmFDdXJyZW50RXhjZXB0 aW9uTWFuYWdlcikgPSAwOwojIDIxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUV4 Y2VwdGlvblNlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyRXhjZXB0aW9uUHJv dmlkZXIobnNJRXhjZXB0aW9uUHJvdmlkZXIgKnByb3ZpZGVyLCBQUlVpbnQzMiBtb2R1bGVDb2Rl KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJFeGNlcHRpb25Qcm92aWRlcihu c0lFeGNlcHRpb25Qcm92aWRlciAqcHJvdmlkZXIsIFBSVWludDMyIG1vZHVsZUNvZGUpID0gMDsK Cn07CiMgMzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0Lmgi IDIKCgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIiAxCiMgNDAg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2pzL2pzdHlwZXMuaCIgMQojIDYzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanN0 eXBlcy5oIgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgNjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVz LmgiIDIKIyAyMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgiCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXV0b2NmZy5oIiAxCiMgMjM2ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvanMvanN0eXBlcy5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pz b3NkZXAuaCIgMQojIDIzNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzdHlwZXMuaCIgMgoK CgoKZXh0ZXJuICJDIiB7CiMgMjUxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanN0eXBlcy5o Igp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgSlNVaW50ODsKdHlwZWRlZiBzaWduZWQgY2hhciBKU0lu dDg7CiMgMjY0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanN0eXBlcy5oIgp0eXBlZGVmIHVu c2lnbmVkIHNob3J0IEpTVWludDE2Owp0eXBlZGVmIHNob3J0IEpTSW50MTY7CiMgMjc3ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvanMvanN0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGludCBKU1Vp bnQzMjsKdHlwZWRlZiBpbnQgSlNJbnQzMjsKIyAzMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9q cy9qc3R5cGVzLmgiCnR5cGVkZWYgbG9uZyBsb25nIEpTSW50NjQ7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBsb25nIEpTVWludDY0OwojIDMzNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzdHlw ZXMuaCIKdHlwZWRlZiBpbnQgSlNJbnRuOwp0eXBlZGVmIHVuc2lnbmVkIGludCBKU1VpbnRuOwoj IDM0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzdHlwZXMuaCIKdHlwZWRlZiBkb3VibGUg SlNGbG9hdDY0OwoKCgoKCgp0eXBlZGVmIHNpemVfdCBKU1NpemU7CgoKCgoKCgp0eXBlZGVmIHB0 cmRpZmZfdCBKU1B0cmRpZmY7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgSlNVcHRyZGlm ZjsKIyAzNzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgiCnR5cGVkZWYgSlNJ bnRuIEpTQm9vbDsKIyAzODkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgiCnR5 cGVkZWYgSlNVaW50OCBKU1BhY2tlZEJvb2w7CgoKCgp0eXBlZGVmIGxvbmcgSlNXb3JkOwp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgSlNVd29yZDsKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pz L2pzb3R5cGVzLmgiIDEKIyAzOTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgi IDIKCn0KIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIgMgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2NvbXBhdC5oIiAxCiMgNDUgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9qcy9qc2NvbXBhdC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2xv bmcuaCIgMQojIDQ4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNsb25nLmgiCmV4dGVybiAi QyIgewojIDY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNsb25nLmgiCmV4dGVybiBKU0lu dDY0IEpTTExfTWF4SW50KHZvaWQpOwpleHRlcm4gSlNJbnQ2NCBKU0xMX01pbkludCh2b2lkKTsK ZXh0ZXJuIEpTSW50NjQgSlNMTF9aZXJvKHZvaWQpOwojIDQzMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2pzL2pzbG9uZy5oIgp9CiMgNDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2NvbXBh dC5oIiAyCgp0eXBlZGVmIEpTSW50biBpbnROOwp0eXBlZGVmIEpTVWludG4gdWludE47CnR5cGVk ZWYgSlNVd29yZCBqc3V3b3JkOwp0eXBlZGVmIEpTV29yZCBqc3dvcmQ7CnR5cGVkZWYgZmxvYXQg ZmxvYXQzMjsKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIgMgoKZXh0 ZXJuICJDIiB7CgoKdHlwZWRlZiB1aW50MTYganNjaGFyOwp0eXBlZGVmIGludDMyIGpzaW50Owp0 eXBlZGVmIHVpbnQzMiBqc3VpbnQ7CnR5cGVkZWYgZmxvYXQ2NCBqc2RvdWJsZTsKdHlwZWRlZiBq c3dvcmQganN2YWw7CnR5cGVkZWYganN3b3JkIGpzaWQ7CnR5cGVkZWYgaW50MzIganNyZWZjb3Vu dDsKCnR5cGVkZWYgZW51bSBKU1ZlcnNpb24gewogICAgSlNWRVJTSU9OXzFfMCA9IDEwMCwKICAg IEpTVkVSU0lPTl8xXzEgPSAxMTAsCiAgICBKU1ZFUlNJT05fMV8yID0gMTIwLAogICAgSlNWRVJT SU9OXzFfMyA9IDEzMCwKICAgIEpTVkVSU0lPTl8xXzQgPSAxNDAsCiAgICBKU1ZFUlNJT05fMV81 ID0gMTUwLAogICAgSlNWRVJTSU9OX0RFRkFVTFQgPSAwLAogICAgSlNWRVJTSU9OX1VOS05PV04g PSAtMQp9IEpTVmVyc2lvbjsKCgoKCgp0eXBlZGVmIGVudW0gSlNUeXBlIHsKICAgIEpTVFlQRV9W T0lELAogICAgSlNUWVBFX09CSkVDVCwKICAgIEpTVFlQRV9GVU5DVElPTiwKICAgIEpTVFlQRV9T VFJJTkcsCiAgICBKU1RZUEVfTlVNQkVSLAogICAgSlNUWVBFX0JPT0xFQU4sCiAgICBKU1RZUEVf TElNSVQKfSBKU1R5cGU7CgoKdHlwZWRlZiBlbnVtIEpTQWNjZXNzTW9kZSB7CiAgICBKU0FDQ19Q Uk9UTyA9IDAsCiAgICBKU0FDQ19QQVJFTlQgPSAxLAogICAgSlNBQ0NfSU1QT1JUID0gMiwKICAg IEpTQUNDX1dBVENIID0gMywKICAgIEpTQUNDX1JFQUQgPSA0LAogICAgSlNBQ0NfV1JJVEUgPSA4 LAogICAgSlNBQ0NfTElNSVQKfSBKU0FjY2Vzc01vZGU7CgoKCgoKCgp0eXBlZGVmIGVudW0gSlNJ dGVyYXRlT3AgewogICAgSlNFTlVNRVJBVEVfSU5JVCwKICAgIEpTRU5VTUVSQVRFX05FWFQsCiAg ICBKU0VOVU1FUkFURV9ERVNUUk9ZCn0gSlNJdGVyYXRlT3A7CgoKdHlwZWRlZiBzdHJ1Y3QgSlND bGFzcyBKU0NsYXNzOwp0eXBlZGVmIHN0cnVjdCBKU0NvbnN0RG91YmxlU3BlYyBKU0NvbnN0RG91 YmxlU3BlYzsKdHlwZWRlZiBzdHJ1Y3QgSlNDb250ZXh0IEpTQ29udGV4dDsKdHlwZWRlZiBzdHJ1 Y3QgSlNFcnJvclJlcG9ydCBKU0Vycm9yUmVwb3J0Owp0eXBlZGVmIHN0cnVjdCBKU0Z1bmN0aW9u IEpTRnVuY3Rpb247CnR5cGVkZWYgc3RydWN0IEpTRnVuY3Rpb25TcGVjIEpTRnVuY3Rpb25TcGVj Owp0eXBlZGVmIHN0cnVjdCBKU0lkQXJyYXkgSlNJZEFycmF5Owp0eXBlZGVmIHN0cnVjdCBKU1By b3BlcnR5IEpTUHJvcGVydHk7CnR5cGVkZWYgc3RydWN0IEpTUHJvcGVydHlTcGVjIEpTUHJvcGVy dHlTcGVjOwp0eXBlZGVmIHN0cnVjdCBKU09iamVjdCBKU09iamVjdDsKdHlwZWRlZiBzdHJ1Y3Qg SlNPYmplY3RNYXAgSlNPYmplY3RNYXA7CnR5cGVkZWYgc3RydWN0IEpTT2JqZWN0T3BzIEpTT2Jq ZWN0T3BzOwp0eXBlZGVmIHN0cnVjdCBKU1J1bnRpbWUgSlNSdW50aW1lOwp0eXBlZGVmIHN0cnVj dCBKU1J1bnRpbWUgSlNUYXNrU3RhdGU7CnR5cGVkZWYgc3RydWN0IEpTU2NyaXB0IEpTU2NyaXB0 Owp0eXBlZGVmIHN0cnVjdCBKU1N0cmluZyBKU1N0cmluZzsKdHlwZWRlZiBzdHJ1Y3QgSlNYRFJT dGF0ZSBKU1hEUlN0YXRlOwp0eXBlZGVmIHN0cnVjdCBKU0V4Y2VwdGlvblN0YXRlIEpTRXhjZXB0 aW9uU3RhdGU7CnR5cGVkZWYgc3RydWN0IEpTTG9jYWxlQ2FsbGJhY2tzIEpTTG9jYWxlQ2FsbGJh Y2tzOwojIDEzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIKdHlwZWRlZiBK U0Jvb2wKKCogSlNQcm9wZXJ0eU9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3Zh bCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwKTsKIyAxNjMg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCnR5cGVkZWYgSlNCb29sCigqIEpT TmV3RW51bWVyYXRlT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0l0ZXJhdGVPcCBlbnVtX29wLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnN0YXRlcCwganNpZCAqaWRwKTsKCgoK Cgp0eXBlZGVmIEpTQm9vbAooKiBKU0VudW1lcmF0ZU9wKShKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqKTsKIyAxODcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCnR5cGVk ZWYgSlNCb29sCigqIEpTUmVzb2x2ZU9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBq c3ZhbCBpZCk7CiMgMjAwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBl ZGVmIEpTQm9vbAooKiBKU05ld1Jlc29sdmVPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9i aiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gZmxh Z3MsIEpTT2JqZWN0ICoqb2JqcCk7CgoKCgoKdHlwZWRlZiBKU0Jvb2wKKCogSlNDb252ZXJ0T3Ap KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTVHlwZSB0eXBlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCk7CgoKCgoKCnR5cGVkZWYgdm9pZAooKiBKU0Zp bmFsaXplT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopOwoKCgoKCnR5cGVkZWYgdm9p ZAooKiBKU1N0cmluZ0ZpbmFsaXplT3ApKEpTQ29udGV4dCAqY3gsIEpTU3RyaW5nICpzdHIpOwoj IDI0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIKdHlwZWRlZiBKU09iamVj dE9wcyAqCigqIEpTR2V0T2JqZWN0T3BzKShKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCk7 CiMgMjYxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9v bAooKiBKU0NoZWNrQWNjZXNzT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFs IGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FjY2Vzc01vZGUgbW9k ZSwganN2YWwgKnZwKTsKCgoKCgp0eXBlZGVmIEpTQm9vbAooKiBKU1hEUk9iamVjdE9wKShKU1hE UlN0YXRlICp4ZHIsIEpTT2JqZWN0ICoqb2JqcCk7CgoKCgoKCnR5cGVkZWYgSlNCb29sCigqIEpT SGFzSW5zdGFuY2VPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgdiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNCb29sICpicCk7CiMgMjk5ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBlZGVmIHVpbnQzMgooKiBKU01hcmtP cCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgdm9pZCAqYXJnKTsKIyAzMTcgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCnR5cGVkZWYgSlNPYmplY3RNYXAgKgooKiBK U05ld09iamVjdE1hcE9wKShKU0NvbnRleHQgKmN4LCBqc3JlZmNvdW50IG5yZWZzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3RPcHMgKm9wcywgSlNDbGFzcyAq Y2xhc3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq KTsKCgoKCgp0eXBlZGVmIHZvaWQKKCogSlNPYmplY3RNYXBPcCkoSlNDb250ZXh0ICpjeCwgSlNP YmplY3RNYXAgKm1hcCk7CiMgMzQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5o Igp0eXBlZGVmIEpTQm9vbAooKiBKU0xvb2t1cFByb3BPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmpl Y3QgKm9iaiwganNpZCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09i amVjdCAqKm9ianAsIEpTUHJvcGVydHkgKipwcm9wcAoKCgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKIyAzNjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgi CnR5cGVkZWYgSlNCb29sCigqIEpTRGVmaW5lUHJvcE9wKShKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaWQgaWQsIGpzdmFs IHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVydHlPcCBn ZXR0ZXIsIEpTUHJvcGVydHlPcCBzZXR0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludE4gYXR0cnMsIEpTUHJvcGVydHkgKipwcm9wcCk7CiMgMzgwICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9vbAooKiBKU1Byb3BlcnR5SWRP cCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganNpZCBpZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqdnApOwoKCgoKCgoKdHlwZWRlZiBKU0Jvb2wKKCog SlNBdHRyaWJ1dGVzT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaWQgaWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcm9wZXJ0eSAqcHJvcCwgdWludE4g KmF0dHJzcCk7CgoKCgoKCnR5cGVkZWYgSlNCb29sCigqIEpTQ2hlY2tBY2Nlc3NJZE9wKShKU0Nv bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2lkIGlkLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEpTQWNjZXNzTW9kZSBtb2RlLCBqc3ZhbCAqdnAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gKmF0dHJzcCk7CgoKCgoKCnR5cGVkZWYg SlNPYmplY3QgKgooKiBKU09iamVjdE9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsK CgoKCgoKCnR5cGVkZWYgdm9pZAooKiBKU1Byb3BlcnR5UmVmT3ApKEpTQ29udGV4dCAqY3gsIEpT T2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVy dHkgKnByb3ApOwoKCgoKCgp0eXBlZGVmIEpTQm9vbAooKiBKU1NldE9iamVjdFNsb3RPcCkoSlND b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50MzIgc2xvdCwgSlNPYmplY3QgKnBvYmopOwojIDQ0NCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2pzL2pzcHVidGQuaCIKdHlwZWRlZiBqc3ZhbAooKiBKU0dldFJlcXVpcmVkU2xv dE9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyIHNsb3QpOwoKdHlwZWRlZiB2b2lkCigqIEpTU2V0UmVx dWlyZWRTbG90T3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzIgc2xvdCwganN2YWwgdik7CgoKCnR5cGVk ZWYgSlNCb29sCigqIEpTTmF0aXZlKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCB1aW50 TiBhcmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICphcmd2LCBqc3ZhbCAq cnZhbCk7CgoKCnR5cGVkZWYgZW51bSBKU0dDU3RhdHVzIHsKICAgIEpTR0NfQkVHSU4sCiAgICBK U0dDX0VORCwKICAgIEpTR0NfTUFSS19FTkQsCiAgICBKU0dDX0ZJTkFMSVpFX0VORAp9IEpTR0NT dGF0dXM7Cgp0eXBlZGVmIEpTQm9vbAooKiBKU0dDQ2FsbGJhY2spKEpTQ29udGV4dCAqY3gsIEpT R0NTdGF0dXMgc3RhdHVzKTsKCnR5cGVkZWYgSlNCb29sCigqIEpTQnJhbmNoQ2FsbGJhY2spKEpT Q29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKdHlwZWRlZiB2b2lkCigqIEpTRXJyb3JS ZXBvcnRlcikoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqbWVzc2FnZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSlNFcnJvclJlcG9ydCAqcmVwb3J0KTsKCnR5cGVkZWYg c3RydWN0IEpTRXJyb3JGb3JtYXRTdHJpbmcgewogICAgY29uc3QgY2hhciAqZm9ybWF0OwogICAg dWludE4gYXJnQ291bnQ7Cn0gSlNFcnJvckZvcm1hdFN0cmluZzsKCnR5cGVkZWYgY29uc3QgSlNF cnJvckZvcm1hdFN0cmluZyAqCigqIEpTRXJyb3JDYWxsYmFjaykodm9pZCAqdXNlclJlZiwgY29u c3QgY2hhciAqbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50TiBlcnJvck51bWJlcik7CiMgNDk1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNw dWJ0ZC5oIgp0eXBlZGVmIEpTQm9vbAooKiBKU0xvY2FsZVRvVXBwZXJDYXNlKShKU0NvbnRleHQg KmN4LCBKU1N0cmluZyAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAganN2YWwgKnJ2YWwpOwoKdHlwZWRlZiBKU0Jvb2wKKCogSlNMb2NhbGVUb0xvd2VyQ2FzZSko SlNDb250ZXh0ICpjeCwgSlNTdHJpbmcgKnNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpzdmFsICpydmFsKTsKCnR5cGVkZWYgSlNCb29sCigqIEpTTG9jYWxlQ29t cGFyZSkoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SlNTdHJpbmcgKnNyYzEsIEpTU3RyaW5nICpzcmMyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgoKCgp0eXBlZGVmIHN0cnVjdCBKU1ByaW5jaXBhbHMg SlNQcmluY2lwYWxzOwojIDUyMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIK dHlwZWRlZiBKU0Jvb2wKKCogSlNQcmluY2lwYWxzVHJhbnNjb2RlcikoSlNYRFJTdGF0ZSAqeGRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcmluY2lwYWxz ICoqcHJpbmNpcGFsc3ApOwoKfQojIDQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0 L25zSVhQQ29ubmVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdGlu Zm8uaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0aW5mby5oIgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0LmgiIDEKIyA0NiAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1Y3QuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20veHB0X2FyZW5hLmgiIDEKIyA0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL3hwdF9hcmVuYS5oIgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMzMgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0 ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2JpdHMvd2Fp dHN0YXR1cy5oIiAzCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QK ICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNp Z25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2Rl Ojg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWlu YXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZh bDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVk IGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDIgMwojIDkzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgp0eXBl ZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0 eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAg fSBsZGl2X3Q7CgoKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9u ZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90OwoKCiMg MTM3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9t Yl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25z dCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0 ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25w dHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCl9fZXh0ZW5zaW9u X18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBkb3VibGUg c3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBm bG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBs b25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93 ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0 b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAg ICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRv cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7 CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAg IHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9s bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgp OwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQog ICAgIHRocm93ICgpOwoKIyAyMjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gbG9u ZyBpbnQgc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Us CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpl eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVy biBsb25nIGxvbmcgaW50IHN0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs ZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcg bG9uZyBpbnQgc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHN0 cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAg ICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3Ry dG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBk b3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2lu dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkK ICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25n IGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQg X19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxf aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv bmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFy ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkK ICAgICB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp IHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs IDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBf X2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19l bmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0 cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3Ry dG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgoKZXh0ZXJu IF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2Zf aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZQpzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwg KF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CgoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkK ewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwg MCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGlu dApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBf X3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCgpf X2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5h bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBf X2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBf X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBp bnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0 ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRv ZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9kIChfX25w dHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25z dCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIs IChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAo X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIs IChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxp bmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsK ICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KCiMgNDA4 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9f bikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyA0MjEgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl cm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVm LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoK CmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoK CgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAq cnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5k X2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVy biBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAg ICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7 CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRv bV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25l ZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBz ZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1 bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNp Z25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDgg KHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkg dGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194 c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93 ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1Ymlb M10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkg dGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hv cnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2ln bmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9k YXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0 IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVk IHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoK CmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hz dWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0 cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBf X3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGlu dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1 bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBt cmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAg ICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3Ry dWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNl ZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4gaW50 IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgoKCgoKCgoK CmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwg c2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp OwoKCgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXpl KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJl ZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9f cHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDI1ICIv dXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxs b2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90 IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU3NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy IDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2 b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIHZvaWQgYWJv cnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0 ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2Fy ZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCBleGl0IChp bnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoK CgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNo YXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChf X2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNo YXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBj aGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDY2MSAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVt cGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBs YXRlKSB0aHJvdyAoKTsKIyA2NzggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50 IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjg4ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRo cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19j b25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDcxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRo cm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQg KiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2Zu X3Q7CgoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2Nv bnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBz aXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNv cnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg ICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGlu dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcg aW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxv bmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxv bmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRp diAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKIyA3NzYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hh ciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f ZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVl LCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpx ZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJv dyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln aXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmlj dCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hh ciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhy b3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f ZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAq X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2 dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAg ICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAg ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJv dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3Qg X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBf X3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNp emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFy X3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2Nz dG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp OwoKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0 aHJvdyAoKTsKIyA4NTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IGdldHN1 Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAgICAgICAg Y2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBz ZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBw b3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3Jh bnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19m ZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXpl X3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9f bmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L3hwdF9hcmVuYS5oIiAyCiMgNzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfYXJl bmEuaCIKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgWFBUQXJlbmEgWFBUQXJlbmE7 CgpYUFRBcmVuYSAqClhQVF9OZXdBcmVuYShQUlVpbnQzMiBibG9ja19zaXplLCBzaXplX3QgYWxp Z25tZW50LCBjb25zdCBjaGFyKiBuYW1lKTsKCnZvaWQKWFBUX0Rlc3Ryb3lBcmVuYShYUFRBcmVu YSAqYXJlbmEpOwoKdm9pZApYUFRfRHVtcFN0YXRzKFhQVEFyZW5hICphcmVuYSk7Cgp2b2lkICoK WFBUX0FyZW5hTWFsbG9jKFhQVEFyZW5hICphcmVuYSwgc2l6ZV90IHNpemUpOwoKY2hhciAqClhQ VF9BcmVuYVN0ckR1cChYUFRBcmVuYSAqYXJlbmEsIGNvbnN0IGNoYXIgKiBzKTsKCnZvaWQKWFBU X05vdGlmeURvbmVMb2FkaW5nKFhQVEFyZW5hICphcmVuYSk7Cgp2b2lkClhQVF9BcmVuYUZyZWUo WFBUQXJlbmEgKmFyZW5hLCB2b2lkKiBibG9jayk7CiMgMTMyICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20veHB0X2FyZW5hLmgiCn0KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L3hwdF9zdHJ1Y3QuaCIgMgoKZXh0ZXJuICJDIiB7CiMgNjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbS94cHRfc3RydWN0LmgiCnR5cGVkZWYgc3RydWN0IFhQVEhlYWRlciBYUFRIZWFkZXI7 CnR5cGVkZWYgc3RydWN0IFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5IFhQVEludGVyZmFjZURp cmVjdG9yeUVudHJ5Owp0eXBlZGVmIHN0cnVjdCBYUFRJbnRlcmZhY2VEZXNjcmlwdG9yIFhQVElu dGVyZmFjZURlc2NyaXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVENvbnN0RGVzY3JpcHRvciBYUFRD b25zdERlc2NyaXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVE1ldGhvZERlc2NyaXB0b3IgWFBUTWV0 aG9kRGVzY3JpcHRvcjsKdHlwZWRlZiBzdHJ1Y3QgWFBUUGFyYW1EZXNjcmlwdG9yIFhQVFBhcmFt RGVzY3JpcHRvcjsKdHlwZWRlZiBzdHJ1Y3QgWFBUVHlwZURlc2NyaXB0b3IgWFBUVHlwZURlc2Ny aXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4IFhQVFR5cGVEZXNj cmlwdG9yUHJlZml4Owp0eXBlZGVmIHN0cnVjdCBYUFRTdHJpbmcgWFBUU3RyaW5nOwp0eXBlZGVm IHN0cnVjdCBYUFRBbm5vdGF0aW9uIFhQVEFubm90YXRpb247CiMgMTA0ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb20veHB0X3N0cnVjdC5oIgpzdHJ1Y3QgWFBUSGVhZGVyIHsKICAgIFBSVWlu dDggbWFnaWNbMTZdOwogICAgUFJVaW50OCBtYWpvcl92ZXJzaW9uOwogICAgUFJVaW50OCBtaW5v cl92ZXJzaW9uOwogICAgUFJVaW50MTYgbnVtX2ludGVyZmFjZXM7CiAgICBQUlVpbnQzMiBmaWxl X2xlbmd0aDsKICAgIFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5ICppbnRlcmZhY2VfZGlyZWN0 b3J5OwogICAgUFJVaW50MzIgZGF0YV9wb29sOwogICAgWFBUQW5ub3RhdGlvbiAqYW5ub3RhdGlv bnM7Cn07CiMgMTczICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0X3N0cnVjdC5oIgp0 eXBlZGVmIHN0cnVjdCB7CiAgICBjb25zdCBjaGFyKiBzdHI7CiAgICBQUlVpbnQ4IG1ham9yOwog ICAgUFJVaW50OCBtaW5vcjsKICAgIFBSVWludDE2IGNvZGU7Cn0gWFBUX1RZUEVMSUJfVkVSU0lP TlNfU1RSVUNUOwojIDE4NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1Y3Qu aCIKZXh0ZXJuIFBSVWludDE2ClhQVF9QYXJzZVZlcnNpb25TdHJpbmcoY29uc3QgY2hhciogc3Ry LCBQUlVpbnQ4KiBtYWpvciwgUFJVaW50OCogbWlub3IpOwoKZXh0ZXJuIFhQVEhlYWRlciAqClhQ VF9OZXdIZWFkZXIoWFBUQXJlbmEgKmFyZW5hLCBQUlVpbnQxNiBudW1faW50ZXJmYWNlcywKICAg ICAgICAgICAgICBQUlVpbnQ4IG1ham9yX3ZlcnNpb24sIFBSVWludDggbWlub3JfdmVyc2lvbik7 CgpleHRlcm4gdm9pZApYUFRfRnJlZUhlYWRlcihYUFRBcmVuYSAqYXJlbmEsIFhQVEhlYWRlciog YUhlYWRlcik7CgoKZXh0ZXJuIFBSVWludDMyClhQVF9TaXplT2ZIZWFkZXIoWFBUSGVhZGVyICpo ZWFkZXIpOwoKCmV4dGVybiBQUlVpbnQzMgpYUFRfU2l6ZU9mSGVhZGVyQmxvY2soWFBUSGVhZGVy ICpoZWFkZXIpOwoKCgoKCgoKc3RydWN0IFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5IHsKICAg IG5zSUQgaWlkOwogICAgY2hhciAqbmFtZTsKICAgIGNoYXIgKm5hbWVfc3BhY2U7CiAgICBYUFRJ bnRlcmZhY2VEZXNjcmlwdG9yICppbnRlcmZhY2VfZGVzY3JpcHRvcjsKCgoKCgp9OwoKZXh0ZXJu IFBSQm9vbApYUFRfRmlsbEludGVyZmFjZURpcmVjdG9yeUVudHJ5KFhQVEFyZW5hICphcmVuYSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUFRJbnRlcmZhY2VEaXJlY3RvcnlFbnRy eSAqaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUQgKmlpZCwgY2hhciAq bmFtZSwgY2hhciAqbmFtZV9zcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY UFRJbnRlcmZhY2VEZXNjcmlwdG9yICpkZXNjcmlwdG9yKTsKCmV4dGVybiB2b2lkClhQVF9EZXN0 cm95SW50ZXJmYWNlRGlyZWN0b3J5RW50cnkoWFBUQXJlbmEgKmFyZW5hLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5KiBpZGUpOwoK CgoKCnN0cnVjdCBYUFRJbnRlcmZhY2VEZXNjcmlwdG9yIHsKICAgIFBSVWludDE2IHBhcmVudF9p bnRlcmZhY2U7CiAgICBQUlVpbnQxNiBudW1fbWV0aG9kczsKICAgIFhQVE1ldGhvZERlc2NyaXB0 b3IgKm1ldGhvZF9kZXNjcmlwdG9yczsKICAgIFBSVWludDE2IG51bV9jb25zdGFudHM7CiAgICBY UFRDb25zdERlc2NyaXB0b3IgKmNvbnN0X2Rlc2NyaXB0b3JzOwogICAgUFJVaW50OCBmbGFnczsK IyAyNjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0LmgiCiAgICBYUFRU eXBlRGVzY3JpcHRvciAqYWRkaXRpb25hbF90eXBlczsKICAgIFBSVWludDE2IG51bV9hZGRpdGlv bmFsX3R5cGVzOwp9OwojIDI3NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1 Y3QuaCIKZXh0ZXJuIFBSQm9vbApYUFRfR2V0SW50ZXJmYWNlSW5kZXhCeU5hbWUoWFBUSW50ZXJm YWNlRGlyZWN0b3J5RW50cnkgKmlkZV9ibG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBSVWludDE2IG51bV9pbnRlcmZhY2VzLCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJVaW50MTYgKmluZGV4cCk7CgpleHRlcm4gWFBUSW50ZXJmYWNlRGVzY3JpcHRv ciAqClhQVF9OZXdJbnRlcmZhY2VEZXNjcmlwdG9yKFhQVEFyZW5hICphcmVuYSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJVaW50MTYgcGFyZW50X2ludGVyZmFjZSwgUFJVaW50MTYgbnVt X21ldGhvZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDE2IG51bV9jb25zdGFu dHMsIFBSVWludDggZmxhZ3MpOwoKZXh0ZXJuIHZvaWQKWFBUX0ZyZWVJbnRlcmZhY2VEZXNjcmlw dG9yKFhQVEFyZW5hICphcmVuYSwgWFBUSW50ZXJmYWNlRGVzY3JpcHRvciogaWQpOwoKZXh0ZXJu IFBSQm9vbApYUFRfSW50ZXJmYWNlRGVzY3JpcHRvckFkZFR5cGVzKFhQVEFyZW5hICphcmVuYSwg WFBUSW50ZXJmYWNlRGVzY3JpcHRvciAqaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJVaW50MTYgbnVtKTsKCmV4dGVybiBQUkJvb2wKWFBUX0ludGVyZmFjZURlc2NyaXB0b3JB ZGRNZXRob2RzKFhQVEFyZW5hICphcmVuYSwgWFBUSW50ZXJmYWNlRGVzY3JpcHRvciAqaWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQxNiBudW0pOwoKZXh0ZXJuIFBS Qm9vbApYUFRfSW50ZXJmYWNlRGVzY3JpcHRvckFkZENvbnN0cyhYUFRBcmVuYSAqYXJlbmEsIFhQ VEludGVyZmFjZURlc2NyaXB0b3IgKmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQUlVpbnQxNiBudW0pOwoKCgoKCnN0cnVjdCBYUFRTdHJpbmcgewogICAgUFJVaW50MTYgbGVu Z3RoOwogICAgY2hhciAqYnl0ZXM7Cn07CgpleHRlcm4gWFBUU3RyaW5nICoKWFBUX05ld1N0cmlu ZyhYUFRBcmVuYSAqYXJlbmEsIFBSVWludDE2IGxlbmd0aCwgY2hhciAqYnl0ZXMpOwoKZXh0ZXJu IFhQVFN0cmluZyAqClhQVF9OZXdTdHJpbmdaKFhQVEFyZW5hICphcmVuYSwgY2hhciAqYnl0ZXMp OwojIDMzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1Y3QuaCIKc3RydWN0 IFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4IHsKICAgIFBSVWludDggZmxhZ3M7Cn07CiMgMzUyICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0X3N0cnVjdC5oIgplbnVtIFhQVFR5cGVEZXNj cmlwdG9yVGFncyB7CiAgICBURF9JTlQ4ID0gMCwKICAgIFREX0lOVDE2ID0gMSwKICAgIFREX0lO VDMyID0gMiwKICAgIFREX0lOVDY0ID0gMywKICAgIFREX1VJTlQ4ID0gNCwKICAgIFREX1VJTlQx NiA9IDUsCiAgICBURF9VSU5UMzIgPSA2LAogICAgVERfVUlOVDY0ID0gNywKICAgIFREX0ZMT0FU ID0gOCwKICAgIFREX0RPVUJMRSA9IDksCiAgICBURF9CT09MID0gMTAsCiAgICBURF9DSEFSID0g MTEsCiAgICBURF9XQ0hBUiA9IDEyLAogICAgVERfVk9JRCA9IDEzLAogICAgVERfUE5TSUlEID0g MTQsCiAgICBURF9ET01TVFJJTkcgPSAxNSwKICAgIFREX1BTVFJJTkcgPSAxNiwKICAgIFREX1BX U1RSSU5HID0gMTcsCiAgICBURF9JTlRFUkZBQ0VfVFlQRSA9IDE4LAogICAgVERfSU5URVJGQUNF X0lTX1RZUEUgPSAxOSwKICAgIFREX0FSUkFZID0gMjAsCiAgICBURF9QU1RSSU5HX1NJWkVfSVMg PSAyMSwKICAgIFREX1BXU1RSSU5HX1NJWkVfSVMgPSAyMiwKICAgIFREX1VURjhTVFJJTkcgPSAy MywKICAgIFREX0NTVFJJTkcgPSAyNCwKICAgIFREX0FTVFJJTkcgPSAyNQp9OwoKc3RydWN0IFhQ VFR5cGVEZXNjcmlwdG9yIHsKICAgIFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4IHByZWZpeDsKICAg IFBSVWludDggYXJnbnVtOwogICAgUFJVaW50OCBhcmdudW0yOwogICAgdW5pb24gewogICAgICAg IFBSVWludDE2IGlmYWNlOwogICAgICAgIFBSVWludDE2IGFkZGl0aW9uYWxfdHlwZTsKICAgIH0g dHlwZTsKfTsKIyA0MTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0Lmgi CnVuaW9uIFhQVENvbnN0VmFsdWUgewogICAgUFJJbnQ4IGk4OwogICAgUFJVaW50OCB1aTg7CiAg ICBQUkludDE2IGkxNjsKICAgIFBSVWludDE2IHVpMTY7CiAgICBQUkludDMyIGkzMjsKICAgIFBS VWludDMyIHVpMzI7CiAgICBQUkludDY0IGk2NDsKICAgIFBSVWludDY0IHVpNjQ7CiAgICBmbG9h dCBmbHQ7CiAgICBkb3VibGUgZGJsOwogICAgUFJCb29sIGJ1bDsKICAgIGNoYXIgY2g7CiAgICBQ UlVpbnQxNiB3Y2g7CiAgICBuc0lEICppaWQ7CiAgICBYUFRTdHJpbmcgKnN0cmluZzsKICAgIGNo YXIgKnN0cjsKICAgIFBSVWludDE2ICp3c3RyOwp9OwoKc3RydWN0IFhQVENvbnN0RGVzY3JpcHRv ciB7CiAgICBjaGFyICpuYW1lOwogICAgWFBUVHlwZURlc2NyaXB0b3IgdHlwZTsKICAgIHVuaW9u IFhQVENvbnN0VmFsdWUgdmFsdWU7Cn07CgoKCgoKc3RydWN0IFhQVFBhcmFtRGVzY3JpcHRvciB7 CiAgICBQUlVpbnQ4IGZsYWdzOwogICAgWFBUVHlwZURlc2NyaXB0b3IgdHlwZTsKfTsKIyA0Njcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0LmgiCmV4dGVybiBQUkJvb2wK WFBUX0ZpbGxQYXJhbURlc2NyaXB0b3IoWFBUQXJlbmEgKmFyZW5hLAogICAgICAgICAgICAgICAg ICAgICAgICBYUFRQYXJhbURlc2NyaXB0b3IgKnBkLCBQUlVpbnQ4IGZsYWdzLAogICAgICAgICAg ICAgICAgICAgICAgICBYUFRUeXBlRGVzY3JpcHRvciAqdHlwZSk7CgoKCgoKc3RydWN0IFhQVE1l dGhvZERlc2NyaXB0b3IgewogICAgY2hhciAqbmFtZTsKICAgIFhQVFBhcmFtRGVzY3JpcHRvciAq cGFyYW1zOwogICAgWFBUUGFyYW1EZXNjcmlwdG9yICpyZXN1bHQ7CiAgICBQUlVpbnQ4IGZsYWdz OwogICAgUFJVaW50OCBudW1fYXJnczsKfTsKIyA0OTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS94cHRfc3RydWN0LmgiCmV4dGVybiBQUkJvb2wKWFBUX0ZpbGxNZXRob2REZXNjcmlwdG9y KFhQVEFyZW5hICphcmVuYSwKICAgICAgICAgICAgICAgICAgICAgICAgIFhQVE1ldGhvZERlc2Ny aXB0b3IgKm1ldGgsIFBSVWludDggZmxhZ3MsIGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICBQUlVpbnQ4IG51bV9hcmdzKTsKIyA1MjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS94cHRfc3RydWN0LmgiCnN0cnVjdCBYUFRBbm5vdGF0aW9uIHsKICAgIFhQVEFubm90YXRp b24gKm5leHQ7CiAgICBQUlVpbnQ4IGZsYWdzOwoKICAgIFhQVFN0cmluZyAqY3JlYXRvcjsKICAg IFhQVFN0cmluZyAqcHJpdmF0ZV9kYXRhOwp9OwoKCgoKCgpleHRlcm4gWFBUQW5ub3RhdGlvbiAq ClhQVF9OZXdBbm5vdGF0aW9uKFhQVEFyZW5hICphcmVuYSwgUFJVaW50OCBmbGFncywgWFBUU3Ry aW5nICpjcmVhdG9yLAogICAgICAgICAgICAgICAgICBYUFRTdHJpbmcgKnByaXZhdGVfZGF0YSk7 Cgp9CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRpbmZvLmgiIDIKIyA3NCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdGluZm8uaCIKY2xhc3MgbnNJSW50ZXJmYWNl SW5mb01hbmFnZXI7CmV4dGVybiAiQyIgewoKbnNJSW50ZXJmYWNlSW5mb01hbmFnZXIqClhQVElf R2V0SW50ZXJmYWNlSW5mb01hbmFnZXIoKTsKCgp2b2lkClhQVElfRnJlZUludGVyZmFjZUluZm9N YW5hZ2VyKCk7Cn0KCgoKCgoKCmNsYXNzIG5zWFBUVHlwZSA6IHB1YmxpYyBYUFRUeXBlRGVzY3Jp cHRvclByZWZpeAp7CgpwdWJsaWM6CiAgICBuc1hQVFR5cGUoKQogICAgICAgIHt9CiAgICBuc1hQ VFR5cGUoY29uc3QgWFBUVHlwZURlc2NyaXB0b3JQcmVmaXgmIHByZWZpeCkKICAgICAgICB7KihY UFRUeXBlRGVzY3JpcHRvclByZWZpeCopdGhpcyA9IHByZWZpeDt9CgogICAgbnNYUFRUeXBlKGNv bnN0IHVpbnQ4JiBwcmVmaXgpCiAgICAgICAgeyoodWludDgqKXRoaXMgPSBwcmVmaXg7fQoKICAg IG5zWFBUVHlwZSYgb3BlcmF0b3I9KHVpbnQ4IHZhbCkKICAgICAgICB7ZmxhZ3MgPSB2YWw7IHJl dHVybiAqdGhpczt9CgogICAgbnNYUFRUeXBlJiBvcGVyYXRvcj0oY29uc3QgbnNYUFRUeXBlJiBv dGhlcikKICAgICAgICB7ZmxhZ3MgPSBvdGhlci5mbGFnczsgcmV0dXJuICp0aGlzO30KCiAgICBv cGVyYXRvciB1aW50OCgpIGNvbnN0CiAgICAgICAge3JldHVybiBmbGFnczt9CgogICAgUFJCb29s IElzUG9pbnRlcigpIGNvbnN0CiAgICAgICAge3JldHVybiAwICE9ICgoZmxhZ3MgJiAweDgwKSk7 fQoKICAgIFBSQm9vbCBJc1VuaXF1ZVBvaW50ZXIoKSBjb25zdAogICAgICAgIHtyZXR1cm4gMCAh PSAoKGZsYWdzICYgMHg0MCkpO30KCiAgICBQUkJvb2wgSXNSZWZlcmVuY2UoKSBjb25zdAogICAg ICAgIHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgyMCkpO30KCiAgICBQUkJvb2wgSXNBcml0aG1l dGljKCkgY29uc3QKICAgICAgICB7cmV0dXJuIGZsYWdzIDw9IFRfV0NIQVI7fQoKICAgIFBSQm9v bCBJc0ludGVyZmFjZVBvaW50ZXIoKSBjb25zdAogICAgICAgIHsgc3dpdGNoIChUYWdQYXJ0KCkp IHsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg ICAgICAgY2FzZSBUX0lOVEVSRkFDRToKICAgICAgICAgICAgIGNhc2UgVF9JTlRFUkZBQ0VfSVM6 CiAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgIH0KICAgICAgICB9CgogICAgUFJC b29sIElzQXJyYXkoKSBjb25zdAogICAgICAgIHtyZXR1cm4gKFBSQm9vbCkgVGFnUGFydCgpID09 IFRfQVJSQVk7fQoKCgoKICAgIFBSQm9vbCBJc0RlcGVuZGVudCgpIGNvbnN0CiAgICAgICAgeyBz d2l0Y2ggKFRhZ1BhcnQoKSkgewogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg cmV0dXJuIDA7CiAgICAgICAgICAgICBjYXNlIFRfSU5URVJGQUNFX0lTOgogICAgICAgICAgICAg Y2FzZSBURF9BUlJBWToKICAgICAgICAgICAgIGNhc2UgVF9QU1RSSU5HX1NJWkVfSVM6CiAgICAg ICAgICAgICBjYXNlIFRfUFdTVFJJTkdfU0laRV9JUzoKICAgICAgICAgICAgICAgcmV0dXJuIDE7 CiAgICAgICAgICAgfQogICAgICAgIH0KCiAgICB1aW50OCBUYWdQYXJ0KCkgY29uc3QKICAgICAg ICB7cmV0dXJuICh1aW50OCkgKGZsYWdzICYgKH4weGUwKSk7fQoKICAgIGVudW0KICAgIHsKICAg ICAgICBUX0k4ID0gVERfSU5UOCAsCiAgICAgICAgVF9JMTYgPSBURF9JTlQxNiAsCiAgICAgICAg VF9JMzIgPSBURF9JTlQzMiAsCiAgICAgICAgVF9JNjQgPSBURF9JTlQ2NCAsCiAgICAgICAgVF9V OCA9IFREX1VJTlQ4ICwKICAgICAgICBUX1UxNiA9IFREX1VJTlQxNiAsCiAgICAgICAgVF9VMzIg PSBURF9VSU5UMzIgLAogICAgICAgIFRfVTY0ID0gVERfVUlOVDY0ICwKICAgICAgICBUX0ZMT0FU ID0gVERfRkxPQVQgLAogICAgICAgIFRfRE9VQkxFID0gVERfRE9VQkxFICwKICAgICAgICBUX0JP T0wgPSBURF9CT09MICwKICAgICAgICBUX0NIQVIgPSBURF9DSEFSICwKICAgICAgICBUX1dDSEFS ID0gVERfV0NIQVIgLAogICAgICAgIFRfVk9JRCA9IFREX1ZPSUQgLAogICAgICAgIFRfSUlEID0g VERfUE5TSUlEICwKICAgICAgICBUX0RPTVNUUklORyA9IFREX0RPTVNUUklORyAsCiAgICAgICAg VF9DSEFSX1NUUiA9IFREX1BTVFJJTkcgLAogICAgICAgIFRfV0NIQVJfU1RSID0gVERfUFdTVFJJ TkcgLAogICAgICAgIFRfSU5URVJGQUNFID0gVERfSU5URVJGQUNFX1RZUEUgLAogICAgICAgIFRf SU5URVJGQUNFX0lTID0gVERfSU5URVJGQUNFX0lTX1RZUEUsCiAgICAgICAgVF9BUlJBWSA9IFRE X0FSUkFZICwKICAgICAgICBUX1BTVFJJTkdfU0laRV9JUyA9IFREX1BTVFJJTkdfU0laRV9JUyAs CiAgICAgICAgVF9QV1NUUklOR19TSVpFX0lTID0gVERfUFdTVFJJTkdfU0laRV9JUyAsCiAgICAg ICAgVF9VVEY4U1RSSU5HID0gVERfVVRGOFNUUklORyAsCiAgICAgICAgVF9DU1RSSU5HID0gVERf Q1NUUklORyAsCiAgICAgICAgVF9BU1RSSU5HID0gVERfQVNUUklORwogICAgfTsKCn07CgpjbGFz cyBuc1hQVFBhcmFtSW5mbyA6IHB1YmxpYyBYUFRQYXJhbURlc2NyaXB0b3IKewoKcHVibGljOgog ICAgbnNYUFRQYXJhbUluZm8oY29uc3QgWFBUUGFyYW1EZXNjcmlwdG9yJiBkZXNjKQogICAgICAg IHsqKFhQVFBhcmFtRGVzY3JpcHRvciopdGhpcyA9IGRlc2M7fQoKCiAgICBQUkJvb2wgSXNJbigp IGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHg4MCkpO30KICAgIFBSQm9vbCBJc091dCgp IGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHg0MCkpO30KICAgIFBSQm9vbCBJc1JldHZh bCgpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgyMCkpO30KICAgIFBSQm9vbCBJc1No YXJlZCgpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgxMCkpO30KICAgIFBSQm9vbCBJ c0RpcHBlcigpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgwOCkpO30KICAgIGNvbnN0 IG5zWFBUVHlwZSBHZXRUeXBlKCkgY29uc3Qge3JldHVybiB0eXBlLnByZWZpeDt9CgoKCnByaXZh dGU6CiAgICBuc1hQVFBhcmFtSW5mbygpOwoKfTsKCmNsYXNzIG5zWFBUTWV0aG9kSW5mbyA6IHB1 YmxpYyBYUFRNZXRob2REZXNjcmlwdG9yCnsKCnB1YmxpYzoKICAgIG5zWFBUTWV0aG9kSW5mbyhj b25zdCBYUFRNZXRob2REZXNjcmlwdG9yJiBkZXNjKQogICAgICAgIHsqKFhQVE1ldGhvZERlc2Ny aXB0b3IqKXRoaXMgPSBkZXNjO30KCiAgICBQUkJvb2wgSXNHZXR0ZXIoKSBjb25zdCB7cmV0dXJu IDAgIT0gKChmbGFncyAmIDB4ODApICk7fQogICAgUFJCb29sIElzU2V0dGVyKCkgY29uc3Qge3Jl dHVybiAwICE9ICgoZmxhZ3MgJiAweDQwKSApO30KICAgIFBSQm9vbCBJc05vdFhQQ09NKCkgY29u c3Qge3JldHVybiAwICE9ICgoZmxhZ3MgJiAweDIwKSk7fQogICAgUFJCb29sIElzQ29uc3RydWN0 b3IoKSBjb25zdCB7cmV0dXJuIDAgIT0gKChmbGFncyAmIDB4MTApICk7fQogICAgUFJCb29sIElz SGlkZGVuKCkgY29uc3Qge3JldHVybiAwICE9ICgoZmxhZ3MgJiAweDA4KSApO30KICAgIGNvbnN0 IGNoYXIqIEdldE5hbWUoKSBjb25zdCB7cmV0dXJuIG5hbWU7fQogICAgdWludDggR2V0UGFyYW1D b3VudCgpIGNvbnN0IHtyZXR1cm4gbnVtX2FyZ3M7fQoKICAgIGNvbnN0IG5zWFBUUGFyYW1JbmZv IEdldFBhcmFtKHVpbnQ4IGlkeCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIDsKICAgICAg ICAgICAgcmV0dXJuIHBhcmFtc1tpZHhdOwogICAgICAgIH0KICAgIGNvbnN0IG5zWFBUUGFyYW1J bmZvIEdldFJlc3VsdCgpIGNvbnN0CiAgICAgICAge3JldHVybiAqcmVzdWx0O30KcHJpdmF0ZToK ICAgIG5zWFBUTWV0aG9kSW5mbygpOwoKfTsKCgoKc3RydWN0IG5zWFBUQ01pbmlWYXJpYW50OwoK Y2xhc3MgbnNYUFRDb25zdGFudCA6IHB1YmxpYyBYUFRDb25zdERlc2NyaXB0b3IKewoKcHVibGlj OgogICAgbnNYUFRDb25zdGFudChjb25zdCBYUFRDb25zdERlc2NyaXB0b3ImIGRlc2MpCiAgICAg ICAgeyooWFBUQ29uc3REZXNjcmlwdG9yKil0aGlzID0gZGVzYzt9CgogICAgY29uc3QgY2hhciog R2V0TmFtZSgpIGNvbnN0CiAgICAgICAge3JldHVybiBuYW1lO30KCiAgICBjb25zdCBuc1hQVFR5 cGUgR2V0VHlwZSgpIGNvbnN0CiAgICAgICAge3JldHVybiB0eXBlLnByZWZpeDt9CgoKCgoKICAg IGNvbnN0IG5zWFBUQ01pbmlWYXJpYW50KiBHZXRWYWx1ZSgpIGNvbnN0CiAgICAgICAge3JldHVy biAobnNYUFRDTWluaVZhcmlhbnQqKSAmdmFsdWU7fQpwcml2YXRlOgogICAgbnNYUFRDb25zdGFu dCgpOwoKfTsKIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC9uc0lYUENvbm5l Y3QuaCIgMgojIDExNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC9uc0lYUENvbm5l Y3QuaCIKY2xhc3MgbnNJWFBDU2NyaXB0YWJsZTsKCmNsYXNzIG5zSVhQQ29ubmVjdDsKCmNsYXNz IG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmU7CgpjbGFzcyBuc0lJbnRlcmZhY2VJbmZvOwoKY2xh c3MgbnNJWFBDU2VjdXJpdHlNYW5hZ2VyOwojIDEzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29ubmVjdC9uc0lYUENvbm5lY3QuaCIKY2xhc3MgbnNJWFBDb25uZWN0SlNPYmplY3RIb2xkZXIg OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ODkxNmEzMjAsIDB4ZDExOCwgMHgx MWQzLCB7IDB4OGYsIDB4M2EsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRKU09iamVjdChKU09iamVjdCAq ICphSlNPYmplY3QpID0gMDsKCn07CiMgMjAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25u ZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlIDogcHVi bGljIG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9sZGVyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDIxNWRiZTAyLCAw eDk0YTcsIDB4MTFkMiwgeyAweGJhLCAweDU4LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweDVk LCAweGQ3IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmF0aXZlKG5z SVN1cHBvcnRzICogKmFOYXRpdmUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SlNPYmpl Y3RQcm90b3R5cGUoSlNPYmplY3QgKiAqYUpTT2JqZWN0UHJvdG90eXBlKSA9IDA7CgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFhQQ29ubmVjdChuc0lYUENvbm5lY3QgKiAqYVhQQ29ubmVjdCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kSW50ZXJmYWNlV2l0aE1lbWJlcihqc3ZhbCBu YW1lSUQsIG5zSUludGVyZmFjZUluZm8gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEZpbmRJbnRlcmZhY2VXaXRoTmFtZShqc3ZhbCBuYW1lSUQsIG5zSUludGVyZmFjZUluZm8g KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlYnVnRHVtcChQUkludDE2IGRl cHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZnJlc2hQcm90b3R5cGUodm9pZCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWN1cml0eUluZm9BZGRyZXNzKHZvaWQqICogKl9y ZXR2YWwpID0gMDsKCn07CiMgMzU1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25z SVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENvbm5lY3RXcmFwcGVkSlMgOiBwdWJsaWMgbnNJWFBD b25uZWN0SlNPYmplY3RIb2xkZXIgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YmVkNTIwMzAsIDB4YmNhNiwgMHgx MWQyLCB7IDB4YmEsIDB4NzksIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4NWQsIDB4ZDcgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbnRlcmZhY2VJbmZvKG5zSUlu dGVyZmFjZUluZm8gKiAqYUludGVyZmFjZUluZm8pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0SW50ZXJmYWNlSUlEKG5zSUlEICogKmFJbnRlcmZhY2VJSUQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgRGVidWdEdW1wKFBSSW50MTYgZGVwdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgQWdncmVnYXRlZFF1ZXJ5SW50ZXJmYWNlKGNvbnN0IG5zSUlEICYgdXVpZCwgdm9pZCAqICpy ZXN1bHQpID0gMDsKCn07CiMgNDY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25z SVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENOYXRpdmVDYWxsQ29udGV4dCA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwZmE2OGE2MCwgMHg4Mjg5LCAweDExZDMsIHsgMHhiYiwg MHgxYSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHg1ZCwgMHhkNyB9fTsgcmV0dXJuIGlpZDt9 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlZShuc0lTdXBwb3J0cyAqICphQ2FsbGVlKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlZU1ldGhvZEluZGV4KFBSVWludDE2ICph Q2FsbGVlTWV0aG9kSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVlV3Jh cHBlcihuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICogKmFDYWxsZWVXcmFwcGVyKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTQ29udGV4dChKU0NvbnRleHQgKiAqYUpTQ29udGV4dCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmdjKFBSVWludDMyICphQXJnYykgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmd2UHRyKGpzdmFsICogKmFBcmd2UHRyKSA9IDA7CgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJldFZhbFB0cihqc3ZhbCAqICphUmV0VmFsUHRyKSA9 IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXhjZXB0aW9uV2FzVGhyb3duKFBSQm9v bCAqYUV4Y2VwdGlvbldhc1Rocm93bikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RXhjZXB0 aW9uV2FzVGhyb3duKFBSQm9vbCBhRXhjZXB0aW9uV2FzVGhyb3duKSA9IDA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0UmV0dXJuVmFsdWVXYXNTZXQoUFJCb29sICphUmV0dXJuVmFsdWVX YXNTZXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJldHVyblZhbHVlV2FzU2V0KFBSQm9v bCBhUmV0dXJuVmFsdWVXYXNTZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVl SW50ZXJmYWNlKG5zSUludGVyZmFjZUluZm8gKiAqYUNhbGxlZUludGVyZmFjZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDYWxsZWVDbGFzc0luZm8obnNJQ2xhc3NJbmZvICogKmFDYWxs ZWVDbGFzc0luZm8pID0gMDsKCn07CiMgNzUzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25u ZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENXcmFwcGVkSlNPYmplY3RHZXR0ZXIgOiBw dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MjU0YmIyZTAsIDB4NjQzOSwgMHgxMWQ0 LCB7IDB4OGYsIDB4ZTAsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07IHJl dHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXZlckNhbGxlZChuc0lTdXBwb3J0 cyAqICphTmV2ZXJDYWxsZWQpID0gMDsKCn07CiMgODIxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENGdW5jdGlvblRoaXNUcmFuc2xh dG9yIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDAzOWVmMjYwLCAweDJhMGQs IDB4MTFkNSwgeyAweDkwLCAweGE3LCAweDAwLCAweDEwLCAweGE0LCAweGU3LCAweDNkLCAweDlh IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgVHJhbnNsYXRlVGhpcyhuc0lT dXBwb3J0cyAqYUluaXRpYWxUaGlzLCBuc0lJbnRlcmZhY2VJbmZvICphSW50ZXJmYWNlSW5mbywg UFJVaW50MTYgYU1ldGhvZEluZGV4LCBQUkJvb2wgKmFIaWRlRmlyc3RQYXJhbUZyb21KUywgbnNJ SUQgKiAqYUlJRE9mUmVzdWx0LCBuc0lTdXBwb3J0cyAqKl9yZXR2YWwpID0gMDsKCn07CiMgODkz ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBu c0lYUENvbm5lY3QgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZWZhZTM3YjAs IDB4OTQ2ZCwgMHgxMWQyLCB7IDB4YmEsIDB4NTgsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4 NWQsIDB4ZDcgfX07IHJldHVybiBpaWQ7fQoKICBzdGF0aWMgY29uc3QgbnNJRCYgR2V0Q0lEKCkg e3N0YXRpYyBjb25zdCBuc0lEIGNpZCA9IHsgMHhjYjY1OTNlMCwgMHhmOWIyLCAweDExZDIsIHsg MHhiZCwgMHhkNiwgMHgwLCAweDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQgfSB9OyByZXR1cm4g Y2lkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdENsYXNzZXMoSlNDb250ZXh0ICogYUpTQ29u dGV4dCwgSlNPYmplY3QgKiBhR2xvYmFsSlNPYmopID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg SW5pdENsYXNzZXNXaXRoTmV3V3JhcHBlZEdsb2JhbChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBu c0lTdXBwb3J0cyAqYUNPTU9iaiwgY29uc3QgbnNJSUQgJiBhSUlELCBQUkJvb2wgYUNhbGxKU19J bml0U3RhbmRhcmRDbGFzc2VzLCBuc0lYUENvbm5lY3RKU09iamVjdEhvbGRlciAqKl9yZXR2YWwp ID0gMDsKIyA5MzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0 LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBXcmFwTmF0aXZlKEpTQ29udGV4dCAqIGFKU0NvbnRleHQs IEpTT2JqZWN0ICogYVNjb3BlLCBuc0lTdXBwb3J0cyAqYUNPTU9iaiwgY29uc3QgbnNJSUQgJiBh SUlELCBuc0lYUENvbm5lY3RKU09iamVjdEhvbGRlciAqKl9yZXR2YWwpID0gMDsKIyA5NjUgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBXcmFwSlMoSlNDb250ZXh0ICogYUpTQ29udGV4dCwgSlNPYmplY3QgKiBhSlNPYmos IGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAqICpyZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFdyYXBwZWROYXRpdmVPZkpTT2JqZWN0KEpTQ29udGV4dCAqIGFKU0NvbnRl eHQsIEpTT2JqZWN0ICogYUpTT2JqLCBuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICoqX3JldHZh bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTZWN1cml0eU1hbmFnZXJGb3JKU0NvbnRl eHQoSlNDb250ZXh0ICogYUpTQ29udGV4dCwgbnNJWFBDU2VjdXJpdHlNYW5hZ2VyICphTWFuYWdl ciwgUFJVaW50MTYgZmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VjdXJpdHlN YW5hZ2VyRm9ySlNDb250ZXh0KEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIG5zSVhQQ1NlY3VyaXR5 TWFuYWdlciAqKmFNYW5hZ2VyLCBQUlVpbnQxNiAqZmxhZ3MpID0gMDsKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IFNldERlZmF1bHRTZWN1cml0eU1hbmFnZXIobnNJWFBDU2VjdXJpdHlNYW5hZ2Vy ICphTWFuYWdlciwgUFJVaW50MTYgZmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 RGVmYXVsdFNlY3VyaXR5TWFuYWdlcihuc0lYUENTZWN1cml0eU1hbmFnZXIgKiphTWFuYWdlciwg UFJVaW50MTYgKmZsYWdzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVN0YWNrRnJh bWVMb2NhdGlvbihQUlVpbnQzMiBhTGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKmFGaWxlbmFtZSwgY29u c3QgY2hhciAqYUZ1bmN0aW9uTmFtZSwgUFJJbnQzMiBhTGluZU51bWJlciwgbnNJU3RhY2tGcmFt ZSAqYUNhbGxlciwgbnNJU3RhY2tGcmFtZSAqKl9yZXR2YWwpID0gMDsKIyAxMDAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgU3luY0pTQ29udGV4dHModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJy ZW50SlNTdGFjayhuc0lTdGFja0ZyYW1lICogKmFDdXJyZW50SlNTdGFjaykgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50TmF0aXZlQ2FsbENvbnRleHQobnNJWFBDTmF0aXZlQ2Fs bENvbnRleHQgKiAqYUN1cnJlbnROYXRpdmVDYWxsQ29udGV4dCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRQZW5kaW5nRXhjZXB0aW9uKG5zSUV4Y2VwdGlvbiAqICphUGVuZGluZ0V4Y2Vw dGlvbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGVuZGluZ0V4Y2VwdGlvbihuc0lFeGNl cHRpb24gKiBhUGVuZGluZ0V4Y2VwdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWJ1 Z0R1bXAoUFJJbnQxNiBkZXB0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWJ1Z0R1bXBP YmplY3QobnNJU3VwcG9ydHMgKmFDT01PYmosIFBSSW50MTYgZGVwdGgpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgRGVidWdEdW1wSlNTdGFjayhQUkJvb2wgc2hvd0FyZ3MsIFBSQm9vbCBzaG93 TG9jYWxzLCBQUkJvb2wgc2hvd1RoaXNQcm9wcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBE ZWJ1Z0R1bXBFdmFsSW5KU1N0YWNrRnJhbWUoUFJVaW50MzIgYUZyYW1lTnVtYmVyLCBjb25zdCBj aGFyICphU291cmNlVGV4dCkgPSAwOwojIDEwMzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bm5lY3QvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTYWZlSlNDb250ZXh0 Rm9yQ3VycmVudFRocmVhZChKU0NvbnRleHQgKiBjeCkgPSAwOwojIDEwNTAgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBX cmFwSlNBZ2dyZWdhdGVkVG9OYXRpdmUobnNJU3VwcG9ydHMgKmFPdXRlciwgSlNDb250ZXh0ICog YUpTQ29udGV4dCwgSlNPYmplY3QgKiBhSlNPYmosIGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAq ICpyZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdyYXBwZWROYXRpdmVP Zk5hdGl2ZU9iamVjdChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAqIGFTY29wZSwg bnNJU3VwcG9ydHMgKmFDT01PYmosIGNvbnN0IG5zSUlEICYgYUlJRCwgbnNJWFBDb25uZWN0V3Jh cHBlZE5hdGl2ZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnVuY3Rp b25UaGlzVHJhbnNsYXRvcihjb25zdCBuc0lJRCAmIGFJSUQsIG5zSVhQQ0Z1bmN0aW9uVGhpc1Ry YW5zbGF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZ1bmN0aW9u VGhpc1RyYW5zbGF0b3IoY29uc3QgbnNJSUQgJiBhSUlELCBuc0lYUENGdW5jdGlvblRoaXNUcmFu c2xhdG9yICphVHJhbnNsYXRvciwgbnNJWFBDRnVuY3Rpb25UaGlzVHJhbnNsYXRvciAqKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwYXJlbnRXcmFwcGVkTmF0aXZlSWZGb3Vu ZChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAqIGFTY29wZSwgSlNPYmplY3QgKiBh TmV3UGFyZW50LCBuc0lTdXBwb3J0cyAqYUNPTU9iaiwgbnNJWFBDb25uZWN0SlNPYmplY3RIb2xk ZXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsZWFyQWxsV3JhcHBlZE5h dGl2ZVNlY3VyaXR5UG9saWNpZXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRX cmFwcGVkTmF0aXZlUHJvdG90eXBlKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIEpTT2JqZWN0ICog YVNjb3BlLCBuc0lDbGFzc0luZm8gKmFDbGFzc0luZm8sIG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9s ZGVyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2xsZWN0R2FyYmFn ZU9uTWFpblRocmVhZE9ubHkoUFJCb29sICphQ29sbGVjdEdhcmJhZ2VPbk1haW5UaHJlYWRPbmx5 KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb2xsZWN0R2FyYmFnZU9uTWFpblRocmVhZE9u bHkoUFJCb29sIGFDb2xsZWN0R2FyYmFnZU9uTWFpblRocmVhZE9ubHkpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RGVmZXJSZWxlYXNlc1VudGlsQWZ0ZXJHYXJiYWdlQ29sbGVjdGlvbihQ UkJvb2wgKmFEZWZlclJlbGVhc2VzVW50aWxBZnRlckdhcmJhZ2VDb2xsZWN0aW9uKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXREZWZlclJlbGVhc2VzVW50aWxBZnRlckdhcmJhZ2VDb2xsZWN0 aW9uKFBSQm9vbCBhRGVmZXJSZWxlYXNlc1VudGlsQWZ0ZXJHYXJiYWdlQ29sbGVjdGlvbikgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWxlYXNlSlNDb250ZXh0KEpTQ29udGV4dCAqIGFKU0Nv bnRleHQsIFBSQm9vbCBub0dDKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIgMgojIDMxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIKY2xhc3MgbnNJWFBDU2NyaXB0YWJsZSA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmYTJjM2I4MCwgMHgwZTlkLCAweDEx ZDUsIHsgMHg5MCwgMHg5MiwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsg cmV0dXJuIGlpZDt9CgogIGVudW0geyBXQU5UX1BSRUNSRUFURSA9IDFVIH07CgogIGVudW0geyBX QU5UX0NSRUFURSA9IDJVIH07CgogIGVudW0geyBXQU5UX1BPU1RDUkVBVEUgPSA0VSB9OwoKICBl bnVtIHsgV0FOVF9BRERQUk9QRVJUWSA9IDhVIH07CgogIGVudW0geyBXQU5UX0RFTFBST1BFUlRZ ID0gMTZVIH07CgogIGVudW0geyBXQU5UX0dFVFBST1BFUlRZID0gMzJVIH07CgogIGVudW0geyBX QU5UX1NFVFBST1BFUlRZID0gNjRVIH07CgogIGVudW0geyBXQU5UX0VOVU1FUkFURSA9IDEyOFUg fTsKCiAgZW51bSB7IFdBTlRfTkVXRU5VTUVSQVRFID0gMjU2VSB9OwoKICBlbnVtIHsgV0FOVF9O RVdSRVNPTFZFID0gNTEyVSB9OwoKICBlbnVtIHsgV0FOVF9DT05WRVJUID0gMTAyNFUgfTsKCiAg ZW51bSB7IFdBTlRfRklOQUxJWkUgPSAyMDQ4VSB9OwoKICBlbnVtIHsgV0FOVF9DSEVDS0FDQ0VT UyA9IDQwOTZVIH07CgogIGVudW0geyBXQU5UX0NBTEwgPSA4MTkyVSB9OwoKICBlbnVtIHsgV0FO VF9DT05TVFJVQ1QgPSAxNjM4NFUgfTsKCiAgZW51bSB7IFdBTlRfSEFTSU5TVEFOQ0UgPSAzMjc2 OFUgfTsKCiAgZW51bSB7IFdBTlRfTUFSSyA9IDY1NTM2VSB9OwoKICBlbnVtIHsgVVNFX0pTU1RV Ql9GT1JfQUREUFJPUEVSVFkgPSAxMzEwNzJVIH07CgogIGVudW0geyBVU0VfSlNTVFVCX0ZPUl9E RUxQUk9QRVJUWSA9IDI2MjE0NFUgfTsKCiAgZW51bSB7IFVTRV9KU1NUVUJfRk9SX1NFVFBST1BF UlRZID0gNTI0Mjg4VSB9OwoKICBlbnVtIHsgRE9OVF9FTlVNX1NUQVRJQ19QUk9QUyA9IDEwNDg1 NzZVIH07CgogIGVudW0geyBET05UX0VOVU1fUVVFUllfSU5URVJGQUNFID0gMjA5NzE1MlUgfTsK CiAgZW51bSB7IERPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFID0gNDE5NDMwNFUgfTsK CiAgZW51bSB7IENMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkgPSA4Mzg4NjA4VSB9OwoKICBlbnVt IHsgQUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFID0gMTY3NzcyMTZVIH07CgogIGVudW0g eyBBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFID0gMzM1NTQ0MzJVIH07CgogIGVudW0geyBE T05UX1NIQVJFX1BST1RPVFlQRSA9IDY3MTA4ODY0VSB9OwoKICBlbnVtIHsgRE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyA9IDEzNDIxNzcyOFUgfTsKCiAgZW51bSB7IFJFU0VSVkVEID0gMjE0 NzQ4MzY0OFUgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NOYW1lKGNoYXIgKiAqYUNs YXNzTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRhYmxlRmxhZ3MoUFJV aW50MzIgKmFTY3JpcHRhYmxlRmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJlQ3Jl YXRlKG5zSVN1cHBvcnRzICpuYXRpdmVPYmosIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIGds b2JhbE9iaiwgSlNPYmplY3QgKiAqcGFyZW50T2JqKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IENyZWF0ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBj eCwgSlNPYmplY3QgKiBvYmopID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUG9zdENyZWF0ZShu c0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmpl Y3QgKiBvYmopID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkUHJvcGVydHkobnNJWFBDb25u ZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2Jq LCBqc3ZhbCBpZCwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IERlbFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIs IEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwgaWQsIGpzdmFsICogdnAsIFBS Qm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0eShuc0lY UENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3Qg KiBvYmosIGpzdmFsIGlkLCBqc3ZhbCAqIHZwLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgU2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3Jh cHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBqc3ZhbCBpZCwganN2YWwgKiB2 cCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZShu c0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmpl Y3QgKiBvYmosIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdF bnVtZXJhdGUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICog Y3gsIEpTT2JqZWN0ICogb2JqLCBQUlVpbnQzMiBlbnVtX29wLCBqc3ZhbCAqIHN0YXRlcCwganNp ZCAqaWRwLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3UmVz b2x2ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwg SlNPYmplY3QgKiBvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBmbGFncywgSlNPYmplY3QgKiAqb2Jq cCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnZlcnQobnNJ WFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0 ICogb2JqLCBQUlVpbnQzMiB0eXBlLCBqc3ZhbCAqIHZwLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgRmluYWxpemUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAq d3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IENoZWNrQWNjZXNzKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIs IEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwgaWQsIFBSVWludDMyIG1vZGUs IGpzdmFsICogdnAsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBD YWxsKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBK U09iamVjdCAqIG9iaiwgUFJVaW50MzIgYXJnYywganN2YWwgKiBhcmd2LCBqc3ZhbCAqIHZwLCBQ UkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29uc3RydWN0KG5zSVhQ Q29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAq IG9iaiwgUFJVaW50MzIgYXJnYywganN2YWwgKiBhcmd2LCBqc3ZhbCAqIHZwLCBQUkJvb2wgKl9y ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzSW5zdGFuY2UobnNJWFBDb25uZWN0 V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBq c3ZhbCB2YWwsIFBSQm9vbCAqYnAsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBNYXJrKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4 dCAqIGN4LCBKU09iamVjdCAqIG9iaiwgdm9pZCAqIGFyZywgUFJVaW50MzIgKl9yZXR2YWwpID0g MDsKCn07CiMgMjc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5o IiAyCiMgMjkzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5oIgp0 eXBlZGVmIG5zSUNsYXNzSW5mbyogKCpuc0RPTUNsYXNzSW5mb0V4dGVybmFsQ29uc3RydWN0b3JG bmMpCiAgKGNvbnN0IGNoYXIqIGFOYW1lKTsKIyAzMTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NQ2xhc3NJbmZvLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SVNlcnZpY2VNYW5hZ2VyLmgiIDEKIyA0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SVNlcnZpY2VNYW5hZ2VyLmgiCmNsYXNzIG5zSVNlcnZpY2VNYW5hZ2VyIDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweDhiYjM1ZWQ5LCAweGUzMzIsIDB4NDYyZCwgeyAweDkxLCAw eDU1LCAweDRhLCAweDAwLCAweDJhLCAweGI1LCAweGM5LCAweDU4IH19OyByZXR1cm4gaWlkO30K IyA1NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRTZXJ2aWNlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBu c0lJRCAmIGFJSUQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFNlcnZpY2VCeUNvbnRyYWN0SUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIGNvbnN0IG5zSUlE ICYgYUlJRCwgdm9pZCAqICpyZXN1bHQpID0gMDsKIyA3NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1NlcnZpY2VJ bnN0YW50aWF0ZWQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IG5zSUlEICYgYUlJRCwgUFJC b29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU2VydmljZUluc3RhbnRp YXRlZEJ5Q29udHJhY3RJRChjb25zdCBjaGFyICphQ29udHJhY3RJRCwgY29uc3QgbnNJSUQgJiBh SUlELCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMgMTY2ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNJU2VydmljZU1hbmFnZXIuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNYUENPTS5oIiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc1hQ Q09NLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT01DSUQuaCIgMQoj IDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNYUENPTS5oIiAyCgpjbGFzcyBuc0FT dHJpbmc7CmNsYXNzIG5zQUNTdHJpbmc7CgpjbGFzcyBuc0lDb21wb25lbnRNYW5hZ2VyOwpjbGFz cyBuc0lDb21wb25lbnRSZWdpc3RyYXI7CmNsYXNzIG5zSVNlcnZpY2VNYW5hZ2VyOwpjbGFzcyBu c0lGaWxlOwpjbGFzcyBuc0lMb2NhbEZpbGU7CmNsYXNzIG5zSURpcmVjdG9yeVNlcnZpY2VQcm92 aWRlcjsKY2xhc3MgbnNJTWVtb3J5OwojIDkwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNYUENPTS5oIgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX0luaXRYUENPTTIobnNJU2VydmljZU1h bmFnZXIqICpyZXN1bHQsCiAgICAgICAgICAgICAgbnNJRmlsZSogYmluRGlyZWN0b3J5LAogICAg ICAgICAgICAgIG5zSURpcmVjdG9yeVNlcnZpY2VQcm92aWRlciogYXBwRmlsZUxvY2F0aW9uUHJv dmlkZXIpOwojIDEwNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT00uaCIKZXh0 ZXJuICJDIiBuc3Jlc3VsdApOU19TaHV0ZG93blhQQ09NKG5zSVNlcnZpY2VNYW5hZ2VyKiBzZXJ2 TWdyKTsKIyAxMjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc1hQQ09NLmgiCmV4dGVy biAiQyIgbnNyZXN1bHQKTlNfR2V0U2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpy ZXN1bHQpOwojIDEzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT00uaCIKZXh0 ZXJuICJDIiBuc3Jlc3VsdApOU19HZXRDb21wb25lbnRNYW5hZ2VyKG5zSUNvbXBvbmVudE1hbmFn ZXIqICpyZXN1bHQpOwojIDE0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT00u aCIKZXh0ZXJuICJDIiBuc3Jlc3VsdApOU19HZXRDb21wb25lbnRSZWdpc3RyYXIobnNJQ29tcG9u ZW50UmVnaXN0cmFyKiAqcmVzdWx0KTsKIyAxNjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc1hQQ09NLmgiCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfR2V0TWVtb3J5TWFuYWdlcihuc0lN ZW1vcnkqICpyZXN1bHQpOwojIDE4NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBD T00uaCIKZXh0ZXJuICJDIiBuc3Jlc3VsdApOU19OZXdMb2NhbEZpbGUoY29uc3QgbnNBU3RyaW5n ICZwYXRoLAogICAgICAgICAgICAgICAgUFJCb29sIGZvbGxvd0xpbmtzLAogICAgICAgICAgICAg ICAgbnNJTG9jYWxGaWxlKiAqcmVzdWx0KTsKCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3TmF0 aXZlTG9jYWxGaWxlKGNvbnN0IG5zQUNTdHJpbmcgJnBhdGgsCiAgICAgICAgICAgICAgICAgICAg ICBQUkJvb2wgZm9sbG93TGlua3MsCiAgICAgICAgICAgICAgICAgICAgICBuc0lMb2NhbEZpbGUq ICpyZXN1bHQpOwojIDE2NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VN YW5hZ2VyLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VydmljZU1h bmFnZXJVdGlscy5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTZXJ2 aWNlTWFuYWdlclV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNl cnZpY2VNYW5hZ2VyLmgiIDEKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNl cnZpY2VNYW5hZ2VyVXRpbHMuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c0lTZXJ2aWNlTWFuYWdlck9ic29sZXRlLmgiIDEKIyA1OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyT2Jzb2xldGUuaCIKY2xhc3MgbnNJU2VydmljZU1hbmFn ZXI7CmNsYXNzIG5zSVNodXRkb3duTGlzdGVuZXI7CmNsYXNzIG5zSURpcmVjdG9yeVNlcnZpY2VQ cm92aWRlcjsKCmNsYXNzIG5zU2VydmljZU1hbmFnZXJPYnNvbGV0ZTsKIyA3NyAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyT2Jzb2xldGUuaCIKY2xhc3MgbnNJ U2VydmljZU1hbmFnZXJPYnNvbGV0ZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKCiAg ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g eyAweGNmMGRmM2IwLCAweDM0MDEsIDB4MTFkMiwgezB4ODEsIDB4NjMsIDB4MDAsIDB4NjAsIDB4 MDgsIDB4MTEsIDB4OWQsIDB4N2F9IH07IHJldHVybiBpaWQ7fTsKCgoKCgoKCiAgICB2aXJ0dWFs IG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3Vw cG9ydHMqIGFTZXJ2aWNlKSA9IDA7CiMgMTAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJU2VydmljZU1hbmFnZXJPYnNvbGV0ZS5oIgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgVW5y ZWdpc3RlclNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcykgPSAwOwoKICAgIHZpcnR1YWwgbnNy ZXN1bHQKICAgIEdldFNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgY29uc3QgbnNJSUQmIGFJ SUQsCiAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBu c0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCkgPSAwOwoKCiAgICB2aXJ0 dWFsIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShjb25zdCBuc0NJRCYgYUNsYXNzLCBuc0lT dXBwb3J0cyogc2VydmljZSwKICAgICAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIq IHNodXRkb3duTGlzdGVuZXIgPSAwKSA9IDA7CgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAg UmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNl cnZpY2UpID0gMDsKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShj b25zdCBjaGFyKiBhQ29udHJhY3RJRCkgPSAwOwoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAgIEdl dFNlcnZpY2UoY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIGNvbnN0IG5zSUlEJiBhSUlELAogICAg ICAgICAgICAgICBuc0lTdXBwb3J0cyogKnJlc3VsdCwKICAgICAgICAgICAgICAgbnNJU2h1dGRv d25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApID0gMDsKCgogICAgdmlydHVhbCBuc3Jl c3VsdAogICAgUmVsZWFzZVNlcnZpY2UoY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBv cnRzKiBzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1 dGRvd25MaXN0ZW5lciA9IDApID0gMDsKCn07CgoKY2xhc3MgbnNTZXJ2aWNlTWFuYWdlciB7CnB1 YmxpYzoKCiAgICBzdGF0aWMgbnNyZXN1bHQKICAgIFJlZ2lzdGVyU2VydmljZShjb25zdCBuc0NJ RCYgYUNsYXNzLCBuc0lTdXBwb3J0cyogYVNlcnZpY2UpOwoKICAgIHN0YXRpYyBuc3Jlc3VsdAog ICAgVW5yZWdpc3RlclNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcyk7CgogICAgc3RhdGljIG5z cmVzdWx0CiAgICBHZXRTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIGNvbnN0IG5zSUlEJiBh SUlELAogICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogKnJlc3VsdCwKICAgICAgICAgICAgICAg bnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApOwoKCiAgICBzdGF0aWMg bnNyZXN1bHQKICAgIFJlbGVhc2VTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBv cnRzKiBzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1 dGRvd25MaXN0ZW5lciA9IDApOwoKCgoKICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgUmVnaXN0ZXJT ZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNlcnZpY2UpOwoK ICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgVW5yZWdpc3RlclNlcnZpY2UoY29uc3QgY2hhciogYUNv bnRyYWN0SUQpOwoKICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25zdCBjaGFy KiBhQ29udHJhY3RJRCwgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgIG5zSVN1cHBv cnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93 bkxpc3RlbmVyID0gMCk7CgoKICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgUmVsZWFzZVNlcnZpY2Uo Y29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBzZXJ2aWNlLAogICAgICAgICAg ICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApOwoKCgoK CiAgICBzdGF0aWMgbnNyZXN1bHQgR2V0R2xvYmFsU2VydmljZU1hbmFnZXIobnNJU2VydmljZU1h bmFnZXIqICpyZXN1bHQpOwogICAgc3RhdGljIG5zcmVzdWx0IFNodXRkb3duR2xvYmFsU2Vydmlj ZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwp9OwojIDIwMyAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyT2Jzb2xldGUuaCIKY2xhc3MgbnNJ U2h1dGRvd25MaXN0ZW5lcjsKCgp0ZW1wbGF0ZSA8Y2xhc3MgRGVzdGluYXRpb25UeXBlPgppbmxp bmUKbnNyZXN1bHQKQ2FsbEdldFNlcnZpY2UoIGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAg ICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyLAogICAgICAgICAg ICAgICAgRGVzdGluYXRpb25UeXBlKiogYURlc3RpbmF0aW9uKQp7CiAgICA7CgogICAgcmV0dXJu IG5zU2VydmljZU1hbmFnZXI6OkdldFNlcnZpY2UoYUNsYXNzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJ SUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0 X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihhRGVzdGluYXRpb24pLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd25MaXN0ZW5lcik7Cn0KCnRlbXBsYXRlIDxjbGFz cyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsR2V0U2VydmljZSggY29uc3Qg Y2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBz aHV0ZG93bkxpc3RlbmVyLAogICAgICAgICAgICAgICAgRGVzdGluYXRpb25UeXBlKiogYURlc3Rp bmF0aW9uKQp7CiAgICA7CiAgICA7CgogICAgcmV0dXJuIG5zU2VydmljZU1hbmFnZXI6OkdldFNl cnZpY2UoYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgbnNJU3VwcG9ydHMq KiA+KGFEZXN0aW5hdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaHV0ZG93bkxpc3RlbmVyKTsKfQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJU2VydmljZU1hbmFnZXJVdGlscy5oIiAyCgoKCgpjbGFzcyBuc0dldFNlcnZpY2VCeUNJRCA6 IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKewogcHVibGljOgogICAgbnNHZXRTZXJ2aWNlQnlDSUQo IGNvbnN0IG5zQ0lEJiBhQ0lELCBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5hZ2VyLCBuc3Jlc3Vs dCogYUVycm9yUHRyICkKICAgICAgICA6IG1DSUQoYUNJRCksCiAgICAgICAgbVNlcnZpY2VNYW5h Z2VyKCBkb19RdWVyeUludGVyZmFjZShhU2VydmljZU1hbmFnZXIpICksCiAgICAgICAgbUVycm9y UHRyKGFFcnJvclB0cikKICAgICAgICB7CgogICAgICAgIH0KCiAgICB2aXJ0dWFsIG5zcmVzdWx0 IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3Q7CiAgICB2aXJ0dWFsIH5u c0dldFNlcnZpY2VCeUNJRCgpIHt9OwoKIHByaXZhdGU6CiAgICBjb25zdCBuc0NJRCYgbUNJRDsK ICAgIG5zQ09NUHRyPG5zSVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1hbmFnZXI7CiAgICBuc3Jl c3VsdCogbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dl dFNlcnZpY2UoIGNvbnN0IG5zQ0lEJiBhQ0lELCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKewogICAg cmV0dXJuIG5zR2V0U2VydmljZUJ5Q0lEKGFDSUQsIDAsIGVycm9yKTsKfQoKaW5saW5lCmNvbnN0 IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldFNlcnZpY2UoIGNvbnN0IG5zQ0lEJiBhQ0lELCBuc0lT dXBwb3J0cyogYVNlcnZpY2VNYW5hZ2VyLCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKewogICAgcmV0 dXJuIG5zR2V0U2VydmljZUJ5Q0lEKGFDSUQsIGFTZXJ2aWNlTWFuYWdlciwgZXJyb3IpOwp9Cgpj bGFzcyBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCnsK IHB1YmxpYzoKICAgIG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNvbnRy YWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIg KQogICAgICAgIDogbUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQpLAogICAgICAgIG1TZXJ2aWNlTWFu YWdlciggZG9fUXVlcnlJbnRlcmZhY2UoYVNlcnZpY2VNYW5hZ2VyKSApLAogICAgICAgIG1FcnJv clB0cihhRXJyb3JQdHIpCiAgICAgICAgewoKICAgICAgICB9CgogICAgdmlydHVhbCBuc3Jlc3Vs dCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwoKICAgIHZpcnR1YWwg fm5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCgpIHt9OwoKIHByaXZhdGU6CiAgICBjb25zdCBjaGFy KiBtQ29udHJhY3RJRDsKICAgIG5zQ09NUHRyPG5zSVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1h bmFnZXI7CiAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2Vy dmljZUJ5Q29udHJhY3RJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwg bnNyZXN1bHQqIGVycm9yID0gMCApCnsKICAgIHJldHVybiBuc0dldFNlcnZpY2VCeUNvbnRyYWN0 SUQoYUNvbnRyYWN0SUQsIDAsIGVycm9yKTsKfQoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5 Q29udHJhY3RJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3Vw cG9ydHMqIGFTZXJ2aWNlTWFuYWdlciwgbnNyZXN1bHQqIGVycm9yID0gMCApCnsKICAgIHJldHVy biBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIGFTZXJ2aWNlTWFuYWdlciwg ZXJyb3IpOwp9CgpjbGFzcyBuc0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkgOiBwdWJsaWMgbnNDT01Q dHJfaGVscGVyCnsKIHB1YmxpYzoKICAgIG5zR2V0U2VydmljZUZyb21DYXRlZ29yeShjb25zdCBj aGFyKiBhQ2F0ZWdvcnksIGNvbnN0IGNoYXIqIGFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5zcmVzdWx0KiBhRXJyb3JQdHIpCiAgICAgICAgOiBtQ2F0ZWdvcnkoYUNhdGVn b3J5KSwKICAgICAgICBtRW50cnkoYUVudHJ5KSwKICAgICAgICBtU2VydmljZU1hbmFnZXIoIGRv X1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdlcikgKSwKICAgICAgICBtRXJyb3JQdHIoYUVy cm9yUHRyKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0 b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsKICAgIHZpcnR1YWwgfm5zR2V0U2Vy dmljZUZyb21DYXRlZ29yeSgpIHt9OwogcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciogbUNhdGVn b3J5OwogICAgY29uc3QgY2hhciogbUVudHJ5OwogICAgbnNDT01QdHI8bnNJU2VydmljZU1hbmFn ZXI+IG1TZXJ2aWNlTWFuYWdlcjsKICAgIG5zcmVzdWx0KiBtRXJyb3JQdHI7Cn07CgppbmxpbmUK Y29uc3QgbnNHZXRTZXJ2aWNlRnJvbUNhdGVnb3J5CmRvX0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnko IGNvbnN0IGNoYXIqIGNhdGVnb3J5LCBjb25zdCBjaGFyKiBlbnRyeSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNyZXN1bHQqIGVycm9yID0gMCkKewogICAgcmV0dXJuIG5zR2V0U2Vydmlj ZUZyb21DYXRlZ29yeShjYXRlZ29yeSwgZW50cnksIDAsIGVycm9yKTsKfQoKCnRlbXBsYXRlIDxj bGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsR2V0U2VydmljZSggY29u c3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uVHlwZSoqIGFEZXN0 aW5hdGlvbikKewogICAgOwoKICAgIG5zQ09NUHRyPG5zSVNlcnZpY2VNYW5hZ2VyPiBtZ3I7CiAg ICBuc3Jlc3VsdCBydiA9IE5TX0dldFNlcnZpY2VNYW5hZ2VyKGdldHRlcl9BZGRSZWZzKG1ncikp OwoKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKQogICAgICAgIHJldHVybiBydjsKCiAgICBy ZXR1cm4gbWdyLT5HZXRTZXJ2aWNlKGFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9uKSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsR2V0 U2VydmljZSggY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICBEZXN0aW5h dGlvblR5cGUqKiBhRGVzdGluYXRpb24pCnsKICAgIDsKICAgIDsKCiAgICBuc0NPTVB0cjxuc0lT ZXJ2aWNlTWFuYWdlcj4gbWdyOwogICAgbnNyZXN1bHQgcnYgPSBOU19HZXRTZXJ2aWNlTWFuYWdl cihnZXR0ZXJfQWRkUmVmcyhtZ3IpKTsKCiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkKICAg ICAgICByZXR1cm4gcnY7CgogICAgcmV0dXJuIG1nci0+R2V0U2VydmljZUJ5Q29udHJhY3RJRChh Q29udHJhY3RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01U eXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9u KSk7Cn0KIyAxNjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTZXJ2aWNlTWFuYWdl ci5oIiAyCiMgMzEzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5o IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TY3JpcHRPYmplY3RGYWN0 b3J5LmgiIDEKIyA0MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TY3JpcHRPYmpl Y3RGYWN0b3J5LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DbGFzc0lu Zm8uaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVNjcmlwdE9iamVj dEZhY3RvcnkuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcu aCIgMQojIDU0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiMgMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIgMQojIDU4ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9zdHJpbmcvbnNBRmxhdFN0cmluZy5oIiAxCiMgMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNBRmxhdFN0cmluZy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJp bmcvbnNBU2luZ2xlRnJhZ21lbnRTdHJpbmcuaCIgMQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvc3RyaW5nL25zQVNpbmdsZUZyYWdtZW50U3RyaW5nLmgiCmNsYXNzIG5zQVNpbmdsZUZyYWdt ZW50U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FTdHJpbmcKICB7CgoKCgoKICAgIHB1YmxpYzoKICAg ICAgdHlwZWRlZiBjb25zdCBjaGFyX3R5cGUqIGNvbnN0X2NoYXJfaXRlcmF0b3I7CiAgICAgIHR5 cGVkZWYgY2hhcl90eXBlKiBjaGFyX2l0ZXJhdG9yOwoKCiAgICAgIHVzaW5nIGFic3RyYWN0X3N0 cmluZ190eXBlOjpCZWdpblJlYWRpbmc7CiAgICAgIHVzaW5nIGFic3RyYWN0X3N0cmluZ190eXBl OjpFbmRSZWFkaW5nOwogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6QmVnaW5Xcml0 aW5nOwogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6RW5kV3JpdGluZzsKCgoKCgoK CiAgICAgIGlubGluZQogICAgICBjb25zdF9jaGFyX2l0ZXJhdG9yJgogICAgICBCZWdpblJlYWRp bmcoIGNvbnN0X2NoYXJfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogICAgICAgIHsKICAgICAg ICAgIGNvbnN0X2ZyYWdtZW50X3R5cGUgZjsKICAgICAgICAgIEdldFJlYWRhYmxlRnJhZ21lbnQo Ziwga0ZpcnN0RnJhZ21lbnQsIDApOwogICAgICAgICAgcmV0dXJuIGFSZXN1bHQgPSBmLm1TdGFy dDsKICAgICAgICB9CgogICAgICBpbmxpbmUKICAgICAgY29uc3RfY2hhcl9pdGVyYXRvciYKICAg ICAgRW5kUmVhZGluZyggY29uc3RfY2hhcl9pdGVyYXRvciYgYVJlc3VsdCApIGNvbnN0CiAgICAg ICAgewogICAgICAgICAgY29uc3RfZnJhZ21lbnRfdHlwZSBmOwogICAgICAgICAgR2V0UmVhZGFi bGVGcmFnbWVudChmLCBrTGFzdEZyYWdtZW50LCAwKTsKICAgICAgICAgIHJldHVybiBhUmVzdWx0 ID0gZi5tRW5kOwogICAgICAgIH0KCiAgICAgIGlubGluZQogICAgICBjaGFyX2l0ZXJhdG9yJgog ICAgICBCZWdpbldyaXRpbmcoIGNoYXJfaXRlcmF0b3ImIGFSZXN1bHQgKQogICAgICAgIHsKICAg ICAgICAgIGZyYWdtZW50X3R5cGUgZjsKICAgICAgICAgIEdldFdyaXRhYmxlRnJhZ21lbnQoZiwg a0ZpcnN0RnJhZ21lbnQsIDApOwogICAgICAgICAgcmV0dXJuIGFSZXN1bHQgPSBjb25zdF9jYXN0 PCBjaGFyX2l0ZXJhdG9yID4oZi5tU3RhcnQpOwogICAgICAgIH0KCiAgICAgIGlubGluZQogICAg ICBjaGFyX2l0ZXJhdG9yJgogICAgICBFbmRXcml0aW5nKCBjaGFyX2l0ZXJhdG9yJiBhUmVzdWx0 ICkKICAgICAgICB7CiAgICAgICAgICBmcmFnbWVudF90eXBlIGY7CiAgICAgICAgICBHZXRXcml0 YWJsZUZyYWdtZW50KGYsIGtMYXN0RnJhZ21lbnQsIDApOwogICAgICAgICAgcmV0dXJuIGFSZXN1 bHQgPSBjb25zdF9jYXN0PCBjaGFyX2l0ZXJhdG9yID4oZi5tRW5kKTsKICAgICAgICB9CgogICAg ICBjaGFyX3R5cGUgb3BlcmF0b3JbXSggUFJVaW50MzIgaSApIGNvbnN0IHsgY29uc3RfY2hhcl9p dGVyYXRvciB0ZW1wOyByZXR1cm4gQmVnaW5SZWFkaW5nKHRlbXApWyBpIF07IH0KICAgICAgY2hh cl90eXBlIENoYXJBdCggUFJVaW50MzIgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIg TGVuZ3RoKCkgY29uc3Q7CgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIGNvbnN0X2ZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50 UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdy aXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50 MzIgKTsKICB9OwoKY2xhc3MgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nCiAgICA6IHB1YmxpYyBu c0FDU3RyaW5nCiAgewoKCgoKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgY29uc3QgY2hhcl90 eXBlKiBjb25zdF9jaGFyX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIGNoYXJfdHlwZSogY2hhcl9p dGVyYXRvcjsKCgogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6QmVnaW5SZWFkaW5n OwogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6RW5kUmVhZGluZzsKICAgICAgdXNp bmcgYWJzdHJhY3Rfc3RyaW5nX3R5cGU6OkJlZ2luV3JpdGluZzsKICAgICAgdXNpbmcgYWJzdHJh Y3Rfc3RyaW5nX3R5cGU6OkVuZFdyaXRpbmc7CgoKCgoKCgogICAgICBpbmxpbmUKICAgICAgY29u c3RfY2hhcl9pdGVyYXRvciYKICAgICAgQmVnaW5SZWFkaW5nKCBjb25zdF9jaGFyX2l0ZXJhdG9y JiBhUmVzdWx0ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBjb25zdF9mcmFnbWVudF90eXBl IGY7CiAgICAgICAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGYsIGtGaXJzdEZyYWdtZW50LCAwKTsK ICAgICAgICAgIHJldHVybiBhUmVzdWx0ID0gZi5tU3RhcnQ7CiAgICAgICAgfQoKICAgICAgaW5s aW5lCiAgICAgIGNvbnN0X2NoYXJfaXRlcmF0b3ImCiAgICAgIEVuZFJlYWRpbmcoIGNvbnN0X2No YXJfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2Zy YWdtZW50X3R5cGUgZjsKICAgICAgICAgIEdldFJlYWRhYmxlRnJhZ21lbnQoZiwga0xhc3RGcmFn bWVudCwgMCk7CiAgICAgICAgICByZXR1cm4gYVJlc3VsdCA9IGYubUVuZDsKICAgICAgICB9Cgog ICAgICBpbmxpbmUKICAgICAgY2hhcl9pdGVyYXRvciYKICAgICAgQmVnaW5Xcml0aW5nKCBjaGFy X2l0ZXJhdG9yJiBhUmVzdWx0ICkKICAgICAgICB7CiAgICAgICAgICBmcmFnbWVudF90eXBlIGY7 CiAgICAgICAgICBHZXRXcml0YWJsZUZyYWdtZW50KGYsIGtGaXJzdEZyYWdtZW50LCAwKTsKICAg ICAgICAgIHJldHVybiBhUmVzdWx0ID0gY29uc3RfY2FzdDwgY2hhcl9pdGVyYXRvciA+KGYubVN0 YXJ0KTsKICAgICAgICB9CgogICAgICBpbmxpbmUKICAgICAgY2hhcl9pdGVyYXRvciYKICAgICAg RW5kV3JpdGluZyggY2hhcl9pdGVyYXRvciYgYVJlc3VsdCApCiAgICAgICAgewogICAgICAgICAg ZnJhZ21lbnRfdHlwZSBmOwogICAgICAgICAgR2V0V3JpdGFibGVGcmFnbWVudChmLCBrTGFzdEZy YWdtZW50LCAwKTsKICAgICAgICAgIHJldHVybiBhUmVzdWx0ID0gY29uc3RfY2FzdDwgY2hhcl9p dGVyYXRvciA+KGYubUVuZCk7CiAgICAgICAgfQoKICAgICAgY2hhcl90eXBlIG9wZXJhdG9yW10o IFBSVWludDMyIGkgKSBjb25zdCB7IGNvbnN0X2NoYXJfaXRlcmF0b3IgdGVtcDsgcmV0dXJuIEJl Z2luUmVhZGluZyh0ZW1wKVsgaSBdOyB9CiAgICAgIGNoYXJfdHlwZSBDaGFyQXQoIFBSVWludDMy ICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKCiAgICBw dWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50 KCBjb25zdF9mcmFnbWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29u c3Q7CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBmcmFnbWVu dF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CiAgfTsKCmlubGluZQpuc0FT aW5nbGVGcmFnbWVudFN0cmluZzo6Y2hhcl90eXBlCm5zQVNpbmdsZUZyYWdtZW50U3RyaW5nOjpD aGFyQXQoIFBSVWludDMyIGkgKSBjb25zdAogIHsKICAgIDsKICAgIHJldHVybiBvcGVyYXRvcltd KGkpOwogIH0KCmlubGluZQpuc0FTaW5nbGVGcmFnbWVudENTdHJpbmc6OmNoYXJfdHlwZQpuc0FT aW5nbGVGcmFnbWVudENTdHJpbmc6OkNoYXJBdCggUFJVaW50MzIgaSApIGNvbnN0CiAgewogICAg OwogICAgcmV0dXJuIG9wZXJhdG9yW10oaSk7CiAgfQojIDMxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvc3RyaW5nL25zQUZsYXRTdHJpbmcuaCIgMgojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv c3RyaW5nL25zQUZsYXRTdHJpbmcuaCIKY2xhc3MgbnNBRmxhdFN0cmluZwogICAgOiBwdWJsaWMg bnNBU2luZ2xlRnJhZ21lbnRTdHJpbmcKICB7CiAgICBwdWJsaWM6CgoKCiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKiBnZXQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGNvbnN0IGNo YXJfdHlwZSogdGVtcDsKICAgICAgICAgIHJldHVybiBCZWdpblJlYWRpbmcodGVtcCk7CiAgICAg ICAgfQogIH07CgpjbGFzcyBuc0FGbGF0Q1N0cmluZwogICAgOiBwdWJsaWMgbnNBU2luZ2xlRnJh Z21lbnRDU3RyaW5nCiAgewogICAgcHVibGljOgoKCgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSogZ2V0KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIHRl bXA7CiAgICAgICAgICByZXR1cm4gQmVnaW5SZWFkaW5nKHRlbXApOwogICAgICAgIH0KCiAgfTsK IyA1OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIgMgoKCgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNMaXRlcmFsU3RyaW5nLmgiIDEKIyAzMiAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0xpdGVyYWxTdHJpbmcuaCIKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zRGVwZW5kZW50U3RyaW5nLmgiIDEKIyA0NSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudFN0cmluZy5oIgpjbGFzcyBuc0Rl cGVuZGVudFN0cmluZwogICAgICA6IHB1YmxpYyBuc0FGbGF0U3RyaW5nCiAgewogICAgcHVibGlj OgogICAgICB0eXBlZGVmIG5zRGVwZW5kZW50U3RyaW5nIHNlbGZfdHlwZTsKCiAgICAgIHZvaWQK ICAgICAgUmViaW5kKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKQogICAgICAgIHsKICAgICAgICAg IDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFQdHIpOwoKCgogICAgICAgICAgbUhhbmRs ZS5EYXRhRW5kKGFQdHIgPyAoYVB0cituc0NoYXJUcmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKGFQ dHIpKSA6IDApOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBjaGFy X3R5cGUqIGFTdGFydFB0ciwgY29uc3QgY2hhcl90eXBlKiBhRW5kUHRyICkKICAgICAgICB7CiAg ICAgICAgICA7CiMgODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNEZXBlbmRlbnRT dHJpbmcuaCIKICAgICAgICAgIDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFydFB0 cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAgICAg dm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgUFJVaW50MzIgYUxlbmd0 aCApCiAgICAgICAgewogICAgICAgICAgOwogICAgICAgICAgUmViaW5kKGFQdHIsIGFQdHIrYUxl bmd0aCk7CiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRTdHJpbmcoIGNvbnN0IGNoYXJfdHlw ZSogYVN0YXJ0UHRyLCBjb25zdCBjaGFyX3R5cGUqIGFFbmRQdHIgKSB7IFJlYmluZChhU3RhcnRQ dHIsIGFFbmRQdHIpOyB9CiAgICAgIG5zRGVwZW5kZW50U3RyaW5nKCBjb25zdCBjaGFyX3R5cGUq IGFQdHIsIFBSVWludDMyIGFMZW5ndGggKSB7IFJlYmluZChhUHRyLCBhTGVuZ3RoKTsgfQogICAg ICBleHBsaWNpdCBuc0RlcGVuZGVudFN0cmluZyggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBS ZWJpbmQoYVB0cik7IH0KCgoKCiAgICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNv bnN0IHNlbGZfdHlwZSYgKTsKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgYnVmZmVy X2hhbmRsZV90eXBlKiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl cnByZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiA+KCZtSGFuZGxlKTsgfQogICAg ICB2aXJ0dWFsIGNvbnN0IGJ1ZmZlcl9oYW5kbGVfdHlwZSogR2V0QnVmZmVySGFuZGxlKCkgY29u c3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiA+ KCZtSGFuZGxlKTsgfQoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0X2J1ZmZlcl9oYW5kbGVfdHlw ZSBtSGFuZGxlOwogIH07CgoKCmNsYXNzIG5zRGVwZW5kZW50Q1N0cmluZwogICAgICA6IHB1Ymxp YyBuc0FGbGF0Q1N0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVu dENTdHJpbmcgc2VsZl90eXBlOwoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXJf dHlwZSogYVB0ciApCiAgICAgICAgewogICAgICAgICAgOwogICAgICAgICAgbUhhbmRsZS5EYXRh U3RhcnQoYVB0cik7CgoKCiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYVB0ciA/IChhUHRyK25z Q2hhclRyYWl0czxjaGFyX3R5cGU+OjpsZW5ndGgoYVB0cikpIDogMCk7CiAgICAgICAgfQoKICAg ICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXJfdHlwZSogYVN0YXJ0UHRyLCBjb25zdCBj aGFyX3R5cGUqIGFFbmRQdHIgKQogICAgICAgIHsKICAgICAgICAgIDsKIyAxNjAgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNEZXBlbmRlbnRTdHJpbmcuaCIKICAgICAgICAgIDsKICAg ICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFydFB0cik7CiAgICAgICAgICBtSGFuZGxlLkRh dGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0 IGNoYXJfdHlwZSogYVB0ciwgUFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAg OwogICAgICAgICAgUmViaW5kKGFQdHIsIGFQdHIrYUxlbmd0aCk7CiAgICAgICAgfQoKICAgICAg bnNEZXBlbmRlbnRDU3RyaW5nKCBjb25zdCBjaGFyX3R5cGUqIGFTdGFydFB0ciwgY29uc3QgY2hh cl90eXBlKiBhRW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRyLCBhRW5kUHRyKTsgfQogICAgICBu c0RlcGVuZGVudENTdHJpbmcoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgUFJVaW50MzIgYUxlbmd0 aCApIHsgUmViaW5kKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIGV4cGxpY2l0IG5zRGVwZW5kZW50 Q1N0cmluZyggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBSZWJpbmQoYVB0cik7IH0KCgoKCiAg ICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlwZSYgKTsKCiAg ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRGbGF0 QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgYnVm ZmVyX2hhbmRsZV90eXBlKiA+KCZtSGFuZGxlKTsgfQogICAgICB2aXJ0dWFsIGNvbnN0IGJ1ZmZl cl9oYW5kbGVfdHlwZSogR2V0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnBy ZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiA+KCZtSGFuZGxlKTsgfQoKICAgIHBy aXZhdGU6CiAgICAgIGNvbnN0X2J1ZmZlcl9oYW5kbGVfdHlwZSBtSGFuZGxlOwogIH07CiMgMzMg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNMaXRlcmFsU3RyaW5nLmgiIDIKIyA2MyAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIgMgoKCgojIDEgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNEZXBlbmRlbnRTdWJzdHJpbmcuaCIgMQojIDQ1ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zRGVwZW5kZW50U3Vic3RyaW5nLmgiCmNsYXNz IG5zRGVwZW5kZW50U3Vic3RyaW5nCiAgICA6IHB1YmxpYyBuc0FTdHJpbmcKIyA1NSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudFN1YnN0cmluZy5oIgogIHsKICAgIHB1 YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudFN1YnN0cmluZyBzZWxmX3R5cGU7CgogICAg cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFn bWVudCggY29uc3RfZnJhZ21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp IGNvbnN0OwogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVGcmFnbWVudCggZnJh Z21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIHsgcmV0dXJuIDA7IH0K CiAgICBwdWJsaWM6CiAgICAgIG5zRGVwZW5kZW50U3Vic3RyaW5nKCBjb25zdCBhYnN0cmFjdF9z dHJpbmdfdHlwZSYgYVN0cmluZywgUFJVaW50MzIgYVN0YXJ0UG9zLCBQUlVpbnQzMiBhTGVuZ3Ro ICkKICAgICAgICAgIDogbVN0cmluZyhhU3RyaW5nKSwKICAgICAgICAgICAgbVN0YXJ0UG9zKCBO U19NSU4oYVN0YXJ0UG9zLCBhU3RyaW5nLkxlbmd0aCgpKSApLAogICAgICAgICAgICBtTGVuZ3Ro KCBOU19NSU4oYUxlbmd0aCwgYVN0cmluZy5MZW5ndGgoKS1tU3RhcnRQb3MpICkKICAgICAgICB7 CgogICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50U3Vic3RyaW5nKCBjb25zdCBjb25zdF9pdGVy YXRvciYgYVN0YXJ0LCBjb25zdCBjb25zdF9pdGVyYXRvciYgYUVuZCApCiAgICAgICAgICA6IG1T dHJpbmcoYVN0YXJ0LnN0cmluZygpKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2l0ZXJhdG9y IHplcm9Qb2ludDsKICAgICAgICAgIG1TdHJpbmcuQmVnaW5SZWFkaW5nKHplcm9Qb2ludCk7CiAg ICAgICAgICBtU3RhcnRQb3MgPSBEaXN0YW5jZSh6ZXJvUG9pbnQsIGFTdGFydCk7CiAgICAgICAg ICBtTGVuZ3RoID0gRGlzdGFuY2UoYVN0YXJ0LCBhRW5kKTsKICAgICAgICB9CgoKCgogICAgcHJp dmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVi bGljOgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKICAgIHByaXZhdGU6 CiAgICAgIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBtU3RyaW5nOwogICAgICBQUlVpbnQz MiBtU3RhcnRQb3M7CiAgICAgIFBSVWludDMyIG1MZW5ndGg7CiAgfTsKCmNsYXNzIG5zRGVwZW5k ZW50Q1N1YnN0cmluZwogICAgOiBwdWJsaWMgbnNBQ1N0cmluZwojIDEwNyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudFN1YnN0cmluZy5oIgogIHsKICAgIHB1YmxpYzoK ICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudENTdWJzdHJpbmcgc2VsZl90eXBlOwoKICAgIHByb3Rl Y3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQo IGNvbnN0X2ZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25z dDsKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50 X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9CgogICAg cHVibGljOgogICAgICBuc0RlcGVuZGVudENTdWJzdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmlu Z190eXBlJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3RhcnRQb3MsIFBSVWludDMyIGFMZW5ndGggKQog ICAgICAgICAgOiBtU3RyaW5nKGFTdHJpbmcpLAogICAgICAgICAgICBtU3RhcnRQb3MoIE5TX01J TihhU3RhcnRQb3MsIGFTdHJpbmcuTGVuZ3RoKCkpICksCiAgICAgICAgICAgIG1MZW5ndGgoIE5T X01JTihhTGVuZ3RoLCBhU3RyaW5nLkxlbmd0aCgpLW1TdGFydFBvcykgKQogICAgICAgIHsKCiAg ICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRDU3Vic3RyaW5nKCBjb25zdCBjb25zdF9pdGVyYXRv ciYgYVN0YXJ0LCBjb25zdCBjb25zdF9pdGVyYXRvciYgYUVuZCApCiAgICAgICAgICA6IG1TdHJp bmcoYVN0YXJ0LnN0cmluZygpKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHpl cm9Qb2ludDsKICAgICAgICAgIG1TdHJpbmcuQmVnaW5SZWFkaW5nKHplcm9Qb2ludCk7CiAgICAg ICAgICBtU3RhcnRQb3MgPSBEaXN0YW5jZSh6ZXJvUG9pbnQsIGFTdGFydCk7CiAgICAgICAgICBt TGVuZ3RoID0gRGlzdGFuY2UoYVN0YXJ0LCBhRW5kKTsKICAgICAgICB9CgoKCgogICAgcHJpdmF0 ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVibGlj OgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAg ICAgIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBtU3RyaW5nOwogICAgICBQUlVpbnQzMiBt U3RhcnRQb3M7CiAgICAgIFBSVWludDMyIG1MZW5ndGg7CiAgfTsKCgpjbGFzcyBuc0RlcGVuZGVu dFNpbmdsZUZyYWdtZW50U3Vic3RyaW5nCiAgICAgIDogcHVibGljIG5zQVNpbmdsZUZyYWdtZW50 U3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zRGVwZW5kZW50U2luZ2xlRnJh Z21lbnRTdWJzdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQVNpbmdsZUZyYWdtZW50 U3RyaW5nIGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBlOwoKICAgICAgdm9pZAogICAgICBS ZWJpbmQoIGNvbnN0IGNoYXJfdHlwZSogYVN0YXJ0UHRyLCBjb25zdCBjaGFyX3R5cGUqIGFFbmRQ dHIgKQogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFT dGFydFB0cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoK ICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90 eXBlJiBhU3RyaW5nLCBjb25zdCBQUlVpbnQzMiBhU3RhcnRQb3MsIGNvbnN0IFBSVWludDMyIGFM ZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2NoYXJfaXRlcmF0b3IgaXRlcjsKICAg ICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdHJpbmcuQmVnaW5SZWFkaW5nKGl0ZXIpICsgTlNf TUlOKGFTdGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkpOwogICAgICAgICAgbUhhbmRsZS5EYXRh RW5kKCBOU19NSU4obUhhbmRsZS5EYXRhU3RhcnQoKSArIGFMZW5ndGgsIGFTdHJpbmcuRW5kUmVh ZGluZyhpdGVyKSkgKTsKICAgICAgICB9CgogICAgICBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50 U3Vic3RyaW5nKCBjb25zdCBjaGFyX3R5cGUqIGFTdGFydFB0ciwgY29uc3QgY2hhcl90eXBlKiBh RW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRyLCBhRW5kUHRyKTsgfQogICAgICBuc0RlcGVuZGVu dFNpbmdsZUZyYWdtZW50U3Vic3RyaW5nKCBjb25zdCBhYnN0cmFjdF9zaW5nbGVfZnJhZ21lbnRf dHlwZSYgYVN0cmluZywgY29uc3QgUFJVaW50MzIgYVN0YXJ0UG9zLCBjb25zdCBQUlVpbnQzMiBh TGVuZ3RoICkgeyBSZWJpbmQoYVN0cmluZywgYVN0YXJ0UG9zLCBhTGVuZ3RoKTsgfQoKCgoKICAg IHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiApOwoKICAg IHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxlX3R5cGUqIEdldEJ1ZmZl ckhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IGJ1ZmZlcl9o YW5kbGVfdHlwZSogPigmbUhhbmRsZSk7IH0KCiAgICBwcml2YXRlOgogICAgICBjb25zdF9idWZm ZXJfaGFuZGxlX3R5cGUgbUhhbmRsZTsKICB9OwoKCmNsYXNzIG5zRGVwZW5kZW50U2luZ2xlRnJh Z21lbnRDU3Vic3RyaW5nCiAgICAgIDogcHVibGljIG5zQVNpbmdsZUZyYWdtZW50Q1N0cmluZwog IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50Q1N1 YnN0cmluZyBzZWxmX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5n IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBlOwoKICAgICAgdm9pZAogICAgICBSZWJpbmQo IGNvbnN0IGNoYXJfdHlwZSogYVN0YXJ0UHRyLCBjb25zdCBjaGFyX3R5cGUqIGFFbmRQdHIgKQog ICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFydFB0 cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAgICAg dm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBlJiBh U3RyaW5nLCBjb25zdCBQUlVpbnQzMiBhU3RhcnRQb3MsIGNvbnN0IFBSVWludDMyIGFMZW5ndGgg KQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2NoYXJfaXRlcmF0b3IgaXRlcjsKICAgICAgICAg IG1IYW5kbGUuRGF0YVN0YXJ0KGFTdHJpbmcuQmVnaW5SZWFkaW5nKGl0ZXIpICsgTlNfTUlOKGFT dGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkpOwogICAgICAgICAgbUhhbmRsZS5EYXRhRW5kKCBO U19NSU4obUhhbmRsZS5EYXRhU3RhcnQoKSArIGFMZW5ndGgsIGFTdHJpbmcuRW5kUmVhZGluZyhp dGVyKSkgKTsKICAgICAgICB9CgogICAgICBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50Q1N1YnN0 cmluZyggY29uc3QgY2hhcl90eXBlKiBhU3RhcnRQdHIsIGNvbnN0IGNoYXJfdHlwZSogYUVuZFB0 ciApIHsgUmViaW5kKGFTdGFydFB0ciwgYUVuZFB0cik7IH0KICAgICAgbnNEZXBlbmRlbnRTaW5n bGVGcmFnbWVudENTdWJzdHJpbmcoIGNvbnN0IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBl JiBhU3RyaW5nLCBjb25zdCBQUlVpbnQzMiBhU3RhcnRQb3MsIGNvbnN0IFBSVWludDMyIGFMZW5n dGggKSB7IFJlYmluZChhU3RyaW5nLCBhU3RhcnRQb3MsIGFMZW5ndGgpOyB9CgoKCgogICAgcHJp dmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVi bGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGJ1ZmZlcl9oYW5kbGVfdHlwZSogR2V0QnVmZmVySGFu ZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRs ZV90eXBlKiA+KCZtSGFuZGxlKTsgfQoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0X2J1ZmZlcl9o YW5kbGVfdHlwZSBtSGFuZGxlOwogIH07CgoKCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENTdWJz dHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3Rh cnRQb3MsIFBSVWludDMyIGFTdWJzdHJpbmdMZW5ndGggKQogIHsKICAgIHJldHVybiBuc0RlcGVu ZGVudENTdWJzdHJpbmcoYVN0cmluZywgYVN0YXJ0UG9zLCBhU3Vic3RyaW5nTGVuZ3RoKTsKICB9 CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FT dHJpbmcmIGFTdHJpbmcsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYVN1YnN0cmluZ0xl bmd0aCApCiAgewogICAgcmV0dXJuIG5zRGVwZW5kZW50U3Vic3RyaW5nKGFTdHJpbmcsIGFTdGFy dFBvcywgYVN1YnN0cmluZ0xlbmd0aCk7CiAgfQoKaW5saW5lCmNvbnN0IG5zRGVwZW5kZW50Q1N1 YnN0cmluZwpTdWJzdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU3Rh cnQsIGNvbnN0IG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhRW5kICkKICB7CiAgICByZXR1 cm4gbnNEZXBlbmRlbnRDU3Vic3RyaW5nKGFTdGFydCwgYUVuZCk7CiAgfQoKaW5saW5lCmNvbnN0 IG5zRGVwZW5kZW50U3Vic3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNBU3RyaW5nOjpjb25zdF9p dGVyYXRvciYgYVN0YXJ0LCBjb25zdCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhRW5kICkK ICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRTdWJzdHJpbmcoYVN0YXJ0LCBhRW5kKTsKICB9CgoK aW5saW5lCmNvbnN0IG5zRGVwZW5kZW50U2luZ2xlRnJhZ21lbnRDU3Vic3RyaW5nClN1YnN0cmlu ZyggY29uc3QgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3Rh cnRQb3MsIFBSVWludDMyIGFTdWJzdHJpbmdMZW5ndGggKQogIHsKICAgIHJldHVybiBuc0RlcGVu ZGVudFNpbmdsZUZyYWdtZW50Q1N1YnN0cmluZyhhU3RyaW5nLCBhU3RhcnRQb3MsIGFTdWJzdHJp bmdMZW5ndGgpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50U3Vi c3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNBU2luZ2xlRnJhZ21lbnRTdHJpbmcmIGFTdHJpbmcs IFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYVN1YnN0cmluZ0xlbmd0aCApCiAgewogICAg cmV0dXJuIG5zRGVwZW5kZW50U2luZ2xlRnJhZ21lbnRTdWJzdHJpbmcoYVN0cmluZywgYVN0YXJ0 UG9zLCBhU3Vic3RyaW5nTGVuZ3RoKTsKICB9CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRTaW5n bGVGcmFnbWVudENTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FTaW5nbGVGcmFnbWVudENT dHJpbmc6OmNvbnN0X2NoYXJfaXRlcmF0b3ImIGFTdGFydCwgY29uc3QgbnNBU2luZ2xlRnJhZ21l bnRDU3RyaW5nOjpjb25zdF9jaGFyX2l0ZXJhdG9yJiBhRW5kICkKICB7CiAgICByZXR1cm4gbnNE ZXBlbmRlbnRTaW5nbGVGcmFnbWVudENTdWJzdHJpbmcoYVN0YXJ0LCBhRW5kKTsKICB9Cgppbmxp bmUKY29uc3QgbnNEZXBlbmRlbnRTaW5nbGVGcmFnbWVudFN1YnN0cmluZwpTdWJzdHJpbmcoIGNv bnN0IG5zQVNpbmdsZUZyYWdtZW50U3RyaW5nOjpjb25zdF9jaGFyX2l0ZXJhdG9yJiBhU3RhcnQs IGNvbnN0IG5zQVNpbmdsZUZyYWdtZW50U3RyaW5nOjpjb25zdF9jaGFyX2l0ZXJhdG9yJiBhRW5k ICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRTaW5nbGVGcmFnbWVudFN1YnN0cmluZyhhU3Rh cnQsIGFFbmQpOwogIH0KIyA2NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmlu ZzIuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNlRmxh dFN0cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNl RmxhdFN0cmluZy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTaGFyYWJs ZVN0cmluZy5oIiAxCiMgMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTaGFyYWJs ZVN0cmluZy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNCdWZmZXJIYW5k bGVVdGlscy5oIiAxCiMgMzYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNCdWZmZXJI YW5kbGVVdGlscy5oIgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4y LjIvaW5jbHVkZS9nKystdjMvbmV3IiAxIDMKIyA0MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBj LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvdXNyL2xpYi9nY2Mt bGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwoj IDQ3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvZysr LXYzL2NzdGRkZWYiIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8z LjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBj LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAyIDMKCm5hbWVzcGFjZSBz dGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNDIgIi91c3Iv bGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9nKystdjMvbmV3IiAy IDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUv ZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7Cgpu YW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAg ZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7 CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoK ICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAg ICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv bigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAo KTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0 ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2 b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhw ZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7 CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMg OTggIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9nKyst djMvZXhjZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgpu YW1lc3BhY2UgX19nbnVfY3h4CnsKIyAxMTEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCiAgdm9pZCBfX3ZlcmJvc2Vf dGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0KIyA0MyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBj LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2crKy12My9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsK Cm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgog IHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5i YWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVy biBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVy KSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIpIHRocm93KCk7 Cn0KIyA3OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRl L2crKy12My9uZXciIDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3Rk OjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0 ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRocm93KCk7CnZvaWQg b3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6 OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBu ZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9w ZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lk IG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7 CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJv dygpIHsgcmV0dXJuIF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXpl X3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCgppbmxpbmUgdm9pZCBvcGVy YXRvciBkZWxldGUgKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07CmlubGluZSB2b2lkIG9wZXJh dG9yIGRlbGV0ZVtdKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07Cgp9CiMgMzcgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNCdWZmZXJIYW5kbGVVdGlscy5oIiAyCgoKCnRlbXBsYXRl IDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNBdXRvQnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgog ICAgICBuc0F1dG9CdWZmZXJIYW5kbGUoKSA6IG1IYW5kbGUoMCkgeyB9CgogICAgICBuc0F1dG9C dWZmZXJIYW5kbGUoIGNvbnN0IG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4mIGFPdGhlciApCiAg ICAgICAgICA6IG1IYW5kbGUoYU90aGVyLmdldCgpKQogICAgICAgIHsKICAgICAgICAgIGlmICgg bUhhbmRsZSApCiAgICAgICAgICAgIG1IYW5kbGUtPkFjcXVpcmVSZWZlcmVuY2UoKTsKICAgICAg ICB9CgogICAgICBleHBsaWNpdAogICAgICBuc0F1dG9CdWZmZXJIYW5kbGUoIGNvbnN0IG5zU2hh cmVkQnVmZmVySGFuZGxlPENoYXJUPiogYUhhbmRsZSApCiAgICAgICAgICA6IG1IYW5kbGUoIGNv bnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogPihhSGFuZGxlKSApCiAgICAg ICAgewogICAgICAgICAgaWYgKCBtSGFuZGxlICkKICAgICAgICAgICAgbUhhbmRsZS0+QWNxdWly ZVJlZmVyZW5jZSgpOwogICAgICAgIH0KCiAgICAgfm5zQXV0b0J1ZmZlckhhbmRsZSgpCiAgICAg ICAgewogICAgICAgICAgaWYgKCBtSGFuZGxlICkKICAgICAgICAgICAgbUhhbmRsZS0+UmVsZWFz ZVJlZmVyZW5jZSgpOwogICAgICAgIH0KCiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4m CiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiByaHMg KQogICAgICAgIHsKICAgICAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogb2xkX2hh bmRsZSA9IG1IYW5kbGU7CiAgICAgICAgICBpZiAoIChtSGFuZGxlID0gY29uc3RfY2FzdDwgbnNT aGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiA+KHJocykpICkKICAgICAgICAgICAgbUhhbmRsZS0+ QWNxdWlyZVJlZmVyZW5jZSgpOwogICAgICAgICAgaWYgKCBvbGRfaGFuZGxlICkKICAgICAgICAg ICAgb2xkX2hhbmRsZS0+UmVsZWFzZVJlZmVyZW5jZSgpOwogICAgICAgICAgcmV0dXJuICp0aGlz OwogICAgICAgIH0KCiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4mCiAgICAgIG9wZXJh dG9yPSggY29uc3QgbnNBdXRvQnVmZmVySGFuZGxlPENoYXJUPiYgcmhzICkKICAgICAgICB7CiAg ICAgICAgICByZXR1cm4gb3BlcmF0b3I9KHJocy5nZXQoKSk7CiAgICAgICAgfQoKICAgICAgbnNT aGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KgogICAgICBnZXQoKSBjb25zdAogICAgICAgIHsKICAg ICAgICAgIHJldHVybiBtSGFuZGxlOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zU2hhcmVk QnVmZmVySGFuZGxlPENoYXJUPiooKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBn ZXQoKTsKICAgICAgICB9CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qCiAgICAg IG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBnZXQoKTsKICAg ICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiBt SGFuZGxlOwogIH07CgoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIENoYXJUPgppbmxp bmUKc2l6ZV90Ck5TX0FsaWduZWRIYW5kbGVTaXplKCBjb25zdCBIYW5kbGVUKiwgY29uc3QgQ2hh clQqICkKICB7CgogICAgcmV0dXJuICgoc2l6ZW9mKEhhbmRsZVQpICsgc2l6ZW9mKENoYXJUKSAt IDEpIC8gc2l6ZW9mKENoYXJUKSkgKiBzaXplb2YoQ2hhclQpOwogIH0KCnRlbXBsYXRlIDxjbGFz cyBIYW5kbGVULCBjbGFzcyBDaGFyVD4KaW5saW5lCmNvbnN0IENoYXJUKgpOU19EYXRhQWZ0ZXJI YW5kbGUoIGNvbnN0IEhhbmRsZVQqIGFIYW5kbGVQdHIsIGNvbnN0IENoYXJUKiBhRHVtbXlDaGFy VFB0ciApCiAgewogICAgdHlwZWRlZiBjb25zdCBDaGFyVCogQ2hhclRfcHRyOwogICAgcmV0dXJu IENoYXJUX3B0cihzdGF0aWNfY2FzdDwgY29uc3QgdW5zaWduZWQgY2hhciogPihhSGFuZGxlUHRy KSArIE5TX0FsaWduZWRIYW5kbGVTaXplKGFIYW5kbGVQdHIsIGFEdW1teUNoYXJUUHRyKSk7CiAg fQoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIENoYXJUPgppbmxpbmUKQ2hhclQqCk5T X0RhdGFBZnRlckhhbmRsZSggSGFuZGxlVCogYUhhbmRsZVB0ciwgY29uc3QgQ2hhclQqIGFEdW1t eUNoYXJUUHRyICkKICB7CiAgICB0eXBlZGVmIENoYXJUKiBDaGFyVF9wdHI7CiAgICByZXR1cm4g Q2hhclRfcHRyKHN0YXRpY19jYXN0PCB1bnNpZ25lZCBjaGFyKiA+KGFIYW5kbGVQdHIpICsgTlNf QWxpZ25lZEhhbmRsZVNpemUoYUhhbmRsZVB0ciwgYUR1bW15Q2hhclRQdHIpKTsKICB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgU3RyaW5nVD4KSGFuZGxlVCoKTlNfQWxsb2NhdGVD b250aWd1b3VzSGFuZGxlV2l0aERhdGEoIGNvbnN0IEhhbmRsZVQqIGFEdW1teUhhbmRsZVB0ciwg UFJVaW50MzIgYUFkZGl0aW9uYWxDYXBhY2l0eSwgY29uc3QgU3RyaW5nVCogYURhdGFTb3VyY2Ug KQogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgU3RyaW5nVDo6Y2hhcl90eXBlIGNoYXJfdHlwZTsK ICAgIHR5cGVkZWYgY2hhcl90eXBlKiBjaGFyX3B0cjsKCgogICAgc2l6ZV90IGhhbmRsZV9zaXpl ID0gTlNfQWxpZ25lZEhhbmRsZVNpemUoYUR1bW15SGFuZGxlUHRyLCBjaGFyX3B0cigwKSk7CgoK ICAgIHNpemVfdCBkYXRhX2xlbmd0aCA9IGFEYXRhU291cmNlPyBhRGF0YVNvdXJjZS0+TGVuZ3Ro KCkgOiAwOwogICAgc2l6ZV90IGJ1ZmZlcl9sZW5ndGggPSBkYXRhX2xlbmd0aCArIGFBZGRpdGlv bmFsQ2FwYWNpdHk7CgoKICAgIHNpemVfdCBidWZmZXJfc2l6ZSA9IGJ1ZmZlcl9sZW5ndGggKiBz aXplb2YoY2hhcl90eXBlKTsKCgogICAgSGFuZGxlVCogcmVzdWx0ID0gMDsKICAgIHZvaWQqIGhh bmRsZV9wdHIgPSA6Om9wZXJhdG9yIG5ldyhoYW5kbGVfc2l6ZSArIGJ1ZmZlcl9zaXplKTsKCiAg ICBpZiAoIGhhbmRsZV9wdHIgKQogICAgICB7CiAgICAgICAgY2hhcl9wdHIgZGF0YV9zdGFydF9w dHIgPSBjaGFyX3B0cihzdGF0aWNfY2FzdDwgdW5zaWduZWQgY2hhciogPihoYW5kbGVfcHRyKSAr IGhhbmRsZV9zaXplKTsKICAgICAgICBjaGFyX3B0ciBkYXRhX2VuZF9wdHIgPSBkYXRhX3N0YXJ0 X3B0ciArIGRhdGFfbGVuZ3RoOwogICAgICAgIGNoYXJfcHRyIGJ1ZmZlcl9lbmRfcHRyID0gZGF0 YV9zdGFydF9wdHIgKyBidWZmZXJfbGVuZ3RoOwoKICAgICAgICBjaGFyX3B0ciB0b0JlZ2luID0g ZGF0YV9zdGFydF9wdHI7CgogICAgICAgIGlmICggZGF0YV9sZW5ndGggKQogICAgICAgICAgewog ICAgICAgICAgICB0eXBlbmFtZSBTdHJpbmdUOjpjb25zdF9pdGVyYXRvciBmcm9tQmVnaW4sIGZy b21FbmQ7CiAgICAgICAgICAgIGNvcHlfc3RyaW5nKGFEYXRhU291cmNlLT5CZWdpblJlYWRpbmco ZnJvbUJlZ2luKSwgYURhdGFTb3VyY2UtPkVuZFJlYWRpbmcoZnJvbUVuZCksIHRvQmVnaW4pOwog ICAgICAgICAgfQoKCiAgICAgICAgaWYgKCBhQWRkaXRpb25hbENhcGFjaXR5ID4gMCApCiAgICAg ICAgICAqdG9CZWdpbiA9IGNoYXJfdHlwZSgwKTsKCiAgICAgICAgcmVzdWx0ID0gbmV3IChoYW5k bGVfcHRyKSBIYW5kbGVUKGRhdGFfc3RhcnRfcHRyLCBkYXRhX2VuZF9wdHIsIGJ1ZmZlcl9lbmRf cHRyIC0gZGF0YV9zdGFydF9wdHIsIDEpOwogICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgU3RyaW5nVD4KaW5saW5lCkhhbmRsZVQq Ck5TX0FsbG9jYXRlQ29udGlndW91c0hhbmRsZVdpdGhEYXRhKCBjb25zdCBIYW5kbGVUKiBhRHVt bXlIYW5kbGVQdHIsIGNvbnN0IFN0cmluZ1QmIGFEYXRhU291cmNlLCBQUlVpbnQzMiBhQWRkaXRp b25hbENhcGFjaXR5ICkKICB7CiAgICByZXR1cm4gTlNfQWxsb2NhdGVDb250aWd1b3VzSGFuZGxl V2l0aERhdGEoYUR1bW15SGFuZGxlUHRyLCBhQWRkaXRpb25hbENhcGFjaXR5LCAmYURhdGFTb3Vy Y2UpOwogIH0KIyAzNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1NoYXJhYmxlU3Ry aW5nLmgiIDIKIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1NoYXJhYmxlU3Ry aW5nLmgiCmNsYXNzIG5zU2hhcmFibGVTdHJpbmcKICAgIDogcHVibGljIG5zQUZsYXRTdHJpbmcK ICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgbnNTaGFyYWJsZVN0cmluZyBzZWxmX3R5cGU7 CgogICAgcHVibGljOgogICAgICBuc1NoYXJhYmxlU3RyaW5nKCkgOiBtQnVmZmVyKEdldFNoYXJl ZEVtcHR5QnVmZmVySGFuZGxlKCkpIHsgfQogICAgICBuc1NoYXJhYmxlU3RyaW5nKCBjb25zdCBz ZWxmX3R5cGUmIGFPdGhlciApIDogbUJ1ZmZlcihhT3RoZXIubUJ1ZmZlcikgeyB9CiAgICAgIGV4 cGxpY2l0IG5zU2hhcmFibGVTdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhUmVh ZGFibGUgKQogICAgICAgIHsKCgogICAgICAgICAgZG9fQXNzaWduRnJvbVJlYWRhYmxlKGFSZWFk YWJsZSk7CiAgICAgICAgfQogICAgICBleHBsaWNpdCBuc1NoYXJhYmxlU3RyaW5nKCBjb25zdCBz aGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlKiBhSGFuZGxlICkKICAgICAgICAgIDogbUJ1ZmZlcihh SGFuZGxlKQogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICB9CgoKICAgICAgc2VsZl90eXBl JiBvcGVyYXRvcj0oIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhUmVhZGFibGUgKQogICAg ICAgIHsKICAgICAgICAgIEFzc2lnbihhUmVhZGFibGUpOwogICAgICAgICAgcmV0dXJuICp0aGlz OwogICAgICAgIH0KIyA4MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1NoYXJhYmxl U3RyaW5nLmgiCiAgICAgIHZvaWQgQWRvcHQoIGNoYXJfdHlwZSogYU5ld1ZhbHVlICk7CgoKCgoK CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIHZvaWQgU2V0Q2FwYWNpdHkoIHNpemVfdHlwZSBh TmV3Q2FwYWNpdHkgKTsKICAgICAgdmlydHVhbCB2b2lkIFNldExlbmd0aCggc2l6ZV90eXBlIGFO ZXdMZW5ndGggKTsKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZy b21SZWFkYWJsZSggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApOwogICAg ICB2aXJ0dWFsIGNvbnN0IHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZl ckhhbmRsZSgpIGNvbnN0OwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdl dFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJV aW50MzIgKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHN0YXRpYyBzaGFyZWRfYnVmZmVyX2hhbmRs ZV90eXBlKiBHZXRTaGFyZWRFbXB0eUJ1ZmZlckhhbmRsZSgpOwoKICAgIHByb3RlY3RlZDoKICAg ICAgbnNBdXRvQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4gbUJ1ZmZlcjsKICB9OwoKCmNsYXNzIG5z U2hhcmFibGVDU3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0Q1N0cmluZwogIHsKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBuc1NoYXJhYmxlQ1N0cmluZyBzZWxmX3R5cGU7CgogICAgcHVibGlj OgogICAgICBuc1NoYXJhYmxlQ1N0cmluZygpIDogbUJ1ZmZlcihHZXRTaGFyZWRFbXB0eUJ1ZmZl ckhhbmRsZSgpKSB7IH0KICAgICAgbnNTaGFyYWJsZUNTdHJpbmcoIGNvbnN0IHNlbGZfdHlwZSYg YU90aGVyICkgOiBtQnVmZmVyKGFPdGhlci5tQnVmZmVyKSB7IH0KICAgICAgZXhwbGljaXQgbnNT aGFyYWJsZUNTdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhUmVhZGFibGUgKQog ICAgICAgIHsKCgogICAgICAgICAgZG9fQXNzaWduRnJvbVJlYWRhYmxlKGFSZWFkYWJsZSk7CiAg ICAgICAgfQogICAgICBleHBsaWNpdCBuc1NoYXJhYmxlQ1N0cmluZyggY29uc3Qgc2hhcmVkX2J1 ZmZlcl9oYW5kbGVfdHlwZSogYUhhbmRsZSApCiAgICAgICAgICA6IG1CdWZmZXIoYUhhbmRsZSkK ICAgICAgICB7CiAgICAgICAgICA7CiAgICAgICAgfQoKCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0 b3I9KCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYVJlYWRhYmxlICkKICAgICAgICB7CiAg ICAgICAgICBBc3NpZ24oYVJlYWRhYmxlKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg ICB9CiMgMTQ1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU2hhcmFibGVTdHJpbmcu aCIKICAgICAgdm9pZCBBZG9wdCggY2hhcl90eXBlKiBhTmV3VmFsdWUgKTsKCgoKCgoKCiAgICBw dWJsaWM6CiAgICAgIHZpcnR1YWwgdm9pZCBTZXRDYXBhY2l0eSggc2l6ZV90eXBlIGFOZXdDYXBh Y2l0eSApOwogICAgICB2aXJ0dWFsIHZvaWQgU2V0TGVuZ3RoKCBzaXplX3R5cGUgYU5ld0xlbmd0 aCApOwogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbVJlYWRh YmxlKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYVJlYWRhYmxlICk7CiAgICAgIHZpcnR1 YWwgY29uc3Qgc2hhcmVkX2J1ZmZlcl9oYW5kbGVfdHlwZSogR2V0U2hhcmVkQnVmZmVySGFuZGxl KCkgY29uc3Q7CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFi bGVGcmFnbWVudCggZnJhZ21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp OwoKICAgIHByb3RlY3RlZDoKICAgICAgc3RhdGljIHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUq IEdldFNoYXJlZEVtcHR5QnVmZmVySGFuZGxlKCk7CgogICAgcHJvdGVjdGVkOgogICAgICBuc0F1 dG9CdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiBtQnVmZmVyOwogIH07CiMgMjkgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNlRmxhdFN0cmluZy5oIiAyCiMgODMgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNlRmxhdFN0cmluZy5oIgpjbGFzcyBuc1Byb21p c2VGbGF0U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0U3RyaW5nCiAgewogICAgZnJpZW5kIGNv bnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcgUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0IGFic3RyYWN0 X3N0cmluZ190eXBlJiApOwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc1Byb21pc2VGbGF0 U3RyaW5nIHNlbGZfdHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIG5zUHJvbWlzZUZsYXRTdHJpbmco IGNvbnN0IHNlbGZfdHlwZSYgKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIG5zUHJvbWlzZUZsYXRT dHJpbmcoKSA6IG1Qcm9taXNlZFN0cmluZygmbUZsYXR0ZW5lZFN0cmluZykgeyB9CiAgICAgIGV4 cGxpY2l0IG5zUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBh U3RyaW5nICk7CgoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxlX3R5cGUqIEdldEZs YXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxl X3R5cGUqIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IHNoYXJl ZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKCgog ICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogZ2V0KCkgY29uc3Q7CiAg ICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICBwcm90ZWN0ZWQ6CiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBjb25zdF9mcmFn bWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CgoKICAgIHBy aXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNQcm9taXNlRmxhdFN0cmluZyYg KTsKCiAgICBwcml2YXRlOgogICAgICBuc1NoYXJhYmxlU3RyaW5nIG1GbGF0dGVuZWRTdHJpbmc7 CiAgICAgIGNvbnN0IG5zQUZsYXRTdHJpbmcqIG1Qcm9taXNlZFN0cmluZzsKICB9OwoKY2xhc3Mg bnNQcm9taXNlRmxhdENTdHJpbmcKICAgIDogcHVibGljIG5zQUZsYXRDU3RyaW5nCiAgewogICAg ZnJpZW5kIGNvbnN0IG5zUHJvbWlzZUZsYXRDU3RyaW5nIFByb21pc2VGbGF0Q1N0cmluZyggY29u c3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmICk7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5z UHJvbWlzZUZsYXRDU3RyaW5nIHNlbGZfdHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIG5zUHJvbWlz ZUZsYXRDU3RyaW5nKCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHJvdGVjdGVkOgogICAgICBu c1Byb21pc2VGbGF0Q1N0cmluZygpIDogbVByb21pc2VkU3RyaW5nKCZtRmxhdHRlbmVkU3RyaW5n KSB7IH0KICAgICAgZXhwbGljaXQgbnNQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IGFic3RyYWN0 X3N0cmluZ190eXBlJiBhU3RyaW5nICk7CgoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFu ZGxlX3R5cGUqIEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25z dCBidWZmZXJfaGFuZGxlX3R5cGUqIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0 dWFsIGNvbnN0IHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRs ZSgpIGNvbnN0OwoKCgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSog Z2V0KCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICBw cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdt ZW50KCBjb25zdF9mcmFnbWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkg Y29uc3Q7CgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90 eXBlJiApOwoKICAgIHByaXZhdGU6CiAgICAgIG5zU2hhcmFibGVDU3RyaW5nIG1GbGF0dGVuZWRT dHJpbmc7CiAgICAgIGNvbnN0IG5zQUZsYXRDU3RyaW5nKiBtUHJvbWlzZWRTdHJpbmc7CiAgfTsK CgppbmxpbmUKY29uc3QgbnNQcm9taXNlRmxhdFN0cmluZwpQcm9taXNlRmxhdFN0cmluZyggY29u c3QgbnNBU3RyaW5nJiBhU3RyaW5nICkKICB7CiAgICByZXR1cm4gbnNQcm9taXNlRmxhdFN0cmlu ZyhhU3RyaW5nKTsKICB9CgppbmxpbmUKY29uc3QgbnNQcm9taXNlRmxhdENTdHJpbmcKUHJvbWlz ZUZsYXRDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nICkKICB7CiAgICByZXR1cm4g bnNQcm9taXNlRmxhdENTdHJpbmcoYVN0cmluZyk7CiAgfQojIDcxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3N0cmluZy9uc1hQSURMU3RyaW5nLmgiIDEKIyAxMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNYUElETFN0cmluZy5oIgpjbGFzcyBuc1hQSURMU3RyaW5nCiAgICA6IHB1YmxpYyBu c1NoYXJhYmxlU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zWFBJRExTdHJp bmcgc2VsZl90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNYUElETFN0cmluZygpCiAgICAgICAg ICA6IG5zU2hhcmFibGVTdHJpbmcoR2V0U2hhcmVkRW1wdHlCdWZmZXJIYW5kbGUoKSkKICAgICAg ICB7CgoKCgoKICAgICAgICB9CgogICAgICBuc1hQSURMU3RyaW5nKCBjb25zdCBzZWxmX3R5cGUm IGFTdHJpbmcgKQogICAgICAgICAgOiBuc1NoYXJhYmxlU3RyaW5nKGFTdHJpbmcubUJ1ZmZlci5n ZXQoKSkKCiAgICAgICAgewoKCgoKCiAgICAgICAgfQoKICAgICAgZXhwbGljaXQgbnNYUElETFN0 cmluZyggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgICA6 IG5zU2hhcmFibGVTdHJpbmcoYVJlYWRhYmxlKQogICAgICAgIHsKCgoKCgogICAgICAgIH0KIyAx NzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNYUElETFN0cmluZy5oIgogICAgICBz ZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9yPSggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFS ZWFkYWJsZSApCiAgICAgICAgewogICAgICAgICAgQXNzaWduKGFSZWFkYWJsZSk7CiAgICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCgoKCgoKICAgICAgdm9pZCBBZG9wdCggY2hhcl90 eXBlKiBhTmV3VmFsdWUgKSB7ICpQcmVwYXJlRm9yVXNlQXNPdXRQYXJhbSgpID0gYU5ld1ZhbHVl OyB9CgoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIGdldCgpIGNvbnN0CiAgICAgICAg ewogICAgICAgICAgcmV0dXJuIChtQnVmZmVyLT5HZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCkgJiBz aGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlOjprSXNOVUxMKQogICAgICAgICAgICAgICAgICAgPyAw CiAgICAgICAgICAgICAgICAgICA6IG1CdWZmZXItPkRhdGFTdGFydCgpOwogICAgICAgIH0KCgog ICAgICBvcGVyYXRvciBjb25zdCBjaGFyX3R5cGUqKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0K ICAgICAgY2hhcl90eXBlIG9wZXJhdG9yW10oIGludCBpICkgY29uc3QgeyByZXR1cm4gZ2V0KClb IGkgXTsgfQoKCiAgICAgIGNsYXNzIGdldHRlcl9Db3BpZXNfdAogICAgICAgIHsKICAgICAgICAg IHB1YmxpYzoKICAgICAgICAgICAgZ2V0dGVyX0NvcGllc190KCBuc1hQSURMU3RyaW5nJiBhU3Ry aW5nICkgOiBtU3RyaW5nKCZhU3RyaW5nKSB7IH0KCgoKICAgICAgICAgICAgb3BlcmF0b3IgY2hh cl90eXBlKiooKSBjb25zdCB7IHJldHVybiBtU3RyaW5nLT5QcmVwYXJlRm9yVXNlQXNPdXRQYXJh bSgpOyB9CgogICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgbnNYUElETFN0cmluZyogbVN0 cmluZzsKICAgICAgICB9OwoKICAgICAgZnJpZW5kIGNsYXNzIGdldHRlcl9Db3BpZXNfdDsKCiAg ICBwcm90ZWN0ZWQ6CgoKCgogICAgICB2aXJ0dWFsIGNvbnN0IHNoYXJlZF9idWZmZXJfaGFuZGxl X3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKCiAgICAgIGNoYXJfdHlwZSoq IFByZXBhcmVGb3JVc2VBc091dFBhcmFtKCk7CgogICAgICBzdGF0aWMgc2hhcmVkX2J1ZmZlcl9o YW5kbGVfdHlwZSogR2V0U2hhcmVkRW1wdHlCdWZmZXJIYW5kbGUoKTsKIyAyMzkgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNYUElETFN0cmluZy5oIgogIH07CgppbmxpbmUKbnNYUElE TFN0cmluZzo6Z2V0dGVyX0NvcGllc190CmdldHRlcl9Db3BpZXMoIG5zWFBJRExTdHJpbmcmIGFT dHJpbmcgKQogIHsKICAgIHJldHVybiBuc1hQSURMU3RyaW5nOjpnZXR0ZXJfQ29waWVzX3QoYVN0 cmluZyk7CiAgfQoKCgpjbGFzcyBuc1hQSURMQ1N0cmluZwogICAgOiBwdWJsaWMgbnNTaGFyYWJs ZUNTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgbnNYUElETENTdHJpbmcgc2Vs Zl90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNYUElETENTdHJpbmcoKQogICAgICAgICAgOiBu c1NoYXJhYmxlQ1N0cmluZyhHZXRTaGFyZWRFbXB0eUJ1ZmZlckhhbmRsZSgpKQogICAgICAgIHsK CgoKCgogICAgICAgIH0KCiAgICAgIG5zWFBJRExDU3RyaW5nKCBjb25zdCBzZWxmX3R5cGUmIGFT dHJpbmcgKQogICAgICAgICAgOiBuc1NoYXJhYmxlQ1N0cmluZyhhU3RyaW5nLm1CdWZmZXIuZ2V0 KCkpCgogICAgICAgIHsKCgoKCgogICAgICAgIH0KIyAyODUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNYUElETFN0cmluZy5oIgogICAgICBzZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9y PSggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgewogICAg ICAgICAgQXNzaWduKGFSZWFkYWJsZSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg fQoKCgoKCgoKICAgICAgdm9pZCBBZG9wdCggY2hhcl90eXBlKiBhTmV3VmFsdWUgKSB7ICpQcmVw YXJlRm9yVXNlQXNPdXRQYXJhbSgpID0gYU5ld1ZhbHVlOyB9CgoKICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqIGdldCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIChtQnVm ZmVyLT5HZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCkgJiBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBl OjprSXNOVUxMKQogICAgICAgICAgICAgICAgICAgPyAwCiAgICAgICAgICAgICAgICAgICA6IG1C dWZmZXItPkRhdGFTdGFydCgpOwogICAgICAgIH0KCgogICAgICBvcGVyYXRvciBjb25zdCBjaGFy X3R5cGUqKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KICAgICAgY2hhcl90eXBlIG9wZXJhdG9y W10oIGludCBpICkgY29uc3QgeyByZXR1cm4gZ2V0KClbIGkgXTsgfQoKCiAgICAgIGNsYXNzIGdl dHRlcl9Db3BpZXNfdAogICAgICAgIHsKICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgZ2V0 dGVyX0NvcGllc190KCBuc1hQSURMQ1N0cmluZyYgYVN0cmluZyApIDogbVN0cmluZygmYVN0cmlu ZykgeyB9CgoKCiAgICAgICAgICAgIG9wZXJhdG9yIGNoYXJfdHlwZSoqKCkgY29uc3QgeyByZXR1 cm4gbVN0cmluZy0+UHJlcGFyZUZvclVzZUFzT3V0UGFyYW0oKTsgfQoKICAgICAgICAgIHByaXZh dGU6CiAgICAgICAgICAgIG5zWFBJRExDU3RyaW5nKiBtU3RyaW5nOwogICAgICAgIH07CgogICAg ICBmcmllbmQgY2xhc3MgZ2V0dGVyX0NvcGllc190OwoKICAgIHByb3RlY3RlZDoKCgoKCiAgICAg IHZpcnR1YWwgY29uc3Qgc2hhcmVkX2J1ZmZlcl9oYW5kbGVfdHlwZSogR2V0U2hhcmVkQnVmZmVy SGFuZGxlKCkgY29uc3Q7CgoKICAgICAgY2hhcl90eXBlKiogUHJlcGFyZUZvclVzZUFzT3V0UGFy YW0oKTsKCiAgICAgIHN0YXRpYyBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRTaGFyZWRF bXB0eUJ1ZmZlckhhbmRsZSgpOwojIDM1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9u c1hQSURMU3RyaW5nLmgiCiAgfTsKCmlubGluZQpuc1hQSURMQ1N0cmluZzo6Z2V0dGVyX0NvcGll c190CmdldHRlcl9Db3BpZXMoIG5zWFBJRExDU3RyaW5nJiBhU3RyaW5nICkKICB7CiAgICByZXR1 cm4gbnNYUElETENTdHJpbmc6OmdldHRlcl9Db3BpZXNfdChhU3RyaW5nKTsKICB9CiMgNzUgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiIDIKCgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHIuaCIgMQojIDIxMiAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3N0cmluZy9uc1N0ci5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01l bW9yeS5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01lbW9yeS5oIgoj IDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lNZW1vcnkuaCIgMQojIDU0ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJTWVtb3J5LmgiCmNsYXNzIG5zSU1lbW9yeSA6IHB1 YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1OWU3ZTc3YSwgMHgzOGU0LCAweDExZDQs IHsgMHg4YywgMHhmNSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0 dXJuIGlpZDt9CiMgNjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lNZW1vcnkuaCIK ICB2aXJ0dWFsIHZvaWQgKiBBbGxvYyhzaXplX3Qgc2l6ZSkgPSAwOwojIDg1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJTWVtb3J5LmgiCiAgdmlydHVhbCB2b2lkICogUmVhbGxvYyh2 b2lkICogcHRyLCBzaXplX3QgbmV3U2l6ZSkgPSAwOwojIDk0ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNJTWVtb3J5LmgiCiAgdmlydHVhbCB2b2lkIEZyZWUodm9pZCAqIHB0cikgPSAw OwojIDEwNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSU1lbW9yeS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgSGVhcE1pbmltaXplKFBSQm9vbCBpbW1lZGlhdGUpID0gMDsKCgoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBJc0xvd01lbW9yeShQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMg NDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01lbW9yeS5oIiAyCiMgNjMgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01lbW9yeS5oIgpjbGFzcyBuc01lbW9yeQp7CnB1Ymxp YzoKICAgIHN0YXRpYyB2b2lkKiBBbGxvYyhzaXplX3Qgc2l6ZSk7CiAgICBzdGF0aWMgdm9pZCog UmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKICAgIHN0YXRpYyB2b2lkIEZyZWUodm9p ZCogcHRyKTsKICAgIHN0YXRpYyBuc3Jlc3VsdCBIZWFwTWluaW1pemUoUFJCb29sIGFJbW1lZGlh dGUpOwogICAgc3RhdGljIHZvaWQqIENsb25lKGNvbnN0IHZvaWQqIHB0ciwgc2l6ZV90IHNpemUp OwogICAgc3RhdGljIG5zSU1lbW9yeSogR2V0R2xvYmFsTWVtb3J5U2VydmljZSgpOwp9OwojIDIx MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0ci5oIiAyCgoKIyAxICIvdmFyL3Rt cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w bGhhc2guaCIgMQojIDQzICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0 cnVjdCBQTEhhc2hFbnRyeSBQTEhhc2hFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgUExIYXNoVGFibGUg UExIYXNoVGFibGU7CnR5cGVkZWYgUFJVaW50MzIgUExIYXNoTnVtYmVyOwoKdHlwZWRlZiBQTEhh c2hOdW1iZXIgKCAqUExIYXNoRnVuY3Rpb24pKGNvbnN0IHZvaWQgKmtleSk7CnR5cGVkZWYgUFJJ bnRuICggKlBMSGFzaENvbXBhcmF0b3IpKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2Mik7 CgoKCgp0eXBlZGVmIFBSSW50biAoICpQTEhhc2hFbnVtZXJhdG9yKShQTEhhc2hFbnRyeSAqaGUs IFBSSW50biBpLCB2b2lkICphcmcpOwojIDY3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4z LXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIKdHlwZWRlZiBzdHJ1 Y3QgUExIYXNoQWxsb2NPcHMgewogICAgdm9pZCAqICggKmFsbG9jVGFibGUpKHZvaWQgKnBvb2ws IFBSU2l6ZSBzaXplKTsKICAgIHZvaWQgKCAqZnJlZVRhYmxlKSh2b2lkICpwb29sLCB2b2lkICpp dGVtKTsKICAgIFBMSGFzaEVudHJ5ICogKCAqYWxsb2NFbnRyeSkodm9pZCAqcG9vbCwgY29uc3Qg dm9pZCAqa2V5KTsKICAgIHZvaWQgKCAqZnJlZUVudHJ5KSh2b2lkICpwb29sLCBQTEhhc2hFbnRy eSAqaGUsIFBSVWludG4gZmxhZyk7Cn0gUExIYXNoQWxsb2NPcHM7CgoKCgpzdHJ1Y3QgUExIYXNo RW50cnkgewogICAgUExIYXNoRW50cnkgKm5leHQ7CiAgICBQTEhhc2hOdW1iZXIga2V5SGFzaDsK ICAgIGNvbnN0IHZvaWQgKmtleTsKICAgIHZvaWQgKnZhbHVlOwp9OwoKc3RydWN0IFBMSGFzaFRh YmxlIHsKICAgIFBMSGFzaEVudHJ5ICoqYnVja2V0czsKICAgIFBSVWludDMyIG5lbnRyaWVzOwog ICAgUFJVaW50MzIgc2hpZnQ7CiAgICBQTEhhc2hGdW5jdGlvbiBrZXlIYXNoOwogICAgUExIYXNo Q29tcGFyYXRvciBrZXlDb21wYXJlOwogICAgUExIYXNoQ29tcGFyYXRvciB2YWx1ZUNvbXBhcmU7 CiAgICBjb25zdCBQTEhhc2hBbGxvY09wcyAqYWxsb2NPcHM7CiAgICB2b2lkICphbGxvY1Bvb2w7 CgoKCgoKCn07CgoKCgoKZXh0ZXJuIFBMSGFzaFRhYmxlICoKUExfTmV3SGFzaFRhYmxlKFBSVWlu dDMyIG51bUJ1Y2tldHMsIFBMSGFzaEZ1bmN0aW9uIGtleUhhc2gsCiAgICAgICAgICAgICAgICBQ TEhhc2hDb21wYXJhdG9yIGtleUNvbXBhcmUsIFBMSGFzaENvbXBhcmF0b3IgdmFsdWVDb21wYXJl LAogICAgICAgICAgICAgICAgY29uc3QgUExIYXNoQWxsb2NPcHMgKmFsbG9jT3BzLCB2b2lkICph bGxvY1Bvb2wpOwoKZXh0ZXJuIHZvaWQKUExfSGFzaFRhYmxlRGVzdHJveShQTEhhc2hUYWJsZSAq aHQpOwoKCmV4dGVybiBQTEhhc2hFbnRyeSAqClBMX0hhc2hUYWJsZUFkZChQTEhhc2hUYWJsZSAq aHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpOwoKZXh0ZXJuIFBSQm9vbApQTF9IYXNo VGFibGVSZW1vdmUoUExIYXNoVGFibGUgKmh0LCBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIHZv aWQgKgpQTF9IYXNoVGFibGVMb29rdXAoUExIYXNoVGFibGUgKmh0LCBjb25zdCB2b2lkICprZXkp OwoKZXh0ZXJuIHZvaWQgKgpQTF9IYXNoVGFibGVMb29rdXBDb25zdChQTEhhc2hUYWJsZSAqaHQs IGNvbnN0IHZvaWQgKmtleSk7CgpleHRlcm4gUFJJbnRuClBMX0hhc2hUYWJsZUVudW1lcmF0ZUVu dHJpZXMoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnVtZXJhdG9yIGYsIHZvaWQgKmFyZyk7CgoK ZXh0ZXJuIFBMSGFzaE51bWJlcgpQTF9IYXNoU3RyaW5nKGNvbnN0IHZvaWQgKmtleSk7CgoKZXh0 ZXJuIFBSSW50bgpQTF9Db21wYXJlU3RyaW5ncyhjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAq djIpOwoKCmV4dGVybiBQUkludG4KUExfQ29tcGFyZVZhbHVlcyhjb25zdCB2b2lkICp2MSwgY29u c3Qgdm9pZCAqdjIpOwoKCmV4dGVybiBQTEhhc2hFbnRyeSAqKgpQTF9IYXNoVGFibGVSYXdMb29r dXAoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hOdW1iZXIga2V5SGFzaCwgY29uc3Qgdm9pZCAqa2V5 KTsKCmV4dGVybiBQTEhhc2hFbnRyeSAqKgpQTF9IYXNoVGFibGVSYXdMb29rdXBDb25zdChQTEhh c2hUYWJsZSAqaHQsIFBMSGFzaE51bWJlciBrZXlIYXNoLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIFBMSGFzaEVudHJ5ICoKUExfSGFzaFRhYmxl UmF3QWRkKFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW50cnkgKipoZXAsIFBMSGFzaE51bWJlciBr ZXlIYXNoLAogICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSk7 CgpleHRlcm4gdm9pZApQTF9IYXNoVGFibGVSYXdSZW1vdmUoUExIYXNoVGFibGUgKmh0LCBQTEhh c2hFbnRyeSAqKmhlcCwgUExIYXNoRW50cnkgKmhlKTsKCgpleHRlcm4gUFJJbnRuClBMX0hhc2hU YWJsZUR1bXAoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnVtZXJhdG9yIGR1bXAsIEZJTEUgKmZw KTsKCn0KIyAyMTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHIuaCIgMgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJTaGFyZWQuaCIgMQoKCgoKCmVudW0g ZUNoYXJTaXplIHtlT25lQnl0ZT0wLGVUd29CeXRlPTF9OwojIDIxNyAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3N0cmluZy9uc1N0ci5oIiAyCiMgMjM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry aW5nL25zU3RyLmgiCmNvbnN0IFBSSW50MzIga0RlZmF1bHRTdHJpbmdTaXplID0gNjQ7CmNvbnN0 IFBSSW50MzIga05vdEZvdW5kID0gLTE7CgoKCmNsYXNzIG5zQVN0cmluZzsKY2xhc3MgQ0J1ZkRl c2NyaXB0b3IgewpwdWJsaWM6CiAgQ0J1ZkRlc2NyaXB0b3IoY2hhciogYVN0cmluZywgUFJCb29s IGFTdGFja0Jhc2VkLFBSVWludDMyIGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENC dWZEZXNjcmlwdG9yKGNvbnN0IGNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhU3RhY2tCYXNlZCxQUlVp bnQzMiBhQ2FwYWNpdHksUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBDQnVmRGVzY3JpcHRvcihQUlVu aWNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhU3RhY2tCYXNlZCxQUlVpbnQzMiBhQ2FwYWNpdHksUFJJ bnQzMiBhTGVuZ3RoPS0xKTsKICBDQnVmRGVzY3JpcHRvcihjb25zdCBQUlVuaWNoYXIqIGFTdHJp bmcsUFJCb29sIGFTdGFja0Jhc2VkLFBSVWludDMyIGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9 LTEpOwoKICBjaGFyKiBtQnVmZmVyOwogIGVDaGFyU2l6ZSBtQ2hhclNpemU7CiAgUFJVaW50MzIg bUNhcGFjaXR5OwogIFBSSW50MzIgbUxlbmd0aDsKICBQUkJvb2wgbVN0YWNrQmFzZWQ7CiAgUFJC b29sIG1Jc0NvbnN0Owp9OwoKCgoKc3RydWN0IG5zU3RyIHsKCnByb3RlY3RlZDoKICBuc1N0cigp IHsKCgoKICB9CgogIH5uc1N0cigpIHsKCgoKICB9Cgpwcm90ZWN0ZWQ6CiAgdW5pb24gewogICAg Y2hhciogbVN0cjsKICAgIFBSVW5pY2hhciogbVVTdHI7CiAgfTsKCiAgUFJVaW50MzIgbUxlbmd0 aDsKICBQUlVpbnQzMiBtQ2FwYWNpdHlBbmRGbGFnczsKCiAgaW5saW5lIFBSVWludDMyIEdldENh cGFjaXR5KCkgY29uc3QgewoKICAgIHJldHVybiAobUNhcGFjaXR5QW5kRmxhZ3MgJiAofigoMTw8 KDMxKSkgfCAoMTw8KDMwKSkpKSk7CiAgfQoKICBpbmxpbmUgUFJCb29sIEdldE93bnNCdWZmZXIo KSBjb25zdCB7CiAgICByZXR1cm4gKChtQ2FwYWNpdHlBbmRGbGFncyAmICgxPDwoMzApKSkgIT0g MCk7CiAgfQoKICBpbmxpbmUgZUNoYXJTaXplIEdldENoYXJTaXplKCkgY29uc3QgewogICAgcmV0 dXJuIGVDaGFyU2l6ZShtQ2FwYWNpdHlBbmRGbGFncyA+PiAoMzEpKTsKICB9Cgpwcml2YXRlOgoK ICBpbmxpbmUgdm9pZCBTZXRJbnRlcm5hbENhcGFjaXR5KFBSVWludDMyIGFDYXBhY2l0eSkgewog ICAgbUNhcGFjaXR5QW5kRmxhZ3MgPQogICAgICAoKG1DYXBhY2l0eUFuZEZsYWdzICYgfih+KCgx PDwoMzEpKSB8ICgxPDwoMzApKSkpKSB8CiAgICAgICAoYUNhcGFjaXR5ICYgKH4oKDE8PCgzMSkp IHwgKDE8PCgzMCkpKSkpKTsKICB9CgogIGlubGluZSB2b2lkIFNldENoYXJTaXplKGVDaGFyU2l6 ZSBhQ2hhclNpemUpIHsKICAgIG1DYXBhY2l0eUFuZEZsYWdzID0KICAgICAgKChtQ2FwYWNpdHlB bmRGbGFncyAmIH4oMTw8KDMxKSkpIHwKICAgICAgIChQUlVpbnQzMihhQ2hhclNpemUpIDw8ICgz MSkpKTsKICB9CgogIGlubGluZSB2b2lkIFNldE93bnNCdWZmZXIoUFJCb29sIGFPd25zQnVmZmVy KSB7CiAgICBtQ2FwYWNpdHlBbmRGbGFncyA9CiAgICAgIChtQ2FwYWNpdHlBbmRGbGFncyAmIH4o MTw8KDMwKSkgfAogICAgICAgKGFPd25zQnVmZmVyID8gMSA6IDApIDw8ICgzMCkpOwogIH0KCiAg aW5saW5lIFBSVW5pY2hhciBHZXRDaGFyQXQoUFJVaW50MzIgYW5JbmRleCkgY29uc3QgewogICAg aWYoYW5JbmRleDxtTGVuZ3RoKSB7CiAgICAgIHJldHVybiAoZVR3b0J5dGU9PUdldENoYXJTaXpl KCkpID8gbVVTdHJbYW5JbmRleF0gOiAoUFJVbmljaGFyKW1TdHJbYW5JbmRleF07CiAgICB9CiAg ICByZXR1cm4gMDsKICB9CgpwdWJsaWM6CiAgZnJpZW5kCiAgY2hhcioKICBUb05ld1VURjhTdHJp bmcoIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSApOwogIGZyaWVuZCBpbmxpbmUgdm9pZCBBZGRO dWxsVGVybWluYXRvcihuc1N0ciYgYURlc3QpOwogIGZyaWVuZCBjbGFzcyBuc1N0clByaXZhdGU7 CiAgZnJpZW5kIGNsYXNzIG5zU3RyaW5nOwogIGZyaWVuZCBjbGFzcyBuc0NTdHJpbmc7Cn07CiMg MzM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyLmgiCmlubGluZSBQUkludDMy IE1pbkludChQUkludDMyIGFuSW50MSxQUkludDMyIGFuSW50Mil7CiAgcmV0dXJuIChhbkludDE8 YW5JbnQyKSA/IGFuSW50MSA6IGFuSW50MjsKfQoKaW5saW5lIFBSSW50MzIgTWF4SW50KFBSSW50 MzIgYW5JbnQxLFBSSW50MzIgYW5JbnQyKXsKICByZXR1cm4gKGFuSW50MTxhbkludDIpID8gYW5J bnQyIDogYW5JbnQxOwp9CgppbmxpbmUgdm9pZCBBZGROdWxsVGVybWluYXRvcihuc1N0ciYgYURl c3QpIHsKICBpZihlVHdvQnl0ZT09YURlc3QuR2V0Q2hhclNpemUoKSkKICAgIGFEZXN0Lm1VU3Ry W2FEZXN0Lm1MZW5ndGhdPTA7CiAgZWxzZSBhRGVzdC5tU3RyW2FEZXN0Lm1MZW5ndGhdPTA7Cn0K CgoKCgoKCmlubGluZSB2b2lkIFJlY3ljbGUoIGNoYXIqIGFCdWZmZXIpIHsgbnNNZW1vcnk6OkZy ZWUoYUJ1ZmZlcik7IH0KaW5saW5lIHZvaWQgUmVjeWNsZSggUFJVbmljaGFyKiBhQnVmZmVyKSB7 IG5zTWVtb3J5OjpGcmVlKGFCdWZmZXIpOyB9CiMgNzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNTdHJpbmcyLmgiIDIKCmNsYXNzIFVURjh0cmFpdHMKICB7CiAgICBwdWJsaWM6CiAg ICAgIHN0YXRpYyBQUkJvb2wgaXNBU0NJSShjaGFyIGMpIHsgcmV0dXJuIChjICYgMHg4MCkgPT0g MHgwMDsgfQogICAgICBzdGF0aWMgUFJCb29sIGlzSW5TZXEoY2hhciBjKSB7IHJldHVybiAoYyAm IDB4QzApID09IDB4ODA7IH0KICAgICAgc3RhdGljIFBSQm9vbCBpczJieXRlKGNoYXIgYykgeyBy ZXR1cm4gKGMgJiAweEUwKSA9PSAweEMwOyB9CiAgICAgIHN0YXRpYyBQUkJvb2wgaXMzYnl0ZShj aGFyIGMpIHsgcmV0dXJuIChjICYgMHhGMCkgPT0gMHhFMDsgfQogICAgICBzdGF0aWMgUFJCb29s IGlzNGJ5dGUoY2hhciBjKSB7IHJldHVybiAoYyAmIDB4RjgpID09IDB4RjA7IH0KICAgICAgc3Rh dGljIFBSQm9vbCBpczVieXRlKGNoYXIgYykgeyByZXR1cm4gKGMgJiAweEZDKSA9PSAweEY4OyB9 CiAgICAgIHN0YXRpYyBQUkJvb2wgaXM2Ynl0ZShjaGFyIGMpIHsgcmV0dXJuIChjICYgMHhGRSkg PT0gMHhGQzsgfQogIH07CgoKCgoKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNDU3Ry aW5nOwoKCmNsYXNzIG5zU3RyaW5nIDoKICBwdWJsaWMgbnNBRmxhdFN0cmluZywKICBwdWJsaWMg bnNTdHIgewoKcHVibGljOgogIGZyaWVuZCBjbGFzcyBuc0NTdHJpbmc7CiAgZnJpZW5kIGNsYXNz IG5zTGluZWJyZWFrQ29udmVydGVyOwogIGZyaWVuZCB2b2lkIFRvTG93ZXJDYXNlKCBuc1N0cmlu ZyYgKTsKICBmcmllbmQgdm9pZCBUb1VwcGVyQ2FzZSggbnNTdHJpbmcmICk7Cgpwcm90ZWN0ZWQ6 CiAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRGbGF0QnVmZmVy SGFuZGxlKCkgY29uc3Q7CiAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIEdldFJlYWRhYmxlRnJh Z21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3Qs IFBSVWludDMyICkgY29uc3Q7CiAgdmlydHVhbCBQUlVuaWNoYXIqIEdldFdyaXRhYmxlRnJhZ21l bnQoIG5zV3JpdGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBS VWludDMyICk7CgpwdWJsaWM6CiAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIGdldCgpIGNvbnN0 OwoKcHVibGljOgoKCgogIG5zU3RyaW5nKCk7CgoKCgoKICBuc1N0cmluZyhjb25zdCBuc1N0cmlu ZyYgYVN0cmluZyk7CgogIGV4cGxpY2l0IG5zU3RyaW5nKGNvbnN0IG5zQVN0cmluZyYpOwoKICBl eHBsaWNpdCBuc1N0cmluZyhjb25zdCBQUlVuaWNoYXIqKTsKICBuc1N0cmluZyhjb25zdCBQUlVu aWNoYXIqLCBQUkludDMyKTsKCgoKCgoKICB2aXJ0dWFsIH5uc1N0cmluZygpOwoKCgoKCiAgdmly dHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9CgoKCgoKCgog IHZvaWQgU2V0TGVuZ3RoKFBSVWludDMyIGFMZW5ndGgpOwoKCgoKCgogIHZvaWQgU2V0Q2FwYWNp dHkoUFJVaW50MzIgYUxlbmd0aCk7CiMgMTcwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n L25zU3RyaW5nMi5oIgogIFBSQm9vbCBTZXRDaGFyQXQoUFJVbmljaGFyIGFDaGFyLFBSVWludDMy IGFuSW5kZXgpOwojIDE4NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIu aCIKICB2b2lkIFN0cmlwQ2hhcnMoIGNvbnN0IGNoYXIqIGFTZXQgKTsKICB2b2lkIFN0cmlwQ2hh ciggUFJVbmljaGFyIGFDaGFyLCBQUkludDMyIGFuT2Zmc2V0PTAgKTsKCgoKCgogIHZvaWQgU3Ry aXBXaGl0ZXNwYWNlKCk7CgoKCgoKCiAgdm9pZCBSZXBsYWNlQ2hhciggUFJVbmljaGFyIGFuT2xk Q2hhciwgUFJVbmljaGFyIGFOZXdDaGFyICk7CiAgdm9pZCBSZXBsYWNlQ2hhciggY29uc3QgY2hh ciogYVNldCwgUFJVbmljaGFyIGFOZXdDaGFyICk7CgogIHZvaWQgUmVwbGFjZVN1YnN0cmluZygg Y29uc3QgbnNTdHJpbmcmIGFUYXJnZXQsIGNvbnN0IG5zU3RyaW5nJiBhTmV3VmFsdWUgKTsKICB2 b2lkIFJlcGxhY2VTdWJzdHJpbmcoIGNvbnN0IFBSVW5pY2hhciogYVRhcmdldCwgY29uc3QgUFJV bmljaGFyKiBhTmV3VmFsdWUgKTsKIyAyMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcv bnNTdHJpbmcyLmgiCiAgdm9pZCBUcmltKGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5h dGVMZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xLFBSQm9vbCBhSWdub3JlUXVv dGVzPTApOwojIDIyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIK ICB2b2lkIENvbXByZXNzV2hpdGVzcGFjZSggUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJC b29sIGFFbGltaW5hdGVUcmFpbGluZz0xKTsKIyAyNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNTdHJpbmcyLmgiCiAgY2hhciogVG9DU3RyaW5nKGNoYXIqIGFCdWYsUFJVaW50MzIg YUJ1Zkxlbmd0aCxQUlVpbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKCgoKCgoKICBmbG9hdCBUb0Zs b2F0KFBSSW50MzIqIGFFcnJvckNvZGUpIGNvbnN0OwoKCgoKCgoKICBQUkludDMyIFRvSW50ZWdl cihQUkludDMyKiBhRXJyb3JDb2RlLFBSVWludDMyIGFSYWRpeD0oMTApKSBjb25zdDsKIyAyNzIg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAgbnNTdHJpbmcmIG9w ZXJhdG9yPSggY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0 dXJuICp0aGlzOyB9CiAgbnNTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNBU3RyaW5nJiBhUmVh ZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgbnNTdHJpbmcm IG9wZXJhdG9yPSggY29uc3QgUFJVbmljaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVy biAqdGhpczsgfQogIG5zU3RyaW5nJiBvcGVyYXRvcj0oIFBSVW5pY2hhciBhQ2hhciApIHsgQXNz aWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24o Y29uc3QgY2hhciopOwogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciosIFBS SW50MzIpOwojIDI5MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIK ICB2b2lkIEFwcGVuZEludChQUkludDMyLCBQUkludDMyPTEwKTsKICB2b2lkIEFwcGVuZEZsb2F0 KGRvdWJsZSk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiwgUFJJbnQz Mj0tMSk7CgogIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudCggUFJVbmljaGFyICk7 CgoKCiAgdm9pZCBJbnNlcnRXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiwgUFJVaW50MzIsIFBS SW50MzI9LTEpOwoKCiAgdm9pZCBBZG9wdCggUFJVbmljaGFyKiBhUHRyLCBQUkludDMyIGFMZW5n dGggPSAtMSApOwojIDMyMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIu aCIKICBzaXplX3R5cGUgTGVmdCggc2VsZl90eXBlJiwgc2l6ZV90eXBlICkgY29uc3Q7CiAgc2l6 ZV90eXBlIE1pZCggc2VsZl90eXBlJiwgUFJVaW50MzIsIFBSVWludDMyICkgY29uc3Q7CiAgc2l6 ZV90eXBlIFJpZ2h0KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKIyAzMzcgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBGaW5kQ2hhcihQ UlVuaWNoYXIgYUNoYXIsIFBSSW50MzIgYW5PZmZzZXQ9MCwgUFJJbnQzMiBhQ291bnQ9LTEpIGNv bnN0OwojIDM0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIKICBQ UkludDMyIEZpbmQoY29uc3QgbnNDU3RyaW5nJiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0w LFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBG aW5kKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9m ZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKCiAgUFJJbnQzMiBGaW5kKGNvbnN0IG5z QUZsYXRTdHJpbmcmIGFTdHJpbmcsIFBSSW50MzIgYW5PZmZzZXQ9MCwgUFJJbnQzMiBhQ291bnQ9 LTEpIGNvbnN0OwoKICBQUkludDMyIEZpbmQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLCBQUklu dDMyIGFuT2Zmc2V0PTAsIFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKIyAzNjMgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0 KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKICBQUkludDMy IEZpbmRDaGFySW5TZXQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9 MCkgY29uc3Q7CiMgMzc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5o IgogIFBSSW50MzIgUkZpbmQoY29uc3QgY2hhciogYUNTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNl PTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CgogIFBSSW50 MzIgUkZpbmQoY29uc3QgbnNBRmxhdFN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhbk9mZnNldD0t MSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZChjb25zdCBQUlVuaWNo YXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7 CiMgMzg5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgogIFBSSW50 MzIgUkZpbmRDaGFyKFBSVW5pY2hhciBhQ2hhcixQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIg YUNvdW50PS0xKSBjb25zdDsKIyAzOTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNT dHJpbmcyLmgiCiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBQUlVuaWNoYXIqIGFTdHJp bmcsUFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiMgNDE0ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgogIFBSSW50MzIgQ29tcGFyZVdpdGhDb252ZXJzaW9uKGNv bnN0IGNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhSWdub3JlQ2FzZT0wLCBQUkludDMyIGFDb3VudD0t MSkgY29uc3Q7CgogIFBSQm9vbCBFcXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiBhU3Ry aW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKCiAgUFJC b29sIEVxdWFsc0lnbm9yZUNhc2UoY29uc3QgY2hhciogYVN0cmluZyxQUkludDMyIGFDb3VudD0t MSkgY29uc3Q7CgoKCgoKCgogIFBSQm9vbCBJc0FTQ0lJKGNvbnN0IFBSVW5pY2hhciogYUJ1ZmZl cj0wKTsKCgoKCgoKCiAgc3RhdGljIFBSQm9vbCBJc1NwYWNlKFBSVW5pY2hhciBjaCk7CiMgNDQ0 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgpwcml2YXRlOgoKCiAg dm9pZCBvcGVyYXRvcj0oIGNoYXIgKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBjb25z dCBQUlVuaWNoYXIqLCBQUkludDMyPS0xICk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbigg Y29uc3QgUFJVbmljaGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQgSW5zZXJ0V2l0aENvbnZlcnNp b24oIGNvbnN0IFBSVW5pY2hhciosIFBSVWludDMyLCBQUkludDMyPS0xICk7Cn07CgppbmxpbmUK bnNTdHJpbmc6OnNpemVfdHlwZQpuc1N0cmluZzo6TGVmdCggbnNBU3RyaW5nJiBhUmVzdWx0LCBz aXplX3R5cGUgYUxlbmd0aFRvQ29weSApIGNvbnN0CiAgewogICAgcmV0dXJuIE1pZChhUmVzdWx0 LCAwLCBhTGVuZ3RoVG9Db3B5KTsKICB9CgppbmxpbmUKbnNTdHJpbmc6OnNpemVfdHlwZQpuc1N0 cmluZzo6UmlnaHQoIHNlbGZfdHlwZSYgYVJlc3VsdCwgc2l6ZV90eXBlIGFMZW5ndGhUb0NvcHkg KSBjb25zdAogIHsKICAgIHNpemVfdHlwZSBteUxlbmd0aCA9IExlbmd0aCgpOwogICAgYUxlbmd0 aFRvQ29weSA9IE5TX01JTihteUxlbmd0aCwgYUxlbmd0aFRvQ29weSk7CiAgICByZXR1cm4gTWlk KGFSZXN1bHQsIG15TGVuZ3RoLWFMZW5ndGhUb0NvcHksIGFMZW5ndGhUb0NvcHkpOwogIH0KIyA0 NzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCmNsYXNzIG5zQXV0 b1N0cmluZyA6IHB1YmxpYyBuc1N0cmluZyB7CnB1YmxpYzoKCiAgICB2aXJ0dWFsIH5uc0F1dG9T dHJpbmcoKSB7fQoKICAgIG5zQXV0b1N0cmluZygpOwogICAgbnNBdXRvU3RyaW5nKGNvbnN0IG5z QXV0b1N0cmluZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0F1dG9TdHJpbmcoY29uc3QgbnNB U3RyaW5nJiBhU3RyaW5nKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhjb25zdCBuc1N0cmlu ZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0F1dG9TdHJpbmcoY29uc3QgUFJVbmljaGFyKiBh U3RyaW5nKTsKICAgIG5zQXV0b1N0cmluZyhjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQz MiBhTGVuZ3RoKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhQUlVuaWNoYXIgYUNoYXIpOwog ICAgZXhwbGljaXQgbnNBdXRvU3RyaW5nKGNvbnN0IENCdWZEZXNjcmlwdG9yJiBhQnVmZmVyKTsK CiAgICBuc0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNBdXRvU3RyaW5nJiBhU3RyaW5n ICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAqdGhpczsgfQogIHByaXZhdGU6CiAgICB2b2lk IG9wZXJhdG9yPSggY2hhciApOwogIHB1YmxpYzoKICAgIG5zQXV0b1N0cmluZyYgb3BlcmF0b3I9 KCBjb25zdCBuc0FTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVy biAqdGhpczsgfQoKICAgIG5zQXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBQUlVuaWNoYXIq IGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgICBuc0F1dG9TdHJpbmcm IG9wZXJhdG9yPSggUFJVbmljaGFyIGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRo aXM7IH0KIyA1MDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAg ICBQUlVuaWNoYXIgbUJ1ZmZlcltrRGVmYXVsdFN0cmluZ1NpemVdOwp9OwoKCgpjbGFzcyBOU19D b252ZXJ0QVNDSUl0b1VDUzIKICAgICAgOiBwdWJsaWMgbnNBdXRvU3RyaW5nCgoKCiAgewogICAg cHVibGljOgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0QVNDSUl0b1VDUzIoIGNvbnN0 IG5zQUNTdHJpbmcmIGFDU3RyaW5nICk7CgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0 QVNDSUl0b1VDUzIoIGNvbnN0IG5zQUZsYXRDU3RyaW5nJiBhQ1N0cmluZyApCiAgICAgICAgewog ICAgICAgICAgSW5pdCggYUNTdHJpbmcuZ2V0KCksIGFDU3RyaW5nLkxlbmd0aCgpICk7CiAgICAg ICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCBjb25zdCBj aGFyKiBhQ1N0cmluZyApCiAgICAgICAgewogICAgICAgICAgSW5pdCggYUNTdHJpbmcsIH5QUlVp bnQzMigwKSApOwogICAgICAgIH0KCiAgICAgIE5TX0NvbnZlcnRBU0NJSXRvVUNTMiggY29uc3Qg Y2hhciogYUNTdHJpbmcsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIElu aXQoIGFDU3RyaW5nLCBhTGVuZ3RoICk7CiAgICAgICAgfQojIDU0OCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZCBJbml0 KCBjb25zdCBjaGFyKiBhQ1N0cmluZywgUFJVaW50MzIgYUxlbmd0aCApOwoKICAgIHByaXZhdGU6 CgogICAgICBOU19Db252ZXJ0QVNDSUl0b1VDUzIoIFBSVW5pY2hhciApOwogIH07CgpjbGFzcyBO U19Db252ZXJ0VVRGOHRvVUNTMgogICAgICA6IHB1YmxpYyBuc0F1dG9TdHJpbmcKICB7CiAgICBw dWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIE5TX0NvbnZlcnRVVEY4dG9VQ1MyKCBjb25zdCBu c0FDU3RyaW5nJiBhQ1N0cmluZyApCiAgICAgICAgewogICAgICAgICAgSW5pdCggYUNTdHJpbmcg KTsKICAgICAgICB9CgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0VVRGOHRvVUNTMigg Y29uc3QgY2hhciogYUNTdHJpbmcgKQogICAgICAgIHsKICAgICAgICAgIEluaXQoIG5zRGVwZW5k ZW50Q1N0cmluZyggYUNTdHJpbmcgKSApOwogICAgICAgIH0KCiAgICAgIE5TX0NvbnZlcnRVVEY4 dG9VQ1MyKCBjb25zdCBjaGFyKiBhQ1N0cmluZywgUFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAg ewogICAgICAgICAgSW5pdCggU3Vic3RyaW5nKCBhQ1N0cmluZywgYUNTdHJpbmcgKyBhTGVuZ3Ro ICkgKTsKICAgICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2b2lkIEluaXQoIGNvbnN0IG5z QUNTdHJpbmcmIGFDU3RyaW5nICk7CgogICAgcHJpdmF0ZToKICAgICAgTlNfQ29udmVydFVURjh0 b1VDUzIoIFBSVW5pY2hhciApOwogIH07CgoKCgpjbGFzcyBDb252ZXJ0VVRGOHRvVUNTMgogIHsK ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0FDU3RyaW5nOjpjaGFyX3R5cGUgdmFsdWVfdHlw ZTsKICAgICAgdHlwZWRlZiBuc0FTdHJpbmc6OmNoYXJfdHlwZSBidWZmZXJfdHlwZTsKCiAgICBD b252ZXJ0VVRGOHRvVUNTMiggYnVmZmVyX3R5cGUqIGFCdWZmZXIgKQogICAgICAgIDogbVN0YXJ0 KGFCdWZmZXIpLCBtQnVmZmVyKGFCdWZmZXIpLCBtRXJyb3JFbmNvdW50ZXJlZCgwKSB7fQoKICAg IHNpemVfdCBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtQnVmZmVyIC0gbVN0YXJ0OyB9CgogICAg UFJVaW50MzIgd3JpdGUoIGNvbnN0IHZhbHVlX3R5cGUqIHN0YXJ0LCBQUlVpbnQzMiBOICkKICAg ICAgewogICAgICAgIGlmICggbUVycm9yRW5jb3VudGVyZWQgKQogICAgICAgICAgcmV0dXJuIE47 CgoKCiAgICAgICAgY29uc3QgdmFsdWVfdHlwZSogcCA9IHN0YXJ0OwogICAgICAgIGNvbnN0IHZh bHVlX3R5cGUqIGVuZCA9IHN0YXJ0ICsgTjsKICAgICAgICBmb3IgKCA7IHAgIT0gZW5kIDsgKQog ICAgICAgICAgewogICAgICAgICAgICBjaGFyIGMgPSAqcCsrOwoKICAgICAgICAgICAgaWYgKCBV VEY4dHJhaXRzOjppc0FTQ0lJKGMpICkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAq bUJ1ZmZlcisrID0gYnVmZmVyX3R5cGUoYyk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg ICAgICAgICAgICB9CgogICAgICAgICAgICBQUlVpbnQzMiB1Y3M0OwogICAgICAgICAgICBQUlVp bnQzMiBtaW5VY3M0OwogICAgICAgICAgICBQUkludDMyIHN0YXRlID0gMDsKCiAgICAgICAgICAg IGlmICggVVRGOHRyYWl0czo6aXMyYnl0ZShjKSApCiAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgdWNzNCA9IChQUlVpbnQzMihjKSA8PCA2KSAmIDB4MDAwMDA3QzBMOwogICAgICAgICAg ICAgICAgc3RhdGUgPSAxOwogICAgICAgICAgICAgICAgbWluVWNzNCA9IDB4MDAwMDAwODA7CiAg ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICggVVRGOHRyYWl0czo6aXMzYnl0ZShj KSApCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdWNzNCA9IChQUlVpbnQzMihjKSA8 PCAxMikgJiAweDAwMDBGMDAwTDsKICAgICAgICAgICAgICAgIHN0YXRlID0gMjsKICAgICAgICAg ICAgICAgIG1pblVjczQgPSAweDAwMDAwODAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAg ZWxzZSBpZiAoIFVURjh0cmFpdHM6OmlzNGJ5dGUoYykgKQogICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgIHVjczQgPSAoUFJVaW50MzIoYykgPDwgMTgpICYgMHgwMDFGMDAwMEw7CiAgICAg ICAgICAgICAgICBzdGF0ZSA9IDM7CiAgICAgICAgICAgICAgICBtaW5VY3M0ID0gMHgwMDAxMDAw MDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCBVVEY4dHJhaXRzOjppczVi eXRlKGMpICkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB1Y3M0ID0gKFBSVWludDMy KGMpIDw8IDI0KSAmIDB4MDMwMDAwMDBMOwogICAgICAgICAgICAgICAgc3RhdGUgPSA0OwogICAg ICAgICAgICAgICAgbWluVWNzNCA9IDB4MDAyMDAwMDA7CiAgICAgICAgICAgICAgfQogICAgICAg ICAgICBlbHNlIGlmICggVVRGOHRyYWl0czo6aXM2Ynl0ZShjKSApCiAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgdWNzNCA9IChQUlVpbnQzMihjKSA8PCAzMCkgJiAweDQwMDAwMDAwTDsK ICAgICAgICAgICAgICAgIHN0YXRlID0gNTsKICAgICAgICAgICAgICAgIG1pblVjczQgPSAweDA0 MDAwMDAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIG1FcnJvckVuY291bnRlcmVkID0gMTsK ICAgICAgICAgICAgICAgIHJldHVybiBOOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHdo aWxlICggc3RhdGUtLSApCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYyA9ICpwKys7 CgogICAgICAgICAgICAgICAgaWYgKCBVVEY4dHJhaXRzOjppc0luU2VxKGMpICkKICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFBSSW50MzIgc2hpZnQgPSBzdGF0ZSAqIDY7 CiAgICAgICAgICAgICAgICAgICAgdWNzNCB8PSAoUFJVaW50MzIoYykgJiAweDNGKSA8PCBzaGlm dDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIG1FcnJvckVu Y291bnRlcmVkID0gMTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gTjsKICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggdWNzNCA8IG1pblVjczQg KQogICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gMHhmZmZkOwog ICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoIHVjczQgPD0gMHhEN0ZGICkKICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gdWNzNDsKICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCB1Y3M0IDw9IDB4REZGRiApCiAgICAgICAgICAg ICAgewoKICAgICAgICAgICAgICAgICptQnVmZmVyKysgPSAweGZmZmQ7CiAgICAgICAgICAgICAg fQogICAgICAgICAgICBlbHNlIGlmICggdWNzNCA9PSAweEZGRkUgfHwgdWNzNCA9PSAweEZGRkYg KQogICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gMHhmZmZkOwog ICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoIHVjczQgPj0gMHgwMDAxMDAwMCAp CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCB1Y3M0ID49IDB4MDAxMTAwMDAg KQogICAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gMHhmZmZkOwogICAgICAgICAgICAgICAg ZWxzZSB7CgogICAgICAgICAgICAgICAgICB1Y3M0IC09IDB4MDAwMTAwMDA7CiAgICAgICAgICAg ICAgICAgICptQnVmZmVyKysgPSAoUFJVbmljaGFyKSh1Y3M0ID4+IDEwKSB8IDB4ZDgwMHU7CiAg ICAgICAgICAgICAgICAgICptQnVmZmVyKysgPSAoUFJVbmljaGFyKSh1Y3M0ICYgMHgzZmYpIHwg MHhkYzAwdTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoIHVjczQgIT0gMHhGRUZGICkK ICAgICAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gdWNzNDsKICAgICAgICAgICAgICB9CiAg ICAgICAgICB9CiAgICAgICAgcmV0dXJuIHAgLSBzdGFydDsKICAgICAgfQoKICAgIHByaXZhdGU6 CiAgICAgIGJ1ZmZlcl90eXBlKiBtU3RhcnQ7CiAgICAgIGJ1ZmZlcl90eXBlKiBtQnVmZmVyOwog ICAgICBQUkJvb2wgbUVycm9yRW5jb3VudGVyZWQ7CiAgfTsKIyA1NSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIiAyCgoKY2xhc3MgbnNDU3RyaW5nIDoKICBwdWJsaWMg bnNBRmxhdENTdHJpbmcsCiAgcHVibGljIG5zU3RyIHsKCnB1YmxpYzoKICBmcmllbmQgY2xhc3Mg bnNTdHJpbmc7CiAgZnJpZW5kIHZvaWQgVG9VcHBlckNhc2UoIG5zQ1N0cmluZyYgKTsKICBmcmll bmQgdm9pZCBUb0xvd2VyQ2FzZSggbnNDU3RyaW5nJiApOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwg Y29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4qIEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsK ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFn bWVudDxjaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNvbnN0OwogIHZpcnR1 YWwgY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXI+Jiwg bnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CgpwdWJsaWM6CiAgdmlydHVhbCBjb25zdCBj aGFyKiBnZXQoKSBjb25zdCB7IHJldHVybiBtU3RyOyB9CgpwdWJsaWM6CgoKCiAgbnNDU3RyaW5n KCk7CgoKCgoKICBuc0NTdHJpbmcoY29uc3QgbnNDU3RyaW5nJiBhU3RyaW5nKTsKCiAgZXhwbGlj aXQgbnNDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiApOwoKICBleHBsaWNpdCBuc0NTdHJpbmco Y29uc3QgY2hhciopOwogIG5zQ1N0cmluZyhjb25zdCBjaGFyKiwgUFJJbnQzMik7CgoKCgoKICB2 aXJ0dWFsIH5uc0NTdHJpbmcoKTsKCgoKCgogIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29u c3QgeyByZXR1cm4gbUxlbmd0aDsgfQoKCgoKCgoKICB2b2lkIFNldExlbmd0aChQUlVpbnQzMiBh TGVuZ3RoKTsKCgoKCgoKICB2b2lkIFNldENhcGFjaXR5KFBSVWludDMyIGFMZW5ndGgpOwoKCgoK CiAgUFJCb29sIFNldENoYXJBdChQUlVuaWNoYXIgYUNoYXIsUFJVaW50MzIgYW5JbmRleCk7CiMg MTM2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgdm9pZCBTdHJp cENoYXJzKGNvbnN0IGNoYXIqIGFTZXQpOwogIHZvaWQgU3RyaXBDaGFyKGNoYXIgYUNoYXIsUFJJ bnQzMiBhbk9mZnNldD0wKTsKCgoKCgoKICB2b2lkIFN0cmlwV2hpdGVzcGFjZSgpOwoKCgoKCgog IHZvaWQgUmVwbGFjZUNoYXIoY2hhciBhT2xkQ2hhcixjaGFyIGFOZXdDaGFyKTsKICB2b2lkIFJl cGxhY2VDaGFyKGNvbnN0IGNoYXIqIGFTZXQsY2hhciBhTmV3Q2hhcik7CgogIHZvaWQgUmVwbGFj ZVN1YnN0cmluZyhjb25zdCBuc0NTdHJpbmcmIGFUYXJnZXQsY29uc3QgbnNDU3RyaW5nJiBhTmV3 VmFsdWUpOwogIHZvaWQgUmVwbGFjZVN1YnN0cmluZyhjb25zdCBjaGFyKiBhVGFyZ2V0LGNvbnN0 IGNoYXIqIGFOZXdWYWx1ZSk7CiMgMTY4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25z U3RyaW5nLmgiCiAgdm9pZCBUcmltKGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5hdGVM ZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xLFBSQm9vbCBhSWdub3JlUXVvdGVz PTApOwojIDE3OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIHZv aWQgQ29tcHJlc3NXaGl0ZXNwYWNlKCBQUkJvb2wgYUVsaW1pbmF0ZUxlYWRpbmc9MSxQUkJvb2wg YUVsaW1pbmF0ZVRyYWlsaW5nPTEpOwojIDE5MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu Zy9uc1N0cmluZy5oIgogIGZsb2F0IFRvRmxvYXQoUFJJbnQzMiogYUVycm9yQ29kZSkgY29uc3Q7 CiMgMTk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgUFJJbnQz MiBUb0ludGVnZXIoUFJJbnQzMiogYUVycm9yQ29kZSxQUlVpbnQzMiBhUmFkaXg9KDEwKSkgY29u c3Q7CiMgMjE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgbnND U3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQ1N0cmluZyYgYVN0cmluZyApIHsgQXNzaWduKGFT dHJpbmcpOyByZXR1cm4gKnRoaXM7IH0KICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNB Q1N0cmluZyYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9 CgogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBjaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0 cik7IHJldHVybiAqdGhpczsgfQogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjaGFyIGFDaGFyICkg eyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCiAgdm9pZCBBc3NpZ25XaXRoQ29udmVy c2lvbihjb25zdCBQUlVuaWNoYXIqLFBSSW50MzI9LTEpOwogIHZvaWQgQXNzaWduV2l0aENvbnZl cnNpb24oIGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nICk7CiAgdm9pZCBBc3NpZ25XaXRoQ29udmVy c2lvbiggY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CiMgMjM1ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25z dCBuc1N0cmluZyYsIFBSSW50MzI9LTEpOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oIGNv bnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY29u c3QgUFJVbmljaGFyKiwgUFJJbnQzMj0tMSk7CgogIHZvaWQgQXBwZW5kSW50KFBSSW50MzIgYUlu dGVnZXIsUFJJbnQzMiBhUmFkaXg9MTApOwogIHZvaWQgQXBwZW5kRmxvYXQoIGRvdWJsZSBhRmxv YXQgKTsKIyAyNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcuaCIKICB2 b2lkIEFkb3B0KCBjaGFyKiBhUHRyLCBQUkludDMyIGFMZW5ndGggPSAtMSApOwojIDI2OSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIHNpemVfdHlwZSBMZWZ0KCBz ZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKICBzaXplX3R5cGUgTWlkKCBzZWxmX3R5cGUm LCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICBzaXplX3R5cGUgUmlnaHQoIHNlbGZfdHlw ZSYsIHNpemVfdHlwZSApIGNvbnN0OwojIDI4OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu Zy9uc1N0cmluZy5oIgogIFBSSW50MzIgRmluZChjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcsUFJC b29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBj b25zdDsKICBQUkludDMyIEZpbmQoY29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNh c2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDI5OSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIFBSSW50MzIgRmluZENo YXIoUFJVbmljaGFyIGFDaGFyLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkg Y29uc3Q7CiMgMzA4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAg UFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNl dD0wKSBjb25zdDsKICBQUkludDMyIEZpbmRDaGFySW5TZXQoY29uc3QgbnNDU3RyaW5nJiBhU3Ry aW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiMgMzE5ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBSRmluZChjb25zdCBjaGFyKiBhQ1N0cmlu ZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50 PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kKGNvbnN0IG5zQ1N0cmluZyYgYVN0cmluZyxQUkJv b2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50PS0xKSBj b25zdDsKIyAzMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcuaCIKICBQ UkludDMyIFJGaW5kQ2hhcihQUlVuaWNoYXIgYUNoYXIsUFJJbnQzMiBhbk9mZnNldD0tMSxQUklu dDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgMzM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n L25zU3RyaW5nLmgiCiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBjaGFyKiBhU3RyaW5n LFBSSW50MzIgYW5PZmZzZXQ9LTEpIGNvbnN0OwogIFBSSW50MzIgUkZpbmRDaGFySW5TZXQoY29u c3QgbnNDU3RyaW5nJiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9LTEpIGNvbnN0OwojIDM1NiAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIFBSSW50MzIgQ29tcGFy ZShjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50 PS0xKSBjb25zdDsKCiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqIGFT dHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwoKICBQ UkJvb2wgRXF1YWxzSWdub3JlQ2FzZShjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUNvdW50 PS0xKSBjb25zdDsKIyAzNzIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcu aCIKcHJpdmF0ZToKCgogIHZvaWQgb3BlcmF0b3I9KCBQUlVuaWNoYXIgKTsKICB2b2lkIEFzc2ln bldpdGhDb252ZXJzaW9uKCBjb25zdCBjaGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQgSW5zZXJ0 V2l0aENvbnZlcnNpb24oIGNoYXIsIFBSVWludDMyICk7Cn07CgppbmxpbmUKbnNDU3RyaW5nOjpz aXplX3R5cGUKbnNDU3RyaW5nOjpMZWZ0KCBuc0FDU3RyaW5nJiBhUmVzdWx0LCBzaXplX3R5cGUg YUxlbmd0aFRvQ29weSApIGNvbnN0CiAgewogICAgcmV0dXJuIE1pZChhUmVzdWx0LCAwLCBhTGVu Z3RoVG9Db3B5KTsKICB9CgppbmxpbmUKbnNDU3RyaW5nOjpzaXplX3R5cGUKbnNDU3RyaW5nOjpS aWdodCggc2VsZl90eXBlJiBhUmVzdWx0LCBzaXplX3R5cGUgYUxlbmd0aFRvQ29weSApIGNvbnN0 CiAgewogICAgc2l6ZV90eXBlIG15TGVuZ3RoID0gTGVuZ3RoKCk7CiAgICBhTGVuZ3RoVG9Db3B5 ID0gTlNfTUlOKG15TGVuZ3RoLCBhTGVuZ3RoVG9Db3B5KTsKICAgIHJldHVybiBNaWQoYVJlc3Vs dCwgbXlMZW5ndGgtYUxlbmd0aFRvQ29weSwgYUxlbmd0aFRvQ29weSk7CiAgfQojIDQwNiAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgpjbGFzcyBuc0NBdXRvU3RyaW5n IDogcHVibGljIG5zQ1N0cmluZyB7CnB1YmxpYzoKCiAgICB2aXJ0dWFsIH5uc0NBdXRvU3RyaW5n KCkge30KCiAgICBuc0NBdXRvU3RyaW5nKCk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5nKGNv bnN0IG5zQ1N0cmluZyYgKTsKICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgbnNBQ1N0 cmluZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5nKGNvbnN0IGNoYXIqIGFT dHJpbmcpOwogICAgbnNDQXV0b1N0cmluZyhjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUxl bmd0aCk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5nKGNvbnN0IENCdWZEZXNjcmlwdG9yJiBh QnVmZmVyKTsKCiAgICBuc0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQ0F1dG9TdHJp bmcmIGFTdHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgcHJpdmF0 ZToKICAgIHZvaWQgb3BlcmF0b3I9KCBQUlVuaWNoYXIgKTsKICBwdWJsaWM6CiAgICBuc0NBdXRv U3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQUNTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWdu KGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQoKICAgIG5zQ0F1dG9TdHJpbmcmIG9wZXJhdG9y PSggY29uc3QgY2hhciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICAg IG5zQ0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggY2hhciBhQ2hhciApIHsgQXNzaWduKGFDaGFyKTsg cmV0dXJuICp0aGlzOyB9CiMgNDM1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3Ry aW5nLmgiCiAgICBjaGFyIG1CdWZmZXJba0RlZmF1bHRTdHJpbmdTaXplXTsKfTsKCgoKCgoKY2xh c3MgTlNfQ29udmVydFVDUzJ0b1VURjgKICAgICAgOiBwdWJsaWMgbnNDQXV0b1N0cmluZwoKCgog IHsKICAgIHB1YmxpYzoKICAgICAgZnJpZW5kIGNoYXIqIFRvTmV3VVRGOFN0cmluZyggY29uc3Qg bnNBU3RyaW5nJiBhU291cmNlICk7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBO U19Db252ZXJ0VUNTMnRvVVRGOCggY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nICkKICAgICAgICB7 CiAgICAgICAgICBBcHBlbmQoIGFTdHJpbmcsIH5QUlVpbnQzMigwKSApOwogICAgICAgIH0KCiAg ICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWlu dDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIEFwcGVuZCggYVN0cmluZywgYUxlbmd0 aCApOwogICAgICAgIH0KCiAgICAgIGV4cGxpY2l0IE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjb25z dCBuc0FTdHJpbmcmIGFTdHJpbmcgKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQgQXBwZW5k KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWludDMyIGFMZW5ndGggKTsKCiAgICBwcml2 YXRlOgoKICAgICAgTlNfQ29udmVydFVDUzJ0b1VURjgoIGNoYXIgKTsKICB9OwoKCgoKY2xhc3Mg TlNfTG9zc3lDb252ZXJ0VUNTMnRvQVNDSUkKICAgICAgOiBwdWJsaWMgbnNDQXV0b1N0cmluZwoK CgogIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgTlNfTG9zc3lDb252ZXJ0VUNT MnRvQVNDSUkoIGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyApCiAgICAgICAgewogICAgICAgICAg QXBwZW5kV2l0aENvbnZlcnNpb24oIGFTdHJpbmcsIH5QUlVpbnQzMigwKSApOwogICAgICAgIH0K CiAgICAgIE5TX0xvc3N5Q29udmVydFVDUzJ0b0FTQ0lJKCBjb25zdCBQUlVuaWNoYXIqIGFTdHJp bmcsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIEFwcGVuZFdpdGhDb252 ZXJzaW9uKCBhU3RyaW5nLCBhTGVuZ3RoICk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQgTlNf TG9zc3lDb252ZXJ0VUNTMnRvQVNDSUkoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwoKICAg IHByaXZhdGU6CgogICAgICBOU19Mb3NzeUNvbnZlcnRVQ1MydG9BU0NJSSggY2hhciApOwogIH07 CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9y eS5oIiAyCgoKCgoKY2xhc3MgbnNJU2NyaXB0Q29udGV4dDsKY2xhc3MgbnNJU2NyaXB0R2xvYmFs T2JqZWN0OwpjbGFzcyBuc0lET01FdmVudExpc3RlbmVyOwoKY2xhc3MgbnNJRE9NU2NyaXB0T2Jq ZWN0RmFjdG9yeSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweGE2Y2Y5MDY0LCAw eDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRk LCAweDMyIH0gfTsgcmV0dXJuIGlpZDt9CgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3U2NyaXB0Q29u dGV4dChuc0lTY3JpcHRHbG9iYWxPYmplY3QgKmFHbG9iYWwsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5zSVNjcmlwdENvbnRleHQgKiphQ29udGV4dCkgPSAwOwoKICB2aXJ0dWFsIG5z cmVzdWx0IE5ld0pTRXZlbnRMaXN0ZW5lcihuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogYU9iamVjdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lET01FdmVudExpc3RlbmVyICoqIGFJbnN0YW5j ZVB0clJlc3VsdCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1NjcmlwdEdsb2JhbE9iamVj dChQUkJvb2wgYUlzQ2hyb21lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SVNjcmlwdEdsb2JhbE9iamVjdCAqKmFHbG9iYWwpID0gMDsKCiAgdmlydHVhbCBuc0lTdXBwb3J0 cyAqR2V0Q2xhc3NJbmZvSW5zdGFuY2UobnNET01DbGFzc0luZm9JRCBhSUQpID0gMDsKICB2aXJ0 dWFsIG5zSVN1cHBvcnRzICpHZXRFeHRlcm5hbENsYXNzSW5mb0luc3RhbmNlKGNvbnN0IG5zQVN0 cmluZyYgYU5hbWUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyRE9NQ2xh c3NJbmZvKGNvbnN0IGNoYXIgKmFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNET01DbGFzc0luZm9FeHRlcm5hbENvbnN0cnVjdG9yRm5jIGFDb25zdHJ1Y3RvckZwdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAqYVByb3RvQ2hh aW5JbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJ RCAqKmFJbnRlcmZhY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50 MzIgYVNjcmlwdGFibGVGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS Qm9vbCBhSGFzQ2xhc3NJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBuc0NJRCAqYUNvbnN0cnVjdG9yQ0lEKSA9IDA7Cn07CiMgMzE0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0RPTUNJRC5oIiAxCiMgMzE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t L25zSURPTUNsYXNzSW5mby5oIiAyCiMgMzc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUNsYXNzSW5mby5oIgpjbGFzcyBuc0lET01TY3JpcHRPYmplY3RGYWN0b3J5OwoKY2xhc3Mg bnNJRE9NQ0lFeHRlbnNpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg4OTFh N2IwMSwgMHgxYjYxLCAweDExZDYsIHsgMHhhNywgMHhmMiwgMHhmNiwgMHg5MCwgMHhiNiwgMHgz OCwgMHg4OSwgMHg5YyB9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lz dGVyRE9NQ0koY29uc3QgY2hhciogYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SURPTVNjcmlwdE9iamVjdEZhY3RvcnkqIGFET01TT0ZhY3RvcnkpID0gMDsKfTsKIyA0NCAibnNE T01DbGFzc0luZm8uaCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIg MQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIgMgoKCgpleHRlcm4gIkMiIHsKIyAx NDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gaW50NjQKSlNfTm93 KCk7CgoKZXh0ZXJuIGpzdmFsCkpTX0dldE5hTlZhbHVlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu IGpzdmFsCkpTX0dldE5lZ2F0aXZlSW5maW5pdHlWYWx1ZShKU0NvbnRleHQgKmN4KTsKCmV4dGVy biBqc3ZhbApKU19HZXRQb3NpdGl2ZUluZmluaXR5VmFsdWUoSlNDb250ZXh0ICpjeCk7CgpleHRl cm4ganN2YWwKSlNfR2V0RW1wdHlTdHJpbmdWYWx1ZShKU0NvbnRleHQgKmN4KTsKIyAxOTYgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpTX0NvbnZlcnRB cmd1bWVudHMoSlNDb250ZXh0ICpjeCwgdWludE4gYXJnYywganN2YWwgKmFyZ3YsIGNvbnN0IGNo YXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAuLi4pOwojIDIxNiAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBqc3ZhbCAqCkpTX1B1c2hBcmd1bWVudHMoSlND b250ZXh0ICpjeCwgdm9pZCAqKm1hcmtwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CgoKCgoK CmV4dGVybiB2b2lkCkpTX1BvcEFyZ3VtZW50cyhKU0NvbnRleHQgKmN4LCB2b2lkICptYXJrKTsK IyAyNzcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpT X0NvbnZlcnRWYWx1ZShKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCBKU1R5cGUgdHlwZSwganN2YWwg KnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfVmFsdWVUb09iamVjdChKU0NvbnRleHQgKmN4LCBqc3Zh bCB2LCBKU09iamVjdCAqKm9ianApOwoKZXh0ZXJuIEpTRnVuY3Rpb24gKgpKU19WYWx1ZVRvRnVu Y3Rpb24oSlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX1Zh bHVlVG9Db25zdHJ1Y3RvcihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2KTsKCmV4dGVybiBKU1N0cmlu ZyAqCkpTX1ZhbHVlVG9TdHJpbmcoSlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gSlNC b29sCkpTX1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0ICpjeCwganN2YWwgdiwganNkb3VibGUgKmRw KTsKCgoKCgpleHRlcm4gSlNCb29sCkpTX1ZhbHVlVG9FQ01BSW50MzIoSlNDb250ZXh0ICpjeCwg anN2YWwgdiwgaW50MzIgKmlwKTsKCgoKCgpleHRlcm4gSlNCb29sCkpTX1ZhbHVlVG9FQ01BVWlu dDMyKEpTQ29udGV4dCAqY3gsIGpzdmFsIHYsIHVpbnQzMiAqaXApOwoKCgoKCgpleHRlcm4gSlNC b29sCkpTX1ZhbHVlVG9JbnQzMihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCBpbnQzMiAqaXApOwoK CgoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvVWludDE2KEpTQ29udGV4dCAqY3gsIGpzdmFsIHYs IHVpbnQxNiAqaXApOwoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvQm9vbGVhbihKU0NvbnRleHQg KmN4LCBqc3ZhbCB2LCBKU0Jvb2wgKmJwKTsKCmV4dGVybiBKU1R5cGUKSlNfVHlwZU9mVmFsdWUo SlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gY29uc3QgY2hhciAqCkpTX0dldFR5cGVO YW1lKEpTQ29udGV4dCAqY3gsIEpTVHlwZSB0eXBlKTsKIyAzNDIgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNSdW50aW1lICoKSlNfSW5pdCh1aW50MzIgbWF4Ynl0 ZXMpOwoKZXh0ZXJuIHZvaWQKSlNfRmluaXNoKEpTUnVudGltZSAqcnQpOwoKZXh0ZXJuIHZvaWQK SlNfU2h1dERvd24odm9pZCk7Cgp2b2lkICoKSlNfR2V0UnVudGltZVByaXZhdGUoSlNSdW50aW1l ICpydCk7Cgp2b2lkCkpTX1NldFJ1bnRpbWVQcml2YXRlKEpTUnVudGltZSAqcnQsIHZvaWQgKmRh dGEpOwoKCgpleHRlcm4gdm9pZApKU19CZWdpblJlcXVlc3QoSlNDb250ZXh0ICpjeCk7CgpleHRl cm4gdm9pZApKU19FbmRSZXF1ZXN0KEpTQ29udGV4dCAqY3gpOwoKCmV4dGVybiB2b2lkCkpTX1lp ZWxkUmVxdWVzdChKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBqc3JlZmNvdW50CkpTX1N1c3BlbmRS ZXF1ZXN0KEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZvaWQKSlNfUmVzdW1lUmVxdWVzdChKU0Nv bnRleHQgKmN4LCBqc3JlZmNvdW50IHNhdmVEZXB0aCk7CgoKCmV4dGVybiB2b2lkCkpTX0xvY2so SlNSdW50aW1lICpydCk7CgpleHRlcm4gdm9pZApKU19VbmxvY2soSlNSdW50aW1lICpydCk7Cgpl eHRlcm4gSlNDb250ZXh0ICoKSlNfTmV3Q29udGV4dChKU1J1bnRpbWUgKnJ0LCBzaXplX3Qgc3Rh Y2tDaHVua1NpemUpOwoKZXh0ZXJuIHZvaWQKSlNfRGVzdHJveUNvbnRleHQoSlNDb250ZXh0ICpj eCk7CgpleHRlcm4gdm9pZApKU19EZXN0cm95Q29udGV4dE5vR0MoSlNDb250ZXh0ICpjeCk7Cgpl eHRlcm4gdm9pZApKU19EZXN0cm95Q29udGV4dE1heWJlR0MoSlNDb250ZXh0ICpjeCk7CgpleHRl cm4gdm9pZCAqCkpTX0dldENvbnRleHRQcml2YXRlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZv aWQKSlNfU2V0Q29udGV4dFByaXZhdGUoSlNDb250ZXh0ICpjeCwgdm9pZCAqZGF0YSk7CgpleHRl cm4gSlNSdW50aW1lICoKSlNfR2V0UnVudGltZShKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU0Nv bnRleHQgKgpKU19Db250ZXh0SXRlcmF0b3IoSlNSdW50aW1lICpydCwgSlNDb250ZXh0ICoqaXRl cnApOwoKZXh0ZXJuIEpTVmVyc2lvbgpKU19HZXRWZXJzaW9uKEpTQ29udGV4dCAqY3gpOwoKZXh0 ZXJuIEpTVmVyc2lvbgpKU19TZXRWZXJzaW9uKEpTQ29udGV4dCAqY3gsIEpTVmVyc2lvbiB2ZXJz aW9uKTsKCmV4dGVybiBjb25zdCBjaGFyICoKSlNfVmVyc2lvblRvU3RyaW5nKEpTVmVyc2lvbiB2 ZXJzaW9uKTsKCmV4dGVybiBKU1ZlcnNpb24KSlNfU3RyaW5nVG9WZXJzaW9uKGNvbnN0IGNoYXIg KnN0cmluZyk7CiMgNDM2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJu IHVpbnQzMgpKU19HZXRPcHRpb25zKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHVpbnQzMgpKU19T ZXRPcHRpb25zKEpTQ29udGV4dCAqY3gsIHVpbnQzMiBvcHRpb25zKTsKCmV4dGVybiB1aW50MzIK SlNfVG9nZ2xlT3B0aW9ucyhKU0NvbnRleHQgKmN4LCB1aW50MzIgb3B0aW9ucyk7CgpleHRlcm4g Y29uc3QgY2hhciAqCkpTX0dldEltcGxlbWVudGF0aW9uVmVyc2lvbih2b2lkKTsKCmV4dGVybiBK U09iamVjdCAqCkpTX0dldEdsb2JhbE9iamVjdChKU0NvbnRleHQgKmN4KTsKCmV4dGVybiB2b2lk CkpTX1NldEdsb2JhbE9iamVjdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKIyA0NjEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpTX0luaXRT dGFuZGFyZENsYXNzZXMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaik7CiMgNDc3ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19SZXNvbHZlU3Rh bmRhcmRDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwKICAgICAg ICAgICAgICAgICAgICAgICAgSlNCb29sICpyZXNvbHZlZCk7CgpleHRlcm4gSlNCb29sCkpTX0Vu dW1lcmF0ZVN0YW5kYXJkQ2xhc3NlcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4 dGVybiBKU09iamVjdCAqCkpTX0dldFNjb3BlQ2hhaW4oSlNDb250ZXh0ICpjeCk7CgpleHRlcm4g dm9pZCAqCkpTX21hbGxvYyhKU0NvbnRleHQgKmN4LCBzaXplX3QgbmJ5dGVzKTsKCmV4dGVybiB2 b2lkICoKSlNfcmVhbGxvYyhKU0NvbnRleHQgKmN4LCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKTsK CmV4dGVybiB2b2lkCkpTX2ZyZWUoSlNDb250ZXh0ICpjeCwgdm9pZCAqcCk7CgpleHRlcm4gY2hh ciAqCkpTX3N0cmR1cChKU0NvbnRleHQgKmN4LCBjb25zdCBjaGFyICpzKTsKCmV4dGVybiBqc2Rv dWJsZSAqCkpTX05ld0RvdWJsZShKU0NvbnRleHQgKmN4LCBqc2RvdWJsZSBkKTsKCmV4dGVybiBK U0Jvb2wKSlNfTmV3RG91YmxlVmFsdWUoSlNDb250ZXh0ICpjeCwganNkb3VibGUgZCwganN2YWwg KnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19OZXdOdW1iZXJWYWx1ZShKU0NvbnRleHQgKmN4LCBq c2RvdWJsZSBkLCBqc3ZhbCAqcnZhbCk7CiMgNTI0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMv anNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19BZGRSb290KEpTQ29udGV4dCAqY3gsIHZvaWQgKnJw KTsKCmV4dGVybiBKU0Jvb2wKSlNfQWRkTmFtZWRSb290KEpTQ29udGV4dCAqY3gsIHZvaWQgKnJw LCBjb25zdCBjaGFyICpuYW1lKTsKCmV4dGVybiBKU0Jvb2wKSlNfQWRkTmFtZWRSb290UlQoSlNS dW50aW1lICpydCwgdm9pZCAqcnAsIGNvbnN0IGNoYXIgKm5hbWUpOwoKZXh0ZXJuIEpTQm9vbApK U19SZW1vdmVSb290KEpTQ29udGV4dCAqY3gsIHZvaWQgKnJwKTsKCmV4dGVybiBKU0Jvb2wKSlNf UmVtb3ZlUm9vdFJUKEpTUnVudGltZSAqcnQsIHZvaWQgKnJwKTsKIyA1NTQgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gdm9pZApKU19DbGVhck5ld2Jvcm5Sb290cyhK U0NvbnRleHQgKmN4KTsKIyA1ODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgp0 eXBlZGVmIGludE4KKCogSlNHQ1Jvb3RNYXBGdW4pKHZvaWQgKnJwLCBjb25zdCBjaGFyICpuYW1l LCB2b2lkICpkYXRhKTsKCmV4dGVybiB1aW50MzIKSlNfTWFwR0NSb290cyhKU1J1bnRpbWUgKnJ0 LCBKU0dDUm9vdE1hcEZ1biBtYXAsIHZvaWQgKmRhdGEpOwoKZXh0ZXJuIEpTQm9vbApKU19Mb2Nr R0NUaGluZyhKU0NvbnRleHQgKmN4LCB2b2lkICp0aGluZyk7CgpleHRlcm4gSlNCb29sCkpTX0xv Y2tHQ1RoaW5nUlQoSlNSdW50aW1lICpydCwgdm9pZCAqdGhpbmcpOwoKZXh0ZXJuIEpTQm9vbApK U19VbmxvY2tHQ1RoaW5nKEpTQ29udGV4dCAqY3gsIHZvaWQgKnRoaW5nKTsKCmV4dGVybiBKU0Jv b2wKSlNfVW5sb2NrR0NUaGluZ1JUKEpTUnVudGltZSAqcnQsIHZvaWQgKnRoaW5nKTsKIyA2MTcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gdm9pZApKU19NYXJrR0NU aGluZyhKU0NvbnRleHQgKmN4LCB2b2lkICp0aGluZywgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAq YXJnKTsKCmV4dGVybiB2b2lkCkpTX0dDKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZvaWQKSlNf TWF5YmVHQyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU0dDQ2FsbGJhY2sKSlNfU2V0R0NDYWxs YmFjayhKU0NvbnRleHQgKmN4LCBKU0dDQ2FsbGJhY2sgY2IpOwoKZXh0ZXJuIEpTR0NDYWxsYmFj awpKU19TZXRHQ0NhbGxiYWNrUlQoSlNSdW50aW1lICpydCwgSlNHQ0NhbGxiYWNrIGNiKTsKCmV4 dGVybiBKU0Jvb2wKSlNfSXNBYm91dFRvQmVGaW5hbGl6ZWQoSlNDb250ZXh0ICpjeCwgdm9pZCAq dGhpbmcpOwojIDY0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBp bnROCkpTX0FkZEV4dGVybmFsU3RyaW5nRmluYWxpemVyKEpTU3RyaW5nRmluYWxpemVPcCBmaW5h bGl6ZXIpOwojIDY2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBp bnROCkpTX1JlbW92ZUV4dGVybmFsU3RyaW5nRmluYWxpemVyKEpTU3RyaW5nRmluYWxpemVPcCBm aW5hbGl6ZXIpOwoKCgoKCgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdFeHRlcm5hbFN0cmluZyhK U0NvbnRleHQgKmN4LCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoLCBpbnROIHR5cGUpOwoK CgoKCmV4dGVybiBpbnROCkpTX0dldEV4dGVybmFsU3RyaW5nR0NUeXBlKEpTUnVudGltZSAqcnQs IEpTU3RyaW5nICpzdHIpOwojIDY4OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgi CnN0cnVjdCBKU0NsYXNzIHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICB1aW50MzIgZmxhZ3M7 CgoKICAgIEpTUHJvcGVydHlPcCBhZGRQcm9wZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBkZWxQcm9w ZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBnZXRQcm9wZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBzZXRQ cm9wZXJ0eTsKICAgIEpTRW51bWVyYXRlT3AgZW51bWVyYXRlOwogICAgSlNSZXNvbHZlT3AgcmVz b2x2ZTsKICAgIEpTQ29udmVydE9wIGNvbnZlcnQ7CiAgICBKU0ZpbmFsaXplT3AgZmluYWxpemU7 CgoKICAgIEpTR2V0T2JqZWN0T3BzIGdldE9iamVjdE9wczsKICAgIEpTQ2hlY2tBY2Nlc3NPcCBj aGVja0FjY2VzczsKICAgIEpTTmF0aXZlIGNhbGw7CiAgICBKU05hdGl2ZSBjb25zdHJ1Y3Q7CiAg ICBKU1hEUk9iamVjdE9wIHhkck9iamVjdDsKICAgIEpTSGFzSW5zdGFuY2VPcCBoYXNJbnN0YW5j ZTsKICAgIEpTTWFya09wIG1hcms7CiAgICBqc3dvcmQgc3BhcmU7Cn07CiMgNzM3ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKc3RydWN0IEpTT2JqZWN0T3BzIHsKCiAgICBKU05l d09iamVjdE1hcE9wIG5ld09iamVjdE1hcDsKICAgIEpTT2JqZWN0TWFwT3AgZGVzdHJveU9iamVj dE1hcDsKICAgIEpTTG9va3VwUHJvcE9wIGxvb2t1cFByb3BlcnR5OwogICAgSlNEZWZpbmVQcm9w T3AgZGVmaW5lUHJvcGVydHk7CiAgICBKU1Byb3BlcnR5SWRPcCBnZXRQcm9wZXJ0eTsKICAgIEpT UHJvcGVydHlJZE9wIHNldFByb3BlcnR5OwogICAgSlNBdHRyaWJ1dGVzT3AgZ2V0QXR0cmlidXRl czsKICAgIEpTQXR0cmlidXRlc09wIHNldEF0dHJpYnV0ZXM7CiAgICBKU1Byb3BlcnR5SWRPcCBk ZWxldGVQcm9wZXJ0eTsKICAgIEpTQ29udmVydE9wIGRlZmF1bHRWYWx1ZTsKICAgIEpTTmV3RW51 bWVyYXRlT3AgZW51bWVyYXRlOwogICAgSlNDaGVja0FjY2Vzc0lkT3AgY2hlY2tBY2Nlc3M7CgoK ICAgIEpTT2JqZWN0T3AgdGhpc09iamVjdDsKICAgIEpTUHJvcGVydHlSZWZPcCBkcm9wUHJvcGVy dHk7CiAgICBKU05hdGl2ZSBjYWxsOwogICAgSlNOYXRpdmUgY29uc3RydWN0OwogICAgSlNYRFJP YmplY3RPcCB4ZHJPYmplY3Q7CiAgICBKU0hhc0luc3RhbmNlT3AgaGFzSW5zdGFuY2U7CiAgICBK U1NldE9iamVjdFNsb3RPcCBzZXRQcm90bzsKICAgIEpTU2V0T2JqZWN0U2xvdE9wIHNldFBhcmVu dDsKICAgIEpTTWFya09wIG1hcms7CiAgICBKU0ZpbmFsaXplT3AgY2xlYXI7CiAgICBKU0dldFJl cXVpcmVkU2xvdE9wIGdldFJlcXVpcmVkU2xvdDsKICAgIEpTU2V0UmVxdWlyZWRTbG90T3Agc2V0 UmVxdWlyZWRTbG90Owp9OwojIDc3NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgi CnN0cnVjdCBKU1Byb3BlcnR5IHsKICAgIGpzaWQgaWQ7Cn07CgpzdHJ1Y3QgSlNJZEFycmF5IHsK ICAgIGpzaW50IGxlbmd0aDsKICAgIGpzaWQgdmVjdG9yWzFdOwp9OwoKZXh0ZXJuIHZvaWQKSlNf RGVzdHJveUlkQXJyYXkoSlNDb250ZXh0ICpjeCwgSlNJZEFycmF5ICppZGEpOwoKZXh0ZXJuIEpT Qm9vbApKU19WYWx1ZVRvSWQoSlNDb250ZXh0ICpjeCwganN2YWwgdiwganNpZCAqaWRwKTsKCmV4 dGVybiBKU0Jvb2wKSlNfSWRUb1ZhbHVlKEpTQ29udGV4dCAqY3gsIGpzaWQgaWQsIGpzdmFsICp2 cCk7CgoKCgpleHRlcm4gSlNCb29sCkpTX1Byb3BlcnR5U3R1YihKU0NvbnRleHQgKmN4LCBKU09i amVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfRW51bWVy YXRlU3R1YihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNf UmVzb2x2ZVN0dWIoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQpOwoKZXh0 ZXJuIEpTQm9vbApKU19Db252ZXJ0U3R1YihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBK U1R5cGUgdHlwZSwganN2YWwgKnZwKTsKCmV4dGVybiB2b2lkCkpTX0ZpbmFsaXplU3R1YihKU0Nv bnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCnN0cnVjdCBKU0NvbnN0RG91YmxlU3BlYyB7CiAg ICBqc2RvdWJsZSBkdmFsOwogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIHVpbnQ4IGZsYWdzOwog ICAgdWludDggc3BhcmVbM107Cn07CgoKCgoKCnN0cnVjdCBKU1Byb3BlcnR5U3BlYyB7CiAgICBj b25zdCBjaGFyICpuYW1lOwogICAgaW50OCB0aW55aWQ7CiAgICB1aW50OCBmbGFnczsKICAgIEpT UHJvcGVydHlPcCBnZXR0ZXI7CiAgICBKU1Byb3BlcnR5T3Agc2V0dGVyOwp9OwoKc3RydWN0IEpT RnVuY3Rpb25TcGVjIHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICBKU05hdGl2ZSBjYWxsOwog ICAgdWludDggbmFyZ3M7CiAgICB1aW50OCBmbGFnczsKICAgIHVpbnQxNiBleHRyYTsKfTsKCmV4 dGVybiBKU09iamVjdCAqCkpTX0luaXRDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2Jq LCBKU09iamVjdCAqcGFyZW50X3Byb3RvLAogICAgICAgICAgICAgSlNDbGFzcyAqY2xhc3AsIEpT TmF0aXZlIGNvbnN0cnVjdG9yLCB1aW50TiBuYXJncywKICAgICAgICAgICAgIEpTUHJvcGVydHlT cGVjICpwcywgSlNGdW5jdGlvblNwZWMgKmZzLAogICAgICAgICAgICAgSlNQcm9wZXJ0eVNwZWMg KnN0YXRpY19wcywgSlNGdW5jdGlvblNwZWMgKnN0YXRpY19mcyk7CgoKZXh0ZXJuIEpTQ2xhc3Mg KgpKU19HZXRDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKIyA4NTkgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpTX0luc3RhbmNlT2Yo SlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgSlNDbGFzcyAqY2xhc3AsIGpzdmFsICphcmd2 KTsKCmV4dGVybiB2b2lkICoKSlNfR2V0UHJpdmF0ZShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAq b2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UHJpdmF0ZShKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqLCB2b2lkICpkYXRhKTsKCmV4dGVybiB2b2lkICoKSlNfR2V0SW5zdGFuY2VQcml2YXRl KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTQ2xhc3MgKmNsYXNwLAogICAgICAgICAg ICAgICAgICAgICAganN2YWwgKmFyZ3YpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0UHJvdG90 eXBlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRQ cm90b3R5cGUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgSlNPYmplY3QgKnByb3RvKTsK CmV4dGVybiBKU09iamVjdCAqCkpTX0dldFBhcmVudChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAq b2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UGFyZW50KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0 ICpvYmosIEpTT2JqZWN0ICpwYXJlbnQpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0Q29uc3Ry dWN0b3IoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKnByb3RvKTsKCmV4dGVybiBKU09iamVjdCAq CkpTX05ld09iamVjdChKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCwgSlNPYmplY3QgKnBy b3RvLCBKU09iamVjdCAqcGFyZW50KTsKCmV4dGVybiBKU09iamVjdCAqCkpTX0NvbnN0cnVjdE9i amVjdChKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCwgSlNPYmplY3QgKnByb3RvLAogICAg ICAgICAgICAgICAgICAgSlNPYmplY3QgKnBhcmVudCk7CgpleHRlcm4gSlNPYmplY3QgKgpKU19D b25zdHJ1Y3RPYmplY3RXaXRoQXJndW1lbnRzKEpTQ29udGV4dCAqY3gsIEpTQ2xhc3MgKmNsYXNw LCBKU09iamVjdCAqcHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmpl Y3QgKnBhcmVudCwgdWludE4gYXJnYywganN2YWwgKmFyZ3YpOwoKZXh0ZXJuIEpTT2JqZWN0ICoK SlNfRGVmaW5lT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIg Km5hbWUsIEpTQ2xhc3MgKmNsYXNwLAogICAgICAgICAgICAgICAgSlNPYmplY3QgKnByb3RvLCB1 aW50TiBhdHRycyk7CgpleHRlcm4gSlNCb29sCkpTX0RlZmluZUNvbnN0RG91YmxlcyhKU0NvbnRl eHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU0NvbnN0RG91YmxlU3BlYyAqY2RzKTsKCmV4dGVybiBK U0Jvb2wKSlNfRGVmaW5lUHJvcGVydGllcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBK U1Byb3BlcnR5U3BlYyAqcHMpOwoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVQcm9wZXJ0eShKU0Nv bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBqc3ZhbCB2YWx1ZSwK ICAgICAgICAgICAgICAgICAgSlNQcm9wZXJ0eU9wIGdldHRlciwgSlNQcm9wZXJ0eU9wIHNldHRl ciwgdWludE4gYXR0cnMpOwoKCgoKCgoKZXh0ZXJuIEpTQm9vbApKU19HZXRQcm9wZXJ0eUF0dHJp YnV0ZXMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnROICphdHRyc3AsIEpTQm9vbCAqZm91bmRwKTsKCgoK CgoKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UHJvcGVydHlBdHRyaWJ1dGVzKEpTQ29udGV4dCAqY3gs IEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50TiBhdHRycywgSlNCb29sICpmb3VuZHApOwoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVQ cm9wZXJ0eVdpdGhUaW55SWQoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hh ciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDggdGlueWlkLCBqc3ZhbCB2 YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpT UHJvcGVydHlPcCBzZXR0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50TiBhdHRy cyk7CgpleHRlcm4gSlNCb29sCkpTX0FsaWFzUHJvcGVydHkoSlNDb250ZXh0ICpjeCwgSlNPYmpl Y3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICph bGlhcyk7CgpleHRlcm4gSlNCb29sCkpTX0xvb2t1cFByb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpT T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGpzdmFsICp2cCk7CgpleHRlcm4gSlNCb29s CkpTX0dldFByb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIg Km5hbWUsIGpzdmFsICp2cCk7CgpleHRlcm4gSlNCb29sCkpTX1NldFByb3BlcnR5KEpTQ29udGV4 dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGpzdmFsICp2cCk7CgpleHRl cm4gSlNCb29sCkpTX0RlbGV0ZVByb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmos IGNvbnN0IGNoYXIgKm5hbWUpOwoKZXh0ZXJuIEpTQm9vbApKU19EZWxldGVQcm9wZXJ0eTIoSlND b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAg ICAgICAgIGpzdmFsICpydmFsKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVmaW5lVUNQcm9wZXJ0eShK U0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGpz Y2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGpzdmFsIHZhbHVlLAogICAgICAgICAgICAgICAg ICAgIEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpTUHJvcGVydHlPcCBzZXR0ZXIsCiAgICAgICAgICAg ICAgICAgICAgdWludE4gYXR0cnMpOwoKCgoKCgoKZXh0ZXJuIEpTQm9vbApKU19HZXRVQ1Byb3Bl cnR5QXR0cmlidXRlcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAogICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50TiAqYXR0cnNwLCBKU0Jvb2wgKmZvdW5kcCk7CgoKCgoK CgpleHRlcm4gSlNCb29sCkpTX1NldFVDUHJvcGVydHlBdHRyaWJ1dGVzKEpTQ29udGV4dCAqY3gs IEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAq bmFtZSwgc2l6ZV90IG5hbWVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROIGF0 dHJzLCBKU0Jvb2wgKmZvdW5kcCk7CgoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVVQ1Byb3BlcnR5 V2l0aFRpbnlJZChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQ4IHRpbnlpZCwganN2YWwgdmFsdWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpTUHJvcGVydHlPcCBz ZXR0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROIGF0dHJzKTsKCmV4dGVy biBKU0Jvb2wKSlNfTG9va3VwVUNQcm9wZXJ0eShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2Jq LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4s CiAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfR2V0VUNQ cm9wZXJ0eShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgIGNv bnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCiAgICAgICAgICAgICAgICAganN2YWwg KnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0VUNQcm9wZXJ0eShKU0NvbnRleHQgKmN4LCBKU09i amVjdCAqb2JqLAogICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5h bWVsZW4sCiAgICAgICAgICAgICAgICAganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVs ZXRlVUNQcm9wZXJ0eTIoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAg ICAgICAgICAgY29uc3QganNjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKICAgICAgICAgICAg ICAgICAgICAganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfTmV3QXJyYXlPYmpl Y3QoSlNDb250ZXh0ICpjeCwganNpbnQgbGVuZ3RoLCBqc3ZhbCAqdmVjdG9yKTsKCmV4dGVybiBK U0Jvb2wKSlNfSXNBcnJheU9iamVjdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4 dGVybiBKU0Jvb2wKSlNfR2V0QXJyYXlMZW5ndGgoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9i aiwganN1aW50ICpsZW5ndGhwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0QXJyYXlMZW5ndGgoSlND b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN1aW50IGxlbmd0aCk7CgpleHRlcm4gSlNCb29s CkpTX0hhc0FycmF5TGVuZ3RoKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdWludCAq bGVuZ3RocCk7CgpleHRlcm4gSlNCb29sCkpTX0RlZmluZUVsZW1lbnQoSlNDb250ZXh0ICpjeCwg SlNPYmplY3QgKm9iaiwganNpbnQgaW5kZXgsIGpzdmFsIHZhbHVlLAogICAgICAgICAgICAgICAg IEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpTUHJvcGVydHlPcCBzZXR0ZXIsIHVpbnROIGF0dHJzKTsK CmV4dGVybiBKU0Jvb2wKSlNfQWxpYXNFbGVtZW50KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpv YmosIGNvbnN0IGNoYXIgKm5hbWUsIGpzaW50IGFsaWFzKTsKCmV4dGVybiBKU0Jvb2wKSlNfTG9v a3VwRWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2ludCBpbmRleCwganN2 YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfR2V0RWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09i amVjdCAqb2JqLCBqc2ludCBpbmRleCwganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0 RWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2ludCBpbmRleCwganN2YWwg KnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVsZXRlRWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09i amVjdCAqb2JqLCBqc2ludCBpbmRleCk7CgpleHRlcm4gSlNCb29sCkpTX0RlbGV0ZUVsZW1lbnQy KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaW50IGluZGV4LCBqc3ZhbCAqcnZhbCk7 CgpleHRlcm4gdm9pZApKU19DbGVhclNjb3BlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmop OwoKZXh0ZXJuIEpTSWRBcnJheSAqCkpTX0VudW1lcmF0ZShKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2hlY2tBY2Nlc3MoSlNDb250ZXh0ICpjeCwgSlNP YmplY3QgKm9iaiwganNpZCBpZCwgSlNBY2Nlc3NNb2RlIG1vZGUsCiAgICAgICAgICAgICAgIGpz dmFsICp2cCwgdWludE4gKmF0dHJzcCk7CgpleHRlcm4gSlNDaGVja0FjY2Vzc09wCkpTX1NldENo ZWNrT2JqZWN0QWNjZXNzQ2FsbGJhY2soSlNSdW50aW1lICpydCwgSlNDaGVja0FjY2Vzc09wIGFj Yik7CgpleHRlcm4gSlNCb29sCkpTX0dldFJlc2VydmVkU2xvdChKU0NvbnRleHQgKmN4LCBKU09i amVjdCAqb2JqLCB1aW50MzIgaW5kZXgsIGpzdmFsICp2cCk7CgpleHRlcm4gSlNCb29sCkpTX1Nl dFJlc2VydmVkU2xvdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCB1aW50MzIgaW5kZXgs IGpzdmFsIHYpOwoKCgoKCgpzdHJ1Y3QgSlNQcmluY2lwYWxzIHsKICAgIGNoYXIgKmNvZGViYXNl OwogICAgdm9pZCAqICgqIGdldFByaW5jaXBhbEFycmF5KShKU0NvbnRleHQgKmN4LCBKU1ByaW5j aXBhbHMgKik7CiAgICBKU0Jvb2wgKCogZ2xvYmFsUHJpdmlsZWdlc0VuYWJsZWQpKEpTQ29udGV4 dCAqY3gsIEpTUHJpbmNpcGFscyAqKTsKCgogICAgdWludE4gcmVmY291bnQ7CiAgICB2b2lkICgq IGRlc3Ryb3kpKEpTQ29udGV4dCAqY3gsIHN0cnVjdCBKU1ByaW5jaXBhbHMgKik7Cn07CiMgMTA5 MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBKU1ByaW5jaXBhbHNU cmFuc2NvZGVyCkpTX1NldFByaW5jaXBhbHNUcmFuc2NvZGVyKEpTUnVudGltZSAqcnQsIEpTUHJp bmNpcGFsc1RyYW5zY29kZXIgcHgpOwoKCgoKCgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX05ld0Z1 bmN0aW9uKEpTQ29udGV4dCAqY3gsIEpTTmF0aXZlIGNhbGwsIHVpbnROIG5hcmdzLCB1aW50TiBm bGFncywKICAgICAgICAgICAgICAgSlNPYmplY3QgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSk7 CgpleHRlcm4gSlNPYmplY3QgKgpKU19HZXRGdW5jdGlvbk9iamVjdChKU0Z1bmN0aW9uICpmdW4p OwoKCgoKCmV4dGVybiBjb25zdCBjaGFyICoKSlNfR2V0RnVuY3Rpb25OYW1lKEpTRnVuY3Rpb24g KmZ1bik7CiMgMTEyNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBK U1N0cmluZyAqCkpTX0dldEZ1bmN0aW9uSWQoSlNGdW5jdGlvbiAqZnVuKTsKCgoKCmV4dGVybiB1 aW50TgpKU19HZXRGdW5jdGlvbkZsYWdzKEpTRnVuY3Rpb24gKmZ1bik7CgoKCgoKCgpleHRlcm4g SlNCb29sCkpTX09iamVjdElzRnVuY3Rpb24oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaik7 CgpleHRlcm4gSlNCb29sCkpTX0RlZmluZUZ1bmN0aW9ucyhKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqLCBKU0Z1bmN0aW9uU3BlYyAqZnMpOwoKZXh0ZXJuIEpTRnVuY3Rpb24gKgpKU19EZWZp bmVGdW5jdGlvbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1l LCBKU05hdGl2ZSBjYWxsLAogICAgICAgICAgICAgICAgICB1aW50TiBuYXJncywgdWludE4gYXR0 cnMpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfQ2xvbmVGdW5jdGlvbk9iamVjdChKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqZnVub2JqLCBKU09iamVjdCAqcGFyZW50KTsKIyAxMTU5ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19CdWZmZXJJc0NvbXBp bGFibGVVbml0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqYnl0ZXMsIHNpemVfdCBsZW5ndGgpOwojIDExNzAgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNTY3JpcHQgKgpKU19Db21waWxl U2NyaXB0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqYnl0ZXMsIHNpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubyk7CgpleHRlcm4gSlNTY3JpcHQgKgpKU19Db21waWxl U2NyaXB0Rm9yUHJpbmNpcGFscyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBKU1ByaW5jaXBhbHMgKnByaW5jaXBhbHMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4g bGluZW5vKTsKCmV4dGVybiBKU1NjcmlwdCAqCkpTX0NvbXBpbGVVQ1NjcmlwdChKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFy cywgc2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1l LCB1aW50TiBsaW5lbm8pOwoKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfQ29tcGlsZVVDU2NyaXB0Rm9y UHJpbmNpcGFscyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEpTUHJpbmNpcGFscyAqcHJpbmNpcGFscywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50TiBs aW5lbm8pOwoKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfQ29tcGlsZUZpbGUoSlNDb250ZXh0ICpjeCwg SlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqZmlsZW5hbWUpOwoKZXh0ZXJuIEpTU2NyaXB0ICoK SlNfQ29tcGlsZUZpbGVIYW5kbGUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3Qg Y2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgIEZJTEUgKmZoKTsKCmV4dGVybiBK U1NjcmlwdCAqCkpTX0NvbXBpbGVGaWxlSGFuZGxlRm9yUHJpbmNpcGFscyhKU0NvbnRleHQgKmN4 LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqZmlsZW5hbWUsIEZJTEUgKmZoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzKTsKIyAxMjIwICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfTmV3U2NyaXB0T2JqZWN0KEpTQ29u dGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKCgoKCmV4dGVybiBKU09iamVjdCAqCkpTX0dl dFNjcmlwdE9iamVjdChKU1NjcmlwdCAqc2NyaXB0KTsKCmV4dGVybiB2b2lkCkpTX0Rlc3Ryb3lT Y3JpcHQoSlNDb250ZXh0ICpjeCwgSlNTY3JpcHQgKnNjcmlwdCk7CgpleHRlcm4gSlNGdW5jdGlv biAqCkpTX0NvbXBpbGVGdW5jdGlvbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25z dCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIg KiphcmduYW1lcywKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCBzaXplX3Qg bGVuZ3RoLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxp bmVubyk7CgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX0NvbXBpbGVGdW5jdGlvbkZvclByaW5jaXBh bHMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBKU1ByaW5jaXBhbHMgKnByaW5jaXBhbHMsIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmdu YW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpieXRlcywg c2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpmaWxlbmFtZSwgdWludE4gbGluZW5vKTsKCmV4dGVybiBKU0Z1bmN0aW9uICoKSlNfQ29tcGls ZVVDRnVuY3Rpb24oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFt ZSwKICAgICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmduYW1l cywKICAgICAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywgc2l6ZV90IGxlbmd0 aCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVu byk7CgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX0NvbXBpbGVVQ0Z1bmN0aW9uRm9yUHJpbmNpcGFs cyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzLCBjb25zdCBjaGFyICpuYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiph cmduYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAq Y2hhcnMsIHNpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGluZW5vKTsKCmV4dGVybiBKU1N0cmluZyAqCkpT X0RlY29tcGlsZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCBjb25zdCBj aGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgdWludE4gaW5kZW50KTsKCgoKCgoKCmV4dGVy biBKU1N0cmluZyAqCkpTX0RlY29tcGlsZUZ1bmN0aW9uKEpTQ29udGV4dCAqY3gsIEpTRnVuY3Rp b24gKmZ1biwgdWludE4gaW5kZW50KTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX0RlY29tcGlsZUZ1 bmN0aW9uQm9keShKU0NvbnRleHQgKmN4LCBKU0Z1bmN0aW9uICpmdW4sIHVpbnROIGluZGVudCk7 CiMgMTMxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBKU0Jvb2wK SlNfRXhlY3V0ZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU1NjcmlwdCAq c2NyaXB0LCBqc3ZhbCAqcnZhbCk7CgoKCgoKdHlwZWRlZiBlbnVtIEpTRXhlY1BhcnQgeyBKU0VY RUNfUFJPTE9HLCBKU0VYRUNfTUFJTiB9IEpTRXhlY1BhcnQ7CgpleHRlcm4gSlNCb29sCkpTX0V4 ZWN1dGVTY3JpcHRQYXJ0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTU2NyaXB0ICpz Y3JpcHQsCiAgICAgICAgICAgICAgICAgICAgIEpTRXhlY1BhcnQgcGFydCwganN2YWwgKnJ2YWwp OwoKZXh0ZXJuIEpTQm9vbApKU19FdmFsdWF0ZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpieXRlcywgdWludE4gbGVuZ3Ro LAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGluZW5vLAog ICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1YXRl U2NyaXB0Rm9yUHJpbmNpcGFscyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnl0ZXMsIHVpbnROIGxlbmd0aCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50 TiBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7Cgpl eHRlcm4gSlNCb29sCkpTX0V2YWx1YXRlVUNTY3JpcHQoSlNDb250ZXh0ICpjeCwgSlNPYmplY3Qg Km9iaiwKICAgICAgICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKmNoYXJzLCB1aW50TiBsZW5n dGgsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVu bywKICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2 YWx1YXRlVUNTY3JpcHRGb3JQcmluY2lwYWxzKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJpbmNpcGFscyAqcHJpbmNpcGFs cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywg dWludE4gbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpmaWxlbmFtZSwgdWludE4gbGluZW5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0NhbGxGdW5jdGlvbihKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqb2JqLCBKU0Z1bmN0aW9uICpmdW4sIHVpbnROIGFyZ2MsCiAgICAgICAg ICAgICAgICBqc3ZhbCAqYXJndiwganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19DYWxs RnVuY3Rpb25OYW1lKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5h bWUsIHVpbnROIGFyZ2MsCiAgICAgICAgICAgICAgICAgICAganN2YWwgKmFyZ3YsIGpzdmFsICpy dmFsKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2FsbEZ1bmN0aW9uVmFsdWUoSlNDb250ZXh0ICpjeCwg SlNPYmplY3QgKm9iaiwganN2YWwgZnZhbCwgdWludE4gYXJnYywKICAgICAgICAgICAgICAgICAg ICAganN2YWwgKmFyZ3YsIGpzdmFsICpydmFsKTsKCmV4dGVybiBKU0JyYW5jaENhbGxiYWNrCkpT X1NldEJyYW5jaENhbGxiYWNrKEpTQ29udGV4dCAqY3gsIEpTQnJhbmNoQ2FsbGJhY2sgY2IpOwoK ZXh0ZXJuIEpTQm9vbApKU19Jc1J1bm5pbmcoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gSlNCb29s CkpTX0lzQ29uc3RydWN0aW5nKEpTQ29udGV4dCAqY3gpOwoKCgoKCgpleHRlcm4gSlNCb29sCkpT X0lzQXNzaWduaW5nKEpTQ29udGV4dCAqY3gpOwojIDEzODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9qcy9qc2FwaS5oIgpleHRlcm4gdm9pZApKU19TZXRDYWxsUmV0dXJuVmFsdWUyKEpTQ29udGV4 dCAqY3gsIGpzdmFsIHYpOwojIDE0MDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5o IgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdTdHJpbmcoSlNDb250ZXh0ICpjeCwgY2hhciAqYnl0 ZXMsIHNpemVfdCBsZW5ndGgpOwoKZXh0ZXJuIEpTU3RyaW5nICoKSlNfTmV3U3RyaW5nQ29weU4o SlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqcywgc2l6ZV90IG4pOwoKZXh0ZXJuIEpTU3RyaW5n ICoKSlNfTmV3U3RyaW5nQ29weVooSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqcyk7CgpleHRl cm4gSlNTdHJpbmcgKgpKU19JbnRlcm5TdHJpbmcoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAq cyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdVQ1N0cmluZyhKU0NvbnRleHQgKmN4LCBqc2No YXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoKTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX05ld1VDU3Ry aW5nQ29weU4oSlNDb250ZXh0ICpjeCwgY29uc3QganNjaGFyICpzLCBzaXplX3Qgbik7CgpleHRl cm4gSlNTdHJpbmcgKgpKU19OZXdVQ1N0cmluZ0NvcHlaKEpTQ29udGV4dCAqY3gsIGNvbnN0IGpz Y2hhciAqcyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19JbnRlcm5VQ1N0cmluZ04oSlNDb250ZXh0 ICpjeCwgY29uc3QganNjaGFyICpzLCBzaXplX3QgbGVuZ3RoKTsKCmV4dGVybiBKU1N0cmluZyAq CkpTX0ludGVyblVDU3RyaW5nKEpTQ29udGV4dCAqY3gsIGNvbnN0IGpzY2hhciAqcyk7CgpleHRl cm4gY2hhciAqCkpTX0dldFN0cmluZ0J5dGVzKEpTU3RyaW5nICpzdHIpOwoKZXh0ZXJuIGpzY2hh ciAqCkpTX0dldFN0cmluZ0NoYXJzKEpTU3RyaW5nICpzdHIpOwoKZXh0ZXJuIHNpemVfdApKU19H ZXRTdHJpbmdMZW5ndGgoSlNTdHJpbmcgKnN0cik7CgpleHRlcm4gaW50TgpKU19Db21wYXJlU3Ry aW5ncyhKU1N0cmluZyAqc3RyMSwgSlNTdHJpbmcgKnN0cjIpOwojIDE0NTggIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdHcm93YWJsZVN0 cmluZyhKU0NvbnRleHQgKmN4LCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoKTsKCgoKCgoK ZXh0ZXJuIEpTU3RyaW5nICoKSlNfTmV3RGVwZW5kZW50U3RyaW5nKEpTQ29udGV4dCAqY3gsIEpT U3RyaW5nICpzdHIsIHNpemVfdCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBs ZW5ndGgpOwojIDE0NzcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4g SlNTdHJpbmcgKgpKU19Db25jYXRTdHJpbmdzKEpTQ29udGV4dCAqY3gsIEpTU3RyaW5nICpsZWZ0 LCBKU1N0cmluZyAqcmlnaHQpOwoKCgoKCmV4dGVybiBjb25zdCBqc2NoYXIgKgpKU19VbmRlcGVu ZFN0cmluZyhKU0NvbnRleHQgKmN4LCBKU1N0cmluZyAqc3RyKTsKCgoKCgpleHRlcm4gSlNCb29s CkpTX01ha2VTdHJpbmdJbW11dGFibGUoSlNDb250ZXh0ICpjeCwgSlNTdHJpbmcgKnN0cik7CgoK CgoKCnN0cnVjdCBKU0xvY2FsZUNhbGxiYWNrcyB7CiAgICBKU0xvY2FsZVRvVXBwZXJDYXNlIGxv Y2FsZVRvVXBwZXJDYXNlOwogICAgSlNMb2NhbGVUb0xvd2VyQ2FzZSBsb2NhbGVUb0xvd2VyQ2Fz ZTsKICAgIEpTTG9jYWxlQ29tcGFyZSBsb2NhbGVDb21wYXJlOwp9OwoKCgoKCmV4dGVybiB2b2lk CkpTX1NldExvY2FsZUNhbGxiYWNrcyhKU0NvbnRleHQgKmN4LCBKU0xvY2FsZUNhbGxiYWNrcyAq Y2FsbGJhY2tzKTsKCgoKCgpleHRlcm4gSlNMb2NhbGVDYWxsYmFja3MgKgpKU19HZXRMb2NhbGVD YWxsYmFja3MoSlNDb250ZXh0ICpjeCk7CiMgMTUzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pz L2pzYXBpLmgiCmV4dGVybiB2b2lkCkpTX1JlcG9ydEVycm9yKEpTQ29udGV4dCAqY3gsIGNvbnN0 IGNoYXIgKmZvcm1hdCwgLi4uKTsKCgoKCmV4dGVybiB2b2lkCkpTX1JlcG9ydEVycm9yTnVtYmVy KEpTQ29udGV4dCAqY3gsIEpTRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLAogICAgICAgICAg ICAgICAgICAgICB2b2lkICp1c2VyUmVmLCBjb25zdCB1aW50TiBlcnJvck51bWJlciwgLi4uKTsK CgoKCmV4dGVybiB2b2lkCkpTX1JlcG9ydEVycm9yTnVtYmVyVUMoSlNDb250ZXh0ICpjeCwgSlNF cnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVz ZXJSZWYsIGNvbnN0IHVpbnROIGVycm9yTnVtYmVyLCAuLi4pOwoKCgoKCgoKZXh0ZXJuIEpTQm9v bApKU19SZXBvcnRXYXJuaW5nKEpTQ29udGV4dCAqY3gsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4u KTsKCmV4dGVybiBKU0Jvb2wKSlNfUmVwb3J0RXJyb3JGbGFnc0FuZE51bWJlcihKU0NvbnRleHQg KmN4LCB1aW50TiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0Vycm9yQ2Fs bGJhY2sgZXJyb3JDYWxsYmFjaywgdm9pZCAqdXNlclJlZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1aW50TiBlcnJvck51bWJlciwgLi4uKTsKCmV4dGVybiBKU0Jvb2wKSlNf UmVwb3J0RXJyb3JGbGFnc0FuZE51bWJlclVDKEpTQ29udGV4dCAqY3gsIHVpbnROIGZsYWdzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJh Y2ssIHZvaWQgKnVzZXJSZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 aW50TiBlcnJvck51bWJlciwgLi4uKTsKCgoKCmV4dGVybiB2b2lkCkpTX1JlcG9ydE91dE9mTWVt b3J5KEpTQ29udGV4dCAqY3gpOwoKc3RydWN0IEpTRXJyb3JSZXBvcnQgewogICAgY29uc3QgY2hh ciAqZmlsZW5hbWU7CiAgICB1aW50TiBsaW5lbm87CiAgICBjb25zdCBjaGFyICpsaW5lYnVmOwog ICAgY29uc3QgY2hhciAqdG9rZW5wdHI7CiAgICBjb25zdCBqc2NoYXIgKnVjbGluZWJ1ZjsKICAg IGNvbnN0IGpzY2hhciAqdWN0b2tlbnB0cjsKICAgIHVpbnROIGZsYWdzOwogICAgdWludE4gZXJy b3JOdW1iZXI7CiAgICBjb25zdCBqc2NoYXIgKnVjbWVzc2FnZTsKICAgIGNvbnN0IGpzY2hhciAq Km1lc3NhZ2VBcmdzOwp9OwojIDE2MDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5o IgpleHRlcm4gSlNFcnJvclJlcG9ydGVyCkpTX1NldEVycm9yUmVwb3J0ZXIoSlNDb250ZXh0ICpj eCwgSlNFcnJvclJlcG9ydGVyIGVyKTsKIyAxNjE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMv anNhcGkuaCIKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfTmV3UmVnRXhwT2JqZWN0KEpTQ29udGV4dCAq Y3gsIGNoYXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoLCB1aW50TiBmbGFncyk7CgpleHRlcm4gSlNP YmplY3QgKgpKU19OZXdVQ1JlZ0V4cE9iamVjdChKU0NvbnRleHQgKmN4LCBqc2NoYXIgKmNoYXJz LCBzaXplX3QgbGVuZ3RoLCB1aW50TiBmbGFncyk7CgpleHRlcm4gdm9pZApKU19TZXRSZWdFeHBJ bnB1dChKU0NvbnRleHQgKmN4LCBKU1N0cmluZyAqaW5wdXQsIEpTQm9vbCBtdWx0aWxpbmUpOwoK ZXh0ZXJuIHZvaWQKSlNfQ2xlYXJSZWdFeHBTdGF0aWNzKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu IHZvaWQKSlNfQ2xlYXJSZWdFeHBSb290cyhKU0NvbnRleHQgKmN4KTsKCgoKCgpleHRlcm4gSlNC b29sCkpTX0lzRXhjZXB0aW9uUGVuZGluZyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU0Jvb2wK SlNfR2V0UGVuZGluZ0V4Y2VwdGlvbihKU0NvbnRleHQgKmN4LCBqc3ZhbCAqdnApOwoKZXh0ZXJu IHZvaWQKSlNfU2V0UGVuZGluZ0V4Y2VwdGlvbihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2KTsKCmV4 dGVybiB2b2lkCkpTX0NsZWFyUGVuZGluZ0V4Y2VwdGlvbihKU0NvbnRleHQgKmN4KTsKIyAxNjU5 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTRXhjZXB0aW9uU3Rh dGUgKgpKU19TYXZlRXhjZXB0aW9uU3RhdGUoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gdm9pZApK U19SZXN0b3JlRXhjZXB0aW9uU3RhdGUoSlNDb250ZXh0ICpjeCwgSlNFeGNlcHRpb25TdGF0ZSAq c3RhdGUpOwoKZXh0ZXJuIHZvaWQKSlNfRHJvcEV4Y2VwdGlvblN0YXRlKEpTQ29udGV4dCAqY3gs IEpTRXhjZXB0aW9uU3RhdGUgKnN0YXRlKTsKIyAxNjc1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv anMvanNhcGkuaCIKZXh0ZXJuIEpTRXJyb3JSZXBvcnQgKgpKU19FcnJvckZyb21FeGNlcHRpb24o SlNDb250ZXh0ICpjeCwganN2YWwgdik7CiMgMTY5MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pz L2pzYXBpLmgiCmV4dGVybiBpbnROCkpTX0dldENvbnRleHRUaHJlYWQoSlNDb250ZXh0ICpjeCk7 CgpleHRlcm4gaW50TgpKU19TZXRDb250ZXh0VGhyZWFkKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu IGludE4KSlNfQ2xlYXJDb250ZXh0VGhyZWFkKEpTQ29udGV4dCAqY3gpOwoKCgoKCn0KIyA0NiAi bnNET01DbGFzc0luZm8uaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVNj cmlwdFNlY3VyaXR5TWFuYWdlci5oIiAxCiMgMTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBz L25zSVNjcmlwdFNlY3VyaXR5TWFuYWdlci5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9j YXBzL25zSVByaW5jaXBhbC5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25z SVByaW5jaXBhbC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTZXJpYWxp emFibGUuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VyaWFsaXph YmxlLmgiCmNsYXNzIG5zSU9iamVjdElucHV0U3RyZWFtOwoKY2xhc3MgbnNJT2JqZWN0T3V0cHV0 U3RyZWFtOwojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VyaWFsaXphYmxl LmgiCmNsYXNzIG5zSVNlcmlhbGl6YWJsZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHg5MWNjYTk4MSwgMHhjMjZkLCAweDQ0YTgsIHsgMHhiZSwgMHhiZSwgMHhkOSwgMHhlZCwg MHg0OCwgMHg5MSwgMHg1MCwgMHgzYSB9fTsgcmV0dXJuIGlpZDt9CiMgNDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0lTZXJpYWxpemFibGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJl YWQobnNJT2JqZWN0SW5wdXRTdHJlYW0gKmFJbnB1dFN0cmVhbSkgPSAwOwojIDUzICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VyaWFsaXphYmxlLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBXcml0ZShuc0lPYmplY3RPdXRwdXRTdHJlYW0gKmFPdXRwdXRTdHJlYW0pID0gMDsKCn07CiMg MTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVByaW5jaXBhbC5oIiAyCgoKCgoKCnN0 cnVjdCBKU1ByaW5jaXBhbHM7CiMgMjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVBy aW5jaXBhbC5oIgpjbGFzcyBuc0lQcmluY2lwYWwgOiBwdWJsaWMgbnNJU2VyaWFsaXphYmxlIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGZmOTMxM2QwLCAweDI1ZTEsIDB4MTFkMiwgeyAweDgxLCAweDYwLCAweDAw LCAweDYwLCAweDA4LCAweDExLCAweDlkLCAweDdhIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7 IEVOQUJMRV9ERU5JRUQgPSAxIH07CgogIGVudW0geyBFTkFCTEVfVU5LTk9XTiA9IDIgfTsKCiAg ZW51bSB7IEVOQUJMRV9XSVRIX1VTRVJfUEVSTUlTU0lPTiA9IDMgfTsKCiAgZW51bSB7IEVOQUJM RV9HUkFOVEVEID0gNCB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1VzZXJWaXNpYmxlU3RyaW5nKGNoYXIg KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZWZlcmVuY2VzKGNoYXIg KipwcmVmTmFtZSwgY2hhciAqKmlkLCBjaGFyICoqZ3JhbnRlZExpc3QsIGNoYXIgKipkZW5pZWRM aXN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVxdWFscyhuc0lQcmluY2lwYWwgKm90aGVy LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzaFZhbHVlKFBS VWludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTUHJpbmNpcGFs cyhKU1ByaW5jaXBhbHMgKiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDYW5F bmFibGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIgKmNhcGFiaWxpdHksIFBSSW50MTYgKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2FuRW5hYmxlQ2FwYWJpbGl0eShjb25zdCBj aGFyICpjYXBhYmlsaXR5LCBQUkludDE2IGNhbkVuYWJsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBJc0NhcGFiaWxpdHlFbmFibGVkKGNvbnN0IGNoYXIgKmNhcGFiaWxpdHksIHZvaWQgKiBh bm5vdGF0aW9uLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5h YmxlQ2FwYWJpbGl0eShjb25zdCBjaGFyICpjYXBhYmlsaXR5LCB2b2lkICogKmFubm90YXRpb24p ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmV2ZXJ0Q2FwYWJpbGl0eShjb25zdCBjaGFyICpj YXBhYmlsaXR5LCB2b2lkICogKmFubm90YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg RGlzYWJsZUNhcGFiaWxpdHkoY29uc3QgY2hhciAqY2FwYWJpbGl0eSwgdm9pZCAqICphbm5vdGF0 aW9uKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY2Fwcy9uc0lTY3JpcHRT ZWN1cml0eU1hbmFnZXIuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5l Y3QvbnNJWFBDU2VjdXJpdHlNYW5hZ2VyLmgiIDEKIyAxOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29ubmVjdC9uc0lYUENTZWN1cml0eU1hbmFnZXIuaCIKY2xhc3MgbnNJQ2xhc3NJbmZvOwoK Y2xhc3MgbnNJWFBDTmF0aXZlQ2FsbENvbnRleHQ7CiMgMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbm5lY3QvbnNJWFBDU2VjdXJpdHlNYW5hZ2VyLmgiCmNsYXNzIG5zSVhQQ1NlY3VyaXR5 TWFuYWdlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMTQzMTQ0MCwgMHhm MWNlLCAweDExZDIsIHsgMHg5OCwgMHg1YSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwg MHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKCgogIGVudW0geyBIT09LX0NSRUFURV9XUkFQUEVSID0g MVUgfTsKCiAgZW51bSB7IEhPT0tfQ1JFQVRFX0lOU1RBTkNFID0gMlUgfTsKCiAgZW51bSB7IEhP T0tfR0VUX1NFUlZJQ0UgPSA0VSB9OwoKICBlbnVtIHsgSE9PS19DQUxMX01FVEhPRCA9IDhVIH07 CgogIGVudW0geyBIT09LX0dFVF9QUk9QRVJUWSA9IDE2VSB9OwoKICBlbnVtIHsgSE9PS19TRVRf UFJPUEVSVFkgPSAzMlUgfTsKCiAgZW51bSB7IEhPT0tfQUxMID0gNjNVIH07CiMgNjAgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDU2VjdXJpdHlNYW5hZ2VyLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBDYW5DcmVhdGVXcmFwcGVyKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIGNv bnN0IG5zSUlEICYgYUlJRCwgbnNJU3VwcG9ydHMgKmFPYmosIG5zSUNsYXNzSW5mbyAqYUNsYXNz SW5mbywgdm9pZCAqICphUG9saWN5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkNyZWF0 ZUluc3RhbmNlKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIGNvbnN0IG5zQ0lEICYgYUNJRCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDYW5HZXRTZXJ2aWNlKEpTQ29udGV4dCAqIGFKU0NvbnRl eHQsIGNvbnN0IG5zQ0lEICYgYUNJRCkgPSAwOwoKICBlbnVtIHsgQUNDRVNTX0NBTExfTUVUSE9E ID0gMFUgfTsKCiAgZW51bSB7IEFDQ0VTU19HRVRfUFJPUEVSVFkgPSAxVSB9OwoKICBlbnVtIHsg QUNDRVNTX1NFVF9QUk9QRVJUWSA9IDJVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkFjY2Vz cyhQUlVpbnQzMiBhQWN0aW9uLCBuc0lYUENOYXRpdmVDYWxsQ29udGV4dCAqYUNhbGxDb250ZXh0 LCBKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAqIGFKU09iamVjdCwgbnNJU3VwcG9y dHMgKmFPYmosIG5zSUNsYXNzSW5mbyAqYUNsYXNzSW5mbywganN2YWwgYU5hbWUsIHZvaWQgKiAq YVBvbGljeSkgPSAwOwoKfTsKIyAxOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NhcHMvbnNJU2Ny aXB0U2VjdXJpdHlNYW5hZ2VyLmgiIDIKCgoKCgoKY2xhc3MgbnNJVVJJOwojIDM1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvY2Fwcy9uc0lTY3JpcHRTZWN1cml0eU1hbmFnZXIuaCIKY2xhc3MgbnNJ U2NyaXB0U2VjdXJpdHlNYW5hZ2VyIDogcHVibGljIG5zSVhQQ1NlY3VyaXR5TWFuYWdlciB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHg1OGRmNTc4MCwgMHg4MDA2LCAweDExZDIsIHsgMHhiZCwgMHg5MSwgMHgwMCwg MHg4MCwgMHg1ZiwgMHg4YSwgMHhlMywgMHhmNCB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IENoZWNrUHJvcGVydHlBY2Nlc3MoSlNDb250ZXh0ICogYUpTQ29udGV4dCwg SlNPYmplY3QgKiBhSlNPYmplY3QsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGpzdmFsIGFQcm9w ZXJ0eSwgUFJVaW50MzIgYUFjdGlvbikgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVj a0Nvbm5lY3QoSlNDb250ZXh0ICogYUpTQ29udGV4dCwgbnNJVVJJICphVGFyZ2V0VVJJLCBjb25z dCBjaGFyICphQ2xhc3NOYW1lLCBjb25zdCBjaGFyICphUHJvcGVydHkpID0gMDsKIyA2MiAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2NhcHMvbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBDaGVja0xvYWRVUklGcm9tU2NyaXB0KEpTQ29udGV4dCAqIGN4LCBuc0lV UkkgKnVyaSkgPSAwOwoKCgoKICBlbnVtIHsgU1RBTkRBUkQgPSAwVSB9OwoKICBlbnVtIHsgRElT QUxMT1dfRlJPTV9NQUlMID0gMVUgfTsKCiAgZW51bSB7IEFMTE9XX0NIUk9NRSA9IDJVIH07CiMg ODQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVNjcmlwdFNlY3VyaXR5TWFuYWdlci5o IgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tMb2FkVVJJKG5zSVVSSSAqZnJvbSwgbnNJVVJJICp1 cmksIFBSVWludDMyIGZsYWdzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVja0xv YWRVUklTdHIoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdXJpLCBQUlVpbnQzMiBmbGFn cykgPSAwOwojIDEwNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NhcHMvbnNJU2NyaXB0U2VjdXJp dHlNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVja0Z1bmN0aW9uQWNjZXNzKEpTQ29u dGV4dCAqIGN4LCB2b2lkICogZnVuT2JqLCB2b2lkICogdGFyZ2V0T2JqKSA9IDA7CgoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBDYW5FeGVjdXRlU2NyaXB0cyhKU0NvbnRleHQgKiBjeCwgbnNJUHJp bmNpcGFsICpwcmluY2lwYWwsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFN1YmplY3RQcmluY2lwYWwobnNJUHJpbmNpcGFsICoqX3JldHZhbCkgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTeXN0ZW1QcmluY2lwYWwobnNJUHJpbmNpcGFs ICoqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDZXJ0aWZpY2F0ZVBy aW5jaXBhbChjb25zdCBjaGFyICpDZXJ0SUQsIG5zSVByaW5jaXBhbCAqKl9yZXR2YWwpID0gMDsK CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvZGViYXNlUHJpbmNpcGFsKG5zSVVSSSAqYVVS SSwgbnNJUHJpbmNpcGFsICoqX3JldHZhbCkgPSAwOwojIDE0NyAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2NhcHMvbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZXF1ZXN0Q2FwYWJpbGl0eShuc0lQcmluY2lwYWwgKnByaW5jaXBhbCwgY29uc3QgY2hhciAqY2Fw YWJpbGl0eSwgUFJJbnQxNiAqcmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElz Q2FwYWJpbGl0eUVuYWJsZWQoY29uc3QgY2hhciAqY2FwYWJpbGl0eSwgUFJCb29sICpfcmV0dmFs KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVDYXBhYmlsaXR5KGNvbnN0IGNo YXIgKmNhcGFiaWxpdHkpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXZlcnRDYXBh YmlsaXR5KGNvbnN0IGNoYXIgKmNhcGFiaWxpdHkpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IERpc2FibGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIgKmNhcGFiaWxpdHkpID0gMDsKCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldENhbkVuYWJsZUNhcGFiaWxpdHkoY29uc3QgY2hhciAqY2Vy dGlmaWNhdGVJRCwgY29uc3QgY2hhciAqY2FwYWJpbGl0eSwgUFJJbnQxNiBjYW5FbmFibGUpID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T2JqZWN0UHJpbmNpcGFsKEpTQ29udGV4dCAq IGN4LCBKU09iamVjdCAqIG9iaiwgbnNJUHJpbmNpcGFsICoqX3JldHZhbCkgPSAwOwoKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgU3ViamVjdFByaW5jaXBhbElzU3lzdGVtKFBSQm9vbCAqX3JldHZh bCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tTYW1lT3JpZ2luKEpTQ29udGV4 dCAqIGFKU0NvbnRleHQsIG5zSVVSSSAqYVRhcmdldFVSSSkgPSAwOwoKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgQ2hlY2tTYW1lT3JpZ2luVVJJKG5zSVVSSSAqYVNvdXJjZVVSSSwgbnNJVVJJICph VGFyZ2V0VVJJKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVja1NhbWVPcmlnaW5Q cmluY2lwYWwobnNJUHJpbmNpcGFsICphU291cmNlUHJpbmNpcGFsLCBuc0lQcmluY2lwYWwgKmFU YXJnZXRQcmluY2lwYWwpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByaW5jaXBh bEZyb21Db250ZXh0KEpTQ29udGV4dCAqIGN4LCBuc0lQcmluY2lwYWwgKipfcmV0dmFsKSA9IDA7 Cgp9OwojIDQ3ICJuc0RPTUNsYXNzSW5mby5oIiAyCgpjbGFzcyBuc0lET01XaW5kb3c7CmNsYXNz IG5zSURPTU5TSFRNTE9wdGlvbkNvbGxlY3Rpb247CmNsYXNzIG5zSVBsdWdpbkluc3RhbmNlOwpj bGFzcyBuc0lGb3JtOwoKc3RydWN0IG5zRE9NQ2xhc3NJbmZvRGF0YTsKCnR5cGVkZWYgbnNJQ2xh c3NJbmZvKiAoKm5zRE9NQ2xhc3NJbmZvQ29uc3RydWN0b3JGbmMpCiAgKG5zRE9NQ2xhc3NJbmZv RGF0YSogYURhdGEpOwoKCnN0cnVjdCBuc0RPTUNsYXNzSW5mb0RhdGEKewogIGNvbnN0IGNoYXIg Km1OYW1lOwogIHVuaW9uIHsKICAgIG5zRE9NQ2xhc3NJbmZvQ29uc3RydWN0b3JGbmMgbUNvbnN0 cnVjdG9yRnB0cjsKICAgIG5zRE9NQ2xhc3NJbmZvRXh0ZXJuYWxDb25zdHJ1Y3RvckZuYyBtRXh0 ZXJuYWxDb25zdHJ1Y3RvckZwdHI7CiAgfSB1OwogIG5zSUNsYXNzSW5mbyAqbUNhY2hlZENsYXNz SW5mbzsKCiAgY29uc3QgbnNJSUQgKm1Qcm90b0NoYWluSW50ZXJmYWNlOwogIGNvbnN0IG5zSUlE ICoqbUludGVyZmFjZXM7CiAgUFJVaW50MzIgbVNjcmlwdGFibGVGbGFncyA6IDMxOwogIFBSQm9v bCBtSGFzQ2xhc3NJbnRlcmZhY2UgOiAxOwoKCgp9OwoKc3RydWN0IG5zRXh0ZXJuYWxET01DbGFz c0luZm9EYXRhIDogcHVibGljIG5zRE9NQ2xhc3NJbmZvRGF0YQp7CiAgY29uc3QgbnNDSUQgKm1D b25zdHJ1Y3RvckNJRDsKfTsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUHRyQml0czsKIyA5MyAi bnNET01DbGFzc0luZm8uaCIKY2xhc3MgbnNET01DbGFzc0luZm8gOiBwdWJsaWMgbnNJWFBDU2Ny aXB0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgbnNJQ2xhc3NJbmZvCnsKcHVi bGljOgogIG5zRE9NQ2xhc3NJbmZvKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpOwogIHZpcnR1 YWwgfm5zRE9NQ2xhc3NJbmZvKCk7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NOYW1lKGNo YXIgKiAqYUNsYXNzTmFtZSk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NyaXB0YWJsZUZsYWdzKFBS VWludDMyICphU2NyaXB0YWJsZUZsYWdzKTsgdmlydHVhbCBuc3Jlc3VsdCBQcmVDcmVhdGUobnNJ U3VwcG9ydHMgKm5hdGl2ZU9iaiwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogZ2xvYmFsT2Jq LCBKU09iamVjdCAqICpwYXJlbnRPYmopOyB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZShuc0lYUENv bm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBv YmopOyB2aXJ0dWFsIG5zcmVzdWx0IFBvc3RDcmVhdGUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2 ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqKTsgdmlydHVhbCBuc3Jl c3VsdCBBZGRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0Nv bnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmosIGpzdmFsIGlkLCBqc3ZhbCAqIHZwLCBQUkJvb2wg Kl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IERlbFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBw ZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwg aWQsIGpzdmFsICogdnAsIFBSQm9vbCAqX3JldHZhbCk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJv cGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gs IEpTT2JqZWN0ICogb2JqLCBqc3ZhbCBpZCwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFsKTsg dmlydHVhbCBuc3Jlc3VsdCBTZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3 cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmosIGpzdmFsIGlkLCBqc3ZhbCAq IHZwLCBQUkJvb2wgKl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZShuc0lYUENv bm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBv YmosIFBSQm9vbCAqX3JldHZhbCk7IHZpcnR1YWwgbnNyZXN1bHQgTmV3RW51bWVyYXRlKG5zSVhQ Q29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAq IG9iaiwgUFJVaW50MzIgZW51bV9vcCwganN2YWwgKiBzdGF0ZXAsIGpzaWQgKmlkcCwgUFJCb29s ICpfcmV0dmFsKTsgdmlydHVhbCBuc3Jlc3VsdCBOZXdSZXNvbHZlKG5zSVhQQ29ubmVjdFdyYXBw ZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwg aWQsIFBSVWludDMyIGZsYWdzLCBKU09iamVjdCAqICpvYmpwLCBQUkJvb2wgKl9yZXR2YWwpOyB2 aXJ0dWFsIG5zcmVzdWx0IENvbnZlcnQobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBl ciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBQUlVpbnQzMiB0eXBlLCBqc3ZhbCAq IHZwLCBQUkJvb2wgKl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IEZpbmFsaXplKG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9i aik7IHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tBY2Nlc3MobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2 ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBqc3ZhbCBpZCwgUFJV aW50MzIgbW9kZSwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFsKTsgdmlydHVhbCBuc3Jlc3Vs dCBDYWxsKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4 LCBKU09iamVjdCAqIG9iaiwgUFJVaW50MzIgYXJnYywganN2YWwgKiBhcmd2LCBqc3ZhbCAqIHZw LCBQUkJvb2wgKl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IENvbnN0cnVjdChuc0lYUENvbm5l Y3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmos IFBSVWludDMyIGFyZ2MsIGpzdmFsICogYXJndiwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFs KTsgdmlydHVhbCBuc3Jlc3VsdCBIYXNJbnN0YW5jZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZl ICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmosIGpzdmFsIHZhbCwgUFJC b29sICpicCwgUFJCb29sICpfcmV0dmFsKTsgdmlydHVhbCBuc3Jlc3VsdCBNYXJrKG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9i aiwgdm9pZCAqIGFyZywgUFJVaW50MzIgKl9yZXR2YWwpOwoKICBwdWJsaWM6IHZpcnR1YWwgbnNy ZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQ dHIpOyB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3JlZmNudCBSZWxl YXNlKHZvaWQpOyBwcm90ZWN0ZWQ6IG5zQXV0b1JlZkNudCBtUmVmQ250OyBwdWJsaWM6CgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJmYWNlcyhQUlVpbnQzMiAqY291bnQsIG5zSUlEICogKiph cnJheSk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVscGVyRm9yTGFuZ3VhZ2UoUFJVaW50MzIgbGFu Z3VhZ2UsIG5zSVN1cHBvcnRzICoqX3JldHZhbCk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udHJh Y3RJRChjaGFyICogKmFDb250cmFjdElEKTsgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc0Rlc2Ny aXB0aW9uKGNoYXIgKiAqYUNsYXNzRGVzY3JpcHRpb24pOyB2aXJ0dWFsIG5zcmVzdWx0IEdldENs YXNzSUQobnNDSUQgKiAqYUNsYXNzSUQpOyB2aXJ0dWFsIG5zcmVzdWx0IEdldEltcGxlbWVudGF0 aW9uTGFuZ3VhZ2UoUFJVaW50MzIgKmFJbXBsZW1lbnRhdGlvbkxhbmd1YWdlKTsgdmlydHVhbCBu c3Jlc3VsdCBHZXRGbGFncyhQUlVpbnQzMiAqYUZsYWdzKTsgdmlydHVhbCBuc3Jlc3VsdCBHZXRD bGFzc0lETm9BbGxvYyhuc0NJRCAqYUNsYXNzSUROb0FsbG9jKTsKIyAxMTUgIm5zRE9NQ2xhc3NJ bmZvLmgiCiAgc3RhdGljIG5zSUNsYXNzSW5mbyogR2V0Q2xhc3NJbmZvSW5zdGFuY2UobnNET01D bGFzc0luZm9JRCBhSUQpOwogIHN0YXRpYyBuc0lDbGFzc0luZm8qIEdldENsYXNzSW5mb0luc3Rh bmNlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpOwoKICBzdGF0aWMgdm9pZCBTaHV0RG93bigp OwoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFE YXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNET01DbGFzc0luZm8oYURhdGEpOwogIH0KCiAgc3Rh dGljIG5zcmVzdWx0IFdyYXBOYXRpdmUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKnNjb3BlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICpuYXRpdmUsIGNvbnN0IG5z SUlEJiBhSUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCk7CiAgc3Rh dGljIG5zcmVzdWx0IFRocm93SlNFeGNlcHRpb24oSlNDb250ZXh0ICpjeCwgbnNyZXN1bHQgYVJl c3VsdCk7CgogIHN0YXRpYyBuc3Jlc3VsdCBJbml0RE9NSlNDbGFzcyhKU0NvbnRleHQgKmN4LCBK U09iamVjdCAqb2JqKTsKCiAgc3RhdGljIEpTQ2xhc3Mgc0RPTUpTQ2xhc3M7Cgpwcm90ZWN0ZWQ6 CiAgY29uc3QgbnNET01DbGFzc0luZm9EYXRhKiBtRGF0YTsKCiAgc3RhdGljIG5zcmVzdWx0IElu aXQoKTsKICBzdGF0aWMgbnNyZXN1bHQgUmVnaXN0ZXJDbGFzc05hbWUoUFJJbnQzMiBhRE9NQ2xh c3NJbmZvSUQpOwogIHN0YXRpYyBuc3Jlc3VsdCBSZWdpc3RlckNsYXNzUHJvdG9zKFBSSW50MzIg YURPTUNsYXNzSW5mb0lEKTsKICBzdGF0aWMgbnNyZXN1bHQgUmVnaXN0ZXJFeHRlcm5hbENsYXNz ZXMoKTsKICBuc3Jlc3VsdCBSZXNvbHZlQ29uc3RydWN0b3IoSlNDb250ZXh0ICpjeCwgSlNPYmpl Y3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwKTsK CgoKCiAgc3RhdGljIFBSSW50MzIgR2V0QXJyYXlJbmRleEZyb21JZChKU0NvbnRleHQgKmN4LCBq c3ZhbCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqYUlz TnVtYmVyID0gMCk7CgogIHN0YXRpYyBpbmxpbmUgUFJCb29sIElzUmVhZG9ubHlSZXBsYWNlYWJs ZShqc3ZhbCBpZCkKICB7CiAgICByZXR1cm4gKGlkID09IHNUb3BfaWQgfHwKICAgICAgICAgICAg aWQgPT0gc1Njcm9sbGJhcnNfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc0NvbnRlbnRfaWQgfHwK ICAgICAgICAgICAgaWQgPT0gc1NpZGViYXJfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc01lbnVi YXJfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc1Rvb2xiYXJfaWQgfHwKICAgICAgICAgICAgaWQg PT0gc0xvY2F0aW9uYmFyX2lkIHx8CiAgICAgICAgICAgIGlkID09IHNQZXJzb25hbGJhcl9pZCB8 fAogICAgICAgICAgICBpZCA9PSBzU3RhdHVzYmFyX2lkIHx8CiAgICAgICAgICAgIGlkID09IHNE aXJlY3Rvcmllc19pZCB8fAogICAgICAgICAgICBpZCA9PSBzQ29udHJvbGxlcnNfaWQgfHwKICAg ICAgICAgICAgaWQgPT0gc1Njcm9sbFhfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc1Njcm9sbFlf aWQgfHwKICAgICAgICAgICAgaWQgPT0gc0xlbmd0aF9pZCB8fAogICAgICAgICAgICBpZCA9PSBz RnJhbWVzX2lkKTsKICB9CgogIHN0YXRpYyBpbmxpbmUgUFJCb29sIElzV3JpdGFibGVSZXBsYWNl YWJsZShqc3ZhbCBpZCkKICB7CiAgICByZXR1cm4gKGlkID09IHNJbm5lckhlaWdodF9pZCB8fAog ICAgICAgICAgICBpZCA9PSBzSW5uZXJXaWR0aF9pZCB8fAogICAgICAgICAgICBpZCA9PSBzT3V0 ZXJIZWlnaHRfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc091dGVyV2lkdGhfaWQgfHwKICAgICAg ICAgICAgaWQgPT0gc1NjcmVlblhfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc1NjcmVlbllfaWQg fHwKICAgICAgICAgICAgaWQgPT0gc1N0YXR1c19pZCB8fAogICAgICAgICAgICBpZCA9PSBzTmFt ZV9pZCk7CiAgfQoKICBuc3Jlc3VsdCBkb0NoZWNrUHJvcGVydHlBY2Nlc3MoSlNDb250ZXh0ICpj eCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBSVWludDMyIGFjY2Vzc01vZGUsIFBSQm9vbCBpc1dpbmRvdyk7Cgog IHN0YXRpYyBKU0NsYXNzIHNET01Db25zdHJ1Y3RvclByb3RvQ2xhc3M7CiAgc3RhdGljIEpTRnVu Y3Rpb25TcGVjIHNET01KU0NsYXNzX21ldGhvZHNbXTsKCiAgc3RhdGljIG5zSVhQQ29ubmVjdCAq c1hQQ29ubmVjdDsKICBzdGF0aWMgbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyICpzU2VjTWFuOwoK CiAgc3RhdGljIG5zcmVzdWx0IERlZmluZVN0YXRpY0pTVmFscyhKU0NvbnRleHQgKmN4KTsKCiAg c3RhdGljIFBSQm9vbCBzSXNJbml0aWFsaXplZDsKCiAgc3RhdGljIGpzdmFsIHNUb3BfaWQ7CiAg c3RhdGljIGpzdmFsIHNTY3JvbGxiYXJzX2lkOwogIHN0YXRpYyBqc3ZhbCBzTG9jYXRpb25faWQ7 CiAgc3RhdGljIGpzdmFsIHNDb21wb25lbnRzX2lkOwogIHN0YXRpYyBqc3ZhbCBzQ29uc3RydWN0 b3JfaWQ7CiAgc3RhdGljIGpzdmFsIHNfY29udGVudF9pZDsKICBzdGF0aWMganN2YWwgc0NvbnRl bnRfaWQ7CiAgc3RhdGljIGpzdmFsIHNTaWRlYmFyX2lkOwogIHN0YXRpYyBqc3ZhbCBzTWVudWJh cl9pZDsKICBzdGF0aWMganN2YWwgc1Rvb2xiYXJfaWQ7CiAgc3RhdGljIGpzdmFsIHNMb2NhdGlv bmJhcl9pZDsKICBzdGF0aWMganN2YWwgc1BlcnNvbmFsYmFyX2lkOwogIHN0YXRpYyBqc3ZhbCBz U3RhdHVzYmFyX2lkOwogIHN0YXRpYyBqc3ZhbCBzRGlyZWN0b3JpZXNfaWQ7CiAgc3RhdGljIGpz dmFsIHNDb250cm9sbGVyc19pZDsKICBzdGF0aWMganN2YWwgc0xlbmd0aF9pZDsKICBzdGF0aWMg anN2YWwgc0lubmVySGVpZ2h0X2lkOwogIHN0YXRpYyBqc3ZhbCBzSW5uZXJXaWR0aF9pZDsKICBz dGF0aWMganN2YWwgc091dGVySGVpZ2h0X2lkOwogIHN0YXRpYyBqc3ZhbCBzT3V0ZXJXaWR0aF9p ZDsKICBzdGF0aWMganN2YWwgc1NjcmVlblhfaWQ7CiAgc3RhdGljIGpzdmFsIHNTY3JlZW5ZX2lk OwogIHN0YXRpYyBqc3ZhbCBzU3RhdHVzX2lkOwogIHN0YXRpYyBqc3ZhbCBzTmFtZV9pZDsKICBz dGF0aWMganN2YWwgc09ubW91c2Vkb3duX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25tb3VzZXVwX2lk OwogIHN0YXRpYyBqc3ZhbCBzT25jbGlja19pZDsKICBzdGF0aWMganN2YWwgc09uY29udGV4dG1l bnVfaWQ7CiAgc3RhdGljIGpzdmFsIHNPbm1vdXNlb3Zlcl9pZDsKICBzdGF0aWMganN2YWwgc09u bW91c2VvdXRfaWQ7CiAgc3RhdGljIGpzdmFsIHNPbmtleWRvd25faWQ7CiAgc3RhdGljIGpzdmFs IHNPbmtleXVwX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25rZXlwcmVzc19pZDsKICBzdGF0aWMganN2 YWwgc09ubW91c2Vtb3ZlX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25mb2N1c19pZDsKICBzdGF0aWMg anN2YWwgc09uYmx1cl9pZDsKICBzdGF0aWMganN2YWwgc09uc3VibWl0X2lkOwogIHN0YXRpYyBq c3ZhbCBzT25yZXNldF9pZDsKICBzdGF0aWMganN2YWwgc09uY2hhbmdlX2lkOwogIHN0YXRpYyBq c3ZhbCBzT25zZWxlY3RfaWQ7CiAgc3RhdGljIGpzdmFsIHNPbmxvYWRfaWQ7CiAgc3RhdGljIGpz dmFsIHNPbnVubG9hZF9pZDsKICBzdGF0aWMganN2YWwgc09uYWJvcnRfaWQ7CiAgc3RhdGljIGpz dmFsIHNPbmVycm9yX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25wYWludF9pZDsKICBzdGF0aWMganN2 YWwgc09ucmVzaXplX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25zY3JvbGxfaWQ7CiAgc3RhdGljIGpz dmFsIHNTY3JvbGxJbnRvVmlld19pZDsKICBzdGF0aWMganN2YWwgc1Njcm9sbFhfaWQ7CiAgc3Rh dGljIGpzdmFsIHNTY3JvbGxZX2lkOwogIHN0YXRpYyBqc3ZhbCBzT3Blbl9pZDsKICBzdGF0aWMg anN2YWwgc0l0ZW1faWQ7CiAgc3RhdGljIGpzdmFsIHNFbnVtZXJhdGVfaWQ7CiAgc3RhdGljIGpz dmFsIHNOYXZpZ2F0b3JfaWQ7CiAgc3RhdGljIGpzdmFsIHNEb2N1bWVudF9pZDsKICBzdGF0aWMg anN2YWwgc1dpbmRvd19pZDsKICBzdGF0aWMganN2YWwgc0ZyYW1lc19pZDsKCiAgc3RhdGljIGNv bnN0IEpTQ2xhc3MgKnNPYmplY3RDbGFzczsKCiAgc3RhdGljIFBSQm9vbCBzRG9TZWN1cml0eUNo ZWNrSW5BZGRQcm9wZXJ0eTsKfTsKCnR5cGVkZWYgbnNET01DbGFzc0luZm8gbnNET01HZW5lcmlj U0g7CgoKCgoKCmNsYXNzIG5zRXZlbnRSZWNpZXZlclNIIDogcHVibGljIG5zRE9NR2VuZXJpY1NI CnsKcHJvdGVjdGVkOgogIG5zRXZlbnRSZWNpZXZlclNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURh dGEpIDogbnNET01HZW5lcmljU0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNFdmVudFJl Y2lldmVyU0goKQogIHsKICB9CgogIHN0YXRpYyBQUkJvb2wgUmVhbGx5SXNFdmVudE5hbWUoanN2 YWwgaWQsIGpzY2hhciBhRmlyc3RDaGFyKTsKCiAgc3RhdGljIGlubGluZSBQUkJvb2wgSXNFdmVu dE5hbWUoanN2YWwgaWQpCiAgewogICAgOwoKICAgIGpzY2hhciAqc3RyID0gOjpKU19HZXRTdHJp bmdDaGFycygoKEpTU3RyaW5nICopKCh2b2lkICopKChpZCkgJiB+KGpzdmFsKSgoKEpTVWludDMy KTEgPDwgKDMpKSAtIDEpKSkpKTsKCiAgICBpZiAoc3RyWzBdID09ICdvJyAmJiBzdHJbMV0gPT0g J24nKSB7CiAgICAgIHJldHVybiBSZWFsbHlJc0V2ZW50TmFtZShpZCwgc3RyWzJdKTsKICAgIH0K CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcGlsZUhhbmRsZXIobnNJ WFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGNvbXBpbGUsIFBSQm9vbCAqZGlkX2Nv bXBpbGUpOwoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3UmVzb2x2ZShuc0lYUENvbm5l Y3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAg ICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwgUFJVaW50MzIgZmxhZ3MsCiAgICAgICAg ICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq LCBqc3ZhbCBpZCwganN2YWwgKnZwLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sICpf cmV0dmFsKTsKfTsKCgoKCmNsYXNzIG5zV2luZG93U0ggOiBwdWJsaWMgbnNFdmVudFJlY2lldmVy U0gKewpwcm90ZWN0ZWQ6CiAgbnNXaW5kb3dTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6 IG5zRXZlbnRSZWNpZXZlclNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zV2luZG93U0go KQogIHsKICB9CgogIHN0YXRpYyBuc3Jlc3VsdCBHbG9iYWxSZXNvbHZlKG5zSVN1cHBvcnRzICph TmF0aXZlLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpT T2JqZWN0ICpvYmosIEpTU3RyaW5nICpzdHIsIFBSVWludDMyIGZsYWdzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqZGlkX3Jlc29sdmUpOwoKcHVibGljOgogIHZpcnR1 YWwgbnNyZXN1bHQgUHJlQ3JlYXRlKG5zSVN1cHBvcnRzICpuYXRpdmVPYmosIEpTQ29udGV4dCAq Y3gsCiAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKmdsb2JhbE9iaiwgSlNPYmplY3Qg KipwYXJlbnRPYmopOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJvcGVydHkobnNJWFBDb25uZWN0 V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAg ICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZh bCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0 aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNP YmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0 dWFsIG5zcmVzdWx0IEFkZFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq LCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1 bHQgRGVsUHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250 ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlk LCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdSZXNv bHZlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAg ICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBm bGFncywKICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwLCBQUkJvb2wgKl9y ZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1bHQgRmluYWxpemUobnNJWFBDb25uZWN0V3JhcHBlZE5h dGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgIEpTT2Jq ZWN0ICpvYmopOwoKICBzdGF0aWMgbnNyZXN1bHQgQ2FjaGVEb2N1bWVudFByb3BlcnR5KEpTQ29u dGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lET01XaW5kb3cgKndpbmRvdyk7CgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRv Q3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc1dp bmRvd1NIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0xvY2F0aW9uU0ggOiBwdWJsaWMgbnNE T01HZW5lcmljU0gKewpwcm90ZWN0ZWQ6CiAgbnNMb2NhdGlvblNIKG5zRE9NQ2xhc3NJbmZvRGF0 YSogYURhdGEpIDogbnNET01HZW5lcmljU0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNM b2NhdGlvblNIKCkKICB7CiAgfQoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tBY2Nl c3MobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAg ICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBt b2RlLAogICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwp OwoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFE YXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNMb2NhdGlvblNIKGFEYXRhKTsKICB9Cn07CgoKCgoK Y2xhc3MgbnNOb2RlU0ggOiBwdWJsaWMgbnNFdmVudFJlY2lldmVyU0gKewpwcm90ZWN0ZWQ6CiAg bnNOb2RlU0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc0V2ZW50UmVjaWV2ZXJTSChh RGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc05vZGVTSCgpCiAgewogIH0KCnB1YmxpYzoKICB2 aXJ0dWFsIG5zcmVzdWx0IFByZUNyZWF0ZShuc0lTdXBwb3J0cyAqbmF0aXZlT2JqLCBKU0NvbnRl eHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpnbG9iYWxPYmosIEpTT2Jq ZWN0ICoqcGFyZW50T2JqKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZFByb3BlcnR5KG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAg ICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9y ZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmxhZ3MoUFJVaW50MzIgKmFGbGFncyk7Cgog IHN0YXRpYyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEp CiAgewogICAgcmV0dXJuIG5ldyBuc05vZGVTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNF bGVtZW50U0ggOiBwdWJsaWMgbnNOb2RlU0gKewpwcm90ZWN0ZWQ6CiAgbnNFbGVtZW50U0gobnNE T01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc05vZGVTSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0 dWFsIH5uc0VsZW1lbnRTSCgpCiAgewogIH0KCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IFBv c3RDcmVhdGUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpj eCwKICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqKTsKCiAgc3RhdGljIG5zSUNsYXNz SW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4g bmV3IG5zRWxlbWVudFNIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0FycmF5U0ggOiBwdWJs aWMgbnNET01DbGFzc0luZm8Kewpwcm90ZWN0ZWQ6CiAgbnNBcnJheVNIKG5zRE9NQ2xhc3NJbmZv RGF0YSogYURhdGEpIDogbnNET01DbGFzc0luZm8oYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+ bnNBcnJheVNIKCkKICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEl0ZW1BdChuc0lTdXBw b3J0cyAqYU5hdGl2ZSwgUFJVaW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7CgpwdWJsaWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQg KmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpz dmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVh dGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zQXJyYXlT SChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNOYW1lZEFycmF5U0ggOiBwdWJsaWMgbnNBcnJh eVNICnsKcHJvdGVjdGVkOgogIG5zTmFtZWRBcnJheVNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURh dGEpIDogbnNBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zTmFtZWRBcnJheVNI KCkKICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lTdXBwb3J0cyAq YU5hdGl2ZSwgY29uc3QgbnNBU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpT Q29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3Zh bCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwp9OwoKCgoKY2xhc3MgbnNOYW1lZE5v ZGVNYXBTSCA6IHB1YmxpYyBuc05hbWVkQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc05hbWVkTm9k ZU1hcFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEp CiAgewogIH0KCiAgdmlydHVhbCB+bnNOYW1lZE5vZGVNYXBTSCgpCiAgewogIH0KCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEl0ZW1BdChuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgUFJVaW50MzIgYUlu ZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lTdXBwb3J0cyAqYU5hdGl2ZSwg Y29uc3QgbnNBU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdXBwb3J0cyAqKmFSZXN1bHQpOwoKcHVibGljOgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRv Q3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc05h bWVkTm9kZU1hcFNIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0hUTUxDb2xsZWN0aW9uU0gg OiBwdWJsaWMgbnNOYW1lZEFycmF5U0gKewpwcm90ZWN0ZWQ6CiAgbnNIVE1MQ29sbGVjdGlvblNI KG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEpCiAgewog IH0KCiAgdmlydHVhbCB+bnNIVE1MQ29sbGVjdGlvblNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25z dCBuc0FTdHJpbmcmIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1 cHBvcnRzICoqYVJlc3VsdCk7CgpwdWJsaWM6CiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVh dGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zSFRNTENv bGxlY3Rpb25TSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNDb250ZW50TGlzdFNIIDogcHVi bGljIG5zSFRNTENvbGxlY3Rpb25TSAp7CnByb3RlY3RlZDoKICBuc0NvbnRlbnRMaXN0U0gobnNE T01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc0hUTUxDb2xsZWN0aW9uU0goYURhdGEpCiAgewog IH0KCiAgdmlydHVhbCB+bnNDb250ZW50TGlzdFNIKCkKICB7CiAgfQoKcHVibGljOgogIHZpcnR1 YWwgbnNyZXN1bHQgUHJlQ3JlYXRlKG5zSVN1cHBvcnRzICpuYXRpdmVPYmosIEpTQ29udGV4dCAq Y3gsCiAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKmdsb2JhbE9iaiwgSlNPYmplY3Qg KipwYXJlbnRPYmopOwoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNz SW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNDb250ZW50TGlzdFNIKGFEYXRh KTsKICB9Cn07CgoKCgoKY2xhc3MgbnNGb3JtQ29udHJvbExpc3RTSCA6IHB1YmxpYyBuc0hUTUxD b2xsZWN0aW9uU0gKewpwcm90ZWN0ZWQ6CiAgbnNGb3JtQ29udHJvbExpc3RTSChuc0RPTUNsYXNz SW5mb0RhdGEqIGFEYXRhKSA6IG5zSFRNTENvbGxlY3Rpb25TSChhRGF0YSkKICB7CiAgfQoKICB2 aXJ0dWFsIH5uc0Zvcm1Db250cm9sTGlzdFNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcmIGFO YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3Vs dCk7CgpwdWJsaWM6CiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0lu Zm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zRm9ybUNvbnRyb2xMaXN0U0goYURh dGEpOwogIH0KfTsKCgoKCmNsYXNzIG5zRG9jdW1lbnRTSCA6IHB1YmxpYyBuc05vZGVTSAp7CnB1 YmxpYzoKICBuc0RvY3VtZW50U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc05vZGVT SChhRGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc0RvY3VtZW50U0goKQogIHsKICB9CgpwdWJs aWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0 aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNP YmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0 dWFsIG5zcmVzdWx0IERlbFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq LCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1 bHQgTmV3UmVzb2x2ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRl eHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwg UFJVaW50MzIgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqb2JqcCwg UFJCb29sICpfcmV0dmFsKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAg ICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9y ZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBl ZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAg IEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCk7CiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRGbGFncyhQUlVpbnQzMiogYUZsYWdzKTsKCiAgc3RhdGljIG5z SUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICBy ZXR1cm4gbmV3IG5zRG9jdW1lbnRTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNIVE1MRG9j dW1lbnRTSCA6IHB1YmxpYyBuc0RvY3VtZW50U0gKewpwcm90ZWN0ZWQ6CiAgbnNIVE1MRG9jdW1l bnRTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zRG9jdW1lbnRTSChhRGF0YSkKICB7 CiAgfQoKICB2aXJ0dWFsIH5uc0hUTUxEb2N1bWVudFNIKCkKICB7CiAgfQoKICBzdGF0aWMgbnNy ZXN1bHQgUmVzb2x2ZUltcGwoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwganN2YWwgaWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqcmVzdWx0KTsKICBzdGF0aWMg SlNCb29sIERvY3VtZW50T3BlbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50TiBhcmdjLCBqc3ZhbCAq YXJndiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwg KnJ2YWwpOwoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3UmVzb2x2ZShuc0lYUENvbm5l Y3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAg ICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwgUFJVaW50MzIgZmxhZ3MsCiAgICAgICAg ICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq LCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwoKICBzdGF0aWMgbnNJQ2xh c3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVy biBuZXcgbnNIVE1MRG9jdW1lbnRTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNIVE1MRWxl bWVudFNIIDogcHVibGljIG5zRWxlbWVudFNICnsKcHJvdGVjdGVkOgogIG5zSFRNTEVsZW1lbnRT SChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zRWxlbWVudFNIKGFEYXRhKQogIHsKICB9 CgogIHZpcnR1YWwgfm5zSFRNTEVsZW1lbnRTSCgpCiAgewogIH0KCiAgc3RhdGljIEpTQm9vbCBT Y3JvbGxJbnRvVmlldyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROIGFyZ2MsIGpzdmFsICphcmd2 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICpy dmFsKTsKCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1Jlc29sdmUobnNJWFBDb25uZWN0 V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAg ICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIFBSVWludDMyIGZsYWdzLAogICAgICAgICAg ICAgICAgICAgICAgICBKU09iamVjdCAqKm9ianAsIFBSQm9vbCAqX3JldHZhbCk7CgogIHN0YXRp YyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewog ICAgcmV0dXJuIG5ldyBuc0hUTUxFbGVtZW50U0goYURhdGEpOwogIH0KfTsKCgoKCmNsYXNzIG5z SFRNTEZvcm1FbGVtZW50U0ggOiBwdWJsaWMgbnNIVE1MRWxlbWVudFNICnsKcHJvdGVjdGVkOgog IG5zSFRNTEZvcm1FbGVtZW50U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc0hUTUxF bGVtZW50U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNIVE1MRm9ybUVsZW1lbnRTSCgp CiAgewogIH0KCiAgc3RhdGljIG5zcmVzdWx0IEZpbmROYW1lZEl0ZW0obnNJRm9ybSAqYUZvcm0s IEpTU3RyaW5nICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9y dHMgKiphUmVzdWx0KTsKCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1Jlc29sdmUobnNJ WFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAg ICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIFBSVWludDMyIGZsYWdzLAog ICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKm9ianAsIFBSQm9vbCAqX3JldHZhbCk7 CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZl ICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmpl Y3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBS Qm9vbCAqX3JldHZhbCk7CgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3RW51bWVyYXRlKG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSlND b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVp bnQzMiBlbnVtX29wLCBqc3ZhbCAqc3RhdGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgIGpz aWQgKmlkcCwgUFJCb29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVh dGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zSFRNTEZv cm1FbGVtZW50U0goYURhdGEpOwogIH0KfTsKCgoKCmNsYXNzIG5zSFRNTFNlbGVjdEVsZW1lbnRT SCA6IHB1YmxpYyBuc0hUTUxFbGVtZW50U0gKewpwcm90ZWN0ZWQ6CiAgbnNIVE1MU2VsZWN0RWxl bWVudFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNIVE1MRWxlbWVudFNIKGFEYXRh KQogIHsKICB9CgogIHZpcnR1YWwgfm5zSFRNTFNlbGVjdEVsZW1lbnRTSCgpCiAgewogIH0KCnB1 YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWRO YXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBK U09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLAogICAgICAgICAgICAgICAgICAgICAg ICAgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5KG5zSVhQ Q29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAg ICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wg Kl9yZXR2YWwpOwoKICBzdGF0aWMgbnNyZXN1bHQgU2V0T3B0aW9uKEpTQ29udGV4dCAqY3gsIGpz dmFsICp2cCwgUFJVaW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ RE9NTlNIVE1MT3B0aW9uQ29sbGVjdGlvbiAqYU9wdENvbGxlY3Rpb24pOwoKICBzdGF0aWMgbnNJ Q2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJl dHVybiBuZXcgbnNIVE1MU2VsZWN0RWxlbWVudFNIKGFEYXRhKTsKICB9Cn07CgoKCgoKY2xhc3Mg bnNIVE1MRXh0ZXJuYWxPYmpTSCA6IHB1YmxpYyBuc0hUTUxFbGVtZW50U0gKewpwcm90ZWN0ZWQ6 CiAgbnNIVE1MRXh0ZXJuYWxPYmpTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zSFRN TEVsZW1lbnRTSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc0hUTUxFeHRlcm5hbE9ialNI KCkKICB7CiAgfQoKICBuc3Jlc3VsdCBHZXRQbHVnaW5JbnN0YW5jZShuc0lYUENvbm5lY3RXcmFw cGVkTmF0aXZlICphV3JhcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQbHVn aW5JbnN0YW5jZSAqKmFSZXN1bHQpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsdWdpbkpTT2Jq ZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lQbHVnaW5JbnN0YW5jZSAqcGx1Z2luX2luc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9vYmosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9wcm90bykgPSAw OwoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgUG9zdENyZWF0ZShuc0lYUENvbm5lY3RXcmFw cGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAg ICBKU09iamVjdCAqb2JqKTsKfTsKCgoKCmNsYXNzIG5zSFRNTEFwcGxldEVsZW1lbnRTSCA6IHB1 YmxpYyBuc0hUTUxFeHRlcm5hbE9ialNICnsKcHJvdGVjdGVkOgogIG5zSFRNTEFwcGxldEVsZW1l bnRTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zSFRNTEV4dGVybmFsT2JqU0goYURh dGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNIVE1MQXBwbGV0RWxlbWVudFNIKCkKICB7CiAgfQoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsdWdpbkpTT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTT2Jq ZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQbHVnaW5J bnN0YW5jZSAqcGx1Z2luX2luc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBKU09iamVjdCAqKnBsdWdpbl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBKU09iamVjdCAqKnBsdWdpbl9wcm90byk7CgpwdWJsaWM6CiAgc3RhdGljIG5zSUNsYXNz SW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4g bmV3IG5zSFRNTEFwcGxldEVsZW1lbnRTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNIVE1M UGx1Z2luT2JqRWxlbWVudFNIIDogcHVibGljIG5zSFRNTEFwcGxldEVsZW1lbnRTSAp7CnByb3Rl Y3RlZDoKICBuc0hUTUxQbHVnaW5PYmpFbGVtZW50U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0 YSkgOiBuc0hUTUxBcHBsZXRFbGVtZW50U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNI VE1MUGx1Z2luT2JqRWxlbWVudFNIKCkKICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBs dWdpbkpTT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lQbHVnaW5JbnN0YW5jZSAqcGx1Z2luX2luc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9vYmos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9w cm90byk7CgpwdWJsaWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdSZXNvbHZlKG5zSVhQQ29ubmVj dFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAg ICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBmbGFncywKICAgICAgICAg ICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwLCBQUkJvb2wgKl9yZXR2YWwpOwoKICBzdGF0 aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsK ICAgIHJldHVybiBuZXcgbnNIVE1MUGx1Z2luT2JqRWxlbWVudFNIKGFEYXRhKTsKICB9Cn07CgoK CgpjbGFzcyBuc0hUTUxPcHRpb25Db2xsZWN0aW9uU0ggOiBwdWJsaWMgbnNIVE1MQ29sbGVjdGlv blNICnsKcHJvdGVjdGVkOgogIG5zSFRNTE9wdGlvbkNvbGxlY3Rpb25TSChuc0RPTUNsYXNzSW5m b0RhdGEqIGFEYXRhKSA6IG5zSFRNTENvbGxlY3Rpb25TSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0 dWFsIH5uc0hUTUxPcHRpb25Db2xsZWN0aW9uU0goKQogIHsKICB9CgpwdWJsaWM6CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVy LCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwg anN2YWwgaWQsIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNz SW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4g bmV3IG5zSFRNTE9wdGlvbkNvbGxlY3Rpb25TSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNQ bHVnaW5TSCA6IHB1YmxpYyBuc05hbWVkQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc1BsdWdpblNI KG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEpCiAgewog IH0KCiAgdmlydHVhbCB+bnNQbHVnaW5TSCgpCiAgewogIH0KCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldEl0ZW1BdChuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgUFJVaW50MzIgYUluZGV4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgY29uc3QgbnNBU3Ry aW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAq KmFSZXN1bHQpOwoKcHVibGljOgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9N Q2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc1BsdWdpblNIKGFEYXRh KTsKICB9Cn07CgoKCgpjbGFzcyBuc1BsdWdpbkFycmF5U0ggOiBwdWJsaWMgbnNOYW1lZEFycmF5 U0gKewpwcm90ZWN0ZWQ6CiAgbnNQbHVnaW5BcnJheVNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURh dGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNQbHVnaW5B cnJheVNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXRlbUF0KG5zSVN1cHBv cnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZWRJ dGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcmIGFOYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7CgpwdWJsaWM6 CiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0 YSkKICB7CiAgICByZXR1cm4gbmV3IG5zUGx1Z2luQXJyYXlTSChhRGF0YSk7CiAgfQp9OwoKCgoK Y2xhc3MgbnNNaW1lVHlwZUFycmF5U0ggOiBwdWJsaWMgbnNOYW1lZEFycmF5U0gKewpwcm90ZWN0 ZWQ6CiAgbnNNaW1lVHlwZUFycmF5U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc05h bWVkQXJyYXlTSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc01pbWVUeXBlQXJyYXlTSCgp CiAgewogIH0KCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEl0ZW1BdChuc0lTdXBwb3J0cyAqYU5h dGl2ZSwgUFJVaW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1 cHBvcnRzICoqYVJlc3VsdCk7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lT dXBwb3J0cyAqYU5hdGl2ZSwgY29uc3QgbnNBU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpOwoKcHVibGljOgogIHN0YXRp YyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewog ICAgcmV0dXJuIG5ldyBuc01pbWVUeXBlQXJyYXlTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3Mg bnNTdHJpbmdBcnJheVNIIDogcHVibGljIG5zRE9NQ2xhc3NJbmZvCnsKcHJvdGVjdGVkOgogIG5z U3RyaW5nQXJyYXlTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zRE9NQ2xhc3NJbmZv KGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zU3RyaW5nQXJyYXlTSCgpCiAgewogIH0KCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRTdHJpbmdBdChuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgUFJJbnQz MiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFSZXN1 bHQpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAg ICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9y ZXR2YWwpOwp9OwoKCgoKY2xhc3MgbnNIaXN0b3J5U0ggOiBwdWJsaWMgbnNTdHJpbmdBcnJheVNI CnsKcHJvdGVjdGVkOgogIG5zSGlzdG9yeVNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDog bnNTdHJpbmdBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zSGlzdG9yeVNIKCkK ICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmluZ0F0KG5zSVN1cHBvcnRzICphTmF0 aXZlLCBQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0 cmluZyYgYVJlc3VsdCk7CgpwdWJsaWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0eShu c0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAg ICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwgUFJC b29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFz c0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zSGlzdG9yeVNIKGFEYXRhKTsK ICB9Cn07CgoKCgpjbGFzcyBuc01lZGlhTGlzdFNIIDogcHVibGljIG5zU3RyaW5nQXJyYXlTSAp7 CnByb3RlY3RlZDoKICBuc01lZGlhTGlzdFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDog bnNTdHJpbmdBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zTWVkaWFMaXN0U0go KQogIHsKICB9CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RyaW5nQXQobnNJU3VwcG9ydHMgKmFO YXRpdmUsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNB U3RyaW5nJiBhUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0 ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNNZWRpYUxp c3RTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNTdHlsZVNoZWV0TGlzdFNIIDogcHVibGlj IG5zQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc1N0eWxlU2hlZXRMaXN0U0gobnNET01DbGFzc0lu Zm9EYXRhKiBhRGF0YSkgOiBuc0FycmF5U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNT dHlsZVNoZWV0TGlzdFNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXRlbUF0 KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJ Q2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJl dHVybiBuZXcgbnNTdHlsZVNoZWV0TGlzdFNIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0NT U1ZhbHVlTGlzdFNIIDogcHVibGljIG5zQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc0NTU1ZhbHVl TGlzdFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNBcnJheVNIKGFEYXRhKQogIHsK ICB9CgogIHZpcnR1YWwgfm5zQ1NTVmFsdWVMaXN0U0goKQogIHsKICB9CgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRJdGVtQXQobnNJU3VwcG9ydHMgKmFOYXRpdmUsIFBSVWludDMyIGFJbmRleCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpOwoKcHVi bGljOgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSog YURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc0NTU1ZhbHVlTGlzdFNIKGFEYXRhKTsKICB9Cn07 CgoKCgpjbGFzcyBuc0NTU1N0eWxlRGVjbFNIIDogcHVibGljIG5zU3RyaW5nQXJyYXlTSAp7CnBy b3RlY3RlZDoKICBuc0NTU1N0eWxlRGVjbFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDog bnNTdHJpbmdBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zQ1NTU3R5bGVEZWNs U0goKQogIHsKICB9CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RyaW5nQXQobnNJU3VwcG9ydHMg KmFOYXRpdmUsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNBU3RyaW5nJiBhUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0Ny ZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNDU1NT dHlsZURlY2xTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNDU1NSdWxlTGlzdFNIIDogcHVi bGljIG5zQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc0NTU1J1bGVMaXN0U0gobnNET01DbGFzc0lu Zm9EYXRhKiBhRGF0YSkgOiBuc0FycmF5U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnND U1NSdWxlTGlzdFNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXRlbUF0KG5z SVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJQ2xh c3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVy biBuZXcgbnNDU1NSdWxlTGlzdFNIKGFEYXRhKTsKICB9Cn07CiMgMTEzMCAibnNET01DbGFzc0lu Zm8uaCIKY2xhc3MgbnNFdmVudExpc3RlbmVyVGhpc1RyYW5zbGF0b3IgOiBwdWJsaWMgbnNJWFBD RnVuY3Rpb25UaGlzVHJhbnNsYXRvcgp7CnB1YmxpYzoKICBuc0V2ZW50TGlzdGVuZXJUaGlzVHJh bnNsYXRvcigpCiAgewogIH0KCiAgdmlydHVhbCB+bnNFdmVudExpc3RlbmVyVGhpc1RyYW5zbGF0 b3IoKQogIHsKICB9CgoKICBwdWJsaWM6IHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2Uo Y29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpOyB2aXJ0dWFsIG5zcmVmY250 IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpOyBwcm90ZWN0ZWQ6 IG5zQXV0b1JlZkNudCBtUmVmQ250OyBwdWJsaWM6CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRyYW5z bGF0ZVRoaXMobnNJU3VwcG9ydHMgKmFJbml0aWFsVGhpcywgbnNJSW50ZXJmYWNlSW5mbyAqYUlu dGVyZmFjZUluZm8sIFBSVWludDE2IGFNZXRob2RJbmRleCwgUFJCb29sICphSGlkZUZpcnN0UGFy YW1Gcm9tSlMsIG5zSUlEICogKmFJSURPZlJlc3VsdCwgbnNJU3VwcG9ydHMgKipfcmV0dmFsKTsK fTsKCgp2b2lkIEludmFsaWRhdGVDb250ZXh0QW5kV3JhcHBlckNhY2hlKCk7CiMgNDIgIm5zRE9N Q2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NSVC5o IiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NSVC5oIgojIDEgIi92YXIv dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3Bsc3RyLmgiIDEKIyA2MSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVy biBQUlVpbnQzMgpQTF9zdHJsZW4oY29uc3QgY2hhciAqc3RyKTsKIyA3OSAiL3Zhci90bXAvcG9y dGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIu aCIKZXh0ZXJuIFBSVWludDMyClBMX3N0cm5sZW4oY29uc3QgY2hhciAqc3RyLCBQUlVpbnQzMiBt YXgpOwojIDkwICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNweShjaGFyICpk ZXN0LCBjb25zdCBjaGFyICpzcmMpOwojIDEwMyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg KgpQTF9zdHJuY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsK IyAxMjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNweXooY2hhciAqZGVz dCwgY29uc3QgY2hhciAqc3JjLCBQUlVpbnQzMiBtYXgpOwojIDE0MCAiL3Zhci90bXAvcG9ydGFn ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIK ZXh0ZXJuIGNoYXIgKgpQTF9zdHJkdXAoY29uc3QgY2hhciAqcyk7CgoKCgoKCgpleHRlcm4gdm9p ZApQTF9zdHJmcmVlKGNoYXIgKnMpOwojIDE2NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg KgpQTF9zdHJuZHVwKGNvbnN0IGNoYXIgKnMsIFBSVWludDMyIG1heCk7CiMgMTc2ICIvdmFyL3Rt cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w bHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNy Yyk7CiMgMTkxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5jYXQoY2hhciAq ZHN0LCBjb25zdCBjaGFyICpzcmMsIFBSVWludDMyIG1heCk7CiMgMjA1ICIvdmFyL3RtcC9wb3J0 YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5o IgpleHRlcm4gY2hhciAqClBMX3N0cmNhdG4oY2hhciAqZHN0LCBQUlVpbnQzMiBtYXgsIGNvbnN0 IGNoYXIgKnNyYyk7CiMgMjE3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gUFJJbnRuClBMX3N0cmNt cChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKIyAyMzEgIi92YXIvdG1wL3BvcnRhZ2Uv bW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4 dGVybiBQUkludG4KUExfc3RybmNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCBQUlVp bnQzMiBtYXgpOwojIDI0MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJjYXNl Y21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOwojIDI1NSAiL3Zhci90bXAvcG9ydGFn ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIK ZXh0ZXJuIFBSSW50bgpQTF9zdHJuY2FzZWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpi LCBQUlVpbnQzMiBtYXgpOwojIDI2NiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93 b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9z dHJjaHIoY29uc3QgY2hhciAqcywgY2hhciBjKTsKIyAyNzcgIi92YXIvdG1wL3BvcnRhZ2UvbW96 aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVy biBjaGFyICoKUExfc3RycmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMpOwojIDI4OSAiL3Zhci90 bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYywg UFJVaW50MzIgbik7CiMgMzAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5y Y2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYywgUFJVaW50MzIgbik7CiMgMzE3ICIvdmFyL3RtcC9w b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0 ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnBicmsoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAq bGlzdCk7CiMgMzI4ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnByYnJrKGNv bnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QpOwojIDMzOSAiL3Zhci90bXAvcG9ydGFnZS9t b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0 ZXJuIGNoYXIgKgpQTF9zdHJucGJyayhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpsaXN0LCBQ UlVpbnQzMiBuKTsKIyAzNTAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnBy YnJrKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QsIFBSVWludDMyIG4pOwojIDM2MCAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJzdHIoY29uc3QgY2hhciAqYmlnLCBj b25zdCBjaGFyICpsaXR0bGUpOwojIDM3MCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQ TF9zdHJyc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlKTsKIyAzODEgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnN0cihjb25zdCBjaGFyICpiaWcsIGNv bnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbik7CiMgMzkyICIvdmFyL3RtcC9wb3J0YWdlL21v emlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRl cm4gY2hhciAqClBMX3N0cm5yc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxl LCBQUlVpbnQzMiBtYXgpOwojIDQwMiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93 b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9z dHJjYXNlc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlKTsKIyA0MTIgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY2FzZXJzdHIoY29uc3QgY2hhciAqYmln LCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDQyMyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg KgpQTF9zdHJuY2FzZXN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJV aW50MzIgbWF4KTsKIyA0MzQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNh c2Vyc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlLCBQUlVpbnQzMiBtYXgp OwojIDQ1NiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJ0b2tfcihjaGFyICpz MSwgY29uc3QgY2hhciAqczIsIGNoYXIgKipsYXN0cyk7CgoKCgoKCgp9CiMgNDMgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NSVC5oIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIgMQojIDIzICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIKIyAxICIvdXNyL2xpYi9nY2MtbGli L2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNy L2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDMK IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3lz bGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1n bnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMyICIvdXNyL2xpYi9nY2MtbGliL2k1 ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvbGltaXRzLmgiIDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRz L3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMK IyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv bGludXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIg MiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vz ci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJf bGltLmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNy L2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hv cGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1 ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUv Yml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEg MwojIDEzNyAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9p bmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMzMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9p NTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vz ci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2xpbWl0cy5oIiAy IDMKIyAyNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ3BwU2hhcmVkQWxsb2NhdG9y LmgiIDIKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIG5zQ3BwU2hhcmVkQWxsb2NhdG9yCgoK CgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVk ZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90 eXBlOwoKICAgICAgdHlwZWRlZiBUKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IFQqIGNv bnN0X3BvaW50ZXI7CgogICAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBj b25zdCBUJiBjb25zdF9yZWZlcmVuY2U7CgoKCiAgICAgIG5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkg eyB9CgoKCgoKCiAgICAgfm5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkgeyB9CgoKICAgICAgcG9pbnRl cgogICAgICBhZGRyZXNzKCByZWZlcmVuY2UgciApIGNvbnN0CiAgICAgICAgewogICAgICAgICAg cmV0dXJuICZyOwogICAgICAgIH0KCiAgICAgIGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcygg Y29uc3RfcmVmZXJlbmNlIHIgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAmcjsK ICAgICAgICB9CgogICAgICBwb2ludGVyCiAgICAgIGFsbG9jYXRlKCBzaXplX3R5cGUgbiwgY29u c3Qgdm9pZCogPTAgKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0 PCBwb2ludGVyID4obnNNZW1vcnk6OkFsbG9jKHN0YXRpY19jYXN0PCBQUlVpbnQzMiA+KG4qc2l6 ZW9mKFQpKSkpOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZSggcG9pbnRl ciBwLCBzaXplX3R5cGUgKQogICAgICAgIHsKICAgICAgICAgIG5zTWVtb3J5OjpGcmVlKHApOwog ICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgY29uc3RydWN0KCBwb2ludGVyIHAsIGNvbnN0IFQm IHZhbCApCiAgICAgICAgewogICAgICAgICAgbmV3IChwKSBUKHZhbCk7CiAgICAgICAgfQoKICAg ICAgdm9pZAogICAgICBkZXN0cm95KCBwb2ludGVyIHAgKQogICAgICAgIHsKICAgICAgICAgIHAt Pn5UKCk7CiAgICAgICAgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QK ICAgICAgICB7CgoKCiAgICAgICAgICByZXR1cm4gKDIxNDc0ODM2NDdMICogMlVMICsgMSkgLyBz aXplb2YoVCk7CgogICAgICAgIH0KIyAxMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c0NwcFNoYXJlZEFsbG9jYXRvci5oIgogIH07CgoKdGVtcGxhdGUgPGNsYXNzIFQ+ClBSQm9vbApv cGVyYXRvcj09KCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNvbnN0IG5zQ3BwU2hh cmVkQWxsb2NhdG9yPFQ+JiApCiAgewogICAgcmV0dXJuIDE7CiAgfQoKdGVtcGxhdGUgPGNsYXNz IFQ+ClBSQm9vbApvcGVyYXRvciE9KCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNv bnN0IG5zQ3BwU2hhcmVkQWxsb2NhdG9yPFQ+JiApCiAgewogICAgcmV0dXJuIDA7CiAgfQojIDQ2 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDUlQuaCIgMgojIDYyICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNDUlQuaCIKZXh0ZXJuIGNvbnN0IFBSVW5pY2hhciBrSXNvTGF0 aW4xVG9VQ1MyWzI1Nl07CiMgMTAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDUlQu aCIKY2xhc3MgbnNDUlQgewpwdWJsaWM6CiAgZW51bSB7CiAgICBUQUI9J1x0JyAsCiAgICBMRj0n XG4nICwKICAgIFZUQUI9J1x2JyAsCiAgICBGRj0nXGYnICwKICAgIENSPSdccicKICB9OwojIDEz NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ1JULmgiCiAgc3RhdGljIFBSVWludDMy IHN0cmxlbihjb25zdCBjaGFyKiBzKSB7CiAgICByZXR1cm4gUFJVaW50MzIoOjpzdHJsZW4ocykp OwogIH0KCgogIHN0YXRpYyBQUkludDMyIHN0cmNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hh ciogczIpIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0cmNtcChzMSwgczIpKTsKICB9CgogIHN0 YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLAogICAg ICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYU1heExlbikgewogICAgcmV0dXJuIFBSSW50 MzIoUExfc3RybmNtcChzMSwgczIsIGFNYXhMZW4pKTsKICB9CgoKICBzdGF0aWMgUFJJbnQzMiBz dHJjYXNlY21wKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMikgewogICAgcmV0dXJuIFBS SW50MzIoUExfc3RyY2FzZWNtcChzMSwgczIpKTsKICB9CgoKICBzdGF0aWMgUFJJbnQzMiBzdHJu Y2FzZWNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIsIFBSVWludDMyIGFNYXhMZW4p IHsKICAgIFBSSW50MzIgcmVzdWx0PVBSSW50MzIoUExfc3RybmNhc2VjbXAoczEsIHMyLCBhTWF4 TGVuKSk7CgoKICAgIGlmIChyZXN1bHQ8MCkKICAgICAgcmVzdWx0PS0xOwogICAgcmV0dXJuIHJl c3VsdDsKICB9CgogIHN0YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgY2hhciogczEsIGNvbnN0 IGNoYXIqIHMyLCBQUkludDMyIGFNYXhMZW4pIHsKCiAgICBQUkludDMyIGRpZmYgPSAoKGNvbnN0 IHVuc2lnbmVkIGNoYXIqKXMxKVswXSAtICgoY29uc3QgdW5zaWduZWQgY2hhciopczIpWzBdOwog ICAgaWYgKGRpZmYgIT0gMCkgcmV0dXJuIGRpZmY7CiAgICByZXR1cm4gUFJJbnQzMihQTF9zdHJu Y21wKHMxLHMyLHVuc2lnbmVkKGFNYXhMZW4pKSk7CiAgfQoKICBzdGF0aWMgY2hhciogc3RyZHVw KGNvbnN0IGNoYXIqIHN0cikgewogICAgcmV0dXJuIFBMX3N0cmR1cChzdHIpOwogIH0KCiAgc3Rh dGljIGNoYXIqIHN0cm5kdXAoY29uc3QgY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pIHsKICAgIHJl dHVybiBQTF9zdHJuZHVwKHN0ciwgbGVuKTsKICB9CgogIHN0YXRpYyB2b2lkIGZyZWUoY2hhciog c3RyKSB7CiAgICBQTF9zdHJmcmVlKHN0cik7CiAgfQojIDIwMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29tL25zQ1JULmgiCiAgc3RhdGljIGNoYXIqIHN0cnRvayhjaGFyKiBzdHIsIGNvbnN0 IGNoYXIqIGRlbGltcywgY2hhciogKm5ld1N0cik7CgoKICBzdGF0aWMgUFJVaW50MzIgc3RybGVu KGNvbnN0IFBSVW5pY2hhciogcyk7CgoKICBzdGF0aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgUFJV bmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMyIHN0cm5j bXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAg ICAgICAgICAgICAgIFBSVWludDMyIGFNYXhMZW4pOwoKCgogIHN0YXRpYyBQUlVuaWNoYXIqIHN0 cmR1cChjb25zdCBQUlVuaWNoYXIqIHN0cik7CgoKCiAgc3RhdGljIFBSVW5pY2hhciogc3RybmR1 cChjb25zdCBQUlVuaWNoYXIqIHN0ciwgUFJVaW50MzIgbGVuKTsKCiAgc3RhdGljIHZvaWQgZnJl ZShQUlVuaWNoYXIqIHN0cikgewogICAgICAgIG5zQ3BwU2hhcmVkQWxsb2NhdG9yPFBSVW5pY2hh cj4gc2hhcmVkX2FsbG9jYXRvcjsKICAgICAgICBzaGFyZWRfYWxsb2NhdG9yLmRlYWxsb2NhdGUo c3RyLCAwICk7CiAgfQoKCgogIHN0YXRpYyBQUlVpbnQzMiBIYXNoQ29kZShjb25zdCBjaGFyKiBz dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyKiByZXN1bHRpbmdTdHJMZW4g PSAwKTsKCgoKICBzdGF0aWMgUFJVaW50MzIgSGFzaENvZGUoY29uc3QgUFJVbmljaGFyKiBzdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyKiByZXN1bHRpbmdTdHJMZW4gPSAw KTsKCgoKCiAgc3RhdGljIFBSVWludDMyIEhhc2hDb2RlQXNVVEY4KGNvbnN0IFBSVW5pY2hhciog c3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiogcmVzdWx0aW5n U3RyTGVuID0gMCk7CgoKICBzdGF0aWMgUFJVaW50MzIgQnVmZmVySGFzaENvZGUoY29uc3QgY2hh ciogc3RyLCBQUlVpbnQzMiBzdHJMZW4pOwoKCiAgc3RhdGljIFBSVWludDMyIEJ1ZmZlckhhc2hD b2RlKGNvbnN0IFBSVW5pY2hhciogc3RyLCBQUlVpbnQzMiBzdHJMZW4pOwoKCiAgc3RhdGljIFBS SW50NjQgYXRvbGwoY29uc3QgY2hhciAqc3RyKTsKCiAgc3RhdGljIGNoYXIgVG9VcHBlcihjaGFy IGFDaGFyKTsKCiAgc3RhdGljIGNoYXIgVG9Mb3dlcihjaGFyIGFDaGFyKTsKCiAgc3RhdGljIFBS Qm9vbCBJc1VwcGVyKGNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29sIElzTG93ZXIoY2hhciBh Q2hhcik7CgogIHN0YXRpYyBQUkJvb2wgSXNBc2NpaShQUlVuaWNoYXIgYUNoYXIpOwogIHN0YXRp YyBQUkJvb2wgSXNBc2NpaShjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcpOwogIHN0YXRpYyBQUkJv b2wgSXNBc2NpaUFscGhhKFBSVW5pY2hhciBhQ2hhcik7CiAgc3RhdGljIFBSQm9vbCBJc0FzY2lp RGlnaXQoUFJVbmljaGFyIGFDaGFyKTsKICBzdGF0aWMgUFJCb29sIElzQXNjaWlTcGFjZShQUlVu aWNoYXIgYUNoYXIpOwogIHN0YXRpYyBQUkJvb2wgSXNBc2NpaShjb25zdCBjaGFyKiBhU3RyaW5n KTsKfTsKIyA0MyAibnNET01DbGFzc0luZm8uY3BwIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lDYXRlZ29yeU1hbmFnZXIuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJQ2F0ZWdvcnlNYW5hZ2VyLmgiCmNsYXNzIG5zSUNhdGVnb3J5TWFuYWdl ciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMjc1YjJjZCwgMHhhZjZkLCAw eDQyOWEsIHsgMHg4MCwgMHhkNywgMHhmMCwgMHhjNSwgMHgxMiwgMHgwMywgMHg0MiwgMHhhYyB9 fTsgcmV0dXJuIGlpZDt9CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDYXRl Z29yeU1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhdGVnb3J5RW50cnkoY29uc3Qg Y2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICphRW50cnksIGNoYXIgKipfcmV0dmFsKSA9IDA7 CiMgNTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDYXRlZ29yeU1hbmFnZXIuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IEFkZENhdGVnb3J5RW50cnkoY29uc3QgY2hhciAqYUNhdGVnb3J5 LCBjb25zdCBjaGFyICphRW50cnksIGNvbnN0IGNoYXIgKmFWYWx1ZSwgUFJCb29sIGFQZXJzaXN0 LCBQUkJvb2wgYVJlcGxhY2UsIGNoYXIgKipfcmV0dmFsKSA9IDA7CiMgNjIgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0lDYXRlZ29yeU1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0 IERlbGV0ZUNhdGVnb3J5RW50cnkoY29uc3QgY2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICph RW50cnksIFBSQm9vbCBhUGVyc2lzdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERl bGV0ZUNhdGVnb3J5KGNvbnN0IGNoYXIgKmFDYXRlZ29yeSkgPSAwOwoKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgRW51bWVyYXRlQ2F0ZWdvcnkoY29uc3QgY2hhciAqYUNhdGVnb3J5LCBuc0lTaW1w bGVFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW51 bWVyYXRlQ2F0ZWdvcmllcyhuc0lTaW1wbGVFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKfTsK IyA0NSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zSUNvbXBvbmVudFJlZ2lzdHJhci5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbS9uc0lDb21wb25lbnRSZWdpc3RyYXIuaCIKY2xhc3MgbnNJRmlsZTsKCmNsYXNzIG5z SUZhY3Rvcnk7CgpjbGFzcyBuc0lTaW1wbGVFbnVtZXJhdG9yOwojIDMxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCmNsYXNzIG5zSUNvbXBvbmVu dFJlZ2lzdHJhciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyNDE3Y2JmZSwg MHg2NWFkLCAweDQ4YTYsIHsgMHhiNCwgMHhiNiwgMHhlYiwgMHg4NCwgMHhkYiwgMHgxNywgMHg0 MywgMHg5MiB9fTsgcmV0dXJuIGlpZDt9CiMgNTkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lDb21wb25lbnRSZWdpc3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEF1dG9SZWdpc3Rl cihuc0lGaWxlICphU3BlYykgPSAwOwojIDc4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRvVW5yZWdpc3Rl cihuc0lGaWxlICphU3BlYykgPSAwOwojIDk0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckZhY3Rv cnkoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNo YXIgKmFDb250cmFjdElELCBuc0lGYWN0b3J5ICphRmFjdG9yeSkgPSAwOwojIDEwOSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudFJlZ2lzdHJhci5oIgogIHZpcnR1YWwg bnNyZXN1bHQgVW5yZWdpc3RlckZhY3RvcnkoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIG5zSUZhY3Rv cnkgKmFGYWN0b3J5KSA9IDA7CiMgMTM1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ Q29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckZhY3RvcnlM b2NhdGlvbihjb25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29u c3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zSUZpbGUgKmFGaWxlLCBjb25zdCBjaGFyICphTG9hZGVy U3RyLCBjb25zdCBjaGFyICphVHlwZSkgPSAwOwojIDE0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUNvbXBvbmVudFJlZ2lzdHJhci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgVW5yZWdp c3RlckZhY3RvcnlMb2NhdGlvbihjb25zdCBuc0NJRCAmIGFDbGFzcywgbnNJRmlsZSAqYUZpbGUp ID0gMDsKIyAxNjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRSZWdp c3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IElzQ0lEUmVnaXN0ZXJlZChjb25zdCBuc0NJRCAm IGFDbGFzcywgUFJCb29sICpfcmV0dmFsKSA9IDA7CiMgMTczICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0Nv bnRyYWN0SURSZWdpc3RlcmVkKGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBQUkJvb2wgKl9yZXR2 YWwpID0gMDsKIyAxODUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRS ZWdpc3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZUNJRHMobnNJU2ltcGxlRW51 bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKIyAxOTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv bS9uc0lDb21wb25lbnRSZWdpc3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZUNv bnRyYWN0SURzKG5zSVNpbXBsZUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CiMgMjA4ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBDSURUb0NvbnRyYWN0SUQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNoYXIgKipf cmV0dmFsKSA9IDA7CiMgMjE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9u ZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb250cmFjdElEVG9DSUQoY29uc3Qg Y2hhciAqYUNvbnRyYWN0SUQsIG5zQ0lEICogKl9yZXR2YWwpID0gMDsKCn07CiMgNDYgIm5zRE9N Q2xhc3NJbmZvLmNwcCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3Vw cG9ydHNQcmltaXRpdmVzLmgiIDEKIyAzMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpjbGFzcyBuc0lTdXBwb3J0c1ByaW1pdGl2ZSA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkMGQ0YjEzNiwgMHgxZGQxLCAweDExYjIsIHsg MHg5MywgMHg3MSwgMHhmMCwgMHg3MiwgMHg3ZSwgMHhmOCwgMHgyNywgMHhjMCB9fTsgcmV0dXJu IGlpZDt9CgogIGVudW0geyBUWVBFX0lEID0gMVUgfTsKCiAgZW51bSB7IFRZUEVfQ1NUUklORyA9 IDJVIH07CgogIGVudW0geyBUWVBFX1NUUklORyA9IDNVIH07CgogIGVudW0geyBUWVBFX1BSQk9P TCA9IDRVIH07CgogIGVudW0geyBUWVBFX1BSVUlOVDggPSA1VSB9OwoKICBlbnVtIHsgVFlQRV9Q UlVJTlQxNiA9IDZVIH07CgogIGVudW0geyBUWVBFX1BSVUlOVDMyID0gN1UgfTsKCiAgZW51bSB7 IFRZUEVfUFJVSU5UNjQgPSA4VSB9OwoKICBlbnVtIHsgVFlQRV9QUlRJTUUgPSA5VSB9OwoKICBl bnVtIHsgVFlQRV9DSEFSID0gMTBVIH07CgogIGVudW0geyBUWVBFX1BSSU5UMTYgPSAxMVUgfTsK CiAgZW51bSB7IFRZUEVfUFJJTlQzMiA9IDEyVSB9OwoKICBlbnVtIHsgVFlQRV9QUklOVDY0ID0g MTNVIH07CgogIGVudW0geyBUWVBFX0ZMT0FUID0gMTRVIH07CgogIGVudW0geyBUWVBFX0RPVUJM RSA9IDE1VSB9OwoKICBlbnVtIHsgVFlQRV9WT0lEID0gMTZVIH07CgogIGVudW0geyBUWVBFX0lO VEVSRkFDRV9QT0lOVEVSID0gMTdVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUoUFJV aW50MTYgKmFUeXBlKSA9IDA7Cgp9OwojIDEzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L25zSVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpjbGFzcyBuc0lTdXBwb3J0c0lEIDogcHVibGljIG5z SVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQxODI5MGEwLCAweDRhMWMsIDB4MTFk MywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyBy ZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShuc0lEICogKmFEYXRhKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREYXRhKGNvbnN0IG5zSUQgKiBhRGF0YSkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAy MzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIK Y2xhc3MgbnNJU3VwcG9ydHNDU3RyaW5nIDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGQ2NWZmMjcwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAw LCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RGF0YShuc0FDU3RyaW5nICYgYURhdGEpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldERhdGEoY29uc3QgbnNBQ1N0cmluZyAmIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDMyMyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpjbGFzcyBuc0lT dXBwb3J0c1N0cmluZyA6IHB1YmxpYyBuc0lTdXBwb3J0c1ByaW1pdGl2ZSB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHhkNzlkYzk3MCwgMHg0YTFjLCAweDExZDMsIHsgMHg5OCwgMHg5MCwgMHgwMCwgMHg2MCwgMHgw OCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldERhdGEobnNBU3RyaW5nICYgYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERh dGEoY29uc3QgbnNBU3RyaW5nICYgYURhdGEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9T dHJpbmcoUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyA0MTggIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQ UkJvb2wgOiBwdWJsaWMgbnNJU3VwcG9ydHNQcmltaXRpdmUgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZGRjM2I0 OTAsIDB4NGExYywgMHgxMWQzLCB7IDB4OTgsIDB4OTAsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYs IDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREYXRh KFBSQm9vbCAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERhdGEoUFJCb29sIGFE YXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9 IDA7Cgp9OwojIDUxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzUHJp bWl0aXZlcy5oIgpjbGFzcyBuc0lTdXBwb3J0c1BSVWludDggOiBwdWJsaWMgbnNJU3VwcG9ydHNQ cmltaXRpdmUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZGVjMmU0ZTAsIDB4NGExYywgMHgxMWQzLCB7IDB4OTgs IDB4OTAsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7 fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREYXRhKFBSVWludDggKmFEYXRhKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXREYXRhKFBSVWludDggYURhdGEpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgVG9TdHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsKCn07CiMgNjAyICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNQcmltaXRpdmVzLmgiCmNsYXNzIG5zSVN1cHBv cnRzUFJVaW50MTYgOiBwdWJsaWMgbnNJU3VwcG9ydHNQcmltaXRpdmUgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 ZGZhY2IwOTAsIDB4NGExYywgMHgxMWQzLCB7IDB4OTgsIDB4OTAsIDB4MDAsIDB4NjAsIDB4MDgs IDB4OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXREYXRhKFBSVWludDE2ICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YShQ UlVpbnQxNiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoq X3JldHZhbCkgPSAwOwoKfTsKIyA2OTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lT dXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQUlVpbnQzMiA6IHB1YmxpYyBu c0lTdXBwb3J0c1ByaW1pdGl2ZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhlMDFkYzQ3MCwgMHg0YTFjLCAweDEx ZDMsIHsgMHg5OCwgMHg5MCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGEoUFJVaW50MzIgKmFEYXRh KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREYXRhKFBSVWludDMyIGFEYXRhKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDc4 NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpj bGFzcyBuc0lTdXBwb3J0c1BSVWludDY0IDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGUxMzU2N2MwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAw LCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RGF0YShQUlVpbnQ2NCAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldERhdGEoUFJVaW50NjQgYURhdGEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9T dHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsKCn07CiMgODc4ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vbnNJU3VwcG9ydHNQcmltaXRpdmVzLmgiCmNsYXNzIG5zSVN1cHBvcnRzUFJUaW1l IDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGUyNTYzNjMwLCAw eDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0 LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShQUlRp bWUgKmFEYXRhKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREYXRhKFBSVGltZSBhRGF0YSkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3JldHZhbCkgPSAwOwoK fTsKIyA5NzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2 ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNDaGFyIDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZl IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweGUyYjA1ZTQwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAw eDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0RGF0YShjaGFyICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0RGF0YShjaGFyIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5n KGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDEwNjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQUkludDE2IDog cHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGUzMGQ5NGIwLCAweDRh MWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAw eDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShQUkludDE2 ICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YShQUkludDE2IGFEYXRhKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9 OwojIDExNTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2 ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQUkludDMyIDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0 aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweGUzNmM1MjUwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkw LCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShQUkludDMyICphRGF0YSkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0RGF0YShQUkludDMyIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDEyNDcgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQ UkludDY0IDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGUzY2Iw ZmYwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2 LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0 YShQUkludDY0ICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YShQUkludDY0 IGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFs KSA9IDA7Cgp9OwojIDEzMzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0 c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNGbG9hdCA6IHB1YmxpYyBuc0lTdXBwb3J0 c1ByaW1pdGl2ZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhYmVhYTM5MCwgMHg0YWMwLCAweDExZDMsIHsgMHhi YSwgMHhlYSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHg1ZCwgMHhkNyB9fTsgcmV0dXJuIGlp ZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGEoZmxvYXQgKmFEYXRhKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXREYXRhKGZsb2F0IGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDE0MzEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9y dHNEb3VibGUgOiBwdWJsaWMgbnNJU3VwcG9ydHNQcmltaXRpdmUgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YjMy NTIzYTAsIDB4NGFjMCwgMHgxMWQzLCB7IDB4YmEsIDB4ZWEsIDB4MDAsIDB4ODAsIDB4NWYsIDB4 OGEsIDB4NWQsIDB4ZDcgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE YXRhKGRvdWJsZSAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERhdGEoZG91Ymxl IGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFs KSA9IDA7Cgp9OwojIDE1MjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0 c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNWb2lkIDogcHVibGljIG5zSVN1cHBvcnRz UHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDQ2NDQ4NGYwLCAweDU2OGQsIDB4MTFkMywgeyAweGJh LCAweGY4LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweDVkLCAweGQ3IH19OyByZXR1cm4gaWlk O30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YSh2b2lkICogKmFEYXRhKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXREYXRhKHZvaWQgKiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBUb1N0cmluZyhjaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxNjE1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNQcmltaXRpdmVzLmgiCmNsYXNzIG5zSVN1cHBv cnRzSW50ZXJmYWNlUG9pbnRlciA6IHB1YmxpYyBuc0lTdXBwb3J0c1ByaW1pdGl2ZSB7CiBwdWJs aWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp aWQgPSB7MHg5OTVlYTcyNCwgMHgxZGQxLCAweDExYjIsIHsgMHg5MiwgMHgxMSwgMHhjMiwgMHgx YiwgMHhkZCwgMHgzZSwgMHg3ZSwgMHhkMCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldERhdGEobnNJU3VwcG9ydHMgKiAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldERhdGEobnNJU3VwcG9ydHMgKiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXREYXRhSUlEKG5zSUQgKiAqYURhdGFJSUQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dERhdGFJSUQoY29uc3QgbnNJRCAqIGFEYXRhSUlEKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDQ4ICJuc0RPTUNsYXNzSW5mby5j cHAiIDIKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC9uc0lKU0NvbnRleHRT dGFjay5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJSlNDb250 ZXh0U3RhY2suaCIKY2xhc3MgbnNJSlNDb250ZXh0U3RhY2sgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4YzY3ZDgyNzAsIDB4MzE4OSwgMHgxMWQzLCB7IDB4OTgsIDB4ODUsIDB4 MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDb3VudChQUkludDMyICphQ291bnQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgUGVlayhKU0NvbnRleHQgKiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBQb3AoSlNDb250ZXh0ICogKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg UHVzaChKU0NvbnRleHQgKiBjeCkgPSAwOwoKfTsKIyAxMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbm5lY3QvbnNJSlNDb250ZXh0U3RhY2suaCIKY2xhc3MgbnNJVGhyZWFkSlNDb250ZXh0 U3RhY2sgOiBwdWJsaWMgbnNJSlNDb250ZXh0U3RhY2sgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTEzMzlhZTAs IDB4MDVjMSwgMHgxMWQ0LCB7IDB4OGYsIDB4OTIsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4 M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTYWZlSlND b250ZXh0KEpTQ29udGV4dCAqICphU2FmZUpTQ29udGV4dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0U2FmZUpTQ29udGV4dChKU0NvbnRleHQgKiBhU2FmZUpTQ29udGV4dCkgPSAwOwoKfTsK IyA1MCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lTY3JpcHRDb250ZXh0LmgiIDEKIyA0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lTY3JpcHRDb250ZXh0LmgiCmNsYXNzIG5zSVNjcmlwdEdsb2JhbE9iamVjdDsKY2xhc3MgbnNJ U2NyaXB0U2VjdXJpdHlNYW5hZ2VyOwpjbGFzcyBuc0lTY3JpcHRDb250ZXh0T3duZXI7CmNsYXNz IG5zSVByaW5jaXBhbDsKY2xhc3MgbnNJQXRvbTsKCnR5cGVkZWYgdm9pZCAoKm5zU2NyaXB0VGVy bWluYXRpb25GdW5jKShuc0lTdXBwb3J0cyogYVJlZik7CiMgNjYgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5oIgpjbGFzcyBuc0lTY3JpcHRDb250ZXh0IDogcHVi bGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4OGY2YmNhN2QsIDB4Y2U0MiwgMHgxMWQxLCB7 MHhiNywgMHgyNCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5MSwgMHhkOCwgMHhjOX0gfTsgcmV0dXJu IGlpZDt9CiMgODcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5o IgogIHZpcnR1YWwgbnNyZXN1bHQgRXZhbHVhdGVTdHJpbmcoY29uc3QgbnNBU3RyaW5nJiBhU2Ny aXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYVNjb3BlT2JqZWN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJpbmNpcGFsICphUHJpbmNpcGFsLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVVSTCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBSVWludDMyIGFMaW5lTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiBhVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmlu ZyYgYVJldFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhSXNVbmRl ZmluZWQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBFdmFsdWF0ZVN0cmluZ1dpdGhWYWx1ZShj b25zdCBuc0FTdHJpbmcmIGFTY3JpcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICphU2NvcGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lQcmluY2lwYWwgKmFQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICphVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJVaW50MzIgYUxpbmVObywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIqIGFWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCogYVJldFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJCb29sKiBhSXNVbmRlZmluZWQpID0gMDsKIyAxMjMgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGlsZVNj cmlwdChjb25zdCBQUlVuaWNoYXIqIGFUZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBQ UkludDMyIGFUZXh0TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhU2Nv cGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByaW5jaXBhbCogYVByaW5j aXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVVSTCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUxpbmVObywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciogYVZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQqKiBhU2NyaXB0T2JqZWN0KSA9IDA7CiMgMTQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSVNjcmlwdENvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEV4ZWN1dGVTY3JpcHQo dm9pZCogYVNjcmlwdE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYVNj b3BlT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcqIGFSZXRWYWx1 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhSXNVbmRlZmluZWQpID0gMDsK IyAxNzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5oIgogIHZp cnR1YWwgbnNyZXN1bHQgQ29tcGlsZUV2ZW50SGFuZGxlcih2b2lkKiBhVGFyZ2V0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhQm9keSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJCb29sIGFTaGFyZWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQqKiBhSGFuZGxlcikgPSAwOwojIDE5MSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDYWxsRXZlbnRI YW5kbGVyKHZvaWQqIGFUYXJnZXQsIHZvaWQqIGFIYW5kbGVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQUlVpbnQzMiBhcmdjLCB2b2lkKiBhcmd2LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQUkJvb2wqIGFCb29sUmVzdWx0LCBQUkJvb2wgYVJldmVyc2VSZXR1cm5SZXN1 bHQpID0gMDsKIyAyMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0Q29udGV4 dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQmluZENvbXBpbGVkRXZlbnRIYW5kbGVyKHZvaWQqIGFU YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYU5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUhhbmRsZXIp ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb21waWxlRnVuY3Rpb24odm9pZCogYVRhcmdldCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0NTdHJpbmcmIGFOYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFBcmdDb3VudCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogYUFyZ0FycmF5LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYUJvZHksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciogYVVSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ UlVpbnQzMiBhTGluZU5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU2hh cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiBhRnVuY3Rpb25PYmplY3Qp ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0TGFuZ3VhZ2VWZXJzaW9u KGNvbnN0IGNoYXIqIGFWZXJzaW9uKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEds b2JhbE9iamVjdChuc0lTY3JpcHRHbG9iYWxPYmplY3QqKiBhR2xvYmFsT2JqZWN0KSA9IDA7CgoK CgoKICB2aXJ0dWFsIHZvaWQqIEdldE5hdGl2ZUNvbnRleHQoKSA9IDA7CiMgMjUzICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdENvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0 IEluaXRDb250ZXh0KG5zSVNjcmlwdEdsb2JhbE9iamVjdCAqYUdsb2JhbE9iamVjdCkgPSAwOwoj IDI2MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBJc0NvbnRleHRJbml0aWFsaXplZCgpID0gMDsKCgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHQygpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VjdXJpdHlN YW5hZ2VyKG5zSVNjcmlwdFNlY3VyaXR5TWFuYWdlcioqIGFJbnN0YW5jZVB0cikgPSAwOwojIDI5 MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBTY3JpcHRFdmFsdWF0ZWQoUFJCb29sIGFUZXJtaW5hdGVkKSA9IDA7CgoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T3duZXIobnNJU2NyaXB0Q29udGV4dE93bmVyKiBvd25l cikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE93bmVyKG5zSVNjcmlwdENvbnRl eHRPd25lcioqIG93bmVyKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGVybWlu YXRpb25GdW5jdGlvbihuc1NjcmlwdFRlcm1pbmF0aW9uRnVuYyBhRnVuYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFSZWYpID0gMDsKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRzRW5hYmxlZChQUkJvb2wgKmFFbmFibGVkKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JpcHRzRW5hYmxlZChQUkJvb2wgYUVuYWJsZWQsIFBSQm9v bCBhRmlyZVRpbWVvdXRzKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb2Nlc3Np bmdTY3JpcHRUYWcoUFJCb29sICogYVJlc3VsdCkgPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQ cm9jZXNzaW5nU2NyaXB0VGFnKFBSQm9vbCBhUmVzdWx0KSA9MDsKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRHQ09uRGVzdHJ1Y3Rpb24oUFJCb29sIGFHQ09uRGVzdHJ1Y3Rpb24pID0gMDsKfTsK IyA1MSAibnNET01DbGFzc0luZm8uY3BwIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv c3RyaW5nL25zUmVhZGFibGVVdGlscy5oIiAxCiMgMzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu Zy9uc0FTdHJpbmdHZW5lcmF0b3IuaCIgMQojIDM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry aW5nL25zQVN0cmluZ0dlbmVyYXRvci5oIgpjbGFzcyBuc0FTdHJpbmc7CmNsYXNzIG5zQUNTdHJp bmc7CgpjbGFzcyBuc0FTdHJpbmdHZW5lcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1 YWwgfm5zQVN0cmluZ0dlbmVyYXRvcigpIHsgfQoKICAgICAgdmlydHVhbCBQUlVuaWNoYXIqIG9w ZXJhdG9yKCkoIFBSVW5pY2hhciogYURlc3RCdWZmZXIgKSBjb25zdCA9IDA7CiAgICAgIHZpcnR1 YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFsIFBSVWludDMyIE1h eExlbmd0aCgpIGNvbnN0ID0gMDsKICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbigg Y29uc3QgbnNBU3RyaW5nJiApIGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNBQ1N0cmluZ0dlbmVy YXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCB+bnNBQ1N0cmluZ0dlbmVyYXRvcigp IHsgfQoKICAgICAgdmlydHVhbCBjaGFyKiBvcGVyYXRvcigpKCBjaGFyKiBhRGVzdEJ1ZmZlciAp IGNvbnN0ID0gMDsKICAgICAgdmlydHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdCA9IDA7CiAg ICAgIHZpcnR1YWwgUFJVaW50MzIgTWF4TGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFs IFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBuc0FDU3RyaW5nJiApIGNvbnN0ID0gMDsKICB9 OwojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zUmVhZGFibGVVdGlscy5oIiAy CgoKY2xhc3MgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nOwpjbGFzcyBuc0NTdHJpbmc7Cgogc2l6 ZV90IERpc3RhbmNlKCBjb25zdCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgbnNB U3RyaW5nOjpjb25zdF9pdGVyYXRvciYgKTsKIHNpemVfdCBEaXN0YW5jZSggY29uc3QgbnNBQ1N0 cmluZzo6Y29uc3RfaXRlcmF0b3ImLCBjb25zdCBuc0FDU3RyaW5nOjpjb25zdF9pdGVyYXRvciYg KTsKCgogdm9pZCBDb3B5VUNTMnRvQVNDSUkoIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSwgbnNB Q1N0cmluZyYgYURlc3QgKTsKIHZvaWQgQ29weUFTQ0lJdG9VQ1MyKCBjb25zdCBuc0FDU3RyaW5n JiBhU291cmNlLCBuc0FTdHJpbmcmIGFEZXN0ICk7CiMgNjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9zdHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiBjaGFyKiBUb05ld0NTdHJpbmcoIGNvbnN0IG5z QVN0cmluZyYgYVNvdXJjZSApOwojIDc1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25z UmVhZGFibGVVdGlscy5oIgogY2hhciogVG9OZXdDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiBh U291cmNlICk7CiMgODggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNSZWFkYWJsZVV0 aWxzLmgiCiBjaGFyKiBUb05ld1VURjhTdHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSAp OwojIDEwMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1JlYWRhYmxlVXRpbHMuaCIK IFBSVW5pY2hhciogVG9OZXdVbmljb2RlKCBjb25zdCBuc0FTdHJpbmcmIGFTb3VyY2UgKTsKIyAx MTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiBQUlVu aWNoYXIqIFRvTmV3VW5pY29kZSggY29uc3QgbnNBQ1N0cmluZyYgYVNvdXJjZSApOwojIDEyOCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1JlYWRhYmxlVXRpbHMuaCIKIFBSVW5pY2hh ciogQ29weVVuaWNvZGVUbyggY29uc3QgbnNBU3RyaW5nJiBhU291cmNlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhU3JjT2Zmc2V0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQUlVuaWNoYXIqIGFEZXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQUlVpbnQzMiBhTGVuZ3RoICk7CiMgMTQ1ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvc3RyaW5nL25zUmVhZGFibGVVdGlscy5oIgogdm9pZCBDb3B5VW5pY29kZVRvKCBjb25zdCBu c0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU3JjU3RhcnQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IG5zQVN0cmluZzo6Y29uc3RfaXRlcmF0b3ImIGFTcmNFbmQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYURlc3QgKTsKIyAxNTkgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9zdHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiB2b2lkIEFwcGVuZFVuaWNvZGVU byggY29uc3QgbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYgYVNyY1N0YXJ0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZzo6Y29uc3RfaXRlcmF0b3ImIGFTcmNF bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhRGVzdCApOwoKCgoK CgogUFJCb29sIElzQVNDSUkoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwoKCgoKCgogUFJC b29sIElzQVNDSUkoIGNvbnN0IG5zQUNTdHJpbmcmIGFTdHJpbmcgKTsKCgoKCgoKIHZvaWQgVG9V cHBlckNhc2UoIG5zQUNTdHJpbmcmICk7Cgogdm9pZCBUb0xvd2VyQ2FzZSggbnNBQ1N0cmluZyYg KTsKCiB2b2lkIFRvVXBwZXJDYXNlKCBuc0FTaW5nbGVGcmFnbWVudENTdHJpbmcmICk7Cgogdm9p ZCBUb0xvd2VyQ2FzZSggbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nJiApOwoKIHZvaWQgVG9VcHBl ckNhc2UoIG5zQ1N0cmluZyYgKTsKCiB2b2lkIFRvTG93ZXJDYXNlKCBuc0NTdHJpbmcmICk7CgoK Cgogdm9pZCBUb1VwcGVyQ2FzZSggY29uc3QgbnNBQ1N0cmluZyYgYVNvdXJjZSwgbnNBQ1N0cmlu ZyYgYURlc3QgKTsKCiB2b2lkIFRvTG93ZXJDYXNlKCBjb25zdCBuc0FDU3RyaW5nJiBhU291cmNl LCBuc0FDU3RyaW5nJiBhRGVzdCApOwojIDIxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu Zy9uc1JlYWRhYmxlVXRpbHMuaCIKIFBSQm9vbCBGaW5kSW5SZWFkYWJsZSggY29uc3QgbnNBU3Ry aW5nJiBhUGF0dGVybiwgbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYsIG5zQVN0cmluZzo6Y29u c3RfaXRlcmF0b3ImLCBjb25zdCBuc1N0cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0U3RyaW5n Q29tcGFyYXRvcigpICk7CiBQUkJvb2wgRmluZEluUmVhZGFibGUoIGNvbnN0IG5zQUNTdHJpbmcm IGFQYXR0ZXJuLCBuc0FDU3RyaW5nOjpjb25zdF9pdGVyYXRvciYsIG5zQUNTdHJpbmc6OmNvbnN0 X2l0ZXJhdG9yJiwgY29uc3QgbnNDU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRDU3RyaW5n Q29tcGFyYXRvcigpICk7CgoKCmlubGluZSBQUkJvb2wgRmluZEluUmVhZGFibGUoIGNvbnN0IG5z QVN0cmluZyYgYVBhdHRlcm4sIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSwgY29uc3QgbnNTdHJp bmdDb21wYXJhdG9yJiBjb21wYXJlID0gbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRvcigpICkKewog IG5zQVN0cmluZzo6Y29uc3RfaXRlcmF0b3Igc3RhcnQsIGVuZDsKICBhU291cmNlLkJlZ2luUmVh ZGluZyhzdGFydCk7CiAgYVNvdXJjZS5FbmRSZWFkaW5nKGVuZCk7CiAgcmV0dXJuIEZpbmRJblJl YWRhYmxlKGFQYXR0ZXJuLCBzdGFydCwgZW5kLCBjb21wYXJlKTsKfQoKaW5saW5lIFBSQm9vbCBG aW5kSW5SZWFkYWJsZSggY29uc3QgbnNBQ1N0cmluZyYgYVBhdHRlcm4sIGNvbnN0IG5zQUNTdHJp bmcmIGFTb3VyY2UsIGNvbnN0IG5zQ1N0cmluZ0NvbXBhcmF0b3ImIGNvbXBhcmUgPSBuc0RlZmF1 bHRDU3RyaW5nQ29tcGFyYXRvcigpICkKewogIG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIHN0 YXJ0LCBlbmQ7CiAgYVNvdXJjZS5CZWdpblJlYWRpbmcoc3RhcnQpOwogIGFTb3VyY2UuRW5kUmVh ZGluZyhlbmQpOwogIHJldHVybiBGaW5kSW5SZWFkYWJsZShhUGF0dGVybiwgc3RhcnQsIGVuZCwg Y29tcGFyZSk7Cn0KCgogUFJCb29sIENhc2VJbnNlbnNpdGl2ZUZpbmRJblJlYWRhYmxlKCBjb25z dCBuc0FDU3RyaW5nJiBhUGF0dGVybiwgbnNBQ1N0cmluZzo6Y29uc3RfaXRlcmF0b3ImLCBuc0FD U3RyaW5nOjpjb25zdF9pdGVyYXRvciYgKTsKIyAyNDMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z dHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiBQUkJvb2wgUkZpbmRJblJlYWRhYmxlKCBjb25zdCBu c0FTdHJpbmcmIGFQYXR0ZXJuLCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiwgbnNBU3RyaW5n Ojpjb25zdF9pdGVyYXRvciYsIGNvbnN0IG5zU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRT dHJpbmdDb21wYXJhdG9yKCkgKTsKIFBSQm9vbCBSRmluZEluUmVhZGFibGUoIGNvbnN0IG5zQUNT dHJpbmcmIGFQYXR0ZXJuLCBuc0FDU3RyaW5nOjpjb25zdF9pdGVyYXRvciYsIG5zQUNTdHJpbmc6 OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgbnNDU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRD U3RyaW5nQ29tcGFyYXRvcigpICk7CiMgMjU0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n L25zUmVhZGFibGVVdGlscy5oIgogUFJCb29sIEZpbmRDaGFySW5SZWFkYWJsZSggUFJVbmljaGFy IGFDaGFyLCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU2VhcmNoU3RhcnQsIGNvbnN0IG5z QVN0cmluZzo6Y29uc3RfaXRlcmF0b3ImIGFTZWFyY2hFbmQgKTsKIFBSQm9vbCBGaW5kQ2hhcklu UmVhZGFibGUoIGNoYXIgYUNoYXIsIG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU2VhcmNo U3RhcnQsIGNvbnN0IG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU2VhcmNoRW5kICk7CgoK CgogUFJVaW50MzIgQ291bnRDaGFySW5SZWFkYWJsZSggY29uc3QgbnNBU3RyaW5nJiBhU3RyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVbmljaGFyIGFDaGFyICk7CiBQ UlVpbnQzMiBDb3VudENoYXJJblJlYWRhYmxlKCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBhQ2hhciApOwoKIFBSVWludDMy IEhhc2hTdHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgYVN0ciApOwogUFJVaW50MzIgSGFzaFN0cmlu ZyggY29uc3QgbnNBQ1N0cmluZyYgYVN0ciApOwojIDI3NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3N0cmluZy9uc1JlYWRhYmxlVXRpbHMuaCIKY2xhc3MgbnNTdWJzdGl0dXRlU3RyaW5nCiAgICA6 IHB1YmxpYyBuc0FTdHJpbmdHZW5lcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIG5zU3Vic3Rp dHV0ZVN0cmluZyggY29uc3QgbnNBU3RyaW5nJiBhVGV4dCwgY29uc3QgbnNBU3RyaW5nJiBhUGF0 dGVybiwgY29uc3QgbnNBU3RyaW5nJiBhUmVwbGFjZW1lbnQgKQogICAgICAgICAgOiBtVGV4dChh VGV4dCksCiAgICAgICAgICAgIG1QYXR0ZXJuKGFQYXR0ZXJuKSwKICAgICAgICAgICAgbVJlcGxh Y2VtZW50KGFSZXBsYWNlbWVudCksCiAgICAgICAgICAgIG1OdW1iZXJPZk1hdGNoZXMoLTEpCiAg ICAgICAgewoKICAgICAgICB9CgogICAgICB2aXJ0dWFsIFBSVW5pY2hhciogb3BlcmF0b3IoKSgg UFJVbmljaGFyKiBhRGVzdEJ1ZmZlciApIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVWludDMyIExl bmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVWludDMyIE1heExlbmd0aCgpIGNvbnN0Owog ICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBuc0FTdHJpbmcmICkgY29u c3Q7CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBDb3VudE1hdGNoZXMoKSBjb25zdDsKCiAgICBw cml2YXRlOgogICAgICBjb25zdCBuc0FTdHJpbmcmIG1UZXh0OwogICAgICBjb25zdCBuc0FTdHJp bmcmIG1QYXR0ZXJuOwogICAgICBjb25zdCBuc0FTdHJpbmcmIG1SZXBsYWNlbWVudDsKICAgICAg ICAgICAgICAgICAgICBQUkludDMyIG1OdW1iZXJPZk1hdGNoZXM7CiAgfTsKCmNsYXNzIG5zU3Vi c3RpdHV0ZUNTdHJpbmcKICAgIDogcHVibGljIG5zQUNTdHJpbmdHZW5lcmF0b3IKICB7CiAgICBw dWJsaWM6CiAgICAgIG5zU3Vic3RpdHV0ZUNTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFUZXh0 LCBjb25zdCBuc0FDU3RyaW5nJiBhUGF0dGVybiwgY29uc3QgbnNBQ1N0cmluZyYgYVJlcGxhY2Vt ZW50ICkKICAgICAgICAgIDogbVRleHQoYVRleHQpLAogICAgICAgICAgICBtUGF0dGVybihhUGF0 dGVybiksCiAgICAgICAgICAgIG1SZXBsYWNlbWVudChhUmVwbGFjZW1lbnQpLAogICAgICAgICAg ICBtTnVtYmVyT2ZNYXRjaGVzKC0xKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAgdmlydHVh bCBjaGFyKiBvcGVyYXRvcigpKCBjaGFyKiBhRGVzdEJ1ZmZlciApIGNvbnN0OwogICAgICB2aXJ0 dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVWludDMyIE1heExl bmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBu c0FDU3RyaW5nJiApIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIHZvaWQgQ291bnRNYXRjaGVz KCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgbnNBQ1N0cmluZyYgbVRleHQ7CiAg ICAgIGNvbnN0IG5zQUNTdHJpbmcmIG1QYXR0ZXJuOwogICAgICBjb25zdCBuc0FDU3RyaW5nJiBt UmVwbGFjZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBtTnVtYmVyT2ZNYXRjaGVz OwogIH07CiMgNTQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS94cHRjYWxsLmgiIDEKIyA4MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L3hwdGNhbGwuaCIKc3RydWN0IG5zWFBUQ01pbmlWYXJpYW50CnsKCgogICAgdW5pb24KICAgIHsK ICAgICAgICBQUkludDggaTg7CiAgICAgICAgUFJJbnQxNiBpMTY7CiAgICAgICAgUFJJbnQzMiBp MzI7CiAgICAgICAgUFJJbnQ2NCBpNjQ7CiAgICAgICAgUFJVaW50OCB1ODsKICAgICAgICBQUlVp bnQxNiB1MTY7CiAgICAgICAgUFJVaW50MzIgdTMyOwogICAgICAgIFBSVWludDY0IHU2NDsKICAg ICAgICBmbG9hdCBmOwogICAgICAgIGRvdWJsZSBkOwogICAgICAgIFBSQm9vbCBiOwogICAgICAg IGNoYXIgYzsKICAgICAgICBQUlVuaWNoYXIgd2M7CiAgICAgICAgdm9pZCogcDsKICAgIH0gdmFs Owp9OwoKc3RydWN0IG5zWFBUQ1ZhcmlhbnQgOiBwdWJsaWMgbnNYUFRDTWluaVZhcmlhbnQKewoK CgoKICAgIHZvaWQqIHB0cjsKICAgIG5zWFBUVHlwZSB0eXBlOwogICAgUFJVaW50OCBmbGFnczsK CiAgICBlbnVtCiAgICB7CgogICAgICAgIFBUUl9JU19EQVRBID0gMHgxLAogICAgICAgIFZBTF9J U19BTExPQ0QgPSAweDIsCiAgICAgICAgVkFMX0lTX0lGQUNFID0gMHg0LAogICAgICAgIFZBTF9J U19BUlJBWSA9IDB4OCwKICAgICAgICBWQUxfSVNfRE9NU1RSID0gMHgxMCwKICAgICAgICBWQUxf SVNfVVRGOFNUUiA9IDB4MjAsCiAgICAgICAgVkFMX0lTX0NTVFIgPSAweDQwCiAgICB9OwoKICAg IHZvaWQgQ2xlYXJGbGFncygpIHtmbGFncyA9IDA7fQogICAgdm9pZCBTZXRQdHJJc0RhdGEoKSB7 ZmxhZ3MgfD0gUFRSX0lTX0RBVEE7fQogICAgdm9pZCBTZXRWYWxJc0FsbG9jYXRlZCgpIHtmbGFn cyB8PSBWQUxfSVNfQUxMT0NEO30KICAgIHZvaWQgU2V0VmFsSXNJbnRlcmZhY2UoKSB7ZmxhZ3Mg fD0gVkFMX0lTX0lGQUNFO30KICAgIHZvaWQgU2V0VmFsSXNBcnJheSgpIHtmbGFncyB8PSBWQUxf SVNfQVJSQVk7fQogICAgdm9pZCBTZXRWYWxJc0RPTVN0cmluZygpIHtmbGFncyB8PSBWQUxfSVNf RE9NU1RSO30KICAgIHZvaWQgU2V0VmFsSXNVVEY4U3RyaW5nKCkge2ZsYWdzIHw9IFZBTF9JU19V VEY4U1RSO30KICAgIHZvaWQgU2V0VmFsSXNDU3RyaW5nKCkge2ZsYWdzIHw9IFZBTF9JU19DU1RS O30KCiAgICBQUkJvb2wgSXNQdHJEYXRhKCkgY29uc3Qge3JldHVybiAwICE9IChmbGFncyAmIFBU Ul9JU19EQVRBKTt9CiAgICBQUkJvb2wgSXNWYWxBbGxvY2F0ZWQoKSBjb25zdCB7cmV0dXJuIDAg IT0gKGZsYWdzICYgVkFMX0lTX0FMTE9DRCk7fQogICAgUFJCb29sIElzVmFsSW50ZXJmYWNlKCkg Y29uc3Qge3JldHVybiAwICE9IChmbGFncyAmIFZBTF9JU19JRkFDRSk7fQogICAgUFJCb29sIElz VmFsQXJyYXkoKSBjb25zdCB7cmV0dXJuIDAgIT0gKGZsYWdzICYgVkFMX0lTX0FSUkFZKTt9CiAg ICBQUkJvb2wgSXNWYWxET01TdHJpbmcoKSBjb25zdCB7cmV0dXJuIDAgIT0gKGZsYWdzICYgVkFM X0lTX0RPTVNUUik7fQogICAgUFJCb29sIElzVmFsVVRGOFN0cmluZygpIGNvbnN0IHtyZXR1cm4g MCAhPSAoZmxhZ3MgJiBWQUxfSVNfVVRGOFNUUik7fQogICAgUFJCb29sIElzVmFsQ1N0cmluZygp IGNvbnN0IHtyZXR1cm4gMCAhPSAoZmxhZ3MgJiBWQUxfSVNfQ1NUUik7fQoKICAgIHZvaWQgSW5p dChjb25zdCBuc1hQVENNaW5pVmFyaWFudCYgbXYsIGNvbnN0IG5zWFBUVHlwZSYgdCwgUFJVaW50 OCBmKQogICAgewogICAgICAgIHR5cGUgPSB0OwogICAgICAgIGZsYWdzID0gZjsKCiAgICAgICAg aWYoZiAmIFBUUl9JU19EQVRBKQogICAgICAgIHsKICAgICAgICAgICAgcHRyID0gbXYudmFsLnA7 CiAgICAgICAgICAgIHZhbC5wID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgICAgcHRyID0gMDsKICAgICAgICAgICAgc3dpdGNoKHQuVGFnUGFydCgpKSB7CiAg ICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTg6IHZhbC5pOCA9IG12LnZhbC5pODsgYnJl YWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTE2OiB2YWwuaTE2ID0gbXYudmFs LmkxNjsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTMyOiB2YWwuaTMy ID0gbXYudmFsLmkzMjsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTY0 OiB2YWwuaTY0ID0gbXYudmFsLmk2NDsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5 cGU6OlRfVTg6IHZhbC51OCA9IG12LnZhbC51ODsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBu c1hQVFR5cGU6OlRfVTE2OiB2YWwudTE2ID0gbXYudmFsLnUxNjsgYnJlYWs7CiAgICAgICAgICAg ICAgY2FzZSBuc1hQVFR5cGU6OlRfVTMyOiB2YWwudTMyID0gbXYudmFsLnUzMjsgYnJlYWs7CiAg ICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfVTY0OiB2YWwudTY0ID0gbXYudmFsLnU2NDsg YnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfRkxPQVQ6IHZhbC5mID0gbXYu dmFsLmY7IGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX0RPVUJMRTogdmFs LmQgPSBtdi52YWwuZDsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfQk9P TDogdmFsLmIgPSBtdi52YWwuYjsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6 OlRfQ0hBUjogdmFsLmMgPSBtdi52YWwuYzsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQ VFR5cGU6OlRfV0NIQVI6IHZhbC53YyA9IG12LnZhbC53YzsgYnJlYWs7CiAgICAgICAgICAgICAg Y2FzZSBuc1hQVFR5cGU6OlRfVk9JRDoKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9J SUQ6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfRE9NU1RSSU5HOgogICAgICAgICAg ICAgIGNhc2UgbnNYUFRUeXBlOjpUX0NIQVJfU1RSOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRU eXBlOjpUX1dDSEFSX1NUUjoKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9JTlRFUkZB Q0U6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSU5URVJGQUNFX0lTOgogICAgICAg ICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX0FSUkFZOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRU eXBlOjpUX1BTVFJJTkdfU0laRV9JUzoKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9Q V1NUUklOR19TSVpFX0lTOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX1VURjhTVFJJ Tkc6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfQ1NUUklORzoKICAgICAgICAgICAg ICBkZWZhdWx0OiB2YWwucCA9IG12LnZhbC5wOyBicmVhazsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgIH0KfTsKCgoKY2xhc3MgbnNYUFRDU3R1YkJhc2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMK ewpwdWJsaWM6CgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25zdCBu c0lJRCYgYUlJRCwgdm9pZCoqIGFJbnN0YW5jZVB0cik7CgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3hwY29tL3hwdGNzdHVic2RlY2wuaW5jIiAxCiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS94cHRjc3R1YnNkZWNsLmluYyIKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjMoKTsK IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjUoKTsKIHZp cnR1YWwgbnNyZXN1bHQgU3R1YjYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjcoKTsKIHZpcnR1 YWwgbnNyZXN1bHQgU3R1YjgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjkoKTsKIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjEwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMSgpOwogdmlydHVhbCBu c3Jlc3VsdCBTdHViMTIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEzKCk7CiB2aXJ0dWFsIG5z cmVzdWx0IFN0dWIxNCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTUoKTsKIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjE2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNygpOwogdmlydHVhbCBuc3Jl c3VsdCBTdHViMTgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5KCk7CiB2aXJ0dWFsIG5zcmVz dWx0IFN0dWIyMCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjEoKTsKIHZpcnR1YWwgbnNyZXN1 bHQgU3R1YjIyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMygpOwogdmlydHVhbCBuc3Jlc3Vs dCBTdHViMjQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjI1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWIyNigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjcoKTsKIHZpcnR1YWwgbnNyZXN1bHQg U3R1YjI4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBT dHViMzAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjMxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWIzMigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMzMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjM0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIzNSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi MzYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjM3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIz OCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMzkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQw KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI0MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNDIo KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI0NCgp OwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNDUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQ2KCk7 CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI0NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNDgoKTsK IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQ5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI1MCgpOwog dmlydHVhbCBuc3Jlc3VsdCBTdHViNTEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjUyKCk7CiB2 aXJ0dWFsIG5zcmVzdWx0IFN0dWI1MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNTQoKTsKIHZp cnR1YWwgbnNyZXN1bHQgU3R1YjU1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI1NigpOwogdmly dHVhbCBuc3Jlc3VsdCBTdHViNTcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjU4KCk7CiB2aXJ0 dWFsIG5zcmVzdWx0IFN0dWI1OSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNjAoKTsKIHZpcnR1 YWwgbnNyZXN1bHQgU3R1YjYxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI2MigpOwogdmlydHVh bCBuc3Jlc3VsdCBTdHViNjMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjY0KCk7CiB2aXJ0dWFs IG5zcmVzdWx0IFN0dWI2NSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNjYoKTsKIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjY3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI2OCgpOwogdmlydHVhbCBu c3Jlc3VsdCBTdHViNjkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjcwKCk7CiB2aXJ0dWFsIG5z cmVzdWx0IFN0dWI3MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNzIoKTsKIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjczKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI3NCgpOwogdmlydHVhbCBuc3Jl c3VsdCBTdHViNzUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjc2KCk7CiB2aXJ0dWFsIG5zcmVz dWx0IFN0dWI3NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNzgoKTsKIHZpcnR1YWwgbnNyZXN1 bHQgU3R1Yjc5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI4MCgpOwogdmlydHVhbCBuc3Jlc3Vs dCBTdHViODEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjgyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWI4MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViODQoKTsKIHZpcnR1YWwgbnNyZXN1bHQg U3R1Yjg1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI4NigpOwogdmlydHVhbCBuc3Jlc3VsdCBT dHViODcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjg4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWI4OSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViOTAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjkxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI5MigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi OTMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjk0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI5 NSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViOTYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjk3 KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI5OCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViOTko KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEwMCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTAx KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMDIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEw MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTA0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIx MDUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEwNigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi MTA3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMDgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjEwOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTEwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWIxMTEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExMigpOwogdmlydHVhbCBuc3Jlc3VsdCBT dHViMTEzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMTQoKTsKIHZpcnR1YWwgbnNyZXN1bHQg U3R1YjExNSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTE2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWIxMTcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExOCgpOwogdmlydHVhbCBuc3Jlc3Vs dCBTdHViMTE5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjAoKTsKIHZpcnR1YWwgbnNyZXN1 bHQgU3R1YjEyMSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTIyKCk7CiB2aXJ0dWFsIG5zcmVz dWx0IFN0dWIxMjMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEyNCgpOwogdmlydHVhbCBuc3Jl c3VsdCBTdHViMTI1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjYoKTsKIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjEyNygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTI4KCk7CiB2aXJ0dWFsIG5z cmVzdWx0IFN0dWIxMjkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEzMCgpOwogdmlydHVhbCBu c3Jlc3VsdCBTdHViMTMxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMzIoKTsKIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjEzMygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTM0KCk7CiB2aXJ0dWFs IG5zcmVzdWx0IFN0dWIxMzUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEzNigpOwogdmlydHVh bCBuc3Jlc3VsdCBTdHViMTM3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMzgoKTsKIHZpcnR1 YWwgbnNyZXN1bHQgU3R1YjEzOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTQwKCk7CiB2aXJ0 dWFsIG5zcmVzdWx0IFN0dWIxNDEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0MigpOwogdmly dHVhbCBuc3Jlc3VsdCBTdHViMTQzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNDQoKTsKIHZp cnR1YWwgbnNyZXN1bHQgU3R1YjE0NSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTQ2KCk7CiB2 aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNDcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0OCgpOwog dmlydHVhbCBuc3Jlc3VsdCBTdHViMTQ5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTAoKTsK IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE1MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTUyKCk7 CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE1NCgp OwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTU1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTYo KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE1NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTU4 KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2 MCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTYxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIx NjIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi MTY0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNjUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjE2NigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTY3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWIxNjgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2OSgpOwogdmlydHVhbCBuc3Jlc3VsdCBT dHViMTcwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNzEoKTsKIHZpcnR1YWwgbnNyZXN1bHQg U3R1YjE3MigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTczKCk7CiB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWIxNzQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE3NSgpOwogdmlydHVhbCBuc3Jlc3Vs dCBTdHViMTc2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNzcoKTsKIHZpcnR1YWwgbnNyZXN1 bHQgU3R1YjE3OCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTc5KCk7CiB2aXJ0dWFsIG5zcmVz dWx0IFN0dWIxODAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE4MSgpOwogdmlydHVhbCBuc3Jl c3VsdCBTdHViMTgyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODMoKTsKIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjE4NCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTg1KCk7CiB2aXJ0dWFsIG5z cmVzdWx0IFN0dWIxODYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE4NygpOwogdmlydHVhbCBu c3Jlc3VsdCBTdHViMTg4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODkoKTsKIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjE5MCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTkxKCk7CiB2aXJ0dWFs IG5zcmVzdWx0IFN0dWIxOTIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5MygpOwogdmlydHVh bCBuc3Jlc3VsdCBTdHViMTk0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxOTUoKTsKIHZpcnR1 YWwgbnNyZXN1bHQgU3R1YjE5NigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTk3KCk7CiB2aXJ0 dWFsIG5zcmVzdWx0IFN0dWIxOTgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5OSgpOwogdmly dHVhbCBuc3Jlc3VsdCBTdHViMjAwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDEoKTsKIHZp cnR1YWwgbnNyZXN1bHQgU3R1YjIwMigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjAzKCk7CiB2 aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwNSgpOwog dmlydHVhbCBuc3Jlc3VsdCBTdHViMjA2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDcoKTsK IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwOCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjA5KCk7 CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIxMSgp OwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjEyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTMo KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIxNCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjE1 KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIx NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjE4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIy MTkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyMCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi MjIxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMjIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjIyMygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjI0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWIyMjUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyNigpOwogdmlydHVhbCBuc3Jlc3VsdCBT dHViMjI3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMjgoKTsKIHZpcnR1YWwgbnNyZXN1bHQg U3R1YjIyOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjMwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWIyMzEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzMigpOwogdmlydHVhbCBuc3Jlc3Vs dCBTdHViMjMzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMzQoKTsKIHZpcnR1YWwgbnNyZXN1 bHQgU3R1YjIzNSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjM2KCk7CiB2aXJ0dWFsIG5zcmVz dWx0IFN0dWIyMzcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzOCgpOwogdmlydHVhbCBuc3Jl c3VsdCBTdHViMjM5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDAoKTsKIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjI0MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQyKCk7CiB2aXJ0dWFsIG5z cmVzdWx0IFN0dWIyNDMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjI0NCgpOwogdmlydHVhbCBu c3Jlc3VsdCBTdHViMjQ1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDYoKTsKIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjI0NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQ4KCk7CiB2aXJ0dWFs IG5zcmVzdWx0IFN0dWIyNDkoKTsKCgogdmlydHVhbCBuc3Jlc3VsdCBTZW50aW5lbDAoKTsKIHZp cnR1YWwgbnNyZXN1bHQgU2VudGluZWwxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFNlbnRpbmVsMigp OwogdmlydHVhbCBuc3Jlc3VsdCBTZW50aW5lbDMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU2VudGlu ZWw0KCk7CiMgMjAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0Y2FsbC5oIiAyCgoK CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJmYWNlSW5mbyhuc0lJbnRlcmZhY2VJbmZv KiogaW5mbykgPSAwOwoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IENhbGxNZXRob2QoUFJVaW50MTYg bWV0aG9kSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNYUFRNZXRob2RJ bmZvKiBpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zWFBUQ01pbmlWYXJpYW50KiBw YXJhbXMpID0gMDsKfTsKCgpleHRlcm4gIkMiIHsKCm5zcmVzdWx0ClhQVENfSW52b2tlQnlJbmRl eChuc0lTdXBwb3J0cyogdGhhdCwgUFJVaW50MzIgbWV0aG9kSW5kZXgsCiAgICAgICAgICAgICAg ICAgICBQUlVpbnQzMiBwYXJhbUNvdW50LCBuc1hQVENWYXJpYW50KiBwYXJhbXMpOwoKCmV4dGVy biB2b2lkIHhwdGNfZHVtbXkoKTsKZXh0ZXJuIHZvaWQgeHB0Y19kdW1teTIoKTsKCn0KIyA1NSAi bnNET01DbGFzc0luZm8uY3BwIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pz bnVtLmgiIDEKIyA0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzbnVtLmgiCmV4dGVybiAi QyIgewojIDY3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNudW0uaCIKdHlwZWRlZiB1bmlv biB7CiAgICBqc2RvdWJsZSB2YWx1ZTsKICAgIHN0cnVjdCB7CgogICAgICAgIHVpbnQzMiBsc3c7 CiAgICAgICAgdWludDMyIG1zdzsKCgoKCiAgICB9IHBhcnRzOwp9IGpzX2llZWVfZG91YmxlX3No YXBlX3R5cGU7CiMgMTQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNudW0uaCIKZXh0ZXJu IEpTQm9vbApqc19Jbml0UnVudGltZU51bWJlclN0YXRlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu IHZvaWQKanNfRmluaXNoUnVudGltZU51bWJlclN0YXRlKEpTQ29udGV4dCAqY3gpOwoKCmV4dGVy biBKU09iamVjdCAqCmpzX0luaXROdW1iZXJDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAq b2JqKTsKCgoKCmV4dGVybiBjb25zdCBjaGFyIGpzX0luZmluaXR5X3N0cltdOwpleHRlcm4gY29u c3QgY2hhciBqc19OYU5fc3RyW107CmV4dGVybiBjb25zdCBjaGFyIGpzX2lzTmFOX3N0cltdOwpl eHRlcm4gY29uc3QgY2hhciBqc19pc0Zpbml0ZV9zdHJbXTsKZXh0ZXJuIGNvbnN0IGNoYXIganNf cGFyc2VGbG9hdF9zdHJbXTsKZXh0ZXJuIGNvbnN0IGNoYXIganNfcGFyc2VJbnRfc3RyW107CgoK ZXh0ZXJuIGpzZG91YmxlICoKanNfTmV3RG91YmxlKEpTQ29udGV4dCAqY3gsIGpzZG91YmxlIGQp OwoKZXh0ZXJuIHZvaWQKanNfRmluYWxpemVEb3VibGUoSlNDb250ZXh0ICpjeCwganNkb3VibGUg KmRwKTsKCmV4dGVybiBKU0Jvb2wKanNfTmV3RG91YmxlVmFsdWUoSlNDb250ZXh0ICpjeCwganNk b3VibGUgZCwganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApqc19OZXdOdW1iZXJWYWx1ZShK U0NvbnRleHQgKmN4LCBqc2RvdWJsZSBkLCBqc3ZhbCAqcnZhbCk7CgoKZXh0ZXJuIEpTT2JqZWN0 ICoKanNfTnVtYmVyVG9PYmplY3QoSlNDb250ZXh0ICpjeCwganNkb3VibGUgZCk7CgoKZXh0ZXJu IEpTU3RyaW5nICoKanNfTnVtYmVyVG9TdHJpbmcoSlNDb250ZXh0ICpjeCwganNkb3VibGUgZCk7 CgoKCgoKZXh0ZXJuIEpTQm9vbApqc19WYWx1ZVRvTnVtYmVyKEpTQ29udGV4dCAqY3gsIGpzdmFs IHYsIGpzZG91YmxlICpkcCk7CgoKCgoKZXh0ZXJuIEpTQm9vbApqc19WYWx1ZVRvRUNNQUludDMy KEpTQ29udGV4dCAqY3gsIGpzdmFsIHYsIGludDMyICppcCk7CgpleHRlcm4gSlNCb29sCmpzX0Rv dWJsZVRvRUNNQUludDMyKEpTQ29udGV4dCAqY3gsIGpzZG91YmxlIGQsIGludDMyICppcCk7CgoK CgoKZXh0ZXJuIEpTQm9vbApqc19WYWx1ZVRvRUNNQVVpbnQzMihKU0NvbnRleHQgKmN4LCBqc3Zh bCB2LCB1aW50MzIgKmlwKTsKCmV4dGVybiBKU0Jvb2wKanNfRG91YmxlVG9FQ01BVWludDMyKEpT Q29udGV4dCAqY3gsIGpzZG91YmxlIGQsIHVpbnQzMiAqaXApOwoKCgoKCgpleHRlcm4gSlNCb29s CmpzX1ZhbHVlVG9JbnQzMihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCBpbnQzMiAqaXApOwoKCgoK CmV4dGVybiBKU0Jvb2wKanNfVmFsdWVUb1VpbnQxNihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCB1 aW50MTYgKmlwKTsKCgoKCgpleHRlcm4ganNkb3VibGUKanNfRG91YmxlVG9JbnRlZ2VyKGpzZG91 YmxlIGQpOwojIDI0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzbnVtLmgiCmV4dGVybiBK U0Jvb2wKanNfc3RydG9kKEpTQ29udGV4dCAqY3gsIGNvbnN0IGpzY2hhciAqcywgY29uc3QganNj aGFyICoqZXAsIGpzZG91YmxlICpkcCk7CiMgMjU1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMv anNudW0uaCIKZXh0ZXJuIEpTQm9vbApqc19zdHJ0b2ludGVnZXIoSlNDb250ZXh0ICpjeCwgY29u c3QganNjaGFyICpzLCBjb25zdCBqc2NoYXIgKiplcCwganNpbnQgcmFkaXgsIGpzZG91YmxlICpk cCk7Cgp9CiMgNTkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9qcy9qc2RiZ2FwaS5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2Ri Z2FwaS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIiAxCiMgNDAg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIgojIDEgIi91c3IvbGliL2djYy1s aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2pzL2pzcHJ2dGQuaCIgMQojIDU1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNw cnZ0ZC5oIgp0eXBlZGVmIHVpbnQ4IGpzYnl0ZWNvZGU7CnR5cGVkZWYgdWludDgganNzcmNub3Rl Owp0eXBlZGVmIHVpbnQzMiBqc2F0b21pZDsKCgp0eXBlZGVmIHN0cnVjdCBKU0FyZ3VtZW50Rm9y bWF0TWFwIEpTQXJndW1lbnRGb3JtYXRNYXA7CnR5cGVkZWYgc3RydWN0IEpTQ29kZUdlbmVyYXRv ciBKU0NvZGVHZW5lcmF0b3I7CnR5cGVkZWYgc3RydWN0IEpTRGVwZW5kZW50U3RyaW5nIEpTRGVw ZW5kZW50U3RyaW5nOwp0eXBlZGVmIHN0cnVjdCBKU0dDTG9ja0hhc2hFbnRyeSBKU0dDTG9ja0hh c2hFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgSlNHQ1Jvb3RIYXNoRW50cnkgSlNHQ1Jvb3RIYXNoRW50 cnk7CnR5cGVkZWYgc3RydWN0IEpTR0NUaGluZyBKU0dDVGhpbmc7CnR5cGVkZWYgc3RydWN0IEpT UGFyc2VOb2RlIEpTUGFyc2VOb2RlOwp0eXBlZGVmIHN0cnVjdCBKU1NoYXJwT2JqZWN0TWFwIEpT U2hhcnBPYmplY3RNYXA7CnR5cGVkZWYgc3RydWN0IEpTVG9rZW4gSlNUb2tlbjsKdHlwZWRlZiBz dHJ1Y3QgSlNUb2tlblBvcyBKU1Rva2VuUG9zOwp0eXBlZGVmIHN0cnVjdCBKU1Rva2VuUHRyIEpT VG9rZW5QdHI7CnR5cGVkZWYgc3RydWN0IEpTVG9rZW5TdHJlYW0gSlNUb2tlblN0cmVhbTsKdHlw ZWRlZiBzdHJ1Y3QgSlNUcmVlQ29udGV4dCBKU1RyZWVDb250ZXh0Owp0eXBlZGVmIHN0cnVjdCBK U1RyeU5vdGUgSlNUcnlOb3RlOwoKCnR5cGVkZWYgc3RydWN0IEpTQXRvbSBKU0F0b207CnR5cGVk ZWYgc3RydWN0IEpTQXRvbUxpc3QgSlNBdG9tTGlzdDsKdHlwZWRlZiBzdHJ1Y3QgSlNBdG9tTGlz dEVsZW1lbnQgSlNBdG9tTGlzdEVsZW1lbnQ7CnR5cGVkZWYgc3RydWN0IEpTQXRvbU1hcCBKU0F0 b21NYXA7CnR5cGVkZWYgc3RydWN0IEpTQXRvbVN0YXRlIEpTQXRvbVN0YXRlOwp0eXBlZGVmIHN0 cnVjdCBKU0NvZGVTcGVjIEpTQ29kZVNwZWM7CnR5cGVkZWYgc3RydWN0IEpTUHJpbnRlciBKU1By aW50ZXI7CnR5cGVkZWYgc3RydWN0IEpTUmVnRXhwIEpTUmVnRXhwOwp0eXBlZGVmIHN0cnVjdCBK U1JlZ0V4cFN0YXRpY3MgSlNSZWdFeHBTdGF0aWNzOwp0eXBlZGVmIHN0cnVjdCBKU1Njb3BlIEpT U2NvcGU7CnR5cGVkZWYgc3RydWN0IEpTU2NvcGVPcHMgSlNTY29wZU9wczsKdHlwZWRlZiBzdHJ1 Y3QgSlNTY29wZVByb3BlcnR5IEpTU2NvcGVQcm9wZXJ0eTsKdHlwZWRlZiBzdHJ1Y3QgSlNTdGFj a0ZyYW1lIEpTU3RhY2tGcmFtZTsKdHlwZWRlZiBzdHJ1Y3QgSlNTdGFja0hlYWRlciBKU1N0YWNr SGVhZGVyOwp0eXBlZGVmIHN0cnVjdCBKU1N1YlN0cmluZyBKU1N1YlN0cmluZzsKCgp0eXBlZGVm IGVudW0gSlNUcmFwU3RhdHVzIHsKICAgIEpTVFJBUF9FUlJPUiwKICAgIEpTVFJBUF9DT05USU5V RSwKICAgIEpTVFJBUF9SRVRVUk4sCiAgICBKU1RSQVBfVEhST1csCiAgICBKU1RSQVBfTElNSVQK fSBKU1RyYXBTdGF0dXM7Cgp0eXBlZGVmIEpTVHJhcFN0YXR1cwooKiBKU1RyYXBIYW5kbGVyKShK U0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCBqc2J5dGVjb2RlICpwYywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICpydmFsLCB2b2lkICpjbG9zdXJlKTsKCnR5 cGVkZWYgSlNCb29sCigqIEpTV2F0Y2hQb2ludEhhbmRsZXIpKEpTQ29udGV4dCAqY3gsIEpTT2Jq ZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAganN2YWwgb2xkLCBqc3ZhbCAqbmV3cCwgdm9pZCAqY2xvc3VyZSk7CgoKdHlwZWRlZiB2b2lk CigqIEpTTmV3U2NyaXB0SG9vaykoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnROIGxpbmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSlNGdW5jdGlvbiAqZnVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpjYWxsZXJkYXRhKTsKCgp0eXBlZGVmIHZvaWQKKCogSlNEZXN0cm95U2NyaXB0SG9v aykoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEpTU2NyaXB0ICpzY3JpcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpjYWxsZXJkYXRhKTsKCnR5cGVkZWYgdm9pZAooKiBKU1NvdXJjZUhhbmRsZXIpKGNv bnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50TiBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpzY2hhciAqc3RyLCBzaXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICoqbGlzdGVuZXJUU0RhdGEsIHZvaWQgKmNsb3N1cmUp OwojIDE1NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHJ2dGQuaCIKdHlwZWRlZiB2b2lk ICoKKCogSlNJbnRlcnByZXRlckhvb2spKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnAs IEpTQm9vbCBiZWZvcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNC b29sICpvaywgdm9pZCAqY2xvc3VyZSk7Cgp0eXBlZGVmIHZvaWQKKCogSlNPYmplY3RIb29rKShK U0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU0Jvb2wgaXNOZXcsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsb3N1cmUpOwoKdHlwZWRlZiBKU0Jvb2wKKCogSlNE ZWJ1Z0Vycm9ySG9vaykoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqbWVzc2FnZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTRXJyb3JSZXBvcnQgKnJlcG9ydCwgdm9p ZCAqY2xvc3VyZSk7CiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIiAy CgoKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIGVudW0gSlNPcCB7CgoKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvanMvanNvcGNvZGUudGJsIiAxCiMgNjcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9qcy9qc29wY29kZS50YmwiCkpTT1BfTk9QID0gMCwKSlNPUF9QVVNIID0gMSwKSlNPUF9QT1BW ID0gMiwKSlNPUF9FTlRFUldJVEggPSAzLApKU09QX0xFQVZFV0lUSCA9IDQsCkpTT1BfUkVUVVJO ID0gNSwKSlNPUF9HT1RPID0gNiwKSlNPUF9JRkVRID0gNywKSlNPUF9JRk5FID0gOCwKCgpKU09Q X0FSR1VNRU5UUyA9IDksCgoKSlNPUF9GT1JBUkcgPSAxMCwKSlNPUF9GT1JWQVIgPSAxMSwKCgpK U09QX0RVUCA9IDEyLApKU09QX0RVUDIgPSAxMywKSlNPUF9TRVRDT05TVCA9IDE0LApKU09QX0JJ VE9SID0gMTUsCkpTT1BfQklUWE9SID0gMTYsCkpTT1BfQklUQU5EID0gMTcsCkpTT1BfRVEgPSAx OCwKSlNPUF9ORSA9IDE5LApKU09QX0xUID0gMjAsCkpTT1BfTEUgPSAyMSwKSlNPUF9HVCA9IDIy LApKU09QX0dFID0gMjMsCkpTT1BfTFNIID0gMjQsCkpTT1BfUlNIID0gMjUsCkpTT1BfVVJTSCA9 IDI2LApKU09QX0FERCA9IDI3LApKU09QX1NVQiA9IDI4LApKU09QX01VTCA9IDI5LApKU09QX0RJ ViA9IDMwLApKU09QX01PRCA9IDMxLApKU09QX05PVCA9IDMyLApKU09QX0JJVE5PVCA9IDMzLApK U09QX05FRyA9IDM0LApKU09QX05FVyA9IDM1LApKU09QX0RFTE5BTUUgPSAzNiwKSlNPUF9ERUxQ Uk9QID0gMzcsCkpTT1BfREVMRUxFTSA9IDM4LApKU09QX1RZUEVPRiA9IDM5LApKU09QX1ZPSUQg PSA0MCwKSlNPUF9JTkNOQU1FID0gNDEsCkpTT1BfSU5DUFJPUCA9IDQyLApKU09QX0lOQ0VMRU0g PSA0MywKSlNPUF9ERUNOQU1FID0gNDQsCkpTT1BfREVDUFJPUCA9IDQ1LApKU09QX0RFQ0VMRU0g PSA0NiwKSlNPUF9OQU1FSU5DID0gNDcsCkpTT1BfUFJPUElOQyA9IDQ4LApKU09QX0VMRU1JTkMg PSA0OSwKSlNPUF9OQU1FREVDID0gNTAsCkpTT1BfUFJPUERFQyA9IDUxLApKU09QX0VMRU1ERUMg PSA1MiwKSlNPUF9HRVRQUk9QID0gNTMsCkpTT1BfU0VUUFJPUCA9IDU0LApKU09QX0dFVEVMRU0g PSA1NSwKSlNPUF9TRVRFTEVNID0gNTYsCkpTT1BfUFVTSE9CSiA9IDU3LApKU09QX0NBTEwgPSA1 OCwKSlNPUF9OQU1FID0gNTksCkpTT1BfTlVNQkVSID0gNjAsCkpTT1BfU1RSSU5HID0gNjEsCkpT T1BfWkVSTyA9IDYyLApKU09QX09ORSA9IDYzLApKU09QX05VTEwgPSA2NCwKSlNPUF9USElTID0g NjUsCkpTT1BfRkFMU0UgPSA2NiwKSlNPUF9UUlVFID0gNjcsCkpTT1BfT1IgPSA2OCwKSlNPUF9B TkQgPSA2OSwKCgpKU09QX1RBQkxFU1dJVENIID0gNzAsCkpTT1BfTE9PS1VQU1dJVENIID0gNzEs CgoKSlNPUF9ORVdfRVEgPSA3MiwKSlNPUF9ORVdfTkUgPSA3MywKCgpKU09QX0NMT1NVUkUgPSA3 NCwKCgpKU09QX0VYUE9SVEFMTCA9IDc1LApKU09QX0VYUE9SVE5BTUUgPSA3NiwKSlNPUF9JTVBP UlRBTEwgPSA3NywKSlNPUF9JTVBPUlRQUk9QID0gNzgsCkpTT1BfSU1QT1JURUxFTSA9IDc5LAoK CkpTT1BfT0JKRUNUID0gODAsCgoKSlNPUF9QT1AgPSA4MSwKCgpKU09QX1BPUyA9IDgyLAoKCkpT T1BfVFJBUCA9IDgzLAoKCkpTT1BfR0VUQVJHID0gODQsCkpTT1BfU0VUQVJHID0gODUsCkpTT1Bf R0VUVkFSID0gODYsCkpTT1BfU0VUVkFSID0gODcsCgoKSlNPUF9VSU5UMTYgPSA4OCwKCgpKU09Q X05FV0lOSVQgPSA4OSwKSlNPUF9FTkRJTklUID0gOTAsCkpTT1BfSU5JVFBST1AgPSA5MSwKSlNP UF9JTklURUxFTSA9IDkyLApKU09QX0RFRlNIQVJQID0gOTMsCkpTT1BfVVNFU0hBUlAgPSA5NCwK CgpKU09QX0lOQ0FSRyA9IDk1LApKU09QX0lOQ1ZBUiA9IDk2LApKU09QX0RFQ0FSRyA9IDk3LApK U09QX0RFQ1ZBUiA9IDk4LApKU09QX0FSR0lOQyA9IDk5LApKU09QX1ZBUklOQyA9IDEwMCwKSlNP UF9BUkdERUMgPSAxMDEsCkpTT1BfVkFSREVDID0gMTAyLAoKCkpTT1BfVE9PQkpFQ1QgPSAxMDMs CkpTT1BfRk9STkFNRSA9IDEwNCwKSlNPUF9GT1JQUk9QID0gMTA1LApKU09QX0ZPUkVMRU0gPSAx MDYsCkpTT1BfUE9QMiA9IDEwNywKCgpKU09QX0JJTkROQU1FID0gMTA4LApKU09QX1NFVE5BTUUg PSAxMDksCgoKSlNPUF9USFJPVyA9IDExMCwKCgpKU09QX0lOID0gMTExLApKU09QX0lOU1RBTkNF T0YgPSAxMTIsCgoKSlNPUF9ERUJVR0dFUiA9IDExMywKCgpKU09QX0dPU1VCID0gMTE0LApKU09Q X1JFVFNVQiA9IDExNSwKCgpKU09QX0VYQ0VQVElPTiA9IDExNiwKSlNPUF9TRVRTUCA9IDExNywK CgoKCgoKSlNPUF9DT05EU1dJVENIID0gMTE4LApKU09QX0NBU0UgPSAxMTksCkpTT1BfREVGQVVM VCA9IDEyMCwKCgoKCkpTT1BfRVZBTCA9IDEyMSwKCgoKCkpTT1BfRU5VTUVMRU0gPSAxMjIsCgoK CgoKCkpTT1BfR0VUVEVSID0gMTIzLApKU09QX1NFVFRFUiA9IDEyNCwKCgoKCkpTT1BfREVGRlVO ID0gMTI1LApKU09QX0RFRkNPTlNUID0gMTI2LApKU09QX0RFRlZBUiA9IDEyNywKCgpKU09QX0FO T05GVU5PQkogPSAxMjgsCgoKSlNPUF9OQU1FREZVTk9CSiA9IDEyOSwKCgpKU09QX0lOSVRDQVRD SFZBUiA9IDEzMCwKCgpKU09QX0dST1VQID0gMTMxLAoKCkpTT1BfU0VUQ0FMTCA9IDEzMiwKCgoK CgpKU09QX1RSWSA9IDEzMywKSlNPUF9GSU5BTExZID0gMTM0LAoKCgoKCgoKSlNPUF9TV0FQID0g MTM1LAoKCgoKCgpKU09QX0FSR1NVQiA9IDEzNiwKSlNPUF9BUkdDTlQgPSAxMzcsCgoKCgoKCkpT T1BfREVGTE9DQUxGVU4gPSAxMzgsCgoKSlNPUF9HT1RPWCA9IDEzOSwKSlNPUF9JRkVRWCA9IDE0 MCwKSlNPUF9JRk5FWCA9IDE0MSwKSlNPUF9PUlggPSAxNDIsCkpTT1BfQU5EWCA9IDE0MywKSlNP UF9HT1NVQlggPSAxNDQsCkpTT1BfQ0FTRVggPSAxNDUsCkpTT1BfREVGQVVMVFggPSAxNDYsCkpT T1BfVEFCTEVTV0lUQ0hYID0gMTQ3LApKU09QX0xPT0tVUFNXSVRDSFggPSAxNDgsCgoKSlNPUF9C QUNLUEFUQ0ggPSAxNDksCkpTT1BfQkFDS1BBVENIX1BPUCA9IDE1MCwKSlNPUF9CQUNLUEFUQ0hf UFVTSCA9IDE1MSwKCgpKU09QX1NFVFJWQUwgPSAxNTIsCkpTT1BfUkVUUlZBTCA9IDE1MywKIyA1 MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzb3Bjb2RlLmgiIDIKCiAgICBKU09QX0xJTUlU Cn0gSlNPcDsKIyAxNjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIgpzdHJ1 Y3QgSlNDb2RlU3BlYyB7CiAgICBjb25zdCBjaGFyICpuYW1lOwogICAgY29uc3QgY2hhciAqdG9r ZW47CiAgICBpbnQ4IGxlbmd0aDsKICAgIGludDggbnVzZXM7CiAgICBpbnQ4IG5kZWZzOwogICAg dWludDggcHJlYzsKICAgIHVpbnQzMiBmb3JtYXQ7Cn07CgpleHRlcm4gY2hhciBqc19jb25zdF9z dHJbXTsKZXh0ZXJuIGNoYXIganNfdmFyX3N0cltdOwpleHRlcm4gY2hhciBqc19mdW5jdGlvbl9z dHJbXTsKZXh0ZXJuIGNoYXIganNfaW5fc3RyW107CmV4dGVybiBjaGFyIGpzX2luc3RhbmNlb2Zf c3RyW107CmV4dGVybiBjaGFyIGpzX25ld19zdHJbXTsKZXh0ZXJuIGNoYXIganNfZGVsZXRlX3N0 cltdOwpleHRlcm4gY2hhciBqc190eXBlb2Zfc3RyW107CmV4dGVybiBjaGFyIGpzX3ZvaWRfc3Ry W107CmV4dGVybiBjaGFyIGpzX251bGxfc3RyW107CmV4dGVybiBjaGFyIGpzX3RoaXNfc3RyW107 CmV4dGVybiBjaGFyIGpzX2ZhbHNlX3N0cltdOwpleHRlcm4gY2hhciBqc190cnVlX3N0cltdOwpl eHRlcm4gSlNDb2RlU3BlYyBqc19Db2RlU3BlY1tdOwpleHRlcm4gdWludE4ganNfTnVtQ29kZVNw ZWNzOwpleHRlcm4ganNjaGFyIGpzX0VzY2FwZU1hcFtdOwoKCgoKCgpleHRlcm4gSlNTdHJpbmcg Kgpqc19RdW90ZVN0cmluZyhKU0NvbnRleHQgKmN4LCBKU1N0cmluZyAqc3RyLCBqc2NoYXIgcXVv dGUpOwoKCgoKCgpleHRlcm4gSlNQcmludGVyICoKanNfTmV3UHJpbnRlcihKU0NvbnRleHQgKmN4 LCBjb25zdCBjaGFyICpuYW1lLCB1aW50TiBpbmRlbnQsIEpTQm9vbCBwcmV0dHkpOwoKZXh0ZXJu IHZvaWQKanNfRGVzdHJveVByaW50ZXIoSlNQcmludGVyICpqcCk7CgpleHRlcm4gSlNTdHJpbmcg Kgpqc19HZXRQcmludGVyT3V0cHV0KEpTUHJpbnRlciAqanApOwoKZXh0ZXJuIGludApqc19wcmlu dGYoSlNQcmludGVyICpqcCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwoKZXh0ZXJuIEpTQm9v bApqc19wdXRzKEpTUHJpbnRlciAqanAsIGNvbnN0IGNoYXIgKnMpOwojIDIzNyAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2pzL2pzb3Bjb2RlLmgiCmV4dGVybiBKU0Jvb2wKanNfRGVjb21waWxlQ29k ZShKU1ByaW50ZXIgKmpwLCBKU1NjcmlwdCAqc2NyaXB0LCBqc2J5dGVjb2RlICpwYywgdWludE4g bGVuKTsKCmV4dGVybiBKU0Jvb2wKanNfRGVjb21waWxlU2NyaXB0KEpTUHJpbnRlciAqanAsIEpT U2NyaXB0ICpzY3JpcHQpOwoKZXh0ZXJuIEpTQm9vbApqc19EZWNvbXBpbGVGdW5jdGlvbkJvZHko SlNQcmludGVyICpqcCwgSlNGdW5jdGlvbiAqZnVuKTsKCmV4dGVybiBKU0Jvb2wKanNfRGVjb21w aWxlRnVuY3Rpb24oSlNQcmludGVyICpqcCwgSlNGdW5jdGlvbiAqZnVuKTsKIyAyNTkgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIgpleHRlcm4gSlNTdHJpbmcgKgpqc19EZWNv bXBpbGVWYWx1ZUdlbmVyYXRvcihKU0NvbnRleHQgKmN4LCBpbnROIHNwaW5kZXgsIGpzdmFsIHYs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTU3RyaW5nICpmYWxsYmFjayk7CgoKCgp9CiMg NDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2RiZ2FwaS5oIiAyCgoKZXh0ZXJuICJDIiB7 CgpleHRlcm4gdm9pZApqc19QYXRjaE9wY29kZShKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2Ny aXB0LCBqc2J5dGVjb2RlICpwYywgSlNPcCBvcCk7CgpleHRlcm4gSlNCb29sCkpTX1NldFRyYXAo SlNDb250ZXh0ICpjeCwgSlNTY3JpcHQgKnNjcmlwdCwganNieXRlY29kZSAqcGMsCiAgICAgICAg ICAgSlNUcmFwSGFuZGxlciBoYW5kbGVyLCB2b2lkICpjbG9zdXJlKTsKCmV4dGVybiBKU09wCkpT X0dldFRyYXBPcGNvZGUoSlNDb250ZXh0ICpjeCwgSlNTY3JpcHQgKnNjcmlwdCwganNieXRlY29k ZSAqcGMpOwoKZXh0ZXJuIHZvaWQKSlNfQ2xlYXJUcmFwKEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0 ICpzY3JpcHQsIGpzYnl0ZWNvZGUgKnBjLAogICAgICAgICAgICAgSlNUcmFwSGFuZGxlciAqaGFu ZGxlcnAsIHZvaWQgKipjbG9zdXJlcCk7CgpleHRlcm4gdm9pZApKU19DbGVhclNjcmlwdFRyYXBz KEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKZXh0ZXJuIHZvaWQKSlNfQ2xlYXJB bGxUcmFwcyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU1RyYXBTdGF0dXMKSlNfSGFuZGxlVHJh cChKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCBqc2J5dGVjb2RlICpwYywganN2YWwg KnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRJbnRlcnJ1cHQoSlNSdW50aW1lICpydCwgSlNU cmFwSGFuZGxlciBoYW5kbGVyLCB2b2lkICpjbG9zdXJlKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2xl YXJJbnRlcnJ1cHQoSlNSdW50aW1lICpydCwgSlNUcmFwSGFuZGxlciAqaGFuZGxlcnAsIHZvaWQg KipjbG9zdXJlcCk7CgoKCmV4dGVybiBKU0Jvb2wKSlNfU2V0V2F0Y2hQb2ludChKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwKICAgICAgICAgICAgICAgICBKU1dhdGNoUG9p bnRIYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmNsb3N1cmUpOwoKZXh0ZXJuIEpTQm9vbApKU19DbGVh cldhdGNoUG9pbnQoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAg ICAgICAgICAgICAgICBKU1dhdGNoUG9pbnRIYW5kbGVyICpoYW5kbGVycCwgdm9pZCAqKmNsb3N1 cmVwKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2xlYXJXYXRjaFBvaW50c0Zvck9iamVjdChKU0NvbnRl eHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2xlYXJBbGxXYXRjaFBv aW50cyhKU0NvbnRleHQgKmN4KTsKIyAxMjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2Ri Z2FwaS5oIgpleHRlcm4gdWludE4KSlNfUENUb0xpbmVOdW1iZXIoSlNDb250ZXh0ICpjeCwgSlNT Y3JpcHQgKnNjcmlwdCwganNieXRlY29kZSAqcGMpOwoKZXh0ZXJuIGpzYnl0ZWNvZGUgKgpKU19M aW5lTnVtYmVyVG9QQyhKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCB1aW50TiBsaW5l bm8pOwoKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfR2V0RnVuY3Rpb25TY3JpcHQoSlNDb250ZXh0ICpj eCwgSlNGdW5jdGlvbiAqZnVuKTsKCmV4dGVybiBKU1ByaW5jaXBhbHMgKgpKU19HZXRTY3JpcHRQ cmluY2lwYWxzKEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwojIDEzOSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2pzL2pzZGJnYXBpLmgiCmV4dGVybiBKU1N0YWNrRnJhbWUgKgpKU19G cmFtZUl0ZXJhdG9yKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqKml0ZXJhdG9ycCk7Cgpl eHRlcm4gSlNTY3JpcHQgKgpKU19HZXRGcmFtZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU1N0YWNr RnJhbWUgKmZwKTsKCmV4dGVybiBqc2J5dGVjb2RlICoKSlNfR2V0RnJhbWVQQyhKU0NvbnRleHQg KmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfSXNOYXRpdmVGcmFtZShK U0NvbnRleHQgKmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCmV4dGVybiB2b2lkICoKSlNfR2V0RnJh bWVBbm5vdGF0aW9uKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0ZXJuIHZv aWQKSlNfU2V0RnJhbWVBbm5vdGF0aW9uKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnAs IHZvaWQgKmFubm90YXRpb24pOwoKZXh0ZXJuIHZvaWQgKgpKU19HZXRGcmFtZVByaW5jaXBhbEFy cmF5KEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKCmV4dGVybiBKU09iamVjdCAq CkpTX0dldEZyYW1lT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0 ZXJuIEpTT2JqZWN0ICoKSlNfR2V0RnJhbWVTY29wZUNoYWluKEpTQ29udGV4dCAqY3gsIEpTU3Rh Y2tGcmFtZSAqZnApOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0RnJhbWVDYWxsT2JqZWN0KEpT Q29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0 RnJhbWVUaGlzKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0ZXJuIEpTRnVu Y3Rpb24gKgpKU19HZXRGcmFtZUZ1bmN0aW9uKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAq ZnApOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0RnJhbWVGdW5jdGlvbk9iamVjdChKU0NvbnRl eHQgKmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCgoKZXh0ZXJuIEpTQm9vbApKU19Jc0NvbnN0cnVj dG9yRnJhbWUoSlNDb250ZXh0ICpjeCwgSlNTdGFja0ZyYW1lICpmcCk7CgpleHRlcm4gSlNCb29s CkpTX0lzRGVidWdnZXJGcmFtZShKU0NvbnRleHQgKmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCmV4 dGVybiBqc3ZhbApKU19HZXRGcmFtZVJldHVyblZhbHVlKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tG cmFtZSAqZnApOwoKZXh0ZXJuIHZvaWQKSlNfU2V0RnJhbWVSZXR1cm5WYWx1ZShKU0NvbnRleHQg KmN4LCBKU1N0YWNrRnJhbWUgKmZwLCBqc3ZhbCBydmFsKTsKCgoKZXh0ZXJuIGNvbnN0IGNoYXIg KgpKU19HZXRTY3JpcHRGaWxlbmFtZShKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0KTsK CmV4dGVybiB1aW50TgpKU19HZXRTY3JpcHRCYXNlTGluZU51bWJlcihKU0NvbnRleHQgKmN4LCBK U1NjcmlwdCAqc2NyaXB0KTsKCmV4dGVybiB1aW50TgpKU19HZXRTY3JpcHRMaW5lRXh0ZW50KEpT Q29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKZXh0ZXJuIEpTVmVyc2lvbgpKU19HZXRT Y3JpcHRWZXJzaW9uKEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwojIDIxNyAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzZGJnYXBpLmgiCmV4dGVybiB2b2lkCkpTX1NldE5ld1Nj cmlwdEhvb2tQcm9jKEpTUnVudGltZSAqcnQsIEpTTmV3U2NyaXB0SG9vayBob29rLCB2b2lkICpj YWxsZXJkYXRhKTsKCmV4dGVybiB2b2lkCkpTX1NldERlc3Ryb3lTY3JpcHRIb29rUHJvYyhKU1J1 bnRpbWUgKnJ0LCBKU0Rlc3Ryb3lTY3JpcHRIb29rIGhvb2ssCiAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKmNhbGxlcmRhdGEpOwoKCgpleHRlcm4gSlNCb29sCkpTX0V2YWx1YXRlVUNJblN0 YWNrRnJhbWUoSlNDb250ZXh0ICpjeCwgSlNTdGFja0ZyYW1lICpmcCwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBqc2NoYXIgKmJ5dGVzLCB1aW50TiBsZW5ndGgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubywKICAgICAg ICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1 YXRlSW5TdGFja0ZyYW1lKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnAsCiAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCB1aW50TiBsZW5ndGgsCiAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50TiBsaW5lbm8sCiAgICAg ICAgICAgICAgICAgICAgICAgIGpzdmFsICpydmFsKTsKCgoKdHlwZWRlZiBzdHJ1Y3QgSlNQcm9w ZXJ0eURlc2MgewogICAganN2YWwgaWQ7CiAgICBqc3ZhbCB2YWx1ZTsKICAgIHVpbnQ4IGZsYWdz OwogICAgdWludDggc3BhcmU7CiAgICB1aW50MTYgc2xvdDsKICAgIGpzdmFsIGFsaWFzOwp9IEpT UHJvcGVydHlEZXNjOwojIDI2MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzZGJnYXBpLmgi CnR5cGVkZWYgc3RydWN0IEpTUHJvcGVydHlEZXNjQXJyYXkgewogICAgdWludDMyIGxlbmd0aDsK ICAgIEpTUHJvcGVydHlEZXNjICphcnJheTsKfSBKU1Byb3BlcnR5RGVzY0FycmF5OwoKZXh0ZXJu IEpTU2NvcGVQcm9wZXJ0eSAqCkpTX1Byb3BlcnR5SXRlcmF0b3IoSlNPYmplY3QgKm9iaiwgSlNT Y29wZVByb3BlcnR5ICoqaXRlcmF0b3JwKTsKCmV4dGVybiBKU0Jvb2wKSlNfR2V0UHJvcGVydHlE ZXNjKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTU2NvcGVQcm9wZXJ0eSAqc3Byb3As CiAgICAgICAgICAgICAgICAgICBKU1Byb3BlcnR5RGVzYyAqcGQpOwoKZXh0ZXJuIEpTQm9vbApK U19HZXRQcm9wZXJ0eURlc2NBcnJheShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU1By b3BlcnR5RGVzY0FycmF5ICpwZGEpOwoKZXh0ZXJuIHZvaWQKSlNfUHV0UHJvcGVydHlEZXNjQXJy YXkoSlNDb250ZXh0ICpjeCwgSlNQcm9wZXJ0eURlc2NBcnJheSAqcGRhKTsKCgoKZXh0ZXJuIEpT Qm9vbApKU19TZXREZWJ1Z2dlckhhbmRsZXIoSlNSdW50aW1lICpydCwgSlNUcmFwSGFuZGxlciBo YW5kbGVyLCB2b2lkICpjbG9zdXJlKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0U291cmNlSGFuZGxl cihKU1J1bnRpbWUgKnJ0LCBKU1NvdXJjZUhhbmRsZXIgaGFuZGxlciwgdm9pZCAqY2xvc3VyZSk7 CgpleHRlcm4gSlNCb29sCkpTX1NldEV4ZWN1dGVIb29rKEpTUnVudGltZSAqcnQsIEpTSW50ZXJw cmV0ZXJIb29rIGhvb2ssIHZvaWQgKmNsb3N1cmUpOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRDYWxs SG9vayhKU1J1bnRpbWUgKnJ0LCBKU0ludGVycHJldGVySG9vayBob29rLCB2b2lkICpjbG9zdXJl KTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0T2JqZWN0SG9vayhKU1J1bnRpbWUgKnJ0LCBKU09iamVj dEhvb2sgaG9vaywgdm9pZCAqY2xvc3VyZSk7CgpleHRlcm4gSlNCb29sCkpTX1NldFRocm93SG9v ayhKU1J1bnRpbWUgKnJ0LCBKU1RyYXBIYW5kbGVyIGhvb2ssIHZvaWQgKmNsb3N1cmUpOwoKZXh0 ZXJuIEpTQm9vbApKU19TZXREZWJ1Z0Vycm9ySG9vayhKU1J1bnRpbWUgKnJ0LCBKU0RlYnVnRXJy b3JIb29rIGhvb2ssIHZvaWQgKmNsb3N1cmUpOwoKCgpleHRlcm4gc2l6ZV90CkpTX0dldE9iamVj dFRvdGFsU2l6ZShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBzaXplX3QK SlNfR2V0RnVuY3Rpb25Ub3RhbFNpemUoSlNDb250ZXh0ICpjeCwgSlNGdW5jdGlvbiAqZnVuKTsK CmV4dGVybiBzaXplX3QKSlNfR2V0U2NyaXB0VG90YWxTaXplKEpTQ29udGV4dCAqY3gsIEpTU2Ny aXB0ICpzY3JpcHQpOwoKfQojIDYwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIgMQojIDQzICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3dpZGdldC9uc0V2ZW50LmgiIDEKIyA1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3dpZGdl dC9uc0V2ZW50LmgiCmVudW0gbnNFdmVudFN0YXR1cyB7CgogIG5zRXZlbnRTdGF0dXNfZUlnbm9y ZSwKCiAgbnNFdmVudFN0YXR1c19lQ29uc3VtZU5vRGVmYXVsdCwKCiAgbnNFdmVudFN0YXR1c19l Q29uc3VtZURvRGVmYXVsdAp9OwoKc3RydWN0IG5zRXZlbnQ7CgpzdHJ1Y3QgbnNHVUlFdmVudDsK c3RydWN0IG5zU2l6ZUV2ZW50OwpzdHJ1Y3QgbnNTaXplTW9kZUV2ZW50OwpzdHJ1Y3QgbnNaTGV2 ZWxFdmVudDsKc3RydWN0IG5zUGFpbnRFdmVudDsKc3RydWN0IG5zU2Nyb2xsYmFyRXZlbnQ7CnN0 cnVjdCBuc1Njcm9sbFBvcnRFdmVudDsKc3RydWN0IG5zSW5wdXRFdmVudDsKc3RydWN0IG5zTW91 c2VFdmVudDsKc3RydWN0IG5zQWNjZXNzaWJsZUV2ZW50OwpzdHJ1Y3QgbnNLZXlFdmVudDsKc3Ry dWN0IG5zVGV4dEV2ZW50OwpzdHJ1Y3QgbnNDb21wb3NpdGlvbkV2ZW50OwpzdHJ1Y3QgbnNNb3Vz ZVNjcm9sbEV2ZW50OwpzdHJ1Y3QgbnNSZWNvbnZlcnNpb25FdmVudDsKc3RydWN0IG5zVG9vbHRp cEV2ZW50OwpzdHJ1Y3QgbnNNZW51RXZlbnQ7CgpzdHJ1Y3QgbnNUZXh0RXZlbnRSZXBseTsKc3Ry dWN0IG5zUmVjb252ZXJzaW9uRXZlbnRSZXBseTsKIyA0NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2NvbnRlbnQvbnNJQ29udGVudC5oIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250 ZW50L25zQ29udGVudEVycm9ycy5oIiAxCiMgNDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250 ZW50L25zSUNvbnRlbnQuaCIgMgoKCmNsYXNzIG5zSUF0b207CmNsYXNzIG5zSURvY3VtZW50Owpj bGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNWb2lkQXJyYXk7CmNsYXNzIG5zSURPTUV2ZW50 OwpjbGFzcyBuc0lDb250ZW50OwpjbGFzcyBuc0lTdXBwb3J0c0FycmF5OwpjbGFzcyBuc0lET01S YW5nZTsKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNJTm9kZUluZm87CmNsYXNzIG5z SUV2ZW50TGlzdGVuZXJNYW5hZ2VyOwojIDY5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVu dC9uc0lDb250ZW50LmgiCmNsYXNzIG5zSUNvbnRlbnQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpw dWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE IGlpZCA9IHsgMHg3ODAzMDIyMCwgMHg5NDQ3LCAweDExZDEsIHsweDkzLCAweDIzLCAweDAwLCAw eDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnQobnNJRG9jdW1lbnQqJiBhUmVzdWx0KSBjb25zdCA9IDA7 CiMgODcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldERvY3VtZW50KG5zSURvY3VtZW50KiBhRG9jdW1lbnQsIFBSQm9vbCBh RGVlcCwgUFJCb29sIGFDb21waWxlRXZlbnRIYW5kbGVycykgPSAwOwoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRQYXJlbnQobnNJQ29udGVudComIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhcmVudChuc0lDb250ZW50KiBhUGFyZW50KSA9IDA7CgoK CgoKCiAgdmlydHVhbCBQUkJvb2wgSXNOYXRpdmVBbm9ueW1vdXMoKSBjb25zdCA9IDA7CgoKCgoK CiAgdmlydHVhbCB2b2lkIFNldE5hdGl2ZUFub255bW91cyhQUkJvb2wgYUFub255bW91cykgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lU3BhY2VJRChQUkludDMyJiBhUmVzdWx0 KSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhZyhuc0lBdG9tKiYgYVJl c3VsdCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb2RlSW5mbyhuc0lO b2RlSW5mbyomIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2Fu Q29udGFpbkNoaWxkcmVuKFBSQm9vbCYgYVJlc3VsdCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDaGlsZENvdW50KFBSSW50MzImIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IENoaWxkQXQoUFJJbnQzMiBhSW5kZXgsIG5zSUNvbnRlbnQqJiBh UmVzdWx0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbmRleE9mKG5zSUNv bnRlbnQqIGFQb3NzaWJsZUNoaWxkLCBQUkludDMyJiBhSW5kZXgpIGNvbnN0ID0gMDsKIyAxNzAg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEluc2VydENoaWxkQXQobnNJQ29udGVudCogYUtpZCwgUFJJbnQzMiBhSW5kZXgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5LCBQUkJvb2wgYURlZXBTZXRE b2N1bWVudCkgPSAwOwojIDE4MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29u dGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFjZUNoaWxkQXQobnNJQ29udGVudCogYUtp ZCwgUFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5v dGlmeSwgUFJCb29sIGFEZWVwU2V0RG9jdW1lbnQpID0gMDsKIyAxOTMgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZENo aWxkVG8obnNJQ29udGVudCogYUtpZCwgUFJCb29sIGFOb3RpZnksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBSQm9vbCBhRGVlcFNldERvY3VtZW50KSA9IDA7CiMgMjAzICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1v dmVDaGlsZEF0KFBSSW50MzIgYUluZGV4LCBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDIxNSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgTm9ybWFsaXplQXR0clN0cmluZyhjb25zdCBuc0FTdHJpbmcmIGFTdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSU5vZGVJbmZvKiYgYU5vZGVJbmZvKSA9IDA7CiMgMjMx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAg ICAgICAgIFBSQm9vbCBhTm90aWZ5KSA9IDA7CiMgMjQ4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv Y29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyKG5zSU5vZGVJ bmZvKiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZh bHVlLAogICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDI2NSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCiAgICAgICAg ICAgICAgICAgICAgIG5zQVN0cmluZyYgYVJlc3VsdCkgY29uc3QgPSAwOwojIDI4MyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCiAgICAgICAgICAg ICAgICAgICAgIG5zSUF0b20qJiBhUHJlZml4LCBuc0FTdHJpbmcmIGFSZXN1bHQpIGNvbnN0ID0g MDsKIyAyOTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2 aXJ0dWFsIFBSQm9vbCBIYXNBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFt ZSkgY29uc3QgPSAwOwojIDMwNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29u dGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgVW5zZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlE LCBuc0lBdG9tKiBhQXR0ciwKICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkg PSAwOwojIDMxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0ck5hbWVBdChQUkludDMyIGFJbmRleCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJJbnQzMiYgYU5hbWVTcGFjZUlELAogICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lBdG9tKiYgYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SUF0b20qJiBhUHJlZml4KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRB dHRyQ291bnQoUFJJbnQzMiYgYUNvdW50UmVzdWx0KSBjb25zdCA9IDA7CiMgMzQxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS YW5nZUFkZChuc0lET01SYW5nZSogYVJhbmdlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg UmFuZ2VSZW1vdmUobnNJRE9NUmFuZ2UqIGFSYW5nZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFJhbmdlTGlzdChuc1ZvaWRBcnJheSomIGFSZXN1bHQpIGNvbnN0ID0gMDsKIyAzODUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEhhbmRsZURPTUV2ZW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50KiBhRXZlbnQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lET01FdmVudCoqIGFET01FdmVudCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSVWludDMyIGFGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZl bnRTdGF0dXMqIGFFdmVudFN0YXR1cykgPSAwOwojIDQwNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudElEKFBS VWludDMyKiBhSUQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb250ZW50SUQoUFJV aW50MzIgYUlEKSA9IDA7CiMgNDIzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lD b250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb2N1cyhuc0lQcmVzQ29udGV4dCogYVBy ZXNDb250ZXh0KSA9IDA7CiMgNDM1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lD b250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVGb2N1cyhuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0KSA9IDA7CiMgNDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9u c0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCaW5kaW5nUGFyZW50KG5zSUNvbnRl bnQqIGFDb250ZW50KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmluZGluZ1Bh cmVudChuc0lDb250ZW50KiogYUNvbnRlbnQpID0gMDsKCgoKCiAgZW51bSB7CgogICAgZVRFWFQg PSAweDAwMDAwMDAxLAoKICAgIGVFTEVNRU5UID0gMHgwMDAwMDAwMiwKCiAgICBlSFRNTCA9IDB4 MDAwMDAwMDQsCgogICAgZUhUTUxfRk9STV9DT05UUk9MID0gMHgwMDAwMDAwOCwKCiAgICBlWFVM ID0gMHgwMDAwMDAxMAogIH07CiMgNDc5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9u c0lDb250ZW50LmgiCiAgdmlydHVhbCBQUkJvb2wgSXNDb250ZW50T2ZUeXBlKFBSVWludDMyIGFG bGFncykgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlzdGVuZXJNYW5hZ2VyKG5z SUV2ZW50TGlzdGVuZXJNYW5hZ2VyKiogYVJlc3VsdCkgPSAwOwojIDUxNCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRG9uZUNy ZWF0aW5nRWxlbWVudCgpID0gMDsKIyA1NDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50 L25zSUNvbnRlbnQuaCIKfTsKIyA2MyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIgMQojIDQ1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvY29udGVudC9uc0lEb2N1bWVudC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9jb250ZW50L25zQ2hhbmdlSGludC5oIiAxCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9jb250ZW50L25zQ2hhbmdlSGludC5oIgplbnVtIG5zQ2hhbmdlSGludCB7CiAgbnNDaGFuZ2VI aW50X05vbmUgPSAwLAogIG5zQ2hhbmdlSGludF9Vbmtub3duID0gMHgwMSwKICBuc0NoYW5nZUhp bnRfQXR0ckNoYW5nZSA9IDB4MDIsCiAgbnNDaGFuZ2VIaW50X0F1cmFsID0gMHgwNCwKICBuc0No YW5nZUhpbnRfQ29udGVudCA9IDB4MDgsCiAgbnNDaGFuZ2VIaW50X1JlcGFpbnRGcmFtZSA9IDB4 MTAsCiAgbnNDaGFuZ2VIaW50X1JlZmxvd0ZyYW1lID0gMHgyMCwKICBuc0NoYW5nZUhpbnRfU3lu Y0ZyYW1lVmlldyA9IDB4NDAsCiAgbnNDaGFuZ2VIaW50X1JlY29uc3RydWN0RnJhbWUgPSAweDgw LAoKICBuc0NoYW5nZUhpbnRfUmVjb25zdHJ1Y3REb2MgPSAweDEwMAoKCgoKCn07CiMgNzggIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zQ2hhbmdlSGludC5oIgppbmxpbmUgbnNDaGFu Z2VIaW50IE5TX0NvbWJpbmVIaW50KG5zQ2hhbmdlSGludCBhSDEsIG5zQ2hhbmdlSGludCBhSDIp IHsKICByZXR1cm4gKG5zQ2hhbmdlSGludCkoYUgxIHwgYUgyKTsKfQoKCmlubGluZSBuc0NoYW5n ZUhpbnQgTlNfU3VidHJhY3RIaW50KG5zQ2hhbmdlSGludCBhSDEsIG5zQ2hhbmdlSGludCBhSDIp IHsKICByZXR1cm4gKG5zQ2hhbmdlSGludCkoYUgxICYgfmFIMik7Cn0KCgoKaW5saW5lIFBSQm9v bCBOU19VcGRhdGVIaW50KG5zQ2hhbmdlSGludCYgYURlc3QsIG5zQ2hhbmdlSGludCBhU3JjKSB7 CiAgbnNDaGFuZ2VIaW50IHIgPSAobnNDaGFuZ2VIaW50KShhRGVzdCB8IGFTcmMpOwogIFBSQm9v bCBjaGFuZ2VkID0gKGludClyICE9IChpbnQpYURlc3Q7CiAgYURlc3QgPSByOwogIHJldHVybiBj aGFuZ2VkOwp9CgoKaW5saW5lIFBSQm9vbCBOU19Jc0hpbnRTdWJzZXQobnNDaGFuZ2VIaW50IGFT dWJzZXQsIG5zQ2hhbmdlSGludCBhU3VwZXJTZXQpIHsKICByZXR1cm4gKGFTdWJzZXQgJiBhU3Vw ZXJTZXQpID09IGFTdWJzZXQ7Cn0KCgpjb25zdCBuc0NoYW5nZUhpbnQgTlNfU1RZTEVfSElOVF9V TktOT1dOID0gbnNDaGFuZ2VIaW50X1Vua25vd247CmNvbnN0IG5zQ2hhbmdlSGludCBOU19TVFlM RV9ISU5UX05PTkUgPSBuc0NoYW5nZUhpbnRfTm9uZTsKY29uc3QgbnNDaGFuZ2VIaW50IE5TX1NU WUxFX0hJTlRfQVRUUkNIQU5HRSA9IG5zQ2hhbmdlSGludF9BdHRyQ2hhbmdlOwpjb25zdCBuc0No YW5nZUhpbnQgTlNfU1RZTEVfSElOVF9BVVJBTCA9IChuc0NoYW5nZUhpbnQpCiAgKG5zQ2hhbmdl SGludF9BdHRyQ2hhbmdlIHwgbnNDaGFuZ2VIaW50X0F1cmFsKTsKY29uc3QgbnNDaGFuZ2VIaW50 IE5TX1NUWUxFX0hJTlRfQ09OVEVOVCA9IChuc0NoYW5nZUhpbnQpCiAgKG5zQ2hhbmdlSGludF9B dHRyQ2hhbmdlIHwgbnNDaGFuZ2VIaW50X0F1cmFsIHwgbnNDaGFuZ2VIaW50X0NvbnRlbnQpOwpj b25zdCBuc0NoYW5nZUhpbnQgTlNfU1RZTEVfSElOVF9WSVNVQUwgPSAobnNDaGFuZ2VIaW50KQog IChuc0NoYW5nZUhpbnRfQXR0ckNoYW5nZSB8IG5zQ2hhbmdlSGludF9BdXJhbCB8IG5zQ2hhbmdl SGludF9Db250ZW50IHwgbnNDaGFuZ2VIaW50X1JlcGFpbnRGcmFtZQogICB8IG5zQ2hhbmdlSGlu dF9TeW5jRnJhbWVWaWV3KTsKY29uc3QgbnNDaGFuZ2VIaW50IE5TX1NUWUxFX0hJTlRfUkVGTE9X ID0gKG5zQ2hhbmdlSGludCkKICAobnNDaGFuZ2VIaW50X0F0dHJDaGFuZ2UgfCBuc0NoYW5nZUhp bnRfQXVyYWwgfCBuc0NoYW5nZUhpbnRfQ29udGVudCB8IG5zQ2hhbmdlSGludF9SZXBhaW50RnJh bWUKICAgfCBuc0NoYW5nZUhpbnRfU3luY0ZyYW1lVmlldyB8IG5zQ2hhbmdlSGludF9SZWZsb3dG cmFtZSk7CmNvbnN0IG5zQ2hhbmdlSGludCBOU19TVFlMRV9ISU5UX0ZSQU1FQ0hBTkdFID0gKG5z Q2hhbmdlSGludCkKICAobnNDaGFuZ2VIaW50X0F0dHJDaGFuZ2UgfCBuc0NoYW5nZUhpbnRfQXVy YWwgfCBuc0NoYW5nZUhpbnRfQ29udGVudCB8IG5zQ2hhbmdlSGludF9SZXBhaW50RnJhbWUKICAg fCBuc0NoYW5nZUhpbnRfU3luY0ZyYW1lVmlldyB8IG5zQ2hhbmdlSGludF9SZWZsb3dGcmFtZSB8 IG5zQ2hhbmdlSGludF9SZWNvbnN0cnVjdEZyYW1lKTsKY29uc3QgbnNDaGFuZ2VIaW50IE5TX1NU WUxFX0hJTlRfUkVDT05TVFJVQ1RfQUxMID0gKG5zQ2hhbmdlSGludCkKICAobnNDaGFuZ2VIaW50 X0F0dHJDaGFuZ2UgfCBuc0NoYW5nZUhpbnRfQXVyYWwgfCBuc0NoYW5nZUhpbnRfQ29udGVudCB8 IG5zQ2hhbmdlSGludF9SZXBhaW50RnJhbWUKICAgfCBuc0NoYW5nZUhpbnRfU3luY0ZyYW1lVmll dyB8IG5zQ2hhbmdlSGludF9SZWZsb3dGcmFtZSB8IG5zQ2hhbmdlSGludF9SZWNvbnN0cnVjdEZy YW1lCiAgIHwgbnNDaGFuZ2VIaW50X1JlY29uc3RydWN0RG9jKTsKIyA0NiAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0NPTUFycmF5LmgiIDEKIyA1MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zQ09NQXJyYXkuaCIKY2xhc3MgbnNDT01BcnJheV9iYXNlCnsKICAgIGZyaWVuZCBjbGFz cyBuc0FycmF5Owpwcm90ZWN0ZWQ6CiAgICBuc0NPTUFycmF5X2Jhc2UoKSB7fQogICAgbnNDT01B cnJheV9iYXNlKFBSSW50MzIgYUNvdW50KSA6IG1BcnJheShhQ291bnQpIHt9CiAgICBuc0NPTUFy cmF5X2Jhc2UoY29uc3QgbnNDT01BcnJheV9iYXNlJiBvdGhlcik7CiAgICB+bnNDT01BcnJheV9i YXNlKCk7CgogICAgUFJJbnQzMiBJbmRleE9mKG5zSVN1cHBvcnRzKiBhT2JqZWN0KSBjb25zdCB7 CiAgICAgICAgcmV0dXJuIG1BcnJheS5JbmRleE9mKGFPYmplY3QpOwogICAgfQoKICAgIFBSQm9v bCBFbnVtZXJhdGVGb3J3YXJkcyhuc1ZvaWRBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0 YSkgewogICAgICAgIHJldHVybiBtQXJyYXkuRW51bWVyYXRlRm9yd2FyZHMoYUZ1bmMsIGFEYXRh KTsKICAgIH0KCiAgICBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRzKG5zVm9pZEFycmF5RW51bUZ1 bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKSB7CiAgICAgICAgcmV0dXJuIG1BcnJheS5FbnVtZXJhdGVC YWNrd2FyZHMoYUZ1bmMsIGFEYXRhKTsKICAgIH0KCgoKCiAgICB2b2lkIENsZWFyKCk7CiAgICBQ UkJvb2wgSW5zZXJ0T2JqZWN0QXQobnNJU3VwcG9ydHMqIGFPYmplY3QsIFBSSW50MzIgYUluZGV4 KTsKICAgIFBSQm9vbCBJbnNlcnRPYmplY3RzQXQoY29uc3QgbnNDT01BcnJheV9iYXNlJiBhT2Jq ZWN0cywgUFJJbnQzMiBhSW5kZXgpOwogICAgUFJCb29sIFJlcGxhY2VPYmplY3RBdChuc0lTdXBw b3J0cyogYU9iamVjdCwgUFJJbnQzMiBhSW5kZXgpOwogICAgUFJCb29sIEFwcGVuZE9iamVjdChu c0lTdXBwb3J0cyAqYU9iamVjdCkgewogICAgICAgIHJldHVybiBJbnNlcnRPYmplY3RBdChhT2Jq ZWN0LCBDb3VudCgpKTsKICAgIH0KICAgIFBSQm9vbCBBcHBlbmRPYmplY3RzKGNvbnN0IG5zQ09N QXJyYXlfYmFzZSYgYU9iamVjdHMpIHsKICAgICAgICByZXR1cm4gSW5zZXJ0T2JqZWN0c0F0KGFP YmplY3RzLCBDb3VudCgpKTsKICAgIH0KICAgIFBSQm9vbCBSZW1vdmVPYmplY3QobnNJU3VwcG9y dHMgKmFPYmplY3QpOwogICAgUFJCb29sIFJlbW92ZU9iamVjdEF0KFBSSW50MzIgYUluZGV4KTsK CnB1YmxpYzoKCgogICAgUFJJbnQzMiBDb3VudCgpIGNvbnN0IHsKICAgICAgICByZXR1cm4gbUFy cmF5LkNvdW50KCk7CiAgICB9CgogICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4qIE9iamVj dEF0KFBSSW50MzIgYUluZGV4KSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh c3Q8IG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+KiA+KG1BcnJheS5FbGVtZW50QXQoYUluZGV4 KSk7CiAgICB9CgogICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4qIG9wZXJhdG9yW10oUFJJ bnQzMiBhSW5kZXgpIGNvbnN0IHsKICAgICAgICByZXR1cm4gT2JqZWN0QXQoYUluZGV4KTsKICAg IH0KCnByaXZhdGU6CgoKICAgIG5zVm9pZEFycmF5IG1BcnJheTsKCgogICAgbnNDT01BcnJheV9i YXNlJiBvcGVyYXRvcj0oY29uc3QgbnNDT01BcnJheV9iYXNlJiBvdGhlcik7Cn07CiMgMTI5ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01BcnJheS5oIgp0ZW1wbGF0ZSA8Y2xhc3Mg VD4KY2xhc3MgbnNDT01BcnJheSA6IHB1YmxpYyBuc0NPTUFycmF5X2Jhc2UKewogcHVibGljOgog ICAgbnNDT01BcnJheSgpIHt9CiAgICBuc0NPTUFycmF5KFBSSW50MzIgYUNvdW50KSA6IG5zQ09N QXJyYXlfYmFzZShhQ291bnQpIHt9CgoKCiAgICBuc0NPTUFycmF5KGNvbnN0IG5zQ09NQXJyYXk8 VD4mIGFPdGhlcikgOiBuc0NPTUFycmF5X2Jhc2UoYU90aGVyKSB7IH0KCiAgICB+bnNDT01BcnJh eSgpIHt9CgoKICAgIG5zRGVyaXZlZFNhZmU8VD4qIE9iamVjdEF0KFBSSW50MzIgYUluZGV4KSBj b25zdCB7CiAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRGVyaXZlZFNhZmU8VD4q ID4obnNDT01BcnJheV9iYXNlOjpPYmplY3RBdChhSW5kZXgpKTsKICAgIH0KCgogICAgbnNEZXJp dmVkU2FmZTxUPiogb3BlcmF0b3JbXShQUkludDMyIGFJbmRleCkgY29uc3QgewogICAgICAgIHJl dHVybiBPYmplY3RBdChhSW5kZXgpOwogICAgfQoKCiAgICBQUkludDMyIEluZGV4T2YoVCogYU9i amVjdCkgY29uc3QgewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OkluZGV4T2Yoc3Rh dGljX2Nhc3Q8IG5zSVN1cHBvcnRzKiA+KGFPYmplY3QpKTsKICAgIH0KCgoKICAgIFBSQm9vbCBJ bnNlcnRPYmplY3RBdChUKiBhT2JqZWN0LCBQUkludDMyIGFJbmRleCkgewogICAgICAgIHJldHVy biBuc0NPTUFycmF5X2Jhc2U6Okluc2VydE9iamVjdEF0KHN0YXRpY19jYXN0PCBuc0lTdXBwb3J0 cyogPihhT2JqZWN0KSwgYUluZGV4KTsKICAgIH0KCgoKICAgIFBSQm9vbCBJbnNlcnRPYmplY3Rz QXQoY29uc3QgbnNDT01BcnJheTxUPiYgYU9iamVjdHMsIFBSSW50MzIgYUluZGV4KSB7CiAgICAg ICAgcmV0dXJuIG5zQ09NQXJyYXlfYmFzZTo6SW5zZXJ0T2JqZWN0c0F0KGFPYmplY3RzLCBhSW5k ZXgpOwogICAgfQoKCgogICAgUFJCb29sIFJlcGxhY2VPYmplY3RBdChUKiBhT2JqZWN0LCBQUklu dDMyIGFJbmRleCkgewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OlJlcGxhY2VPYmpl Y3RBdChzdGF0aWNfY2FzdDwgbnNJU3VwcG9ydHMqID4oYU9iamVjdCksIGFJbmRleCk7CiAgICB9 CgoKCgoKICAgIFBSSW50MzIgQ291bnQoKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIG5zQ09NQXJy YXlfYmFzZTo6Q291bnQoKTsKICAgIH0KCgogICAgdm9pZCBDbGVhcigpIHsKICAgICAgICBuc0NP TUFycmF5X2Jhc2U6OkNsZWFyKCk7CiAgICB9CgoKCgogICAgdHlwZWRlZiBQUkJvb2wgKCogbnND T01BcnJheUVudW1GdW5jKQogICAgICAgIChUKiBhRWxlbWVudCwgdm9pZCAqYURhdGEpOwoKCiAg ICBQUkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNDT01BcnJheUVudW1GdW5jIGFGdW5jLCB2b2lk KiBhRGF0YSkgewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OkVudW1lcmF0ZUZvcndh cmRzKG5zVm9pZEFycmF5RW51bUZ1bmMoYUZ1bmMpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFEYXRhKTsKICAgIH0KCiAgICBQUkJvb2wgRW51bWVy YXRlQmFja3dhcmRzKG5zQ09NQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpIHsKICAg ICAgICByZXR1cm4gbnNDT01BcnJheV9iYXNlOjpFbnVtZXJhdGVCYWNrd2FyZHMobnNWb2lkQXJy YXlFbnVtRnVuYyhhRnVuYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYURhdGEpOwogICAgfQoKCiAgICBQUkJvb2wgQXBwZW5kT2JqZWN0KFQgKmFP YmplY3QpIHsKICAgICAgICByZXR1cm4gbnNDT01BcnJheV9iYXNlOjpBcHBlbmRPYmplY3Qoc3Rh dGljX2Nhc3Q8IG5zSVN1cHBvcnRzKiA+KGFPYmplY3QpKTsKICAgIH0KCgogICAgUFJCb29sIEFw cGVuZE9iamVjdHMoY29uc3QgbnNDT01BcnJheTxUPiYgYU9iamVjdHMpIHsKICAgICAgICByZXR1 cm4gbnNDT01BcnJheV9iYXNlOjpBcHBlbmRPYmplY3RzKGFPYmplY3RzKTsKICAgIH0KCgoKCiAg ICBQUkJvb2wgUmVtb3ZlT2JqZWN0KFQgKmFPYmplY3QpIHsKICAgICAgICByZXR1cm4gbnNDT01B cnJheV9iYXNlOjpSZW1vdmVPYmplY3Qoc3RhdGljX2Nhc3Q8IG5zSVN1cHBvcnRzKiA+KGFPYmpl Y3QpKTsKICAgIH0KCgoKICAgIFBSQm9vbCBSZW1vdmVPYmplY3RBdChQUkludDMyIGFJbmRleCkg ewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OlJlbW92ZU9iamVjdEF0KGFJbmRleCk7 CiAgICB9Cgpwcml2YXRlOgoKCiAgICBuc0NPTUFycmF5PFQ+JiBvcGVyYXRvcj0oY29uc3QgbnND T01BcnJheTxUPiYgb3RoZXIpOwp9OwojIDQ3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVu dC9uc0lEb2N1bWVudC5oIiAyCgpjbGFzcyBuc0lBdG9tOwpjbGFzcyBuc0lBcmVuYTsKY2xhc3Mg bnNJQ29udGVudDsKY2xhc3MgbnNJRG9jdW1lbnRDb250YWluZXI7CmNsYXNzIG5zSURvY3VtZW50 T2JzZXJ2ZXI7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lQcmVzU2hlbGw7CgpjbGFz cyBuc0lTdHJlYW1MaXN0ZW5lcjsKY2xhc3MgbnNJU3RyZWFtT2JzZXJ2ZXI7CmNsYXNzIG5zSVN0 eWxlU2V0OwpjbGFzcyBuc0lTdHlsZVNoZWV0OwpjbGFzcyBuc0lTdHlsZVJ1bGU7CmNsYXNzIG5z SVVSSTsKY2xhc3MgbnNJTG9hZEdyb3VwOwpjbGFzcyBuc0lWaWV3TWFuYWdlcjsKY2xhc3MgbnNJ U2NyaXB0R2xvYmFsT2JqZWN0OwpjbGFzcyBuc0lET01FdmVudDsKY2xhc3MgbnNJRGV2aWNlQ29u dGV4dDsKY2xhc3MgbnNJUGFyc2VyOwpjbGFzcyBuc0lET01Ob2RlOwpjbGFzcyBuc0lET01Eb2N1 bWVudEZyYWdtZW50OwpjbGFzcyBuc0lMaW5lQnJlYWtlcjsKY2xhc3MgbnNJV29yZEJyZWFrZXI7 CmNsYXNzIG5zSVNlbGVjdGlvbjsKY2xhc3MgbnNJQ2hhbm5lbDsKY2xhc3MgbnNJUHJpbmNpcGFs OwpjbGFzcyBuc0lOb2RlSW5mb01hbmFnZXI7CmNsYXNzIG5zSURPTURvY3VtZW50OwpjbGFzcyBu c0lET01Eb2N1bWVudFR5cGU7CmNsYXNzIG5zSUJpbmRpbmdNYW5hZ2VyOwpjbGFzcyBuc0lPYnNl cnZlcjsKY2xhc3MgbnNJU3VwcG9ydHNBcnJheTsKY2xhc3MgbnNJU2NyaXB0TG9hZGVyOwpjbGFz cyBuc1N0cmluZzsKY2xhc3MgbnNJQ29udGVudFNpbms7CmNsYXNzIG5zSVNjcmlwdEV2ZW50TWFu YWdlcjsKIyAxMDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSURvY3VtZW50Lmgi CmNsYXNzIG5zSURvY3VtZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4OTRj NmNlYjAsIDB4OTQ0NywgMHgxMWQxLCB7MHg5MywgMHgyMywgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4 YSwgMHhkZCwgMHgzMn0gfTsgcmV0dXJuIGlpZDt9CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 QXJlbmEobnNJQXJlbmEqKiBhQXJlbmEpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdGFydERv Y3VtZW50TG9hZChjb25zdCBjaGFyKiBhQ29tbWFuZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJTG9hZEdyb3VwKiBhTG9hZEdyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJU3VwcG9ydHMqIGFDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lTdHJlYW1MaXN0ZW5lciAqKmFEb2NMaXN0ZW5lciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBSQm9vbCBhUmVzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lDb250ZW50U2luayogYVNpbmsgPSAwKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcERv Y3VtZW50TG9hZCgpID0gMDsKCgoKCiAgdmlydHVhbCBjb25zdCBuc1N0cmluZyogR2V0RG9jdW1l bnRUaXRsZSgpIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudFVS TChuc0lVUkkqKiBhVVJMKSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREb2N1bWVu dFVSTChuc0lVUkkqIGFVUkwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmluY2lw YWwobnNJUHJpbmNpcGFsICoqYVByaW5jaXBhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBBZGRQcmluY2lwYWwobnNJUHJpbmNpcGFsICphUHJpbmNpcGFsKSA9IDA7CgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnRMb2FkR3JvdXAobnNJTG9hZEdyb3VwKiogYUdyb3VwKSBj b25zdCA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFzZVVSTChuc0lVUkkqJiBhVVJM KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCYXNlVVJMKG5zSVVSSSogYVVSTCkg PSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhc2VUYXJnZXQobnNBU3RyaW5nICZhQmFz ZVRhcmdldCk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJhc2VUYXJnZXQoY29uc3QgbnNBU3Ry aW5nICZhQmFzZVRhcmdldCk9MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnRD aGFyYWN0ZXJTZXQobnNBU3RyaW5nJiBvQ2hhclNldElEKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXREb2N1bWVudENoYXJhY3RlclNldChjb25zdCBuc0FTdHJpbmcmIGFDaGFyU2V0SUQpID0g MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudENoYXJhY3RlclNldFNvdXJjZShQUklu dDMyKiBhQ2hhcnNldFNvdXJjZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RG9jdW1lbnRD aGFyYWN0ZXJTZXRTb3VyY2UoUFJJbnQzMiBhQ2hhcnNldFNvdXJjZSkgPSAwOwoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgQWRkQ2hhclNldE9ic2VydmVyKG5zSU9ic2VydmVyKiBhT2JzZXJ2ZXIpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVDaGFyU2V0T2JzZXJ2ZXIobnNJT2JzZXJ2 ZXIqIGFPYnNlcnZlcikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRUeXBl KG5zQVN0cmluZyYgYUNvbnRlbnRUeXBlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 Q29udGVudFR5cGUoY29uc3QgbnNBU3RyaW5nJiBhQ29udGVudFR5cGUpID0gMDsKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50TGFuZ3VhZ2UobnNBU3RyaW5nJiBhQ29udGVudExhbmd1 YWdlKSBjb25zdCA9IDA7CiMgMTk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lE b2N1bWVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaUVuYWJsZWQoUFJCb29sKiBhQmlk aUVuYWJsZWQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCaWRpRW5h YmxlZChQUkJvb2wgYUJpZGlFbmFibGVkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TGluZUJyZWFrZXIobnNJTGluZUJyZWFrZXIqKiBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRMaW5lQnJlYWtlcihuc0lMaW5lQnJlYWtlciogYUxpbmVCcmVha2VyKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRXb3JkQnJlYWtlcihuc0lXb3JkQnJlYWtlcioqIGFSZXN1bHQp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdvcmRCcmVha2VyKG5zSVdvcmRCcmVha2VyKiBh V29yZEJyZWFrZXIpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVhZGVyRGF0YShu c0lBdG9tKiBhSGVhZGVyRmllbGQsIG5zQVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldEhlYWRlckRhdGEobnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBu c0FTdHJpbmcmIGFEYXRhKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVTaGVs bChuc0lQcmVzQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lW aWV3TWFuYWdlciogYVZpZXdNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5 bGVTZXQqIGFTdHlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCoq IGFJbnN0YW5jZVB0clJlc3VsdCkgPSAwOwogIHZpcnR1YWwgUFJCb29sIERlbGV0ZVNoZWxsKG5z SVByZXNTaGVsbCogYVNoZWxsKSA9IDA7CiAgdmlydHVhbCBQUkludDMyIEdldE51bWJlck9mU2hl bGxzKCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2hlbGxBdChQUkludDMyIGFJbmRleCwg bnNJUHJlc1NoZWxsKiogYVNoZWxsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ YXJlbnREb2N1bWVudChuc0lEb2N1bWVudCoqIGFQYXJlbnQpID0gMDsKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRQYXJlbnREb2N1bWVudChuc0lEb2N1bWVudCogYVBhcmVudCkgPSAwOwoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN1YkRvY3VtZW50Rm9yKG5zSUNvbnRlbnQgKmFDb250ZW50 LCBuc0lEb2N1bWVudCogYVN1YkRvYykgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN1 YkRvY3VtZW50Rm9yKG5zSUNvbnRlbnQgKmFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJRG9jdW1lbnQqKiBhU3ViRG9jKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgRmluZENvbnRlbnRGb3JTdWJEb2N1bWVudChuc0lEb2N1bWVudCAqYURvY3VtZW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50ICoqYUNvbnRlbnQp ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSb290Q29udGVudChuc0lDb250ZW50Kiog YVJvb3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJvb3RDb250ZW50KG5zSUNvbnRlbnQq IGFSb290KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENoaWxkQXQoUFJJbnQzMiBhSW5k ZXgsIG5zSUNvbnRlbnQqJiBhUmVzdWx0KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBJ bmRleE9mKG5zSUNvbnRlbnQqIGFQb3NzaWJsZUNoaWxkLCBQUkludDMyJiBhSW5kZXgpIGNvbnN0 ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkQ291bnQoUFJJbnQzMiYgYUNvdW50KSA9 IDA7CiMgMjk1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lEb2N1bWVudC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0TnVtYmVyT2ZTdHlsZVNoZWV0cyhQUkJvb2wgYUluY2x1ZGVT cGVjaWFsU2hlZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy KiBhQ291bnQpID0gMDsKIyAzMDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSURv Y3VtZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5k ZXgsIFBSQm9vbCBhSW5jbHVkZVNwZWNpYWxTaGVldHMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJU3R5bGVTaGVldCoqIGFTaGVldCkgPSAwOwojIDMxNiAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydFN0 eWxlU2hlZXRBdChuc0lTdHlsZVNoZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJJbnQzMiBhSW5kZXgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRJbmRleE9mU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQsIFBSSW50MzIqIGFJbmRl eCkgPSAwOwojIDMzNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZVN0eWxlU2hlZXRzKG5zQ09NQXJyYXk8bnNJU3R5 bGVTaGVldD4mIGFPbGRTaGVldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NP TUFycmF5PG5zSVN0eWxlU2hlZXQ+JiBhTmV3U2hlZXRzKSA9IDA7CgoKCgogIHZpcnR1YWwgdm9p ZCBBZGRTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFTaGVldCwgUFJVaW50MzIgYUZsYWdzKSA9 IDA7CgoKCgogIHZpcnR1YWwgdm9pZCBSZW1vdmVTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFT aGVldCkgPSAwOwoKCgoKCiAgdmlydHVhbCB2b2lkIFNldFN0eWxlU2hlZXRBcHBsaWNhYmxlU3Rh dGUobnNJU3R5bGVTaGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBSQm9vbCBhQXBwbGljYWJsZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0U2NyaXB0R2xvYmFsT2JqZWN0KG5zSVNjcmlwdEdsb2JhbE9iamVjdCoqIGFHbG9i YWxPYmplY3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcmlwdEdsb2JhbE9iamVjdChu c0lTY3JpcHRHbG9iYWxPYmplY3QqIGFHbG9iYWxPYmplY3QpID0gMDsKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRTY3JpcHRMb2FkZXIobnNJU2NyaXB0TG9hZGVyKiogYVNjcmlwdExvYWRlcikg PSAwOwojIDM3NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIK ICB2aXJ0dWFsIHZvaWQgQWRkT2JzZXJ2ZXIobnNJRG9jdW1lbnRPYnNlcnZlciogYU9ic2VydmVy KSA9IDA7CgoKCgoKICB2aXJ0dWFsIFBSQm9vbCBSZW1vdmVPYnNlcnZlcihuc0lEb2N1bWVudE9i c2VydmVyKiBhT2JzZXJ2ZXIpID0gMDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJlZ2luVXBkYXRl KCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgRW5kVXBkYXRlKCkgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgQmVnaW5Mb2FkKCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgRW5kTG9hZCgpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRDaGFuZ2VkKG5zSUNvbnRlbnQqIGFDb250ZW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFTdWJDb250ZW50KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRTdGF0ZXNDaGFuZ2VkKG5zSUNvbnRlbnQqIGFD b250ZW50MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFD b250ZW50MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYVN0YXRl TWFzaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlV2lsbENoYW5nZShuc0lDb250 ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU5h bWVTcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0 cmlidXRlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSUNvbnRl bnQqIGFDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNw YWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU1vZFR5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zQ2hhbmdlSGludCBhSGludCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgQ29udGVudEFwcGVuZGVkKG5zSUNvbnRlbnQqIGFDb250YWluZXIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmV3SW5kZXhJbkNvbnRhaW5lcikgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudEluc2VydGVkKG5zSUNvbnRlbnQqIGFDb250YWluZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUluZGV4SW5Db250YWluZXIpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRSZXBsYWNlZChuc0lDb250ZW50KiBhQ29udGFpbmVyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFPbGRDaGlsZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhTmV3Q2hpbGQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSW5kZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgQ29udGVudFJlbW92ZWQobnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBSSW50MzIgYUluZGV4SW5Db250YWluZXIpID0gMDsKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IFN0eWxlUnVsZUNoYW5nZWQobnNJU3R5bGVTaGVldCogYVN0eWxlU2hlZXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlUnVsZSogYVN0eWxlUnVsZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDaGFuZ2VIaW50IGFIaW50KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTdHlsZVJ1bGVBZGRlZChuc0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlUnVsZSogYVN0eWxlUnVsZSkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVSdWxlUmVtb3ZlZChuc0lTdHlsZVNoZWV0KiBhU3R5 bGVTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVSdWxlKiBhU3R5 bGVSdWxlKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRE9NRXZlbnQobnNJUHJlc0Nv bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnQq IGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURPTUV2ZW50KiogYURPTUV2 ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3RhdHVzKSA9IDA7Cgog IHZpcnR1YWwgUFJCb29sIEV2ZW50Q2FwdHVyZVJlZ2lzdHJhdGlvbihQUkludDMyIGFDYXB0dXJl ckluY3JlbWVudCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoUGVuZGluZ05vdGlmaWNh dGlvbnMoUFJCb29sIGFGbHVzaFJlZmxvd3M9MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUFJCb29sIGFVcGRhdGVWaWV3cz0wKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0QW5kSW5jcmVtZW50Q29udGVudElEKFBSSW50MzIqIGFJRCkgPSAwOwoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldEJpbmRpbmdNYW5hZ2VyKG5zSUJpbmRpbmdNYW5hZ2VyKiogYVJlc3VsdCkg PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5vZGVJbmZvTWFuYWdlcihuc0lOb2RlSW5mb01h bmFnZXIqJiBhTm9kZUluZm9NYW5hZ2VyKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzZXQo bnNJQ2hhbm5lbCogYUNoYW5uZWwsIG5zSUxvYWRHcm91cCogYUxvYWRHcm91cCkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgUmVzZXRUb1VSSShuc0lVUkkgKmFVUkksIG5zSUxvYWRHcm91cCogYUxv YWRHcm91cCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZFJlZmVyZW5jZSh2b2lkICphS2V5 LCBuc0lTdXBwb3J0cyAqYVJlZmVyZW5jZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3Zl UmVmZXJlbmNlKHZvaWQgKmFLZXksIG5zSVN1cHBvcnRzICoqYU9sZFJlZmVyZW5jZSkgPSAwOwoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbnRhaW5lcihuc0lTdXBwb3J0cyAqYUNvbnRhaW5l cikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRhaW5lcihuc0lTdXBwb3J0cyAq KmFDb250YWluZXIpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRFdmVudE1hbmFn ZXIobnNJU2NyaXB0RXZlbnRNYW5hZ2VyICoqYVJlc3VsdCkgPSAwOwp9OwoKCgpleHRlcm4gbnNy ZXN1bHQKICAgTlNfTmV3SFRNTERvY3VtZW50KG5zSURvY3VtZW50KiogYUluc3RhbmNlUHRyUmVz dWx0KTsKCmV4dGVybiBuc3Jlc3VsdAogICBOU19OZXdYTUxEb2N1bWVudChuc0lEb2N1bWVudCoq IGFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCgoKCmV4dGVybiBuc3Jlc3VsdAogICBOU19OZXdJbWFn ZURvY3VtZW50KG5zSURvY3VtZW50KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCmV4dGVybiBuc3Jl c3VsdAogICBOU19OZXdEb2N1bWVudEZyYWdtZW50KG5zSURPTURvY3VtZW50RnJhZ21lbnQqKiBh SW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRG9jdW1lbnQq IGFPd25lckRvY3VtZW50KTsKZXh0ZXJuIG5zcmVzdWx0CiAgIE5TX05ld0RPTURvY3VtZW50KG5z SURPTURvY3VtZW50KiogYUluc3RhbmNlUHRyUmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBj b25zdCBuc0FTdHJpbmcmIGFOYW1lc3BhY2VVUkksCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG5zQVN0cmluZyYgYVF1YWxpZmllZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgIG5zSURPTURv Y3VtZW50VHlwZSogYURvY3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSogYUJhc2VV UkkpOwojIDY0ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTURvY3VtZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lET01Eb2N1bWVudC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N Tm9kZS5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTm9kZS5oIgoj IDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vZG9tc3R1YnMuaCIgMQojIDE4ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL2RvbXN0dWJzLmgiCmlubGluZSBQUkJvb2wgRE9NU3RyaW5nSXNO dWxsKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZykKewogIHJldHVybiBhU3RyaW5nLklzVm9pZCgp Owp9CmlubGluZSB2b2lkIFNldERPTVN0cmluZ1RvTnVsbChuc0FTdHJpbmcmIGFTdHJpbmcpCnsK ICBhU3RyaW5nLlRydW5jYXRlKCk7CiAgYVN0cmluZy5TZXRJc1ZvaWQoMSk7Cn0KdHlwZWRlZiBQ UlVpbnQ2NCBET01UaW1lU3RhbXA7CgpjbGFzcyBuc0lET01BdHRyOwoKY2xhc3MgbnNJRE9NQ0RB VEFTZWN0aW9uOwoKY2xhc3MgbnNJRE9NQ2hhcmFjdGVyRGF0YTsKCmNsYXNzIG5zSURPTUNvbW1l bnQ7CgpjbGFzcyBuc0lET01ET01JbXBsZW1lbnRhdGlvbjsKCmNsYXNzIG5zSURPTURvY3VtZW50 OwoKY2xhc3MgbnNJRE9NRG9jdW1lbnRGcmFnbWVudDsKCmNsYXNzIG5zSURPTURvY3VtZW50VHlw ZTsKCmNsYXNzIG5zSURPTUVsZW1lbnQ7CgpjbGFzcyBuc0lET01FbnRpdHk7CgpjbGFzcyBuc0lE T01FbnRpdHlSZWZlcmVuY2U7CgpjbGFzcyBuc0lET01OU0RvY3VtZW50OwoKY2xhc3MgbnNJRE9N TmFtZWROb2RlTWFwOwoKY2xhc3MgbnNJRE9NTm9kZTsKCmNsYXNzIG5zSURPTU5vZGVMaXN0OwoK Y2xhc3MgbnNJRE9NTm90YXRpb247CgpjbGFzcyBuc0lET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247 CgpjbGFzcyBuc0lET01UZXh0OwoKY2xhc3MgRE9NRXhjZXB0aW9uOwoKY2xhc3MgUmFuZ2VFeGNl cHRpb247CgpjbGFzcyBuc0lET01TdHlsZVNoZWV0TGlzdDsKCmNsYXNzIG5zSURPTUxpbmtTdHls ZTsKCmNsYXNzIG5zSURPTVN0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01NZWRpYUxpc3Q7CgpjbGFz cyBuc0lET01BYnN0cmFjdFZpZXc7CgpjbGFzcyBuc0lET01Eb2N1bWVudFZpZXc7CgpjbGFzcyBu c0lET01XaW5kb3c7CgpjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5hbDsKCmNsYXNzIG5zSURPTVdp bmRvd0NvbGxlY3Rpb247CgpjbGFzcyBuc0lET01QbHVnaW47CgpjbGFzcyBuc0lET01QbHVnaW5B cnJheTsKCmNsYXNzIG5zSURPTU1pbWVUeXBlOwoKY2xhc3MgbnNJRE9NTWltZVR5cGVBcnJheTsK CmNsYXNzIG5zSURPTUJhclByb3A7CgpjbGFzcyBuc0lET01OYXZpZ2F0b3I7CgpjbGFzcyBuc0lE T01TY3JlZW47CgpjbGFzcyBuc0lET01IaXN0b3J5OwoKY2xhc3MgbnNJRE9NRXZlbnQ7CgpjbGFz cyBuc0lET01FdmVudFRhcmdldDsKCmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CgpjbGFzcyBu c0lET01FdmVudEdyb3VwOwoKY2xhc3MgbnNJRE9NSFRNTEVsZW1lbnQ7CgpjbGFzcyBuc0lET01I VE1MRm9ybUVsZW1lbnQ7CgpjbGFzcyBuc0lET01IVE1MQ29sbGVjdGlvbjsKCmNsYXNzIG5zSURP TUNTU1ZhbHVlOwoKY2xhc3MgbnNJRE9NQ1NTVmFsdWVMaXN0OwoKY2xhc3MgbnNJRE9NQ1NTUHJp bWl0aXZlVmFsdWU7CgpjbGFzcyBuc0lET01DU1NSdWxlOwoKY2xhc3MgbnNJRE9NQ1NTUnVsZUxp c3Q7CgpjbGFzcyBuc0lET01DU1NTdHlsZVNoZWV0OwoKY2xhc3MgbnNJRE9NQ1NTU3R5bGVEZWNs YXJhdGlvbjsKCmNsYXNzIG5zSURPTUNvdW50ZXI7CgpjbGFzcyBuc0lET01SZWN0OwoKY2xhc3Mg bnNJRE9NUkdCQ29sb3I7CgpjbGFzcyBuc0lET01DU1NTdHlsZVJ1bGU7CgpjbGFzcyBuc0lET01D U1NTdHlsZVJ1bGVDb2xsZWN0aW9uOwoKY2xhc3MgbnNJRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1l bnQ7CgpjbGFzcyBuc0lET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudDsKCmNsYXNzIG5zSURPTVJh bmdlOwoKY2xhc3MgbnNJRE9NQ1JNRk9iamVjdDsKCmNsYXNzIG5zSURPTUNyeXB0bzsKCmNsYXNz IG5zSURPTVBrY3MxMTsKIyAxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Ob2Rl LmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTTNOb2RlLmgiIDEK IyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET00zTm9kZS5oIgpjbGFzcyBuc0lE T00zTm9kZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyOWZiMmExOCwgMHgx ZGQyLCAweDExYjIsIHsgMHg4ZCwgMHhkOSwgMHhhNiwgMHhmZCwgMHg1ZCwgMHg1YSwgMHhkMSwg MHgyZiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhc2VVUkkobnNB U3RyaW5nICYgYUJhc2VVUkkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZURvY3Vt ZW50UG9zaXRpb24obnNJRE9NTm9kZSAqb3RoZXIsIFBSVWludDE2ICpfcmV0dmFsKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IElzU2FtZU5vZGUobnNJRE9NTm9kZSAqb3RoZXIsIFBSQm9vbCAq X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMb29rdXBOYW1lc3BhY2VQcmVmaXgo Y29uc3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBuc0FTdHJpbmcg JiBwcmVmaXgsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCn07CiMgMTUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NTm9kZS5oIiAyCiMgMjkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NTm9kZS5oIgpjbGFzcyBuc0lET01Ob2RlIDogcHVibGljIG5zSVN1cHBvcnRz IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDdjLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAw eDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0NCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Ob2RlLmgiCiAgZW51bSB7IEVMRU1FTlRf Tk9ERSA9IDFVIH07CgogIGVudW0geyBBVFRSSUJVVEVfTk9ERSA9IDJVIH07CgogIGVudW0geyBU RVhUX05PREUgPSAzVSB9OwoKICBlbnVtIHsgQ0RBVEFfU0VDVElPTl9OT0RFID0gNFUgfTsKCiAg ZW51bSB7IEVOVElUWV9SRUZFUkVOQ0VfTk9ERSA9IDVVIH07CgogIGVudW0geyBFTlRJVFlfTk9E RSA9IDZVIH07CgogIGVudW0geyBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgPSA3VSB9OwoK ICBlbnVtIHsgQ09NTUVOVF9OT0RFID0gOFUgfTsKCiAgZW51bSB7IERPQ1VNRU5UX05PREUgPSA5 VSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfVFlQRV9OT0RFID0gMTBVIH07CgogIGVudW0geyBET0NV TUVOVF9GUkFHTUVOVF9OT0RFID0gMTFVIH07CgogIGVudW0geyBOT1RBVElPTl9OT0RFID0gMTJV IH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5vZGVOYW1lKG5zQVN0cmluZyAmIGFOb2RlTmFt ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb2RlVmFsdWUobnNBU3RyaW5nICYgYU5v ZGVWYWx1ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Tm9kZVZhbHVlKGNvbnN0IG5zQVN0 cmluZyAmIGFOb2RlVmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Tm9kZVR5cGUo UFJVaW50MTYgKmFOb2RlVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnRO b2RlKG5zSURPTU5vZGUgKiAqYVBhcmVudE5vZGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q2hpbGROb2Rlcyhuc0lET01Ob2RlTGlzdCAqICphQ2hpbGROb2RlcykgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRGaXJzdENoaWxkKG5zSURPTU5vZGUgKiAqYUZpcnN0Q2hpbGQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdENoaWxkKG5zSURPTU5vZGUgKiAqYUxhc3RD aGlsZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2aW91c1NpYmxpbmcobnNJRE9N Tm9kZSAqICphUHJldmlvdXNTaWJsaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5l eHRTaWJsaW5nKG5zSURPTU5vZGUgKiAqYU5leHRTaWJsaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEF0dHJpYnV0ZXMobnNJRE9NTmFtZWROb2RlTWFwICogKmFBdHRyaWJ1dGVzKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE93bmVyRG9jdW1lbnQobnNJRE9NRG9jdW1lbnQg KiAqYU93bmVyRG9jdW1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0QmVmb3Jl KG5zSURPTU5vZGUgKm5ld0NoaWxkLCBuc0lET01Ob2RlICpyZWZDaGlsZCwgbnNJRE9NTm9kZSAq Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFjZUNoaWxkKG5zSURPTU5v ZGUgKm5ld0NoaWxkLCBuc0lET01Ob2RlICpvbGRDaGlsZCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ2hpbGQobnNJRE9NTm9kZSAqb2xkQ2hp bGQsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVu ZENoaWxkKG5zSURPTU5vZGUgKm5ld0NoaWxkLCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNDaGlsZE5vZGVzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZU5vZGUoUFJCb29sIGRlZXAsIG5zSURPTU5vZGUgKipf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vcm1hbGl6ZSh2b2lkKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IElzU3VwcG9ydGVkKGNvbnN0IG5zQVN0cmluZyAmIGZlYXR1cmUs IGNvbnN0IG5zQVN0cmluZyAmIHZlcnNpb24sIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXROYW1lc3BhY2VVUkkobnNBU3RyaW5nICYgYU5hbWVzcGFjZVVSSSkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVmaXgobnNBU3RyaW5nICYgYVByZWZpeCkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJlZml4KGNvbnN0IG5zQVN0cmluZyAmIGFQcmVm aXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9jYWxOYW1lKG5zQVN0cmluZyAmIGFM b2NhbE5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzQXR0cmlidXRlcyhQUkJvb2wg Kl9yZXR2YWwpID0gMDsKCiAgZW51bSB7IERPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCA9 IDMyVSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HID0gMVUgfTsKCiAg ZW51bSB7IERPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyA9IDJVIH07CgogIGVudW0geyBET0NV TUVOVF9QT1NJVElPTl9DT05UQUlOUyA9IDRVIH07CgogIGVudW0geyBET0NVTUVOVF9QT1NJVElP Tl9JU19DT05UQUlORUQgPSA4VSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVN RU5UQVRJT05fU1BFQ0lGSUMgPSAxNlUgfTsKCn07CiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NRG9jdW1lbnQuaCIgMgojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t L25zSURPTURvY3VtZW50LmgiCmNsYXNzIG5zSURPTURvY3VtZW50IDogcHVibGljIG5zSURPTU5v ZGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNzUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUs IDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQ1 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXREb2N0eXBlKG5zSURPTURvY3VtZW50VHlwZSAqICphRG9jdHlwZSkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbXBsZW1lbnRhdGlvbihuc0lET01ET01JbXBsZW1lbnRh dGlvbiAqICphSW1wbGVtZW50YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RG9j dW1lbnRFbGVtZW50KG5zSURPTUVsZW1lbnQgKiAqYURvY3VtZW50RWxlbWVudCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVFbGVtZW50KGNvbnN0IG5zQVN0cmluZyAmIHRhZ05hbWUs IG5zSURPTUVsZW1lbnQgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0 ZURvY3VtZW50RnJhZ21lbnQobnNJRE9NRG9jdW1lbnRGcmFnbWVudCAqKl9yZXR2YWwpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlVGV4dE5vZGUoY29uc3QgbnNBU3RyaW5nICYgZGF0 YSwgbnNJRE9NVGV4dCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRl Q29tbWVudChjb25zdCBuc0FTdHJpbmcgJiBkYXRhLCBuc0lET01Db21tZW50ICoqX3JldHZhbCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVDREFUQVNlY3Rpb24oY29uc3QgbnNBU3Ry aW5nICYgZGF0YSwgbnNJRE9NQ0RBVEFTZWN0aW9uICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgbnNBU3RyaW5nICYg dGFyZ2V0LCBjb25zdCBuc0FTdHJpbmcgJiBkYXRhLCBuc0lET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rp b24gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUF0dHJpYnV0ZShj b25zdCBuc0FTdHJpbmcgJiBuYW1lLCBuc0lET01BdHRyICoqX3JldHZhbCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBDcmVhdGVFbnRpdHlSZWZlcmVuY2UoY29uc3QgbnNBU3RyaW5nICYgbmFt ZSwgbnNJRE9NRW50aXR5UmVmZXJlbmNlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBuc0FTdHJpbmcgJiB0YWduYW1lLCBuc0lE T01Ob2RlTGlzdCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW1wb3J0Tm9k ZShuc0lET01Ob2RlICppbXBvcnRlZE5vZGUsIFBSQm9vbCBkZWVwLCBuc0lET01Ob2RlICoqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVFbGVtZW50TlMoY29uc3QgbnNB U3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBuc0FTdHJpbmcgJiBxdWFsaWZpZWROYW1lLCBu c0lET01FbGVtZW50ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVB dHRyaWJ1dGVOUyhjb25zdCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5zQVN0cmlu ZyAmIHF1YWxpZmllZE5hbWUsIG5zSURPTUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgbnNBU3RyaW5nICYgbmFtZXNw YWNlVVJJLCBjb25zdCBuc0FTdHJpbmcgJiBsb2NhbE5hbWUsIG5zSURPTU5vZGVMaXN0ICoqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbGVtZW50QnlJZChjb25zdCBuc0FT dHJpbmcgJiBlbGVtZW50SWQsIG5zSURPTUVsZW1lbnQgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDY1 ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTVhNTERvY3VtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01YTUxEb2N1bWVudC5oIgpjbGFzcyBuc0lET01YTUxEb2N1bWVudCA6IHB1YmxpYyBuc0lET01E b2N1bWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4ODE2ZDAwMywgMHhlN2M4LCAweDQwNjUsIHsgMHg4OCwg MHgyNywgMHg4MiwgMHg5YiwgMHg4ZCwgMHgwNywgMHhiNiwgMHhlMCB9fTsgcmV0dXJuIGlpZDt9 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvYWQoY29uc3QgbnNBU3RyaW5nICYgdXJsKSA9IDA7CiMg NDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NWE1MRG9jdW1lbnQuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEV2YWx1YXRlRklYcHRyKGNvbnN0IG5zQVN0cmluZyAmIGV4cHJlc3Npb24s IG5zSURPTVJhbmdlICoqX3JldHZhbCkgPSAwOwoKfTsKIyA2NiAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0RvY3VtZW50LmgiIDEK IyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0RvY3VtZW50LmgiCmNsYXNz IG5zSUJveE9iamVjdDsKCmNsYXNzIG5zSURPTUxvY2F0aW9uOwojIDI5ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTU5TRG9jdW1lbnQuaCIKY2xhc3MgbnNJRE9NTlNEb2N1bWVudCA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBjZCwgMHgxNWIzLCAweDEx ZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoYXJhY3RlclNldChuc0FTdHJp bmcgJiBhQ2hhcmFjdGVyU2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpcihuc0FT dHJpbmcgJiBhRGlyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXIoY29uc3QgbnNBU3Ry aW5nICYgYURpcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb2NhdGlvbihuc0lET01M b2NhdGlvbiAqICphTG9jYXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGl0bGUo bnNBU3RyaW5nICYgYVRpdGxlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUaXRsZShjb25z dCBuc0FTdHJpbmcgJiBhVGl0bGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVu dFR5cGUobnNBU3RyaW5nICYgYUNvbnRlbnRUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldEJveE9iamVjdEZvcihuc0lET01FbGVtZW50ICplbHQsIG5zSUJveE9iamVjdCAqKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm94T2JqZWN0Rm9yKG5zSURPTUVsZW1l bnQgKmVsdCwgbnNJQm94T2JqZWN0ICpib3hPYmplY3QpID0gMDsKCn07CiMgNjcgIm5zRE9NQ2xh c3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZlbnQu aCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50LmgiCmNsYXNz IG5zSURPTUV2ZW50VGFyZ2V0OwojIDI3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TUV2ZW50LmgiCmNsYXNzIG5zSURPTUV2ZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1Ymxp YzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp ZCA9IHsweGE2NmI3YjgwLCAweGZmNDYsIDB4YmQ5NywgeyAweDAwLCAweDgwLCAweDVmLCAweDhh LCAweGUzLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0NCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FdmVudC5oIgogIGVudW0geyBDQVBUVVJJTkdfUEhBU0Ug PSAxVSB9OwoKCgoKICBlbnVtIHsgQVRfVEFSR0VUID0gMlUgfTsKCgoKCiAgZW51bSB7IEJVQkJM SU5HX1BIQVNFID0gM1UgfTsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUobnNBU3Ry aW5nICYgYVR5cGUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhcmdldChuc0lE T01FdmVudFRhcmdldCAqICphVGFyZ2V0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q3VycmVudFRhcmdldChuc0lET01FdmVudFRhcmdldCAqICphQ3VycmVudFRhcmdldCkgPSAw OwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXZlbnRQaGFzZShQUlVpbnQxNiAqYUV2ZW50 UGhhc2UpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJ1YmJsZXMoUFJCb29sICph QnViYmxlcykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbmNlbGFibGUoUFJC b29sICphQ2FuY2VsYWJsZSkgPSAwOwojIDEwOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lET01FdmVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGltZVN0YW1wKERPTVRpbWVTdGFt cCAqYVRpbWVTdGFtcCkgPSAwOwojIDEyMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01FdmVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcFByb3BhZ2F0aW9uKHZvaWQpID0gMDsK IyAxMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZlbnQuaCIKICB2aXJ0dWFs IG5zcmVzdWx0IFByZXZlbnREZWZhdWx0KHZvaWQpID0gMDsKIyAxNjQgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NRXZlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXRFdmVudChj b25zdCBuc0FTdHJpbmcgJiBldmVudFR5cGVBcmcsIFBSQm9vbCBjYW5CdWJibGVBcmcsIFBSQm9v bCBjYW5jZWxhYmxlQXJnKSA9IDA7Cgp9OwojIDY4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TRXZlbnQuaCIgMQojIDI1ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TRXZlbnQuaCIKY2xhc3MgbnNJRE9NTlNFdmVu dCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhOTA5NzdkZCwgMHhhODBiLCAw eDQ5YmIsIHsgMHg4MSwgMHg2OSwgMHhjYywgMHg5MCwgMHhlMywgMHhkMSwgMHhkYSwgMHg5OCB9 fTsgcmV0dXJuIGlpZDt9CgogIGVudW0geyBNT1VTRURPV04gPSAxIH07CgogIGVudW0geyBNT1VT RVVQID0gMiB9OwoKICBlbnVtIHsgTU9VU0VPVkVSID0gNCB9OwoKICBlbnVtIHsgTU9VU0VPVVQg PSA4IH07CgogIGVudW0geyBNT1VTRU1PVkUgPSAxNiB9OwoKICBlbnVtIHsgTU9VU0VEUkFHID0g MzIgfTsKCiAgZW51bSB7IENMSUNLID0gNjQgfTsKCiAgZW51bSB7IERCTENMSUNLID0gMTI4IH07 CgogIGVudW0geyBLRVlET1dOID0gMjU2IH07CgogIGVudW0geyBLRVlVUCA9IDUxMiB9OwoKICBl bnVtIHsgS0VZUFJFU1MgPSAxMDI0IH07CgogIGVudW0geyBEUkFHRFJPUCA9IDIwNDggfTsKCiAg ZW51bSB7IEZPQ1VTID0gNDA5NiB9OwoKICBlbnVtIHsgQkxVUiA9IDgxOTIgfTsKCiAgZW51bSB7 IFNFTEVDVCA9IDE2Mzg0IH07CgogIGVudW0geyBDSEFOR0UgPSAzMjc2OCB9OwoKICBlbnVtIHsg UkVTRVQgPSA2NTUzNiB9OwoKICBlbnVtIHsgU1VCTUlUID0gMTMxMDcyIH07CgogIGVudW0geyBT Q1JPTEwgPSAyNjIxNDQgfTsKCiAgZW51bSB7IExPQUQgPSA1MjQyODggfTsKCiAgZW51bSB7IFVO TE9BRCA9IDEwNDg1NzYgfTsKCiAgZW51bSB7IFhGRVJfRE9ORSA9IDIwOTcxNTIgfTsKCiAgZW51 bSB7IEFCT1JUID0gNDE5NDMwNCB9OwoKICBlbnVtIHsgRVJST1IgPSA4Mzg4NjA4IH07CgogIGVu dW0geyBMT0NBVEUgPSAxNjc3NzIxNiB9OwoKICBlbnVtIHsgTU9WRSA9IDMzNTU0NDMyIH07Cgog IGVudW0geyBSRVNJWkUgPSA2NzEwODg2NCB9OwoKICBlbnVtIHsgRk9SV0FSRCA9IDEzNDIxNzcy OCB9OwoKICBlbnVtIHsgSEVMUCA9IDI2ODQzNTQ1NiB9OwoKICBlbnVtIHsgQkFDSyA9IDUzNjg3 MDkxMiB9OwoKICBlbnVtIHsgVEVYVCA9IDEwNzM3NDE4MjQgfTsKCiAgZW51bSB7IEFMVF9NQVNL ID0gMSB9OwoKICBlbnVtIHsgQ09OVFJPTF9NQVNLID0gMiB9OwoKICBlbnVtIHsgU0hJRlRfTUFT SyA9IDQgfTsKCiAgZW51bSB7IE1FVEFfTUFTSyA9IDggfTsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldE9yaWdpbmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFPcmlnaW5hbFRhcmdldCkg PSAwOwojIDExNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0V2ZW50LmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRFeHBsaWNpdE9yaWdpbmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFy Z2V0ICogKmFFeHBsaWNpdE9yaWdpbmFsVGFyZ2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFRtcDEzUmVhbE9yaWdpbmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFUbXAxM1Jl YWxPcmlnaW5hbFRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQcmV2ZW50QnViYmxl KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJldmVudENhcHR1cmUodm9pZCkgPSAw OwoKfTsKIyA2OSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01LZXlFdmVudC5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NS2V5RXZlbnQuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TVVJRXZlbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVVJRXZl bnQuaCIKY2xhc3MgbnNJRE9NVUlFdmVudCA6IHB1YmxpYyBuc0lET01FdmVudCB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHhhNmNmOTBjMywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwg MHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFZpZXcobnNJRE9NQWJzdHJhY3RWaWV3ICogKmFWaWV3KSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldERldGFpbChQUkludDMyICphRGV0YWlsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEluaXRVSUV2ZW50KGNvbnN0IG5zQVN0cmluZyAmIHR5cGVBcmcsIFBSQm9vbCBjYW5C dWJibGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnLCBuc0lET01BYnN0cmFjdFZpZXcgKnZpZXdB cmcsIFBSSW50MzIgZGV0YWlsQXJnKSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUtleUV2ZW50LmgiIDIKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lET01LZXlFdmVudC5oIgpjbGFzcyBuc0lET01LZXlFdmVudCA6IHB1YmxpYyBuc0lET01V SUV2ZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweDAyOGUwZTZlLCAweDhiMDEsIDB4MTFkMywgeyAweGFhLCAw eGU3LCAweDAwLCAweDEwLCAweDgzLCAweDhhLCAweDMxLCAweDIzIH19OyByZXR1cm4gaWlkO30K CiAgZW51bSB7IERPTV9WS19DQU5DRUwgPSAzVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0hFTFAgPSA2 VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0JBQ0tfU1BBQ0UgPSA4VSB9OwoKICBlbnVtIHsgRE9NX1ZL X1RBQiA9IDlVIH07CgogIGVudW0geyBET01fVktfQ0xFQVIgPSAxMlUgfTsKCiAgZW51bSB7IERP TV9WS19SRVRVUk4gPSAxM1UgfTsKCiAgZW51bSB7IERPTV9WS19FTlRFUiA9IDE0VSB9OwoKICBl bnVtIHsgRE9NX1ZLX1NISUZUID0gMTZVIH07CgogIGVudW0geyBET01fVktfQ09OVFJPTCA9IDE3 VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0FMVCA9IDE4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BBVVNF ID0gMTlVIH07CgogIGVudW0geyBET01fVktfQ0FQU19MT0NLID0gMjBVIH07CgogIGVudW0geyBE T01fVktfRVNDQVBFID0gMjdVIH07CgogIGVudW0geyBET01fVktfU1BBQ0UgPSAzMlUgfTsKCiAg ZW51bSB7IERPTV9WS19QQUdFX1VQID0gMzNVIH07CgogIGVudW0geyBET01fVktfUEFHRV9ET1dO ID0gMzRVIH07CgogIGVudW0geyBET01fVktfRU5EID0gMzVVIH07CgogIGVudW0geyBET01fVktf SE9NRSA9IDM2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0xFRlQgPSAzN1UgfTsKCiAgZW51bSB7IERP TV9WS19VUCA9IDM4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1JJR0hUID0gMzlVIH07CgogIGVudW0g eyBET01fVktfRE9XTiA9IDQwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BSSU5UU0NSRUVOID0gNDRV IH07CgogIGVudW0geyBET01fVktfSU5TRVJUID0gNDVVIH07CgogIGVudW0geyBET01fVktfREVM RVRFID0gNDZVIH07CgogIGVudW0geyBET01fVktfMCA9IDQ4VSB9OwoKICBlbnVtIHsgRE9NX1ZL XzEgPSA0OVUgfTsKCiAgZW51bSB7IERPTV9WS18yID0gNTBVIH07CgogIGVudW0geyBET01fVktf MyA9IDUxVSB9OwoKICBlbnVtIHsgRE9NX1ZLXzQgPSA1MlUgfTsKCiAgZW51bSB7IERPTV9WS181 ID0gNTNVIH07CgogIGVudW0geyBET01fVktfNiA9IDU0VSB9OwoKICBlbnVtIHsgRE9NX1ZLXzcg PSA1NVUgfTsKCiAgZW51bSB7IERPTV9WS184ID0gNTZVIH07CgogIGVudW0geyBET01fVktfOSA9 IDU3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NFTUlDT0xPTiA9IDU5VSB9OwoKICBlbnVtIHsgRE9N X1ZLX0VRVUFMUyA9IDYxVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0EgPSA2NVUgfTsKCiAgZW51bSB7 IERPTV9WS19CID0gNjZVIH07CgogIGVudW0geyBET01fVktfQyA9IDY3VSB9OwoKICBlbnVtIHsg RE9NX1ZLX0QgPSA2OFUgfTsKCiAgZW51bSB7IERPTV9WS19FID0gNjlVIH07CgogIGVudW0geyBE T01fVktfRiA9IDcwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0cgPSA3MVUgfTsKCiAgZW51bSB7IERP TV9WS19IID0gNzJVIH07CgogIGVudW0geyBET01fVktfSSA9IDczVSB9OwoKICBlbnVtIHsgRE9N X1ZLX0ogPSA3NFUgfTsKCiAgZW51bSB7IERPTV9WS19LID0gNzVVIH07CgogIGVudW0geyBET01f VktfTCA9IDc2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX00gPSA3N1UgfTsKCiAgZW51bSB7IERPTV9W S19OID0gNzhVIH07CgogIGVudW0geyBET01fVktfTyA9IDc5VSB9OwoKICBlbnVtIHsgRE9NX1ZL X1AgPSA4MFUgfTsKCiAgZW51bSB7IERPTV9WS19RID0gODFVIH07CgogIGVudW0geyBET01fVktf UiA9IDgyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1MgPSA4M1UgfTsKCiAgZW51bSB7IERPTV9WS19U ID0gODRVIH07CgogIGVudW0geyBET01fVktfVSA9IDg1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1Yg PSA4NlUgfTsKCiAgZW51bSB7IERPTV9WS19XID0gODdVIH07CgogIGVudW0geyBET01fVktfWCA9 IDg4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1kgPSA4OVUgfTsKCiAgZW51bSB7IERPTV9WS19aID0g OTBVIH07CgogIGVudW0geyBET01fVktfTlVNUEFEMCA9IDk2VSB9OwoKICBlbnVtIHsgRE9NX1ZL X05VTVBBRDEgPSA5N1UgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQyID0gOThVIH07CgogIGVu dW0geyBET01fVktfTlVNUEFEMyA9IDk5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBBRDQgPSAx MDBVIH07CgogIGVudW0geyBET01fVktfTlVNUEFENSA9IDEwMVUgfTsKCiAgZW51bSB7IERPTV9W S19OVU1QQUQ2ID0gMTAyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBBRDcgPSAxMDNVIH07Cgog IGVudW0geyBET01fVktfTlVNUEFEOCA9IDEwNFUgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQ5 ID0gMTA1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX01VTFRJUExZID0gMTA2VSB9OwoKICBlbnVtIHsg RE9NX1ZLX0FERCA9IDEwN1UgfTsKCiAgZW51bSB7IERPTV9WS19TRVBBUkFUT1IgPSAxMDhVIH07 CgogIGVudW0geyBET01fVktfU1VCVFJBQ1QgPSAxMDlVIH07CgogIGVudW0geyBET01fVktfREVD SU1BTCA9IDExMFUgfTsKCiAgZW51bSB7IERPTV9WS19ESVZJREUgPSAxMTFVIH07CgogIGVudW0g eyBET01fVktfRjEgPSAxMTJVIH07CgogIGVudW0geyBET01fVktfRjIgPSAxMTNVIH07CgogIGVu dW0geyBET01fVktfRjMgPSAxMTRVIH07CgogIGVudW0geyBET01fVktfRjQgPSAxMTVVIH07Cgog IGVudW0geyBET01fVktfRjUgPSAxMTZVIH07CgogIGVudW0geyBET01fVktfRjYgPSAxMTdVIH07 CgogIGVudW0geyBET01fVktfRjcgPSAxMThVIH07CgogIGVudW0geyBET01fVktfRjggPSAxMTlV IH07CgogIGVudW0geyBET01fVktfRjkgPSAxMjBVIH07CgogIGVudW0geyBET01fVktfRjEwID0g MTIxVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxMSA9IDEyMlUgfTsKCiAgZW51bSB7IERPTV9WS19G MTIgPSAxMjNVIH07CgogIGVudW0geyBET01fVktfRjEzID0gMTI0VSB9OwoKICBlbnVtIHsgRE9N X1ZLX0YxNCA9IDEyNVUgfTsKCiAgZW51bSB7IERPTV9WS19GMTUgPSAxMjZVIH07CgogIGVudW0g eyBET01fVktfRjE2ID0gMTI3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxNyA9IDEyOFUgfTsKCiAg ZW51bSB7IERPTV9WS19GMTggPSAxMjlVIH07CgogIGVudW0geyBET01fVktfRjE5ID0gMTMwVSB9 OwoKICBlbnVtIHsgRE9NX1ZLX0YyMCA9IDEzMVUgfTsKCiAgZW51bSB7IERPTV9WS19GMjEgPSAx MzJVIH07CgogIGVudW0geyBET01fVktfRjIyID0gMTMzVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Yy MyA9IDEzNFUgfTsKCiAgZW51bSB7IERPTV9WS19GMjQgPSAxMzVVIH07CgogIGVudW0geyBET01f VktfTlVNX0xPQ0sgPSAxNDRVIH07CgogIGVudW0geyBET01fVktfU0NST0xMX0xPQ0sgPSAxNDVV IH07CgogIGVudW0geyBET01fVktfQ09NTUEgPSAxODhVIH07CgogIGVudW0geyBET01fVktfUEVS SU9EID0gMTkwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NMQVNIID0gMTkxVSB9OwoKICBlbnVtIHsg RE9NX1ZLX0JBQ0tfUVVPVEUgPSAxOTJVIH07CgogIGVudW0geyBET01fVktfT1BFTl9CUkFDS0VU ID0gMjE5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0JBQ0tfU0xBU0ggPSAyMjBVIH07CgogIGVudW0g eyBET01fVktfQ0xPU0VfQlJBQ0tFVCA9IDIyMVUgfTsKCiAgZW51bSB7IERPTV9WS19RVU9URSA9 IDIyMlUgfTsKCiAgZW51bSB7IERPTV9WS19NRVRBID0gMjI0VSB9OwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDaGFyQ29kZShQUlVpbnQzMiAqYUNoYXJDb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEtleUNvZGUoUFJVaW50MzIgKmFLZXlDb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEFsdEtleShQUkJvb2wgKmFBbHRLZXkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Q3RybEtleShQUkJvb2wgKmFDdHJsS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFNoaWZ0S2V5KFBSQm9vbCAqYVNoaWZ0S2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldE1ldGFLZXkoUFJCb29sICphTWV0YUtleSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ bml0S2V5RXZlbnQoY29uc3QgbnNBU3RyaW5nICYgdHlwZUFyZywgUFJCb29sIGNhbkJ1YmJsZUFy ZywgUFJCb29sIGNhbmNlbGFibGVBcmcsIG5zSURPTUFic3RyYWN0VmlldyAqdmlld0FyZywgUFJC b29sIGN0cmxLZXlBcmcsIFBSQm9vbCBhbHRLZXlBcmcsIFBSQm9vbCBzaGlmdEtleUFyZywgUFJC b29sIG1ldGFLZXlBcmcsIFBSVWludDMyIGtleUNvZGVBcmcsIFBSVWludDMyIGNoYXJDb2RlQXJn KSA9IDA7Cgp9OwojIDcwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50TGlzdGVuZXIuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50TGlzdGVuZXIuaCIKY2xhc3MgbnNJRE9NRXZlbnRMaXN0 ZW5lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkZjMxYzEyMCwgMHhkZWQ2 LCAweDExZDEsIHsgMHhiZCwgMHg4NSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhlMywgMHhm NCB9fTsgcmV0dXJuIGlpZDt9CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RXZlbnRMaXN0ZW5lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnQobnNJRE9NRXZl bnQgKmV2ZW50KSA9IDA7Cgp9OwojIDcxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIiAxCiMgMTcgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgpjbGFzcyBuc0lQcmVzQ29u dGV4dDsKY2xhc3MgbnNJUHJlc1NoZWxsOwpjbGFzcyBuc0lVUkk7CgpjbGFzcyBuc0lDb250ZW50 Vmlld2VyOwoKY2xhc3MgbnNJVVJJQ29udGVudExpc3RlbmVyOwoKY2xhc3MgbnNJQ2hyb21lRXZl bnRIYW5kbGVyOwoKY2xhc3MgbnNJRG9jU2hlbGxMb2FkSW5mbzsKCmNsYXNzIG5zSURvY3VtZW50 Q2hhcnNldEluZm87CgpjbGFzcyBuc0lXZWJOYXZpZ2F0aW9uOwoKY2xhc3MgbnNJU2ltcGxlRW51 bWVyYXRvcjsKCmNsYXNzIG5zSUlucHV0U3RyZWFtOwoKY2xhc3MgbnNJUmVxdWVzdDsKCmNsYXNz IG5zSVNIRW50cnk7CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NT aGVsbC5oIgpjbGFzcyBuc0lEb2NTaGVsbCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHg2OWU1ZGUwMCwgMHg3YjhiLCAweDExZDMsIHsgMHhhZiwgMHg2MSwgMHgwMCwgMHhhMCwg MHgyNCwgMHhmZiwgMHhjMCwgMHg4YyB9fTsgcmV0dXJuIGlpZDt9CiMgNzEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTG9h ZFVSSShuc0lVUkkgKnVyaSwgbnNJRG9jU2hlbGxMb2FkSW5mbyAqbG9hZEluZm8sIFBSVWludDMy IGFMb2FkRmxhZ3MsIFBSQm9vbCBmaXJzdFBhcnR5KSA9IDA7CiMgOTMgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTG9hZFN0 cmVhbShuc0lJbnB1dFN0cmVhbSAqYVN0cmVhbSwgbnNJVVJJICphVVJJLCBjb25zdCBuc0FDU3Ry aW5nICYgYUNvbnRlbnRUeXBlLCBjb25zdCBuc0FDU3RyaW5nICYgYUNvbnRlbnRDaGFyc2V0LCBu c0lEb2NTaGVsbExvYWRJbmZvICphTG9hZEluZm8pID0gMDsKIyAxMTUgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW50ZXJu YWxMb2FkKG5zSVVSSSAqYVVSSSwgbnNJVVJJICphUmVmZXJyZXIsIG5zSVN1cHBvcnRzICphT3du ZXIsIFBSQm9vbCBhSW5oZXJpdE93bmVyLCBjb25zdCBQUlVuaWNoYXIgKmFXaW5kb3dUYXJnZXQs IG5zSUlucHV0U3RyZWFtICphUG9zdERhdGFTdHJlYW0sIG5zSUlucHV0U3RyZWFtICphSGVhZGVy c1N0cmVhbSwgUFJVaW50MzIgYUxvYWRGbGFncywgbnNJU0hFbnRyeSAqYVNIRW50cnksIFBSQm9v bCBmaXJzdFBhcnR5LCBuc0lEb2NTaGVsbCAqKmFEb2NTaGVsbCwgbnNJUmVxdWVzdCAqKmFSZXF1 ZXN0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVMb2FkSW5mbyhuc0lEb2NT aGVsbExvYWRJbmZvICoqbG9hZEluZm8pID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBy ZXBhcmVGb3JOZXdDb250ZW50TW9kZWwodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IFNldEN1cnJlbnRVUkkobnNJVVJJICphVVJJKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBGaXJlVW5sb2FkTm90aWZpY2F0aW9uKHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0UHJlc0NvbnRleHQobnNJUHJlc0NvbnRleHQgKiAqYVByZXNDb250ZXh0KSA9IDA7 CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXNTaGVsbChuc0lQcmVzU2hlbGwgKiAqYVBy ZXNTaGVsbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RWxkZXN0UHJlc1NoZWxs KG5zSVByZXNTaGVsbCAqICphRWxkZXN0UHJlc1NoZWxsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRDb250ZW50Vmlld2VyKG5zSUNvbnRlbnRWaWV3ZXIgKiAqYUNvbnRlbnRWaWV3 ZXIpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENocm9tZUV2ZW50SGFuZGxlcihu c0lDaHJvbWVFdmVudEhhbmRsZXIgKiAqYUNocm9tZUV2ZW50SGFuZGxlcikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0Q2hyb21lRXZlbnRIYW5kbGVyKG5zSUNocm9tZUV2ZW50SGFuZGxlciAq IGFDaHJvbWVFdmVudEhhbmRsZXIpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBh cmVudFVSSUNvbnRlbnRMaXN0ZW5lcihuc0lVUklDb250ZW50TGlzdGVuZXIgKiAqYVBhcmVudFVS SUNvbnRlbnRMaXN0ZW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFyZW50VVJJQ29u dGVudExpc3RlbmVyKG5zSVVSSUNvbnRlbnRMaXN0ZW5lciAqIGFQYXJlbnRVUklDb250ZW50TGlz dGVuZXIpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERvY3VtZW50Q2hhcnNldElu Zm8obnNJRG9jdW1lbnRDaGFyc2V0SW5mbyAqICphRG9jdW1lbnRDaGFyc2V0SW5mbykgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0RG9jdW1lbnRDaGFyc2V0SW5mbyhuc0lEb2N1bWVudENoYXJz ZXRJbmZvICogYURvY3VtZW50Q2hhcnNldEluZm8pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0QWxsb3dQbHVnaW5zKFBSQm9vbCAqYUFsbG93UGx1Z2lucykgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0QWxsb3dQbHVnaW5zKFBSQm9vbCBhQWxsb3dQbHVnaW5zKSA9IDA7CgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsbG93SmF2YXNjcmlwdChQUkJvb2wgKmFBbGxvd0phdmFz Y3JpcHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsbG93SmF2YXNjcmlwdChQUkJvb2wg YUFsbG93SmF2YXNjcmlwdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGxvd01l dGFSZWRpcmVjdHMoUFJCb29sICphQWxsb3dNZXRhUmVkaXJlY3RzKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRBbGxvd01ldGFSZWRpcmVjdHMoUFJCb29sIGFBbGxvd01ldGFSZWRpcmVjdHMp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWxsb3dTdWJmcmFtZXMoUFJCb29sICph QWxsb3dTdWJmcmFtZXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsbG93U3ViZnJhbWVz KFBSQm9vbCBhQWxsb3dTdWJmcmFtZXMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 QWxsb3dJbWFnZXMoUFJCb29sICphQWxsb3dJbWFnZXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldEFsbG93SW1hZ2VzKFBSQm9vbCBhQWxsb3dJbWFnZXMpID0gMDsKIyAyMzkgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIGVudW0geyBFTlVNRVJBVEVf Rk9SV0FSRFMgPSAwIH07CgogIGVudW0geyBFTlVNRVJBVEVfQkFDS1dBUkRTID0gMSB9OwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXREb2NTaGVsbEVudW1lcmF0b3IoUFJJbnQzMiBhSXRlbVR5cGUs IFBSSW50MzIgYURpcmVjdGlvbiwgbnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsK CgoKCiAgZW51bSB7IEFQUF9UWVBFX1VOS05PV04gPSAwVSB9OwoKICBlbnVtIHsgQVBQX1RZUEVf TUFJTCA9IDFVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFwcFR5cGUoUFJVaW50MzIgKmFB cHBUeXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBcHBUeXBlKFBSVWludDMyIGFBcHBU eXBlKSA9IDA7CiMgMjY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9jc2hlbGwvbnNJRG9jU2hl bGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFpvb20oZmxvYXQgKmFab29tKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRab29tKGZsb2F0IGFab29tKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE1hcmdpbldpZHRoKFBSSW50MzIgKmFNYXJnaW5XaWR0aCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0TWFyZ2luV2lkdGgoUFJJbnQzMiBhTWFyZ2luV2lkdGgpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0TWFyZ2luSGVpZ2h0KFBSSW50MzIgKmFNYXJnaW5IZWlnaHQpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1hcmdpbkhlaWdodChQUkludDMyIGFNYXJnaW5IZWln aHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGFzRm9jdXMoUFJCb29sICphSGFzRm9j dXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhhc0ZvY3VzKFBSQm9vbCBhSGFzRm9jdXMp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FudmFzSGFzRm9jdXMoUFJCb29sICphQ2Fu dmFzSGFzRm9jdXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENhbnZhc0hhc0ZvY3VzKFBS Qm9vbCBhQ2FudmFzSGFzRm9jdXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVGFiVG9UcmVl T3duZXIoUFJCb29sIGZvcndhcmQsIFBSQm9vbCAqdG9va0ZvY3VzKSA9IDA7CgoKCgogIGVudW0g eyBCVVNZX0ZMQUdTX05PTkUgPSAwVSB9OwoKICBlbnVtIHsgQlVTWV9GTEFHU19CVVNZID0gMVUg fTsKCiAgZW51bSB7IEJVU1lfRkxBR1NfQkVGT1JFX1BBR0VfTE9BRCA9IDJVIH07CgogIGVudW0g eyBCVVNZX0ZMQUdTX1BBR0VfTE9BRElORyA9IDRVIH07CgoKCgogIGVudW0geyBMT0FEX0NNRF9O T1JNQUwgPSAxVSB9OwoKICBlbnVtIHsgTE9BRF9DTURfUkVMT0FEID0gMlUgfTsKCiAgZW51bSB7 IExPQURfQ01EX0hJU1RPUlkgPSA0VSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCdXN5Rmxh Z3MoUFJVaW50MzIgKmFCdXN5RmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9h ZFR5cGUoUFJVaW50MzIgKmFMb2FkVHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TG9h ZFR5cGUoUFJVaW50MzIgYUxvYWRUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzQmVp bmdEZXN0cm95ZWQoUFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDc0ICJuc0RPTUNsYXNzSW5m by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9jc2hlbGwvbnNJRG9jU2hlbGxU cmVlSXRlbS5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NT aGVsbFRyZWVJdGVtLmgiCmNsYXNzIG5zSURvY1NoZWxsVHJlZU93bmVyOwojIDMyICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9jc2hlbGwvbnNJRG9jU2hlbGxUcmVlSXRlbS5oIgpjbGFzcyBuc0lE b2NTaGVsbFRyZWVJdGVtIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGI1MmFl NzgwLCAweGE5NjYsIDB4MTFkMywgeyAweGFmLCAweGM3LCAweDAwLCAweGEwLCAweDI0LCAweGZm LCAweGMwLCAweDhjIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFt ZShQUlVuaWNoYXIgKiAqYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29u c3QgUFJVbmljaGFyICogYU5hbWUpID0gMDsKIyA0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv Y3NoZWxsL25zSURvY1NoZWxsVHJlZUl0ZW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5hbWVFcXVh bHMoY29uc3QgUFJVbmljaGFyICpuYW1lLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCiAgZW51bSB7 IHR5cGVDaHJvbWUgPSAwIH07CgogIGVudW0geyB0eXBlQ29udGVudCA9IDEgfTsKCiAgZW51bSB7 IHR5cGVDb250ZW50V3JhcHBlciA9IDIgfTsKCiAgZW51bSB7IHR5cGVDaHJvbWVXcmFwcGVyID0g MyB9OwoKICBlbnVtIHsgdHlwZUFsbCA9IDIxNDc0ODM2NDcgfTsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0SXRlbVR5cGUoUFJJbnQzMiAqYUl0ZW1UeXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRJdGVtVHlwZShQUkludDMyIGFJdGVtVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRQYXJlbnQobnNJRG9jU2hlbGxUcmVlSXRlbSAqICphUGFyZW50KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRQYXJlbnQobnNJRG9jU2hlbGxUcmVlSXRlbSAqIGFQYXJlbnQpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2FtZVR5cGVQYXJlbnQobnNJRG9jU2hlbGxUcmVlSXRl bSAqICphU2FtZVR5cGVQYXJlbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9vdFRy ZWVJdGVtKG5zSURvY1NoZWxsVHJlZUl0ZW0gKiAqYVJvb3RUcmVlSXRlbSkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTYW1lVHlwZVJvb3RUcmVlSXRlbShuc0lEb2NTaGVsbFRyZWVJdGVt ICogKmFTYW1lVHlwZVJvb3RUcmVlSXRlbSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5k SXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5pY2hhciAqbmFtZSwgbnNJU3VwcG9ydHMgKmFSZXF1ZXN0 b3IsIG5zSURvY1NoZWxsVHJlZUl0ZW0gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFRyZWVPd25lcihuc0lEb2NTaGVsbFRyZWVPd25lciAqICphVHJlZU93bmVyKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUcmVlT3duZXIobnNJRG9jU2hlbGxUcmVlT3duZXIgKiBh VHJlZU93bmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkT2Zmc2V0KFBSSW50 MzIgKmFDaGlsZE9mZnNldCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2hpbGRPZmZzZXQo UFJJbnQzMiBhQ2hpbGRPZmZzZXQpID0gMDsKCn07CiMgNzUgIm5zRE9NQ2xhc3NJbmZvLmNwcCIg MgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbFRyZWVOb2Rl LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvY3NoZWxsL25zSURvY1NoZWxsVHJl ZU5vZGUuaCIKY2xhc3MgbnNJRG9jU2hlbGxUcmVlTm9kZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHhjMDk0ZjgxMCwgMHhhOGFiLCAweDExZDMsIHsgMHhhZiwgMHhjNiwgMHgw MCwgMHhhMCwgMHgyNCwgMHhmZiwgMHhjMCwgMHg4YyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldENoaWxkQ291bnQoUFJJbnQzMiAqYUNoaWxkQ291bnQpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgQWRkQ2hpbGQobnNJRG9jU2hlbGxUcmVlSXRlbSAqY2hpbGQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ2hpbGQobnNJRG9jU2hlbGxUcmVlSXRlbSAq Y2hpbGQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2hpbGRBdChQUkludDMyIGluZGV4 LCBuc0lEb2NTaGVsbFRyZWVJdGVtICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBGaW5kQ2hpbGRXaXRoTmFtZShjb25zdCBQUlVuaWNoYXIgKmFOYW1lLCBQUkJvb2wgYVJlY3Vy c2UsIFBSQm9vbCBhU2FtZVR5cGUsIG5zSURvY1NoZWxsVHJlZUl0ZW0gKmFSZXF1ZXN0b3IsIG5z SURvY1NoZWxsVHJlZUl0ZW0gKipfcmV0dmFsKSA9IDA7Cgp9OwojIDc2ICJuc0RPTUNsYXNzSW5m by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdEV4dGVybmFs TmFtZVNldC5oIiAxCiMgNDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0RXh0 ZXJuYWxOYW1lU2V0LmgiCmNsYXNzIG5zSVNjcmlwdENvbnRleHQ7CiMgNTggIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0RXh0ZXJuYWxOYW1lU2V0LmgiCmNsYXNzIG5zSVNjcmlw dEV4dGVybmFsTmFtZVNldCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw ZGEsIDB4MTViMywgMHgxMWQyLCB7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO307CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlh bGl6ZU5hbWVTZXQobnNJU2NyaXB0Q29udGV4dCogYVNjcmlwdENvbnRleHQpID0gMDsKfTsKIyA3 NyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAibnNKU1V0aWxzLmgiIDEKIyA1MyAibnNKU1V0 aWxzLmgiCmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CmNsYXNzIG5zSVNjcmlwdENvbnRleHQ7 CmNsYXNzIG5zSVNjcmlwdEdsb2JhbE9iamVjdDsKY2xhc3MgbnNJU2NyaXB0U2VjdXJpdHlNYW5h Z2VyOwoKY2xhc3MgbnNKU1V0aWxzIHsKcHVibGljOgogIHN0YXRpYyBKU0Jvb2wgR2V0Q2FsbGlu Z0xvY2F0aW9uKEpTQ29udGV4dCogYUNvbnRleHQsIGNvbnN0IGNoYXIqICphRmlsZW5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgKmFMaW5lbm8pOwoKICBz dGF0aWMgdm9pZCBDb252ZXJ0U3RyaW5nVG9KU1ZhbChjb25zdCBuc1N0cmluZyYgYVByb3AsIEpT Q29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN2 YWwqIGFSZXR1cm4pOwoKICBzdGF0aWMgUFJCb29sIENvbnZlcnRKU1ZhbFRvWFBDT2JqZWN0KG5z SVN1cHBvcnRzKiogYVN1cHBvcnRzLCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ29udGV4dCogYUNvbnRleHQsIGpzdmFsIGFWYWx1 ZSk7CgogIHN0YXRpYyB2b2lkIENvbnZlcnRKU1ZhbFRvU3RyaW5nKG5zQVN0cmluZyYgYVN0cmlu ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NvbnRleHQqIGFDb250ZXh0 LCBqc3ZhbCBhVmFsdWUpOwoKICBzdGF0aWMgUFJCb29sIENvbnZlcnRKU1ZhbFRvVWludDMyKFBS VWludDMyKiBhUHJvcCwgSlNDb250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGpzdmFsIGFWYWx1ZSk7CgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRTdGF0 aWNTY3JpcHRHbG9iYWwoSlNDb250ZXh0KiBhQ29udGV4dCwgSlNPYmplY3QqIGFPYmosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTY3JpcHRHbG9iYWxPYmplY3Qq KiBhR2xvYmFsKTsKCiAgc3RhdGljIG5zcmVzdWx0IEdldFN0YXRpY1NjcmlwdENvbnRleHQoSlND b250ZXh0KiBhQ29udGV4dCwgSlNPYmplY3QqIGFPYmosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJU2NyaXB0Q29udGV4dCoqIGFTY3JpcHRDb250ZXh0KTsKCiAg c3RhdGljIG5zcmVzdWx0IEdldER5bmFtaWNTY3JpcHRHbG9iYWwoSlNDb250ZXh0ICphQ29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTY3JpcHRHbG9i YWxPYmplY3QqKiBhR2xvYmFsKTsKCiAgc3RhdGljIG5zcmVzdWx0IEdldER5bmFtaWNTY3JpcHRD b250ZXh0KEpTQ29udGV4dCAqYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zSVNjcmlwdENvbnRleHQqKiBhU2NyaXB0Q29udGV4dCk7Cn07CiMgNzgg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c0lJbnRlcmZhY2VSZXF1ZXN0b3IuaCIgMQojIDM4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBj b20vbnNJSW50ZXJmYWNlUmVxdWVzdG9yLmgiCmNsYXNzIG5zSUludGVyZmFjZVJlcXVlc3RvciA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwMzNhMTQ3MCwgMHg4YjJhLCAweDEx ZDMsIHsgMHhhZiwgMHg4OCwgMHgwMCwgMHhhMCwgMHgyNCwgMHhmZiwgMHhjMCwgMHg4YyB9fTsg cmV0dXJuIGlpZDt9CiMgNTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJbnRlcmZh Y2VSZXF1ZXN0b3IuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludGVyZmFjZShjb25zdCBuc0lJ RCAmIHV1aWQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7Cgp9OwojIDc5ICJuc0RPTUNsYXNzSW5mby5j cHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW50ZXJmYWNlUmVxdWVz dG9yVXRpbHMuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW50ZXJm YWNlUmVxdWVzdG9yVXRpbHMuaCIKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIERlc3RpbmF0aW9u VHlwZT4KaW5saW5lCm5zcmVzdWx0CkNhbGxHZXRJbnRlcmZhY2UoIFQqIGFTb3VyY2UsIERlc3Rp bmF0aW9uVHlwZSoqIGFEZXN0aW5hdGlvbiApCiAgewogICAgOwogICAgOwoKICAgIHJldHVybiBh U291cmNlLT5HZXRJbnRlcmZhY2UobnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJ SUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwg dm9pZCoqID4oYURlc3RpbmF0aW9uKSk7CiAgfQoKY2xhc3MgbnNHZXRJbnRlcmZhY2UgOiBwdWJs aWMgbnNDT01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAgICBuc0dldEludGVyZmFjZSgg bnNJU3VwcG9ydHMqIGFTb3VyY2UsIG5zcmVzdWx0KiBlcnJvciApCiAgICAgICAgICA6IG1Tb3Vy Y2UoYVNvdXJjZSksCiAgICAgICAgICAgIG1FcnJvclB0cihlcnJvcikKICAgICAgICB7CgogICAg ICAgIH0KCiAgICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2 b2lkKiogKSBjb25zdDsKICAgICAgdmlydHVhbCB+bnNHZXRJbnRlcmZhY2UoKSB7fTsKCiAgICBw cml2YXRlOgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNvdXJjZTsKICAgICAgbnNyZXN1 bHQqIG1FcnJvclB0cjsKICB9OwoKaW5saW5lCmNvbnN0IG5zR2V0SW50ZXJmYWNlCmRvX0dldElu dGVyZmFjZSggbnNJU3VwcG9ydHMqIGFTb3VyY2UsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQogIHsK ICAgIHJldHVybiBuc0dldEludGVyZmFjZShhU291cmNlLCBlcnJvcik7CiAgfQojIDgwICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi9idWlsZC9uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIu aCIgMQojIDM5ICIuLi9idWlsZC9uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIuaCIKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdE5hbWVTcGFjZU1hbmFnZXIuaCIgMQojIDQw ICIuLi9idWlsZC9uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIuaCIgMgoKCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIgMQojIDQ3ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUveHBjb20vcGxkaGFzaC5oIgpleHRlcm4gIkMiIHsKIyA3MiAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29tL3BsZGhhc2guaCIKdHlwZWRlZiBQUlVpbnQzMiBQTERIYXNoTnVtYmVyOwp0eXBl ZGVmIHN0cnVjdCBQTERIYXNoRW50cnlIZHIgUExESGFzaEVudHJ5SGRyOwp0eXBlZGVmIHN0cnVj dCBQTERIYXNoRW50cnlTdHViIFBMREhhc2hFbnRyeVN0dWI7CnR5cGVkZWYgc3RydWN0IFBMREhh c2hUYWJsZSBQTERIYXNoVGFibGU7CnR5cGVkZWYgc3RydWN0IFBMREhhc2hUYWJsZU9wcyBQTERI YXNoVGFibGVPcHM7CiMgMTA2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vcGxkaGFzaC5o IgpzdHJ1Y3QgUExESGFzaEVudHJ5SGRyIHsKICAgIFBMREhhc2hOdW1iZXIga2V5SGFzaDsKfTsK IyAxODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9wbGRoYXNoLmgiCnN0cnVjdCBQTERI YXNoVGFibGUgewogICAgUExESGFzaFRhYmxlT3BzICpvcHM7CiAgICB2b2lkICpkYXRhOwogICAg UFJJbnQxNiBoYXNoU2hpZnQ7CiAgICB1aW50OCBtYXhBbHBoYUZyYWM7CiAgICB1aW50OCBtaW5B bHBoYUZyYWM7CiAgICBQUlVpbnQzMiBlbnRyeVNpemU7CiAgICBQUlVpbnQzMiBlbnRyeUNvdW50 OwogICAgUFJVaW50MzIgcmVtb3ZlZENvdW50OwogICAgUFJVaW50MzIgZ2VuZXJhdGlvbjsKICAg IGNoYXIgKmVudHJ5U3RvcmU7CiMgMjE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vcGxk aGFzaC5oIgp9OwojIDIzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIK dHlwZWRlZiB2b2lkICoKKCogUExESGFzaEFsbG9jVGFibGUpKFBMREhhc2hUYWJsZSAqdGFibGUs IFBSVWludDMyIG5ieXRlcyk7Cgp0eXBlZGVmIHZvaWQKKCogUExESGFzaEZyZWVUYWJsZSkgKFBM REhhc2hUYWJsZSAqdGFibGUsIHZvaWQgKnB0cik7CgoKCgoKCgp0eXBlZGVmIGNvbnN0IHZvaWQg KgooKiBQTERIYXNoR2V0S2V5KSAoUExESGFzaFRhYmxlICp0YWJsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQTERIYXNoRW50cnlIZHIgKmVudHJ5KTsKCgoKCgp0eXBl ZGVmIFBMREhhc2hOdW1iZXIKKCogUExESGFzaEhhc2hLZXkpIChQTERIYXNoVGFibGUgKnRhYmxl LCBjb25zdCB2b2lkICprZXkpOwoKCgoKCnR5cGVkZWYgUFJCb29sCigqIFBMREhhc2hNYXRjaEVu dHJ5KShQTERIYXNoVGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFBMREhhc2hFbnRyeUhkciAqZW50cnksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5KTsKCgoKCgoKCnR5cGVkZWYgdm9pZAoo KiBQTERIYXNoTW92ZUVudHJ5KShQTERIYXNoVGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUExESGFzaEVudHJ5SGRyICpmcm9tLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUExESGFzaEVudHJ5SGRyICp0byk7CgoKCgoK CnR5cGVkZWYgdm9pZAooKiBQTERIYXNoQ2xlYXJFbnRyeSkoUExESGFzaFRhYmxlICp0YWJsZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTERIYXNoRW50cnlIZHIgKmVu dHJ5KTsKCgoKCgoKdHlwZWRlZiB2b2lkCigqIFBMREhhc2hGaW5hbGl6ZSkgKFBMREhhc2hUYWJs ZSAqdGFibGUpOwojIDI5OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIK dHlwZWRlZiB2b2lkCigqIFBMREhhc2hJbml0RW50cnkpKFBMREhhc2hUYWJsZSAqdGFibGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTERIYXNoRW50cnlIZHIgKmVudHJ5 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5KTsK IyAzMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9wbGRoYXNoLmgiCnN0cnVjdCBQTERI YXNoVGFibGVPcHMgewoKICAgIFBMREhhc2hBbGxvY1RhYmxlIGFsbG9jVGFibGU7CiAgICBQTERI YXNoRnJlZVRhYmxlIGZyZWVUYWJsZTsKICAgIFBMREhhc2hHZXRLZXkgZ2V0S2V5OwogICAgUExE SGFzaEhhc2hLZXkgaGFzaEtleTsKICAgIFBMREhhc2hNYXRjaEVudHJ5IG1hdGNoRW50cnk7CiAg ICBQTERIYXNoTW92ZUVudHJ5IG1vdmVFbnRyeTsKICAgIFBMREhhc2hDbGVhckVudHJ5IGNsZWFy RW50cnk7CiAgICBQTERIYXNoRmluYWxpemUgZmluYWxpemU7CgoKICAgIFBMREhhc2hJbml0RW50 cnkgaW5pdEVudHJ5Owp9OwoKCgoKZXh0ZXJuIHZvaWQgKgpQTF9ESGFzaEFsbG9jVGFibGUoUExE SGFzaFRhYmxlICp0YWJsZSwgUFJVaW50MzIgbmJ5dGVzKTsKCmV4dGVybiB2b2lkClBMX0RIYXNo RnJlZVRhYmxlKFBMREhhc2hUYWJsZSAqdGFibGUsIHZvaWQgKnB0cik7CgpleHRlcm4gUExESGFz aE51bWJlcgpQTF9ESGFzaFN0cmluZ0tleShQTERIYXNoVGFibGUgKnRhYmxlLCBjb25zdCB2b2lk ICprZXkpOwoKCnN0cnVjdCBQTERIYXNoRW50cnlTdHViIHsKICAgIFBMREhhc2hFbnRyeUhkciBo ZHI7CiAgICBjb25zdCB2b2lkICprZXk7Cn07CgpleHRlcm4gY29uc3Qgdm9pZCAqClBMX0RIYXNo R2V0S2V5U3R1YihQTERIYXNoVGFibGUgKnRhYmxlLCBQTERIYXNoRW50cnlIZHIgKmVudHJ5KTsK CmV4dGVybiBQTERIYXNoTnVtYmVyClBMX0RIYXNoVm9pZFB0cktleVN0dWIoUExESGFzaFRhYmxl ICp0YWJsZSwgY29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiBQUkJvb2wKUExfREhhc2hNYXRjaEVu dHJ5U3R1YihQTERIYXNoVGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFBMREhhc2hFbnRyeUhkciAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p ZCAqa2V5KTsKCmV4dGVybiB2b2lkClBMX0RIYXNoTW92ZUVudHJ5U3R1YihQTERIYXNoVGFibGUg KnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgUExESGFzaEVudHJ5SGRyICpmcm9t LAogICAgICAgICAgICAgICAgICAgICAgUExESGFzaEVudHJ5SGRyICp0byk7CgpleHRlcm4gdm9p ZApQTF9ESGFzaENsZWFyRW50cnlTdHViKFBMREhhc2hUYWJsZSAqdGFibGUsIFBMREhhc2hFbnRy eUhkciAqZW50cnkpOwoKZXh0ZXJuIHZvaWQKUExfREhhc2hGaW5hbGl6ZVN0dWIoUExESGFzaFRh YmxlICp0YWJsZSk7CgoKCgoKCmV4dGVybiBQTERIYXNoVGFibGVPcHMgKgpQTF9ESGFzaEdldFN0 dWJPcHModm9pZCk7CgoKCgoKCgpleHRlcm4gUExESGFzaFRhYmxlICoKUExfTmV3REhhc2hUYWJs ZShQTERIYXNoVGFibGVPcHMgKm9wcywgdm9pZCAqZGF0YSwgUFJVaW50MzIgZW50cnlTaXplLAog ICAgICAgICAgICAgICAgIFBSVWludDMyIGNhcGFjaXR5KTsKCgoKCgpleHRlcm4gdm9pZApQTF9E SGFzaFRhYmxlRGVzdHJveShQTERIYXNoVGFibGUgKnRhYmxlKTsKCgoKCgoKCmV4dGVybiBQUkJv b2wKUExfREhhc2hUYWJsZUluaXQoUExESGFzaFRhYmxlICp0YWJsZSwgUExESGFzaFRhYmxlT3Bz ICpvcHMsIHZvaWQgKmRhdGEsCiAgICAgICAgICAgICAgICAgIFBSVWludDMyIGVudHJ5U2l6ZSwg UFJVaW50MzIgY2FwYWNpdHkpOwojIDQyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3Bs ZGhhc2guaCIKdm9pZApQTF9ESGFzaFRhYmxlU2V0QWxwaGFCb3VuZHMoUExESGFzaFRhYmxlICp0 YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IG1heEFscGhhLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWluQWxwaGEpOwojIDQ0OCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIKZXh0ZXJuIHZvaWQKUExfREhhc2hUYWJsZUZpbmlz aChQTERIYXNoVGFibGUgKnRhYmxlKTsKCgoKCgoKCnR5cGVkZWYgZW51bSBQTERIYXNoT3BlcmF0 b3IgewogICAgUExfREhBU0hfTE9PS1VQID0gMCwKICAgIFBMX0RIQVNIX0FERCA9IDEsCiAgICBQ TF9ESEFTSF9SRU1PVkUgPSAyLAogICAgUExfREhBU0hfTkVYVCA9IDAsCiAgICBQTF9ESEFTSF9T VE9QID0gMQp9IFBMREhhc2hPcGVyYXRvcjsKIyA0OTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9wbGRoYXNoLmgiCmV4dGVybiBQTERIYXNoRW50cnlIZHIgKgpQTF9ESGFzaFRhYmxlT3Bl cmF0ZShQTERIYXNoVGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICprZXksIFBMREhhc2hPcGVyYXRv ciBvcCk7CiMgNTA0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vcGxkaGFzaC5oIgpleHRl cm4gdm9pZApQTF9ESGFzaFRhYmxlUmF3UmVtb3ZlKFBMREhhc2hUYWJsZSAqdGFibGUsIFBMREhh c2hFbnRyeUhkciAqZW50cnkpOwojIDU0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3Bs ZGhhc2guaCIKdHlwZWRlZiBQTERIYXNoT3BlcmF0b3IKKCogUExESGFzaEVudW1lcmF0b3IpKFBM REhhc2hUYWJsZSAqdGFibGUsIFBMREhhc2hFbnRyeUhkciAqaGRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIG51bWJlciwgdm9pZCAqYXJnKTsKCmV4dGVy biBQUlVpbnQzMgpQTF9ESGFzaFRhYmxlRW51bWVyYXRlKFBMREhhc2hUYWJsZSAqdGFibGUsIFBM REhhc2hFbnVtZXJhdG9yIGV0b3IsIHZvaWQgKmFyZyk7CiMgNTYwICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vcGxkaGFzaC5oIgp9CiMgNDMgIi4uL2J1aWxkL25zU2NyaXB0TmFtZVNwYWNl TWFuYWdlci5oIiAyCgoKCnN0cnVjdCBuc0dsb2JhbE5hbWVTdHJ1Y3QKewogIHN0cnVjdCBDb25z dHJ1Y3RvckFsaWFzCiAgewogICAgbnNDSUQgbUNJRDsKICAgIG5zU3RyaW5nIG1Qcm90b05hbWU7 CiAgICBuc0dsb2JhbE5hbWVTdHJ1Y3QqIG1Qcm90bzsKICB9OwoKICBlbnVtIG5hbWV0eXBlIHsK ICAgIGVUeXBlTm90SW5pdGlhbGl6ZWQsCiAgICBlVHlwZUludGVyZmFjZSwKICAgIGVUeXBlUHJv cGVydHksCiAgICBlVHlwZUV4dGVybmFsQ29uc3RydWN0b3IsCiAgICBlVHlwZVN0YXRpY05hbWVT ZXQsCiAgICBlVHlwZUR5bmFtaWNOYW1lU2V0LAogICAgZVR5cGVDbGFzc0NvbnN0cnVjdG9yLAog ICAgZVR5cGVDbGFzc1Byb3RvLAogICAgZVR5cGVFeHRlcm5hbENsYXNzSW5mb0NyZWF0b3IsCiAg ICBlVHlwZUV4dGVybmFsQ2xhc3NJbmZvLAogICAgZVR5cGVFeHRlcm5hbENvbnN0cnVjdG9yQWxp YXMKICB9IG1UeXBlOwoKICB1bmlvbiB7CiAgICBQUkludDMyIG1ET01DbGFzc0luZm9JRDsKICAg IG5zSUlEIG1JSUQ7CiAgICBuc0V4dGVybmFsRE9NQ2xhc3NJbmZvRGF0YSogbURhdGE7CiAgICBD b25zdHJ1Y3RvckFsaWFzKiBtQWxpYXM7CiAgICBuc0NJRCBtQ0lEOwogIH07Cgpwcml2YXRlOgoK Cn07CgoKY2xhc3MgbnNJU2NyaXB0Q29udGV4dDsKY2xhc3MgbnNJQ2F0ZWdvcnlNYW5hZ2VyOwoK CmNsYXNzIG5zU2NyaXB0TmFtZVNwYWNlTWFuYWdlcgp7CnB1YmxpYzoKICBuc1NjcmlwdE5hbWVT cGFjZU1hbmFnZXIoKTsKICB2aXJ0dWFsIH5uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIoKTsKCiAg bnNyZXN1bHQgSW5pdCgpOwogIG5zcmVzdWx0IEluaXRGb3JDb250ZXh0KG5zSVNjcmlwdENvbnRl eHQgKmFDb250ZXh0KTsKCgoKCgoKICBuc3Jlc3VsdCBMb29rdXBOYW1lKGNvbnN0IG5zQVN0cmlu ZyYgYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0dsb2JhbE5hbWVTdHJ1Y3Qg KiphTmFtZVN0cnVjdCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciAqKmFD bGFzc05hbWUgPSAwKTsKCiAgbnNyZXN1bHQgUmVnaXN0ZXJDbGFzc05hbWUoY29uc3QgY2hhciAq YUNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFET01DbGFz c0luZm9JRCk7CgogIG5zcmVzdWx0IFJlZ2lzdGVyQ2xhc3NQcm90byhjb25zdCBjaGFyICphQ2xh c3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAqYUNvbnN0 cnVjdG9yUHJvdG9JSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqYUZv dW5kT2xkKTsKCiAgbnNyZXN1bHQgUmVnaXN0ZXJFeHRlcm5hbEludGVyZmFjZXMoUFJCb29sIGFB c1Byb3RvKTsKCiAgbnNyZXN1bHQgUmVnaXN0ZXJFeHRlcm5hbENsYXNzTmFtZShjb25zdCBjaGFy ICphQ2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDSUQm IGFDSUQpOwoKCgogIG5zcmVzdWx0IFJlZ2lzdGVyRE9NQ0lEYXRhKGNvbnN0IGNoYXIgKmFOYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRE9NQ2xhc3NJbmZvRXh0ZXJuYWxDb25z dHJ1Y3RvckZuYyBhQ29uc3RydWN0b3JGcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IG5zSUlEICphUHJvdG9DaGFpbkludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBuc0lJRCAqKmFJbnRlcmZhY2VzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSVWludDMyIGFTY3JpcHRhYmxlRmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJCb29sIGFIYXNDbGFzc0ludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBuc0NJRCAqYUNvbnN0cnVjdG9yQ0lEKTsKCiAgbnNHbG9iYWxOYW1lU3RydWN0 KiBHZXRDb25zdHJ1Y3RvclByb3RvKGNvbnN0IG5zR2xvYmFsTmFtZVN0cnVjdCogYVN0cnVjdCk7 Cgpwcm90ZWN0ZWQ6CgoKCgogIG5zR2xvYmFsTmFtZVN0cnVjdCAqQWRkVG9IYXNoKGNvbnN0IG5z QVN0cmluZyYgYUtleSk7CgogIG5zcmVzdWx0IEZpbGxIYXNoKG5zSUNhdGVnb3J5TWFuYWdlciAq YUNhdGVnb3J5TWFuYWdlciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ2F0ZWdv cnksCiAgICAgICAgICAgICAgICAgICAgbnNHbG9iYWxOYW1lU3RydWN0OjpuYW1ldHlwZSBhVHlw ZSk7CiAgbnNyZXN1bHQgRmlsbEhhc2hXaXRoRE9NSW50ZXJmYWNlcygpOwogIG5zcmVzdWx0IFJl Z2lzdGVySW50ZXJmYWNlKGNvbnN0IGNoYXIqIGFJZk5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgbnNJSUQgKmFJZklJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQUkJvb2wqIGFGb3VuZE9sZCk7CgoKCiAgUExESGFzaFRhYmxlIG1HbG9iYWxOYW1lczsKCiAg UFJQYWNrZWRCb29sIG1Jc0luaXRpYWxpemVkOwp9OwojIDgxICJuc0RPTUNsYXNzSW5mby5jcHAi IDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdE9iamVjdE93bmVyLmgi IDEKIyA2MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRPYmplY3RPd25lci5o IgpjbGFzcyBuc0lTY3JpcHRPYmplY3RPd25lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1Ymxp YzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0geyAweDhmNmJjYTdlLCAweGNlNDIsIDB4MTFkMSwgezB4YjcsIDB4MjQsIDB4MDAsIDB4NjAs IDB4MDgsIDB4OTEsIDB4ZDgsIDB4Yzl9IH07IHJldHVybiBpaWQ7fQojIDc0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdE9iamVjdE93bmVyLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRTY3JpcHRPYmplY3QobnNJU2NyaXB0Q29udGV4dCAqYUNvbnRleHQsIHZvaWQqKiBhU2Ny aXB0T2JqZWN0KSA9IDA7CiMgODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0 T2JqZWN0T3duZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcmlwdE9iamVjdCh2b2lkKiBh U2NyaXB0T2JqZWN0KSA9IDA7Cn07CgpjbGFzcyBuc0lBdG9tOwojIDEwMiAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRPYmplY3RPd25lci5oIgpjbGFzcyBuc0lTY3JpcHRFdmVu dEhhbmRsZXJPd25lciA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDJhZDU0YWUw LCAweGE4MzksIDB4MTFkMywgezB4YmEsIDB4OTcsIDB4MDAsIDB4MTAsIDB4NGIsIDB4YTAsIDB4 MmQsIDB4M2R9IH07IHJldHVybiBpaWQ7fQojIDExNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lTY3JpcHRPYmplY3RPd25lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGlsZUV2ZW50 SGFuZGxlcihuc0lTY3JpcHRDb250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCogYVRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJQXRvbSAqYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG5zQVN0cmluZyYgYUJvZHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQq KiBhSGFuZGxlcikgPSAwOwojIDEzMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3Jp cHRPYmplY3RPd25lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tcGlsZWRFdmVudEhhbmRs ZXIobnNJQXRvbSAqYU5hbWUsIHZvaWQqKiBhSGFuZGxlcikgPSAwOwp9OwojIDgyICJuc0RPTUNs YXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSUpTTmF0aXZl SW5pdGlhbGl6ZXIuaCIgMQojIDU2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSUpTTmF0 aXZlSW5pdGlhbGl6ZXIuaCIKY2xhc3MgbnNJSlNOYXRpdmVJbml0aWFsaXplciA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwZjQsIDB4MTViMywgMHgxMWQyLCB7MHg5Mywg MHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO30K CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlhbGl6ZShKU0NvbnRleHQgKmN4LCBKU09iamVj dCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhcmdjLCBqc3ZhbCAqYXJn dikgPSAwOwp9OwojIDgzICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NUGx1Z2luQXJyYXkuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTVBsdWdpbkFycmF5LmgiCmNsYXNzIG5zSURPTVBsdWdpbkFycmF5 IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGY2MTM0NjgwLCAweGYyOGIsIDB4 MTFkMiwgeyAweDgzLCAweDYwLCAweGM5LCAweDA4LCAweDk5LCAweDA0LCAweDljLCAweDNjIH19 OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICph TGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5kZXgsIG5z SURPTVBsdWdpbiAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmFtZWRJdGVt KGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTVBsdWdpbiAqKl9yZXR2YWwpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgUmVmcmVzaChQUkJvb2wgcmVsb2FkRG9jdW1lbnRzKSA9IDA7Cgp9 OwojIDEyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01QbHVnaW5BcnJheS5oIgpj bGFzcyBuc0lET01KU1BsdWdpbkFycmF5IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoK CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9 IHsweGVlNzUzMzUyLCAweDFkZDEsIDB4MTFiMiwgeyAweGIxLCAweDhkLCAweGIwLCAweGI3LCAw eDMyLCAweDBhLCAweDI4LCAweGMzIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1 bHQgUmVmcmVzaCh2b2lkKSA9IDA7Cgp9OwojIDg2ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVBsdWdpbi5oIiAxCiMgMjUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NUGx1Z2luLmgiCmNsYXNzIG5zSURPTVBsdWdpbiA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmNjEzNDY4MSwgMHhmMjhiLCAweDEx ZDIsIHsgMHg4MywgMHg2MCwgMHhjOSwgMHgwOCwgMHg5OSwgMHgwNCwgMHg5YywgMHgzYyB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlc2NyaXB0aW9uKG5zQVN0cmlu ZyAmIGFEZXNjcmlwdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaWxlbmFtZShu c0FTdHJpbmcgJiBhRmlsZW5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShu c0FTdHJpbmcgJiBhTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJV aW50MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXRlbShQUlVpbnQzMiBp bmRleCwgbnNJRE9NTWltZVR5cGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IE5hbWVkSXRlbShjb25zdCBuc0FTdHJpbmcgJiBuYW1lLCBuc0lET01NaW1lVHlwZSAqKl9yZXR2 YWwpID0gMDsKCn07CiMgODcgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NTWltZVR5cGVBcnJheS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NTWltZVR5cGVBcnJheS5oIgpjbGFzcyBuc0lET01NaW1lVHlw ZUFycmF5IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGY2MTM0NjgzLCAweGYy OGIsIDB4MTFkMiwgeyAweDgzLCAweDYwLCAweGM5LCAweDA4LCAweDk5LCAweDA0LCAweDljLCAw eDNjIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWlu dDMyICphTGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5k ZXgsIG5zSURPTU1pbWVUeXBlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBO YW1lZEl0ZW0oY29uc3QgbnNBU3RyaW5nICYgbmFtZSwgbnNJRE9NTWltZVR5cGUgKipfcmV0dmFs KSA9IDA7Cgp9OwojIDg4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTU1pbWVUeXBlLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01NaW1lVHlwZS5oIgpjbGFzcyBuc0lET01NaW1lVHlwZSA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmNjEzNDY4MiwgMHhmMjhiLCAweDExZDIsIHsgMHg4 MywgMHg2MCwgMHhjOSwgMHgwOCwgMHg5OSwgMHgwNCwgMHg5YywgMHgzYyB9fTsgcmV0dXJuIGlp ZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlc2NyaXB0aW9uKG5zQVN0cmluZyAmIGFEZXNj cmlwdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbmFibGVkUGx1Z2luKG5zSURP TVBsdWdpbiAqICphRW5hYmxlZFBsdWdpbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT dWZmaXhlcyhuc0FTdHJpbmcgJiBhU3VmZml4ZXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0VHlwZShuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKfTsKIyA4OSAibnNET01DbGFzc0luZm8u Y3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0xvY2F0aW9uLmgi IDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0xvY2F0aW9uLmgiCmNs YXNzIG5zSURPTU5TTG9jYXRpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTZjZjkxMDgsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZWxvYWQodm9pZCkgPSAwOwoKfTsKIyA5MCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Mb2NhdGlvbi5oIiAxCiMgMjUgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTG9jYXRpb24uaCIKY2xhc3MgbnNJRE9NTG9jYXRpb24g OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNmQsIDB4MTViMywgMHgx MWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIYXNoKG5zQVN0cmluZyAmIGFI YXNoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIYXNoKGNvbnN0IG5zQVN0cmluZyAmIGFI YXNoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhvc3QobnNBU3RyaW5nICYgYUhvc3Qp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhvc3QoY29uc3QgbnNBU3RyaW5nICYgYUhvc3Qp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SG9zdG5hbWUobnNBU3RyaW5nICYgYUhvc3Ru YW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIb3N0bmFtZShjb25zdCBuc0FTdHJpbmcg JiBhSG9zdG5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SHJlZihuc0FTdHJpbmcg JiBhSHJlZikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SHJlZihjb25zdCBuc0FTdHJpbmcg JiBhSHJlZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRobmFtZShuc0FTdHJpbmcg JiBhUGF0aG5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhdGhuYW1lKGNvbnN0IG5z QVN0cmluZyAmIGFQYXRobmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQb3J0KG5z QVN0cmluZyAmIGFQb3J0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQb3J0KGNvbnN0IG5z QVN0cmluZyAmIGFQb3J0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3RvY29sKG5z QVN0cmluZyAmIGFQcm90b2NvbCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJvdG9jb2wo Y29uc3QgbnNBU3RyaW5nICYgYVByb3RvY29sKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFNlYXJjaChuc0FTdHJpbmcgJiBhU2VhcmNoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRT ZWFyY2goY29uc3QgbnNBU3RyaW5nICYgYVNlYXJjaCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBSZWxvYWQoUFJCb29sIGZvcmNlZ2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlcGxh Y2UoY29uc3QgbnNBU3RyaW5nICYgdXJsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFzc2ln bihjb25zdCBuc0FTdHJpbmcgJiB1cmwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJp bmcobnNBU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKfTsKIyA5MSAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01XaW5kb3dJbnRlcm5hbC5o IiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93SW50ZXJuYWwu aCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVdpbmRvdy5oIiAxCiMgMTcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93LmgiCmNsYXNzIG5zSVNlbGVj dGlvbjsKIyAyNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01XaW5kb3cuaCIKY2xh c3MgbnNJRE9NV2luZG93IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5 MDZiLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhh LCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2RvbS9uc0lET01XaW5kb3cuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERvY3VtZW50KG5zSURP TURvY3VtZW50ICogKmFEb2N1bWVudCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFBhcmVudChuc0lET01XaW5kb3cgKiAqYVBhcmVudCkgPSAwOwojIDY1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTVdpbmRvdy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VG9wKG5z SURPTVdpbmRvdyAqICphVG9wKSA9IDA7CiMgNzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NV2luZG93LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JvbGxiYXJzKG5zSURPTUJh clByb3AgKiAqYVNjcm9sbGJhcnMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJh bWVzKG5zSURPTVdpbmRvd0NvbGxlY3Rpb24gKiAqYUZyYW1lcykgPSAwOwoKCgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKIyAxMDAgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRUZXh0Wm9vbShmbG9hdCAqYVRleHRab29tKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRU ZXh0Wm9vbShmbG9hdCBhVGV4dFpvb20pID0gMDsKIyAxMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NV2luZG93LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JvbGxYKFBSSW50 MzIgKmFTY3JvbGxYKSA9IDA7CiMgMTE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TVdpbmRvdy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2Nyb2xsWShQUkludDMyICphU2Nyb2xs WSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxUbyhQUkludDMyIHhTY3JvbGws IFBSSW50MzIgeVNjcm9sbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsQnko UFJJbnQzMiB4U2Nyb2xsRGlmLCBQUkludDMyIHlTY3JvbGxEaWYpID0gMDsKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9uKG5zSVNlbGVjdGlvbiAqKl9yZXR2YWwpID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsQnlMaW5lcyhQUkludDMyIG51bUxpbmVzKSA9IDA7 CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbEJ5UGFnZXMoUFJJbnQzMiBudW1QYWdlcykg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTaXplVG9Db250ZW50KHZvaWQpID0gMDsKCn07 CiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93SW50ZXJuYWwuaCIg MgoKCgoKCgpjbGFzcyBuc0lTaWRlYmFyOwoKY2xhc3MgbnNJUHJvbXB0OwoKY2xhc3MgbnNJQ29u dHJvbGxlcnM7CgpjbGFzcyBuc0lET01Mb2NhdGlvbjsKIyAzMyAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01XaW5kb3dJbnRlcm5hbC5oIgpjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5h bCA6IHB1YmxpYyBuc0lET01XaW5kb3cgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OWM5MTE4NjAsIDB4N2RkOSwg MHgxMWQ0LCB7IDB4OWEsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQg fX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNJRE9NV2lu ZG93SW50ZXJuYWwgKiAqYVdpbmRvdykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxm KG5zSURPTVdpbmRvd0ludGVybmFsICogKmFTZWxmKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldE5hdmlnYXRvcihuc0lET01OYXZpZ2F0b3IgKiAqYU5hdmlnYXRvcikgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTY3JlZW4obnNJRE9NU2NyZWVuICogKmFTY3JlZW4pID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0SGlzdG9yeShuc0lET01IaXN0b3J5ICogKmFIaXN0b3J5KSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnQobnNJRE9NV2luZG93ICogKmFDb250 ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpZGViYXIobnNJU2lkZWJhciAqICph U2lkZWJhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9tcHRlcihuc0lQcm9tcHQg KiAqYVByb21wdGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lbnViYXIobnNJRE9N QmFyUHJvcCAqICphTWVudWJhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUb29sYmFy KG5zSURPTUJhclByb3AgKiAqYVRvb2xiYXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TG9jYXRpb25iYXIobnNJRE9NQmFyUHJvcCAqICphTG9jYXRpb25iYXIpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UGVyc29uYWxiYXIobnNJRE9NQmFyUHJvcCAqICphUGVyc29uYWxiYXIp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhdHVzYmFyKG5zSURPTUJhclByb3AgKiAq YVN0YXR1c2JhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXJlY3Rvcmllcyhuc0lE T01CYXJQcm9wICogKmFEaXJlY3RvcmllcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD bG9zZWQoUFJCb29sICphQ2xvc2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENyeXB0 byhuc0lET01DcnlwdG8gKiAqYUNyeXB0bykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ a2NzMTEobnNJRE9NUGtjczExICogKmFQa2NzMTEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q29udHJvbGxlcnMobnNJQ29udHJvbGxlcnMgKiAqYUNvbnRyb2xsZXJzKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldE9wZW5lcihuc0lET01XaW5kb3dJbnRlcm5hbCAqICphT3BlbmVy KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPcGVuZXIobnNJRE9NV2luZG93SW50ZXJuYWwg KiBhT3BlbmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0YXR1cyhuc0FTdHJpbmcg JiBhU3RhdHVzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdGF0dXMoY29uc3QgbnNBU3Ry aW5nICYgYVN0YXR1cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0U3RhdHVz KG5zQVN0cmluZyAmIGFEZWZhdWx0U3RhdHVzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRE ZWZhdWx0U3RhdHVzKGNvbnN0IG5zQVN0cmluZyAmIGFEZWZhdWx0U3RhdHVzKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldExvY2F0aW9uKG5zSURPTUxvY2F0aW9uICogKmFMb2NhdGlvbikg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbm5lcldpZHRoKFBSSW50MzIgKmFJbm5lcldp ZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbm5lcldpZHRoKFBSSW50MzIgYUlubmVy V2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5uZXJIZWlnaHQoUFJJbnQzMiAq YUlubmVySGVpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbm5lckhlaWdodChQUklu dDMyIGFJbm5lckhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPdXRlcldpZHRo KFBSSW50MzIgKmFPdXRlcldpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPdXRlcldp ZHRoKFBSSW50MzIgYU91dGVyV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3V0 ZXJIZWlnaHQoUFJJbnQzMiAqYU91dGVySGVpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRPdXRlckhlaWdodChQUkludDMyIGFPdXRlckhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRTY3JlZW5YKFBSSW50MzIgKmFTY3JlZW5YKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRTY3JlZW5YKFBSSW50MzIgYVNjcmVlblgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0U2NyZWVuWShQUkludDMyICphU2NyZWVuWSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 U2NyZWVuWShQUkludDMyIGFTY3JlZW5ZKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBh Z2VYT2Zmc2V0KFBSSW50MzIgKmFQYWdlWE9mZnNldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRQYWdlWU9mZnNldChQUkludDMyICphUGFnZVlPZmZzZXQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEZ1bGxTY3JlZW4oUFJCb29sICphRnVsbFNjcmVlbikgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0RnVsbFNjcmVlbihQUkJvb2wgYUZ1bGxTY3JlZW4pID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgQWxlcnQoY29uc3QgbnNBU3RyaW5nICYgdGV4dCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDb25maXJtKGNvbnN0IG5zQVN0cmluZyAmIHRleHQsIFBSQm9vbCAqX3JldHZh bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQcm9tcHQoY29uc3QgbnNBU3RyaW5nICYgYU1l c3NhZ2UsIGNvbnN0IG5zQVN0cmluZyAmIGFJbml0aWFsLCBjb25zdCBuc0FTdHJpbmcgJiBhVGl0 bGUsIFBSVWludDMyIGFTYXZlUGFzc3dvcmQsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgRm9jdXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBC bHVyKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQmFjayh2b2lkKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEZvcndhcmQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBI b21lKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcCh2b2lkKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IFByaW50KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTW92 ZVRvKFBSSW50MzIgeFBvcywgUFJJbnQzMiB5UG9zKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IE1vdmVCeShQUkludDMyIHhEaWYsIFBSSW50MzIgeURpZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBSZXNpemVUbyhQUkludDMyIHdpZHRoLCBQUkludDMyIGhlaWdodCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBSZXNpemVCeShQUkludDMyIHdpZHRoRGlmLCBQUkludDMyIGhlaWdodERp ZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGwoUFJJbnQzMiB4U2Nyb2xsLCBQUklu dDMyIHlTY3JvbGwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3Blbihjb25zdCBuc0FTdHJp bmcgJiB1cmwsIGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIGNvbnN0IG5zQVN0cmluZyAmIG9wdGlv bnMsIG5zSURPTVdpbmRvdyAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3Bl bkRpYWxvZyhjb25zdCBuc0FTdHJpbmcgJiB1cmwsIGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIGNv bnN0IG5zQVN0cmluZyAmIG9wdGlvbnMsIG5zSVN1cHBvcnRzICphRXh0cmFBcmd1bWVudCwgbnNJ RE9NV2luZG93ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9zZSh2b2lk KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZUNvbW1hbmRzKGNvbnN0IG5zQVN0cmlu ZyAmIGFjdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFc2NhcGUoY29uc3QgbnNBU3Ry aW5nICYgc3RyLCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IFVuZXNjYXBlKGNvbnN0IG5zQVN0cmluZyAmIHN0ciwgbnNBU3RyaW5nICYgX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kKGNvbnN0IG5zQVN0cmluZyAmIHN0ciwgUFJCb29s IGNhc2VTZW5zaXRpdmUsIFBSQm9vbCBiYWNrd2FyZHMsIFBSQm9vbCB3cmFwQXJvdW5kLCBQUkJv b2wgd2hvbGVXb3JkLCBQUkJvb2wgc2VhcmNoSW5GcmFtZXMsIFBSQm9vbCBzaG93RGlhbG9nLCBQ UkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXRvYihjb25zdCBuc0FT dHJpbmcgJiBhQXNjaWlTdHJpbmcsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcgJiBhQmFzZTY0RGF0YSwgbnNBU3RyaW5n ICYgX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUVsZW1lbnQobnNJ RE9NRWxlbWVudCAqICphRnJhbWVFbGVtZW50KSA9IDA7Cgp9OwojIDkyICJuc0RPTUNsYXNzSW5m by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUpTV2luZG93Lmgi IDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01KU1dpbmRvdy5oIgpjbGFz cyBuc0lET01KU1dpbmRvdyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhjODE4 ODYyMCwgMHgxZGQxLCAweDExYjIsIHsgMHhiYywgMHg4OCwgMHhkZiwgMHg4NCwgMHg0MCwgMHg0 OSwgMHg4YSwgMHhkZCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IER1bXAo Y29uc3QgbnNBU3RyaW5nICYgc3RyKSA9IDA7CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NSlNXaW5kb3cuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRpbWVvdXQoUFJJbnQz MiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbnRlcnZhbChQUkludDMy ICpfcmV0dmFsKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJUaW1lb3V0KHZv aWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJJbnRlcnZhbCh2b2lkKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlc2l6YWJsZShQUkJvb2wgcmVzaXphYmxlKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IENhcHR1cmVFdmVudHMoUFJJbnQzMiBldmVudEZsYWdzKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbGVhc2VFdmVudHMoUFJJbnQzMiBldmVudEZsYWdzKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJvdXRlRXZlbnQobnNJRE9NRXZlbnQgKmV2dCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVFeHRlcm5hbENhcHR1cmUodm9pZCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBEaXNhYmxlRXh0ZXJuYWxDYXB0dXJlKHZvaWQpID0gMDsKCgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByb21wdChuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW4obnNJRE9NV2luZG93ICoqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBPcGVuRGlhbG9nKG5zSURPTVdpbmRvdyAqKl9yZXR2YWwpID0gMDsK IyA5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01KU1dpbmRvdy5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RnJhbWVzKG5zSURPTVdpbmRvdyAqICphRnJhbWVzKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEZpbmQoUFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDkzICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVdp bmRvd0NvbGxlY3Rpb24uaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TVdpbmRvd0NvbGxlY3Rpb24uaCIKY2xhc3MgbnNJRE9NV2luZG93Q29sbGVjdGlvbiA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA2ZiwgMHgxNWIzLCAweDExZDIsIHsg MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJu IGlpZDt9CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93Q29sbGVj dGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9 IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5kZXgsIG5zSURPTVdp bmRvdyAqKl9yZXR2YWwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmFtZWRJdGVtKGNv bnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTVdpbmRvdyAqKl9yZXR2YWwpID0gMDsKCn07CiMg OTQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NSGlzdG9yeS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N SGlzdG9yeS5oIgpjbGFzcyBuc0lET01IaXN0b3J5IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1 YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE IGlpZCA9IHsweDg5NmQxZDIwLCAweGI0YzQsIDB4MTFkMiwgeyAweGJkLCAweDkzLCAweDAwLCAw eDgwLCAweDVmLCAweDhhLCAweGUzLCAweGY0IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0TGVuZ3RoKFBSSW50MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0Q3VycmVudChuc0FTdHJpbmcgJiBhQ3VycmVudCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRQcmV2aW91cyhuc0FTdHJpbmcgJiBhUHJldmlvdXMpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TmV4dChuc0FTdHJpbmcgJiBhTmV4dCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBCYWNrKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRm9yd2FyZCh2b2lk KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdvSW5kZXgoUFJJbnQzMiBhRGVsdGEpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR29VcmkoY29uc3QgbnNBU3RyaW5nICYgYVVyaVN1YnN0cmlu ZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVtKFBSVWludDMyIGluZGV4LCBuc0FTdHJp bmcgJiBfcmV0dmFsKSA9IDA7Cgp9OwojIDk1ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSGlzdG9yeS5oIiAxCiMgMjUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNIaXN0b3J5LmgiCmNsYXNzIG5zSURPTU5TSGlz dG9yeSA6IHB1YmxpYyBuc0lET01IaXN0b3J5IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDVmYjk2ZjQ2LCAweDFk ZDIsIDB4MTFiMiwgeyAweGE1LCAweGRjLCAweDk5LCAweDhjLCAweGE4LCAweDYzLCAweDZlLCAw eGE5IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR28odm9pZCkgPSAw OwoKfTsKIyA5NiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01NZWRpYUxpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTU1lZGlhTGlzdC5oIgpjbGFzcyBuc0lET01NZWRpYUxpc3QgOiBwdWJsaWMgbnNJ U3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OWIwYzJlZDcsIDB4MTExYywgMHg0ODI0LCB7IDB4YWQs IDB4ZjksIDB4ZWYsIDB4MGQsIDB4YTYsIDB4ZGEsIDB4ZDMsIDB4NzEgfX07IHJldHVybiBpaWQ7 fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU1lZGlhTGlzdC5oIgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0TWVkaWFUZXh0KG5zQVN0cmluZyAmIGFNZWRpYVRleHQpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1lZGlhVGV4dChjb25zdCBuc0FTdHJpbmcgJiBhTWVkaWFU ZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlbmd0aChQUlVpbnQzMiAqYUxlbmd0 aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVtKFBSVWludDMyIGluZGV4LCBuc0FTdHJp bmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZU1lZGl1bShjb25z dCBuc0FTdHJpbmcgJiBvbGRNZWRpdW0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5k TWVkaXVtKGNvbnN0IG5zQVN0cmluZyAmIG5ld01lZGl1bSkgPSAwOwoKfTsKIyA5NyAibnNET01D bGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DaHJv bWVXaW5kb3cuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNocm9t ZVdpbmRvdy5oIgpjbGFzcyBuc0lET01DaHJvbWVXaW5kb3cgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4ODc2ZDZmOTYsIDB4MjQyMCwgMHg0Zjc4LCB7IDB4YmMsIDB4MTcsIDB4 MDAsIDB4YjEsIDB4YTIsIDB4ZWMsIDB4MTIsIDB4YmEgfX07IHJldHVybiBpaWQ7fQoKICBlbnVt IHsgU1RBVEVfTUFYSU1JWkVEID0gMVUgfTsKCiAgZW51bSB7IFNUQVRFX01JTklNSVpFRCA9IDJV IH07CgogIGVudW0geyBTVEFURV9OT1JNQUwgPSAzVSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRUaXRsZShuc0FTdHJpbmcgJiBhVGl0bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRp dGxlKGNvbnN0IG5zQVN0cmluZyAmIGFUaXRsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRXaW5kb3dTdGF0ZShQUlVpbnQxNiAqYVdpbmRvd1N0YXRlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEF0dGVudGlvbih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEN1 cnNvcihjb25zdCBuc0FTdHJpbmcgJiBjdXJzb3IpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg TWF4aW1pemUodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNaW5pbWl6ZSh2b2lkKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc3RvcmUodm9pZCkgPSAwOwoKfTsKIyA5OCAibnNE T01DbGFzc0luZm8uY3BwIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zRE9N RXJyb3IuaCIgMQojIDEwMSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01ET01FeGNlcHRpb24uaCIgMQojIDM4ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTURPTUV4Y2VwdGlvbi5oIgpjbGFzcyBuc0lET01ET01FeGNlcHRp b24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkxMGEsIDB4MTViMywg MHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIg fX07IHJldHVybiBpaWQ7fQoKICBlbnVtIHsgSU5ERVhfU0laRV9FUlIgPSAxVSB9OwoKICBlbnVt IHsgRE9NU1RSSU5HX1NJWkVfRVJSID0gMlUgfTsKCiAgZW51bSB7IEhJRVJBUkNIWV9SRVFVRVNU X0VSUiA9IDNVIH07CgogIGVudW0geyBXUk9OR19ET0NVTUVOVF9FUlIgPSA0VSB9OwoKICBlbnVt IHsgSU5WQUxJRF9DSEFSQUNURVJfRVJSID0gNVUgfTsKCiAgZW51bSB7IE5PX0RBVEFfQUxMT1dF RF9FUlIgPSA2VSB9OwoKICBlbnVtIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSID0gN1Ug fTsKCiAgZW51bSB7IE5PVF9GT1VORF9FUlIgPSA4VSB9OwoKICBlbnVtIHsgTk9UX1NVUFBPUlRF RF9FUlIgPSA5VSB9OwoKICBlbnVtIHsgSU5VU0VfQVRUUklCVVRFX0VSUiA9IDEwVSB9OwoKICBl bnVtIHsgSU5WQUxJRF9TVEFURV9FUlIgPSAxMVUgfTsKCiAgZW51bSB7IFNZTlRBWF9FUlIgPSAx MlUgfTsKCiAgZW51bSB7IElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiA9IDEzVSB9OwoKICBlbnVt IHsgTkFNRVNQQUNFX0VSUiA9IDE0VSB9OwoKICBlbnVtIHsgSU5WQUxJRF9BQ0NFU1NfRVJSID0g MTVVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvZGUoUFJVaW50MzIgKmFDb2RlKSA9IDA7 Cgp9OwojIDEwMiAibnNET01DbGFzc0luZm8uY3BwIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJRE9NTm9kZUxpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTU5vZGVMaXN0LmgiCmNsYXNzIG5zSURPTU5vZGVMaXN0IDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDdkLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAw eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30K IyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Ob2RlTGlzdC5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgSXRlbShQUlVpbnQzMiBpbmRleCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7 Cgp9OwojIDEwNCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01OYW1lZE5vZGVNYXAuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTU5hbWVkTm9kZU1hcC5oIgpjbGFzcyBuc0lET01OYW1lZE5vZGVNYXAgOiBw dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwN2IsIDB4MTViMywgMHgxMWQy LCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJl dHVybiBpaWQ7fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5hbWVkTm9k ZU1hcC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZWRJdGVtKGNvbnN0IG5zQVN0cmluZyAm IG5hbWUsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dE5hbWVkSXRlbShuc0lET01Ob2RlICphcmcsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZU5hbWVkSXRlbShjb25zdCBuc0FTdHJpbmcgJiBuYW1l LCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVtKFBS VWludDMyIGluZGV4LCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRMZW5ndGgoUFJVaW50MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0TmFtZWRJdGVtTlMoY29uc3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBu c0FTdHJpbmcgJiBsb2NhbE5hbWUsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldE5hbWVkSXRlbU5TKG5zSURPTU5vZGUgKmFyZywgbnNJRE9NTm9kZSAq Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlTmFtZWRJdGVtTlMoY29u c3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBuc0FTdHJpbmcgJiBsb2NhbE5hbWUs IG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDEwNSAibnNET01DbGFzc0luZm8uY3Bw IiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lGb3JtLmgiIDEKIyA0 NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRm9ybS5oIgpjbGFzcyBuc0lGb3Jt Q29udHJvbDsKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNJRE9NSFRNTElucHV0RWxl bWVudDsKY2xhc3MgbnNJUmFkaW9WaXNpdG9yOwpjbGFzcyBuc0lTaW1wbGVFbnVtZXJhdG9yOwoj IDcwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lGb3JtLmgiCmNsYXNzIG5zSUZv cm0gOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhiN2U5NDUxMCwgMHg0YzE5LCAw eDExZDIsIHsgMHg4MCwgMHgzZiwgMHgwLCAweDYwLCAweDgsIDB4MTUsIDB4YTcsIDB4OTEgfSB9 OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRFbGVtZW50KG5zSUZv cm1Db250cm9sKiBhRWxlbWVudCkgPSAwOwojIDkxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29u dGVudC9uc0lGb3JtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRFbGVtZW50VG9UYWJsZShuc0lG b3JtQ29udHJvbCogYUVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBuc0FTdHJpbmcmIGFOYW1lKSA9IDA7CiMgMTAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29u dGVudC9uc0lGb3JtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbGVtZW50QXQoUFJJbnQzMiBh SW5kZXgsIG5zSUZvcm1Db250cm9sKiogYUVsZW1lbnQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRFbGVtZW50Q291bnQoUFJVaW50MzIqIGFDb3VudCkgY29uc3QgPSAw OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUVsZW1lbnQobnNJRm9ybUNvbnRyb2wq IGFFbGVtZW50KSA9IDA7CiMgMTMwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lG b3JtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVFbGVtZW50RnJvbVRhYmxlKG5zSUZvcm1D b250cm9sKiBhRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbnNBU3RyaW5nJiBhTmFtZSkgPSAwOwojIDE0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Nv bnRlbnQvbnNJRm9ybS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZU5hbWUoY29uc3QgbnNB U3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJl c3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5kZXhPZkNvbnRyb2wobnNJRm9y bUNvbnRyb2wqIGFDb250cm9sLCBQUkludDMyKiBhSW5kZXgpID0gMDsKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldENvbnRyb2xFbnVtZXJhdG9yKG5zSVNpbXBsZUVudW1lcmF0b3IqKiBhRW51 bSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdWJtaXRDbGlja0JlZ2luKCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgT25TdWJtaXRDbGlja0VuZCgpID0gMDsKCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBGbHVzaFBlbmRpbmdTdWJtaXNzaW9uKCkgPSAwOwoKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgRm9yZ2V0UGVuZGluZ1N1Ym1pc3Npb24oKSA9IDA7Cn07CiMgMTA4ICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lG b3JtQ29udHJvbC5oIiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUZv cm1Db250cm9sLmgiCmNsYXNzIG5zSURPTUhUTUxGb3JtRWxlbWVudDsKY2xhc3MgbnNJUHJlc0Nv bnRleHQ7CmNsYXNzIG5zSVByZXNTdGF0ZTsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNTdHJp bmc7CmNsYXNzIG5zSUZvcm1Qcm9jZXNzb3I7CmNsYXNzIG5zSUZvcm1TdWJtaXNzaW9uOwojIDgz ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lGb3JtQ29udHJvbC5oIgpjbGFzcyBu c0lGb3JtQ29udHJvbCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgyODJmZjQ0 MCwgMHhjZDdlLCAweDExZDEsIHsweDg5LCAweGFkLCAweDAwLCAweDYwLCAweDA4LCAweDkxLCAw eDFiLCAweDgxfSB9OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9y bShuc0lET01IVE1MRm9ybUVsZW1lbnQqKiBhRm9ybSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IFNldEZvcm0obnNJRE9NSFRNTEZvcm1FbGVtZW50KiBhRm9ybSwKICAgICAgICAgICAg ICAgICAgICAgUFJCb29sIGFSZW1vdmVGcm9tRm9ybSA9IDEpID0gMDsKCgoKCgogIHZpcnR1YWwg UFJJbnQzMiBHZXRUeXBlKCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldCgpID0g MDsKIyAxMjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUZvcm1Db250cm9sLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBTdWJtaXROYW1lc1ZhbHVlcyhuc0lGb3JtU3VibWlzc2lvbiog YUZvcm1TdWJtaXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu dCogYVN1Ym1pdEVsZW1lbnQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNhdmVTdGF0 ZSgpID0gMDsKIyAxNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUZvcm1Db250 cm9sLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXN0b3JlU3RhdGUobnNJUHJlc1N0YXRlKiBhU3Rh dGUpID0gMDsKfTsKIyAxMDkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEZvcm1FbGVtZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRm9ybUVsZW1lbnQuaCIKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxFbGVtZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRWxlbWVudC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJRE9NRWxlbWVudC5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NRWxlbWVudC5oIgpjbGFzcyBuc0lET01FbGVtZW50IDogcHVibGljIG5zSURPTU5v ZGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNzgsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUs IDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQw ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUVsZW1lbnQuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFRhZ05hbWUobnNBU3RyaW5nICYgYVRhZ05hbWUpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0QXR0cmlidXRlKGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zQVN0cmluZyAm IF9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRlKGNvbnN0IG5z QVN0cmluZyAmIG5hbWUsIGNvbnN0IG5zQVN0cmluZyAmIHZhbHVlKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IFJlbW92ZUF0dHJpYnV0ZShjb25zdCBuc0FTdHJpbmcgJiBuYW1lKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJpYnV0ZU5vZGUoY29uc3QgbnNBU3RyaW5nICYgbmFt ZSwgbnNJRE9NQXR0ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0 cmlidXRlTm9kZShuc0lET01BdHRyICpuZXdBdHRyLCBuc0lET01BdHRyICoqX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVBdHRyaWJ1dGVOb2RlKG5zSURPTUF0dHIgKm9s ZEF0dHIsIG5zSURPTUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTU5vZGVMaXN0 ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdHRyaWJ1dGVOUyhjb25z dCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5zQVN0cmluZyAmIGxvY2FsTmFtZSwg bnNBU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyaWJ1 dGVOUyhjb25zdCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5zQVN0cmluZyAmIHF1 YWxpZmllZE5hbWUsIGNvbnN0IG5zQVN0cmluZyAmIHZhbHVlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IFJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0IG5zQVN0cmluZyAmIG5hbWVzcGFjZVVSSSwg Y29uc3QgbnNBU3RyaW5nICYgbG9jYWxOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEF0dHJpYnV0ZU5vZGVOUyhjb25zdCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5z QVN0cmluZyAmIGxvY2FsTmFtZSwgbnNJRE9NQXR0ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRlTm9kZU5TKG5zSURPTUF0dHIgKm5ld0F0dHIsIG5zSURP TUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVsZW1lbnRzQnlU YWdOYW1lTlMoY29uc3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBuc0FTdHJpbmcg JiBsb2NhbE5hbWUsIG5zSURPTU5vZGVMaXN0ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBIYXNBdHRyaWJ1dGUoY29uc3QgbnNBU3RyaW5nICYgbmFtZSwgUFJCb29sICpfcmV0 dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0F0dHJpYnV0ZU5TKGNvbnN0IG5zQVN0 cmluZyAmIG5hbWVzcGFjZVVSSSwgY29uc3QgbnNBU3RyaW5nICYgbG9jYWxOYW1lLCBQUkJvb2wg Kl9yZXR2YWwpID0gMDsKCn07CiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N SFRNTEVsZW1lbnQuaCIgMgojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhU TUxFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxFbGVtZW50IDogcHVibGljIG5zSURPTUVsZW1l bnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4YTZjZjkwODUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUs IDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxFbGVtZW50LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRJZChuc0FTdHJpbmcgJiBhSWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldElkKGNvbnN0IG5zQVN0cmluZyAmIGFJZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRUaXRsZShuc0FTdHJpbmcgJiBhVGl0bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRp dGxlKGNvbnN0IG5zQVN0cmluZyAmIGFUaXRsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRMYW5nKG5zQVN0cmluZyAmIGFMYW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMYW5n KGNvbnN0IG5zQVN0cmluZyAmIGFMYW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERp cihuc0FTdHJpbmcgJiBhRGlyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXIoY29uc3Qg bnNBU3RyaW5nICYgYURpcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc05hbWUo bnNBU3RyaW5nICYgYUNsYXNzTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2xhc3NO YW1lKGNvbnN0IG5zQVN0cmluZyAmIGFDbGFzc05hbWUpID0gMDsKCn07CiMgMTEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEZvcm1FbGVtZW50LmgiIDIKIyAyNSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRm9ybUVsZW1lbnQuaCIKY2xhc3MgbnNJRE9N SFRNTEZvcm1FbGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw eGE2Y2Y5MDhmLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVm LCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0MCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01IVE1MRm9ybUVsZW1lbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEVsZW1lbnRzKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFFbGVtZW50cykgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJJbnQzMiAqYUxlbmd0aCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXROYW1lKG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXROYW1lKGNvbnN0IG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEFjY2VwdENoYXJzZXQobnNBU3RyaW5nICYgYUFjY2VwdENoYXJzZXQpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2VwdENoYXJzZXQoY29uc3QgbnNBU3RyaW5nICYgYUFj Y2VwdENoYXJzZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWN0aW9uKG5zQVN0cmlu ZyAmIGFBY3Rpb24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjdGlvbihjb25zdCBuc0FT dHJpbmcgJiBhQWN0aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVuY3R5cGUobnNB U3RyaW5nICYgYUVuY3R5cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEVuY3R5cGUoY29u c3QgbnNBU3RyaW5nICYgYUVuY3R5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWV0 aG9kKG5zQVN0cmluZyAmIGFNZXRob2QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1ldGhv ZChjb25zdCBuc0FTdHJpbmcgJiBhTWV0aG9kKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFRhcmdldChuc0FTdHJpbmcgJiBhVGFyZ2V0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRU YXJnZXQoY29uc3QgbnNBU3RyaW5nICYgYVRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBTdWJtaXQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldCh2b2lkKSA9IDA7 Cgp9OwojIDExMCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01OU0hUTUxGb3JtQ29udHJvbExpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTEZvcm1Db250cm9sTGlzdC5oIgpjbGFzcyBuc0lE T01OU0hUTUxGb3JtQ29udHJvbExpc3QgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g ezB4YTZjZjkxMWEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4 NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBOYW1lZEl0ZW0oY29uc3QgbnNBU3RyaW5nICYgbmFtZSwgbnNJU3VwcG9ydHMgKipfcmV0dmFs KSA9IDA7Cgp9OwojIDExMSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01IVE1MQ29sbGVjdGlvbi5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTENvbGxlY3Rpb24uaCIKY2xhc3MgbnNJRE9NSFRNTENv bGxlY3Rpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwODMsIDB4 MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQs IDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUhUTUxDb2xsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJVaW50 MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXRlbShQUlVpbnQzMiBpbmRl eCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmFtZWRJ dGVtKGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7Cgp9 OwojIDExMiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2NvbnRlbnQvbnNJSFRNTERvY3VtZW50LmgiIDEKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2NvbnRlbnQvbnNJSFRNTERvY3VtZW50LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xh eW91dC9uc0NvbXBhdGliaWxpdHkuaCIgMQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5 b3V0L25zQ29tcGF0aWJpbGl0eS5oIgplbnVtIG5zQ29tcGF0aWJpbGl0eSB7CiAgZUNvbXBhdGli aWxpdHlfRnVsbFN0YW5kYXJkcyA9IDEsCiAgZUNvbXBhdGliaWxpdHlfQWxtb3N0U3RhbmRhcmRz ID0gMiwKICBlQ29tcGF0aWJpbGl0eV9OYXZRdWlya3MgPSAzCn07CiMgNDMgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9jb250ZW50L25zSUhUTUxEb2N1bWVudC5oIiAyCgpjbGFzcyBuc0lJbWFnZU1h cDsKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSURPTU5vZGVMaXN0OwpjbGFzcyBuc0lET01IVE1M Q29sbGVjdGlvbjsKY2xhc3MgbnNJRE9NSFRNTEZvcm1FbGVtZW50OwpjbGFzcyBuc0lET01IVE1M TWFwRWxlbWVudDsKY2xhc3MgbnNJSFRNTFN0eWxlU2hlZXQ7CmNsYXNzIG5zSVN0eWxlU2hlZXQ7 CmNsYXNzIG5zSUNTU0xvYWRlcjsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNJRE9NSFRNTEJv ZHlFbGVtZW50OwojIDY0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lIVE1MRG9j dW1lbnQuaCIKY2xhc3MgbnNJSFRNTERvY3VtZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVi bGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp aWQgPSB7MHhiMmE4NDhiMCwgMHhkMGE5LCAweDExZDEsIHsweDg5LCAweGIxLCAweDAwLCAweDYw LCAweDA4LCAweDkxLCAweDFiLCAweDgxfX07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVz dWx0IEFkZEltYWdlTWFwKG5zSURPTUhUTUxNYXBFbGVtZW50KiBhTWFwKSA9IDA7CgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0SW1hZ2VNYXAoY29uc3QgbnNBU3RyaW5nJiBhTWFwTmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSURPTUhUTUxNYXBFbGVtZW50KiogYVJlc3VsdCkgPSAwOwoK ICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUltYWdlTWFwKG5zSURPTUhUTUxNYXBFbGVtZW50KiBh TWFwKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFzdE1vZGlmaWVkKGNvbnN0IG5zQVN0 cmluZyYgYUxhc3RNb2RpZmllZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVmZXJyZXIo Y29uc3QgbnNBU3RyaW5nJiBhUmVmZXJyZXIpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDb21wYXRpYmlsaXR5TW9kZShuc0NvbXBhdGliaWxpdHkmIGFNb2RlKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRDb21wYXRpYmlsaXR5TW9kZShuc0NvbXBhdGliaWxpdHkgYU1vZGUpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXYXNEb21haW5TZXQoUFJCb29sKiBhRG9tYWluV2Fz U2V0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZU5hbWUoY29uc3QgbnNBU3RyaW5n JiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURPTUhUTUxGb3JtRWxlbWVudCAq YUZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpID0g MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb3JtQ29udHJvbEVsZW1lbnRzKG5zSURPTU5vZGVM aXN0KiogYVJldHVybikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZGVkRm9ybSgpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVkRm9ybSgpID0gMDsKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXROdW1Gb3Jtc1N5bmNocm9ub3VzKFBSSW50MzIqIGFOdW1Gb3JtcykgPSAw OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJvZHlFbGVtZW50KG5zSURPTUhUTUxCb2R5RWxlbWVu dCoqIGFCb2R5KSA9IDA7CgogIHZpcnR1YWwgUFJCb29sIElzV3JpdGluZygpID0gMDsKCn07CiMg MTEzICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NSFRNTFNlbGVjdEVsZW1lbnQuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUhUTUxTZWxlY3RFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxTZWxlY3RF bGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDkw LCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAw eGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShu c0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3RlZElu ZGV4KFBSSW50MzIgKmFTZWxlY3RlZEluZGV4KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRT ZWxlY3RlZEluZGV4KFBSSW50MzIgYVNlbGVjdGVkSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0VmFsdWUobnNBU3RyaW5nICYgYVZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRWYWx1ZShjb25zdCBuc0FTdHJpbmcgJiBhVmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRMZW5ndGgoUFJVaW50MzIgYUxlbmd0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRGb3JtKG5zSURPTUhUTUxGb3JtRWxlbWVudCAqICphRm9ybSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRPcHRpb25zKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFPcHRpb25zKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpc2FibGVkKFBSQm9vbCAqYURpc2FibGVkKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXNhYmxlZChQUkJvb2wgYURpc2FibGVkKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE11bHRpcGxlKFBSQm9vbCAqYU11bHRpcGxlKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRNdWx0aXBsZShQUkJvb2wgYU11bHRpcGxlKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0U2l6ZShQUkludDMyICphU2l6ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0U2l6ZShQUkludDMyIGFTaXplKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRh YkluZGV4KFBSSW50MzIgKmFUYWJJbmRleCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGFi SW5kZXgoUFJJbnQzMiBhVGFiSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkKG5z SURPTUhUTUxFbGVtZW50ICplbGVtZW50LCBuc0lET01IVE1MRWxlbWVudCAqYmVmb3JlKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZShQUkludDMyIGluZGV4KSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEJsdXIodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGb2N1cyh2 b2lkKSA9IDA7Cgp9OwojIDExNiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1hCTEZvcm1Db250cm9sLmgiIDEKIyAxNyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1hCTEZvcm1Db250cm9sLmgiCmNsYXNzIG5zSUJv eE9iamVjdDsKIyAyNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1hCTEZvcm1D b250cm9sLmgiCmNsYXNzIG5zSURPTU5TWEJMRm9ybUNvbnRyb2wgOiBwdWJsaWMgbnNJU3VwcG9y dHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4MWMyOGVkNjYsIDB4MWRkMiwgMHgxMWIyLCB7IDB4OTUsIDB4YWYs IDB4ZTIsIDB4Y2YsIDB4MTAsIDB4OTMsIDB4MWEsIDB4ZGIgfX07IHJldHVybiBpaWQ7fQoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRCb3hPYmplY3QobnNJQm94T2JqZWN0ICogKmFCb3hPYmplY3Qp ID0gMDsKCn07CiMgMTE3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2UuaCIgMQojIDE0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlLmgiCiMgMSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5TdHJlYW1MaXN0ZW5lci5oIiAxCiMgMTQgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIuaCIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zcGx1Z2lucm9vdC5oIiAxCiMgMTUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIuaCIgMgoKCgoj IDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtSW5mby5oIiAx CiMgMjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtSW5mby5o IgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW5kZWZzLmgiIDEKIyA1 OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbmRlZnMuaCIKIyAxICIvdXNy L1gxMVI2L2luY2x1ZGUvWDExL1hsaWIuaCIgMQojIDU1ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDEx L1hsaWIuaCIKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1guaCIgMQojIDcxICIvdXNyL1gx MVI2L2luY2x1ZGUvWDExL1guaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJRDsKCgoKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIE1hc2s7CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBBdG9tOwoKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIFZpc3VhbElEOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVGltZTsK IyAxMDEgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWC5oIgp0eXBlZGVmIFhJRCBXaW5kb3c7CnR5 cGVkZWYgWElEIERyYXdhYmxlOwoKCnR5cGVkZWYgWElEIEZvbnQ7Cgp0eXBlZGVmIFhJRCBQaXht YXA7CnR5cGVkZWYgWElEIEN1cnNvcjsKdHlwZWRlZiBYSUQgQ29sb3JtYXA7CnR5cGVkZWYgWElE IEdDb250ZXh0Owp0eXBlZGVmIFhJRCBLZXlTeW07Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgS2V5 Q29kZTsKIyA1NiAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiIDIKCgojIDEgIi91c3Iv WDExUjYvaW5jbHVkZS9YMTEvWGZ1bmNwcm90by5oIiAxCiMgNTkgIi91c3IvWDExUjYvaW5jbHVk ZS9YMTEvWGxpYi5oIiAyCiMgMSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9Yb3NkZWZzLmgiIDEK IyA2MCAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiIDIKIyA3MiAiL3Vzci9YMTFSNi9p bmNsdWRlL1gxMS9YbGliLmgiCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdu dS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA3MyAiL3Vzci9YMTFSNi9pbmNsdWRlL1gx MS9YbGliLmgiIDIKIyA5NCAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiCnR5cGVkZWYg Y2hhciAqWFBvaW50ZXI7CiMgMTY2ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1hsaWIuaCIKdHlw ZWRlZiBzdHJ1Y3QgX1hFeHREYXRhIHsKICAgICAgICBpbnQgbnVtYmVyOwogICAgICAgIHN0cnVj dCBfWEV4dERhdGEgKm5leHQ7CiAgICAgICAgaW50ICgqZnJlZV9wcml2YXRlKSgKCiAgICAgICAg c3RydWN0IF9YRXh0RGF0YSAqZXh0ZW5zaW9uCgogICAgICAgICk7CiAgICAgICAgWFBvaW50ZXIg cHJpdmF0ZV9kYXRhOwp9IFhFeHREYXRhOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGlu dCBleHRlbnNpb247CiAgICAgICAgaW50IG1ham9yX29wY29kZTsKICAgICAgICBpbnQgZmlyc3Rf ZXZlbnQ7CiAgICAgICAgaW50IGZpcnN0X2Vycm9yOwp9IFhFeHRDb2RlczsKCgoKCgp0eXBlZGVm IHN0cnVjdCB7CiAgICBpbnQgZGVwdGg7CiAgICBpbnQgYml0c19wZXJfcGl4ZWw7CiAgICBpbnQg c2NhbmxpbmVfcGFkOwp9IFhQaXhtYXBGb3JtYXRWYWx1ZXM7CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgICAgIGludCBmdW5jdGlvbjsKICAgICAgICB1bnNpZ25lZCBsb25nIHBsYW5lX21hc2s7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBmb3JlZ3JvdW5kOwogICAgICAgIHVuc2lnbmVkIGxvbmcg YmFja2dyb3VuZDsKICAgICAgICBpbnQgbGluZV93aWR0aDsKICAgICAgICBpbnQgbGluZV9zdHls ZTsKICAgICAgICBpbnQgY2FwX3N0eWxlOwoKICAgICAgICBpbnQgam9pbl9zdHlsZTsKICAgICAg ICBpbnQgZmlsbF9zdHlsZTsKCiAgICAgICAgaW50IGZpbGxfcnVsZTsKICAgICAgICBpbnQgYXJj X21vZGU7CiAgICAgICAgUGl4bWFwIHRpbGU7CiAgICAgICAgUGl4bWFwIHN0aXBwbGU7CiAgICAg ICAgaW50IHRzX3hfb3JpZ2luOwogICAgICAgIGludCB0c195X29yaWdpbjsKICAgICAgICBGb250 IGZvbnQ7CiAgICAgICAgaW50IHN1YndpbmRvd19tb2RlOwogICAgICAgIGludCBncmFwaGljc19l eHBvc3VyZXM7CiAgICAgICAgaW50IGNsaXBfeF9vcmlnaW47CiAgICAgICAgaW50IGNsaXBfeV9v cmlnaW47CiAgICAgICAgUGl4bWFwIGNsaXBfbWFzazsKICAgICAgICBpbnQgZGFzaF9vZmZzZXQ7 CiAgICAgICAgY2hhciBkYXNoZXM7Cn0gWEdDVmFsdWVzOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCBf WEdDCgoKCgoKCgoqR0M7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgWEV4dERhdGEgKmV4 dF9kYXRhOwogICAgICAgIFZpc3VhbElEIHZpc3VhbGlkOwoKICAgICAgICBpbnQgY19jbGFzczsK CgoKICAgICAgICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrLCBncmVlbl9tYXNrLCBibHVlX21hc2s7 CiAgICAgICAgaW50IGJpdHNfcGVyX3JnYjsKICAgICAgICBpbnQgbWFwX2VudHJpZXM7Cn0gVmlz dWFsOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCBkZXB0aDsKICAgICAgICBpbnQg bnZpc3VhbHM7CiAgICAgICAgVmlzdWFsICp2aXN1YWxzOwp9IERlcHRoOwoKCgoKCgoKc3RydWN0 IF9YRGlzcGxheTsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBYRXh0RGF0YSAqZXh0X2RhdGE7 CiAgICAgICAgc3RydWN0IF9YRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcm9vdDsK ICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICAgICBpbnQgbXdpZHRoLCBtaGVpZ2h0Owog ICAgICAgIGludCBuZGVwdGhzOwogICAgICAgIERlcHRoICpkZXB0aHM7CiAgICAgICAgaW50IHJv b3RfZGVwdGg7CiAgICAgICAgVmlzdWFsICpyb290X3Zpc3VhbDsKICAgICAgICBHQyBkZWZhdWx0 X2djOwogICAgICAgIENvbG9ybWFwIGNtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyB3aGl0ZV9w aXhlbDsKICAgICAgICB1bnNpZ25lZCBsb25nIGJsYWNrX3BpeGVsOwogICAgICAgIGludCBtYXhf bWFwcywgbWluX21hcHM7CiAgICAgICAgaW50IGJhY2tpbmdfc3RvcmU7CiAgICAgICAgaW50IHNh dmVfdW5kZXJzOwogICAgICAgIGxvbmcgcm9vdF9pbnB1dF9tYXNrOwp9IFNjcmVlbjsKCgoKCnR5 cGVkZWYgc3RydWN0IHsKICAgICAgICBYRXh0RGF0YSAqZXh0X2RhdGE7CiAgICAgICAgaW50IGRl cHRoOwogICAgICAgIGludCBiaXRzX3Blcl9waXhlbDsKICAgICAgICBpbnQgc2NhbmxpbmVfcGFk Owp9IFNjcmVlbkZvcm1hdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIFBpeG1hcCBiYWNrZ3Jv dW5kX3BpeG1hcDsKICAgIHVuc2lnbmVkIGxvbmcgYmFja2dyb3VuZF9waXhlbDsKICAgIFBpeG1h cCBib3JkZXJfcGl4bWFwOwogICAgdW5zaWduZWQgbG9uZyBib3JkZXJfcGl4ZWw7CiAgICBpbnQg Yml0X2dyYXZpdHk7CiAgICBpbnQgd2luX2dyYXZpdHk7CiAgICBpbnQgYmFja2luZ19zdG9yZTsK ICAgIHVuc2lnbmVkIGxvbmcgYmFja2luZ19wbGFuZXM7CiAgICB1bnNpZ25lZCBsb25nIGJhY2tp bmdfcGl4ZWw7CiAgICBpbnQgc2F2ZV91bmRlcjsKICAgIGxvbmcgZXZlbnRfbWFzazsKICAgIGxv bmcgZG9fbm90X3Byb3BhZ2F0ZV9tYXNrOwogICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0OwogICAg Q29sb3JtYXAgY29sb3JtYXA7CiAgICBDdXJzb3IgY3Vyc29yOwp9IFhTZXRXaW5kb3dBdHRyaWJ1 dGVzOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHgsIHk7CiAgICBpbnQgd2lkdGgsIGhlaWdo dDsKICAgIGludCBib3JkZXJfd2lkdGg7CiAgICBpbnQgZGVwdGg7CiAgICBWaXN1YWwgKnZpc3Vh bDsKICAgIFdpbmRvdyByb290OwoKICAgIGludCBjX2NsYXNzOwoKCgogICAgaW50IGJpdF9ncmF2 aXR5OwogICAgaW50IHdpbl9ncmF2aXR5OwogICAgaW50IGJhY2tpbmdfc3RvcmU7CiAgICB1bnNp Z25lZCBsb25nIGJhY2tpbmdfcGxhbmVzOwogICAgdW5zaWduZWQgbG9uZyBiYWNraW5nX3BpeGVs OwogICAgaW50IHNhdmVfdW5kZXI7CiAgICBDb2xvcm1hcCBjb2xvcm1hcDsKICAgIGludCBtYXBf aW5zdGFsbGVkOwogICAgaW50IG1hcF9zdGF0ZTsKICAgIGxvbmcgYWxsX2V2ZW50X21hc2tzOwog ICAgbG9uZyB5b3VyX2V2ZW50X21hc2s7CiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFzazsK ICAgIGludCBvdmVycmlkZV9yZWRpcmVjdDsKICAgIFNjcmVlbiAqc2NyZWVuOwp9IFhXaW5kb3dB dHRyaWJ1dGVzOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGZhbWlseTsKICAg ICAgICBpbnQgbGVuZ3RoOwogICAgICAgIGNoYXIgKmFkZHJlc3M7Cn0gWEhvc3RBZGRyZXNzOwoK CgoKdHlwZWRlZiBzdHJ1Y3QgX1hJbWFnZSB7CiAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgIGlu dCB4b2Zmc2V0OwogICAgaW50IGZvcm1hdDsKICAgIGNoYXIgKmRhdGE7CiAgICBpbnQgYnl0ZV9v cmRlcjsKICAgIGludCBiaXRtYXBfdW5pdDsKICAgIGludCBiaXRtYXBfYml0X29yZGVyOwogICAg aW50IGJpdG1hcF9wYWQ7CiAgICBpbnQgZGVwdGg7CiAgICBpbnQgYnl0ZXNfcGVyX2xpbmU7CiAg ICBpbnQgYml0c19wZXJfcGl4ZWw7CiAgICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogICAgdW5z aWduZWQgbG9uZyBncmVlbl9tYXNrOwogICAgdW5zaWduZWQgbG9uZyBibHVlX21hc2s7CiAgICBY UG9pbnRlciBvYmRhdGE7CiAgICBzdHJ1Y3QgZnVuY3MgewoKICAgICAgICBzdHJ1Y3QgX1hJbWFn ZSAqKCpjcmVhdGVfaW1hZ2UpKAogICAgICAgICAgICAgICAgc3RydWN0IF9YRGlzcGxheSogLAog ICAgICAgICAgICAgICAgVmlzdWFsKiAsCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAog ICAgICAgICAgICAgICAgaW50ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAg ICBjaGFyKiAsCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAogICAgICAgICAgICAgICAg dW5zaWduZWQgaW50ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAgICBpbnQg KTsKICAgICAgICBpbnQgKCpkZXN0cm95X2ltYWdlKSAoc3RydWN0IF9YSW1hZ2UgKik7CiAgICAg ICAgdW5zaWduZWQgbG9uZyAoKmdldF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGludCwgaW50 KTsKICAgICAgICBpbnQgKCpwdXRfcGl4ZWwpIChzdHJ1Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwg dW5zaWduZWQgbG9uZyk7CiAgICAgICAgc3RydWN0IF9YSW1hZ2UgKigqc3ViX2ltYWdlKShzdHJ1 Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogICAg ICAgIGludCAoKmFkZF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGxvbmcpOwojIDQxMiAiL3Vz ci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiCiAgICAgICAgfSBmOwp9IFhJbWFnZTsKCgoKCnR5 cGVkZWYgc3RydWN0IHsKICAgIGludCB4LCB5OwogICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICBp bnQgYm9yZGVyX3dpZHRoOwogICAgV2luZG93IHNpYmxpbmc7CiAgICBpbnQgc3RhY2tfbW9kZTsK fSBYV2luZG93Q2hhbmdlczsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBs b25nIHBpeGVsOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZCwgZ3JlZW4sIGJsdWU7CiAgICAg ICAgY2hhciBmbGFnczsKICAgICAgICBjaGFyIHBhZDsKfSBYQ29sb3I7CgoKCgoKCnR5cGVkZWYg c3RydWN0IHsKICAgIHNob3J0IHgxLCB5MSwgeDIsIHkyOwp9IFhTZWdtZW50OwoKdHlwZWRlZiBz dHJ1Y3QgewogICAgc2hvcnQgeCwgeTsKfSBYUG9pbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBz aG9ydCB4LCB5OwogICAgdW5zaWduZWQgc2hvcnQgd2lkdGgsIGhlaWdodDsKfSBYUmVjdGFuZ2xl OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeCwgeTsKICAgIHVuc2lnbmVkIHNob3J0IHdp ZHRoLCBoZWlnaHQ7CiAgICBzaG9ydCBhbmdsZTEsIGFuZ2xlMjsKfSBYQXJjOwoKCgoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgICAgIGludCBrZXlfY2xpY2tfcGVyY2VudDsKICAgICAgICBpbnQgYmVs bF9wZXJjZW50OwogICAgICAgIGludCBiZWxsX3BpdGNoOwogICAgICAgIGludCBiZWxsX2R1cmF0 aW9uOwogICAgICAgIGludCBsZWQ7CiAgICAgICAgaW50IGxlZF9tb2RlOwogICAgICAgIGludCBr ZXk7CiAgICAgICAgaW50IGF1dG9fcmVwZWF0X21vZGU7Cn0gWEtleWJvYXJkQ29udHJvbDsKCgoK dHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCBrZXlfY2xpY2tfcGVyY2VudDsKICAgICAgICBp bnQgYmVsbF9wZXJjZW50OwogICAgICAgIHVuc2lnbmVkIGludCBiZWxsX3BpdGNoLCBiZWxsX2R1 cmF0aW9uOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbGVkX21hc2s7CiAgICAgICAgaW50IGdsb2Jh bF9hdXRvX3JlcGVhdDsKICAgICAgICBjaGFyIGF1dG9fcmVwZWF0c1szMl07Cn0gWEtleWJvYXJk U3RhdGU7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBUaW1lIHRpbWU7CiAgICAgICAgc2hv cnQgeCwgeTsKfSBYVGltZUNvb3JkOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IG1h eF9rZXlwZXJtb2Q7CiAgICAgICAgS2V5Q29kZSAqbW9kaWZpZXJtYXA7Cn0gWE1vZGlmaWVyS2V5 bWFwOwojIDUwNiAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiCnR5cGVkZWYgc3RydWN0 IF9YRGlzcGxheSBEaXNwbGF5OwoKCnN0cnVjdCBfWFByaXZhdGU7CnN0cnVjdCBfWHJtSGFzaEJ1 Y2tldFJlYzsKCnR5cGVkZWYgc3RydWN0CgoKCnsKICAgICAgICBYRXh0RGF0YSAqZXh0X2RhdGE7 CiAgICAgICAgc3RydWN0IF9YUHJpdmF0ZSAqcHJpdmF0ZTE7CiAgICAgICAgaW50IGZkOwogICAg ICAgIGludCBwcml2YXRlMjsKICAgICAgICBpbnQgcHJvdG9fbWFqb3JfdmVyc2lvbjsKICAgICAg ICBpbnQgcHJvdG9fbWlub3JfdmVyc2lvbjsKICAgICAgICBjaGFyICp2ZW5kb3I7CiAgICAgICAg WElEIHByaXZhdGUzOwogICAgICAgIFhJRCBwcml2YXRlNDsKICAgICAgICBYSUQgcHJpdmF0ZTU7 CiAgICAgICAgaW50IHByaXZhdGU2OwogICAgICAgIFhJRCAoKnJlc291cmNlX2FsbG9jKSgKCiAg ICAgICAgICAgICAgICBzdHJ1Y3QgX1hEaXNwbGF5KgoKICAgICAgICApOwogICAgICAgIGludCBi eXRlX29yZGVyOwogICAgICAgIGludCBiaXRtYXBfdW5pdDsKICAgICAgICBpbnQgYml0bWFwX3Bh ZDsKICAgICAgICBpbnQgYml0bWFwX2JpdF9vcmRlcjsKICAgICAgICBpbnQgbmZvcm1hdHM7CiAg ICAgICAgU2NyZWVuRm9ybWF0ICpwaXhtYXBfZm9ybWF0OwogICAgICAgIGludCBwcml2YXRlODsK ICAgICAgICBpbnQgcmVsZWFzZTsKICAgICAgICBzdHJ1Y3QgX1hQcml2YXRlICpwcml2YXRlOSwg KnByaXZhdGUxMDsKICAgICAgICBpbnQgcWxlbjsKICAgICAgICB1bnNpZ25lZCBsb25nIGxhc3Rf cmVxdWVzdF9yZWFkOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVxdWVzdDsKICAgICAgICBYUG9p bnRlciBwcml2YXRlMTE7CiAgICAgICAgWFBvaW50ZXIgcHJpdmF0ZTEyOwogICAgICAgIFhQb2lu dGVyIHByaXZhdGUxMzsKICAgICAgICBYUG9pbnRlciBwcml2YXRlMTQ7CiAgICAgICAgdW5zaWdu ZWQgbWF4X3JlcXVlc3Rfc2l6ZTsKICAgICAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMgKmRi OwogICAgICAgIGludCAoKnByaXZhdGUxNSkoCgogICAgICAgICAgICAgICAgc3RydWN0IF9YRGlz cGxheSoKCiAgICAgICAgICAgICAgICApOwogICAgICAgIGNoYXIgKmRpc3BsYXlfbmFtZTsKICAg ICAgICBpbnQgZGVmYXVsdF9zY3JlZW47CiAgICAgICAgaW50IG5zY3JlZW5zOwogICAgICAgIFNj cmVlbiAqc2NyZWVuczsKICAgICAgICB1bnNpZ25lZCBsb25nIG1vdGlvbl9idWZmZXI7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBwcml2YXRlMTY7CiAgICAgICAgaW50IG1pbl9rZXljb2RlOwogICAg ICAgIGludCBtYXhfa2V5Y29kZTsKICAgICAgICBYUG9pbnRlciBwcml2YXRlMTc7CiAgICAgICAg WFBvaW50ZXIgcHJpdmF0ZTE4OwogICAgICAgIGludCBwcml2YXRlMTk7CiAgICAgICAgY2hhciAq eGRlZmF1bHRzOwoKfQoKCgoqX1hQcml2RGlzcGxheTsKIyA1ODIgIi91c3IvWDExUjYvaW5jbHVk ZS9YMTEvWGxpYi5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlz cGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdpbmRvdyByb290 OwogICAgICAgIFdpbmRvdyBzdWJ3aW5kb3c7CiAgICAgICAgVGltZSB0aW1lOwogICAgICAgIGlu dCB4LCB5OwogICAgICAgIGludCB4X3Jvb3QsIHlfcm9vdDsKICAgICAgICB1bnNpZ25lZCBpbnQg c3RhdGU7CiAgICAgICAgdW5zaWduZWQgaW50IGtleWNvZGU7CiAgICAgICAgaW50IHNhbWVfc2Ny ZWVuOwp9IFhLZXlFdmVudDsKdHlwZWRlZiBYS2V5RXZlbnQgWEtleVByZXNzZWRFdmVudDsKdHlw ZWRlZiBYS2V5RXZlbnQgWEtleVJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAg ICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNl bmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93 OwogICAgICAgIFdpbmRvdyByb290OwogICAgICAgIFdpbmRvdyBzdWJ3aW5kb3c7CiAgICAgICAg VGltZSB0aW1lOwogICAgICAgIGludCB4LCB5OwogICAgICAgIGludCB4X3Jvb3QsIHlfcm9vdDsK ICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdGU7CiAgICAgICAgdW5zaWduZWQgaW50IGJ1dHRvbjsK ICAgICAgICBpbnQgc2FtZV9zY3JlZW47Cn0gWEJ1dHRvbkV2ZW50Owp0eXBlZGVmIFhCdXR0b25F dmVudCBYQnV0dG9uUHJlc3NlZEV2ZW50Owp0eXBlZGVmIFhCdXR0b25FdmVudCBYQnV0dG9uUmVs ZWFzZWRFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1 bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNw bGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgV2luZG93IHJvb3Q7 CiAgICAgICAgV2luZG93IHN1YndpbmRvdzsKICAgICAgICBUaW1lIHRpbWU7CiAgICAgICAgaW50 IHgsIHk7CiAgICAgICAgaW50IHhfcm9vdCwgeV9yb290OwogICAgICAgIHVuc2lnbmVkIGludCBz dGF0ZTsKICAgICAgICBjaGFyIGlzX2hpbnQ7CiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwp9IFhN b3Rpb25FdmVudDsKdHlwZWRlZiBYTW90aW9uRXZlbnQgWFBvaW50ZXJNb3ZlZEV2ZW50OwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2Vy aWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAg ICAgICAgV2luZG93IHdpbmRvdzsKICAgICAgICBXaW5kb3cgcm9vdDsKICAgICAgICBXaW5kb3cg c3Vid2luZG93OwogICAgICAgIFRpbWUgdGltZTsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBp bnQgeF9yb290LCB5X3Jvb3Q7CiAgICAgICAgaW50IG1vZGU7CiAgICAgICAgaW50IGRldGFpbDsK CgoKCiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwogICAgICAgIGludCBmb2N1czsKICAgICAgICB1 bnNpZ25lZCBpbnQgc3RhdGU7Cn0gWENyb3NzaW5nRXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZl bnQgWEVudGVyV2luZG93RXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWExlYXZlV2luZG93 RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAq ZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBtb2RlOwogICAgICAg IGludCBkZXRhaWw7CgoKCgoKfSBYRm9jdXNDaGFuZ2VFdmVudDsKdHlwZWRlZiBYRm9jdXNDaGFu Z2VFdmVudCBYRm9jdXNJbkV2ZW50Owp0eXBlZGVmIFhGb2N1c0NoYW5nZUV2ZW50IFhGb2N1c091 dEV2ZW50OwoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNp Z25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5 ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgY2hhciBrZXlfdmVjdG9y WzMyXTsKfSBYS2V5bWFwRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGlu dCB4LCB5OwogICAgICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBjb3VudDsKfSBY RXhwb3NlRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlz cGxheSAqZGlzcGxheTsKICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgeCwg eTsKICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICAgICBpbnQgY291bnQ7CiAgICAgICAg aW50IG1ham9yX2NvZGU7CiAgICAgICAgaW50IG1pbm9yX2NvZGU7Cn0gWEdyYXBoaWNzRXhwb3Nl RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAq ZGlzcGxheTsKICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgbWFqb3JfY29k ZTsKICAgICAgICBpbnQgbWlub3JfY29kZTsKfSBYTm9FeHBvc2VFdmVudDsKCnR5cGVkZWYgc3Ry dWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAg ICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdp bmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHN0YXRlOwp9IFhWaXNpYmlsaXR5RXZlbnQ7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJp YWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAg ICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgs IHk7CiAgICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsK ICAgICAgICBpbnQgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWENyZWF0ZVdpbmRvd0V2ZW50OwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2Vy aWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAg ICAgICAgV2luZG93IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0gWERlc3Ryb3lXaW5k b3dFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNp Z25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5 ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93Owog ICAgICAgIGludCBmcm9tX2NvbmZpZ3VyZTsKfSBYVW5tYXBFdmVudDsKCnR5cGVkZWYgc3RydWN0 IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAg ICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRv dyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBvdmVycmlkZV9yZWRp cmVjdDsKfSBYTWFwRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAg ICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRv dyB3aW5kb3c7Cn0gWE1hcFJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBp bnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9l dmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAg ICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdpbmRvdyBwYXJlbnQ7CiAgICAgICAgaW50IHgs IHk7CiAgICAgICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhSZXBhcmVudEV2ZW50OwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2Vy aWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAg ICAgICAgV2luZG93IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgs IHk7CiAgICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsK ICAgICAgICBXaW5kb3cgYWJvdmU7CiAgICAgICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhD b25maWd1cmVFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAg ICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBE aXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2lu ZG93OwogICAgICAgIGludCB4LCB5Owp9IFhHcmF2aXR5RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7 CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAg aW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cg d2luZG93OwogICAgICAgIGludCB3aWR0aCwgaGVpZ2h0Owp9IFhSZXNpemVSZXF1ZXN0RXZlbnQ7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh eTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAg aW50IHgsIHk7CiAgICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93 aWR0aDsKICAgICAgICBXaW5kb3cgYWJvdmU7CiAgICAgICAgaW50IGRldGFpbDsKICAgICAgICB1 bnNpZ25lZCBsb25nIHZhbHVlX21hc2s7Cn0gWENvbmZpZ3VyZVJlcXVlc3RFdmVudDsKCnR5cGVk ZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlh bDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAg ICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBwbGFj ZTsKfSBYQ2lyY3VsYXRlRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdp bmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHBsYWNlOwp9IFhDaXJjdWxhdGVSZXF1ZXN0RXZlbnQ7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh eTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIEF0b20gYXRvbTsKICAgICAgICBUaW1l IHRpbWU7CiAgICAgICAgaW50IHN0YXRlOwp9IFhQcm9wZXJ0eUV2ZW50OwoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAg ICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2lu ZG93IHdpbmRvdzsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBUaW1lIHRpbWU7Cn0g WFNlbGVjdGlvbkNsZWFyRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgb3duZXI7CiAgICAgICAgV2lu ZG93IHJlcXVlc3RvcjsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBBdG9tIHRhcmdl dDsKICAgICAgICBBdG9tIHByb3BlcnR5OwogICAgICAgIFRpbWUgdGltZTsKfSBYU2VsZWN0aW9u UmVxdWVzdEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAg IHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERp c3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHJlcXVlc3RvcjsKICAgICAgICBBdG9tIHNl bGVjdGlvbjsKICAgICAgICBBdG9tIHRhcmdldDsKICAgICAgICBBdG9tIHByb3BlcnR5OwogICAg ICAgIFRpbWUgdGltZTsKfSBYU2VsZWN0aW9uRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAg ICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNl bmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93 OwogICAgICAgIENvbG9ybWFwIGNvbG9ybWFwOwoKICAgICAgICBpbnQgY19uZXc7CgoKCiAgICAg ICAgaW50IHN0YXRlOwp9IFhDb2xvcm1hcEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg IGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5k X2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsK ICAgICAgICBBdG9tIG1lc3NhZ2VfdHlwZTsKICAgICAgICBpbnQgZm9ybWF0OwogICAgICAgIHVu aW9uIHsKICAgICAgICAgICAgICAgIGNoYXIgYlsyMF07CiAgICAgICAgICAgICAgICBzaG9ydCBz WzEwXTsKICAgICAgICAgICAgICAgIGxvbmcgbFs1XTsKICAgICAgICAgICAgICAgIH0gZGF0YTsK fSBYQ2xpZW50TWVzc2FnZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBl OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50Owog ICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsKICAgICAgICBp bnQgcmVxdWVzdDsKCiAgICAgICAgaW50IGZpcnN0X2tleWNvZGU7CiAgICAgICAgaW50IGNvdW50 Owp9IFhNYXBwaW5nRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAg ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBYSUQgcmVzb3VyY2VpZDsKICAgICAgICB1 bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICB1bnNpZ25lZCBjaGFyIGVycm9yX2NvZGU7CiAg ICAgICAgdW5zaWduZWQgY2hhciByZXF1ZXN0X2NvZGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBt aW5vcl9jb2RlOwp9IFhFcnJvckV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0 eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50 OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsKfSBYQW55 RXZlbnQ7CgoKCgoKdHlwZWRlZiB1bmlvbiBfWEV2ZW50IHsKICAgICAgICBpbnQgdHlwZTsKICAg ICAgICBYQW55RXZlbnQgeGFueTsKICAgICAgICBYS2V5RXZlbnQgeGtleTsKICAgICAgICBYQnV0 dG9uRXZlbnQgeGJ1dHRvbjsKICAgICAgICBYTW90aW9uRXZlbnQgeG1vdGlvbjsKICAgICAgICBY Q3Jvc3NpbmdFdmVudCB4Y3Jvc3Npbmc7CiAgICAgICAgWEZvY3VzQ2hhbmdlRXZlbnQgeGZvY3Vz OwogICAgICAgIFhFeHBvc2VFdmVudCB4ZXhwb3NlOwogICAgICAgIFhHcmFwaGljc0V4cG9zZUV2 ZW50IHhncmFwaGljc2V4cG9zZTsKICAgICAgICBYTm9FeHBvc2VFdmVudCB4bm9leHBvc2U7CiAg ICAgICAgWFZpc2liaWxpdHlFdmVudCB4dmlzaWJpbGl0eTsKICAgICAgICBYQ3JlYXRlV2luZG93 RXZlbnQgeGNyZWF0ZXdpbmRvdzsKICAgICAgICBYRGVzdHJveVdpbmRvd0V2ZW50IHhkZXN0cm95 d2luZG93OwogICAgICAgIFhVbm1hcEV2ZW50IHh1bm1hcDsKICAgICAgICBYTWFwRXZlbnQgeG1h cDsKICAgICAgICBYTWFwUmVxdWVzdEV2ZW50IHhtYXByZXF1ZXN0OwogICAgICAgIFhSZXBhcmVu dEV2ZW50IHhyZXBhcmVudDsKICAgICAgICBYQ29uZmlndXJlRXZlbnQgeGNvbmZpZ3VyZTsKICAg ICAgICBYR3Jhdml0eUV2ZW50IHhncmF2aXR5OwogICAgICAgIFhSZXNpemVSZXF1ZXN0RXZlbnQg eHJlc2l6ZXJlcXVlc3Q7CiAgICAgICAgWENvbmZpZ3VyZVJlcXVlc3RFdmVudCB4Y29uZmlndXJl cmVxdWVzdDsKICAgICAgICBYQ2lyY3VsYXRlRXZlbnQgeGNpcmN1bGF0ZTsKICAgICAgICBYQ2ly Y3VsYXRlUmVxdWVzdEV2ZW50IHhjaXJjdWxhdGVyZXF1ZXN0OwogICAgICAgIFhQcm9wZXJ0eUV2 ZW50IHhwcm9wZXJ0eTsKICAgICAgICBYU2VsZWN0aW9uQ2xlYXJFdmVudCB4c2VsZWN0aW9uY2xl YXI7CiAgICAgICAgWFNlbGVjdGlvblJlcXVlc3RFdmVudCB4c2VsZWN0aW9ucmVxdWVzdDsKICAg ICAgICBYU2VsZWN0aW9uRXZlbnQgeHNlbGVjdGlvbjsKICAgICAgICBYQ29sb3JtYXBFdmVudCB4 Y29sb3JtYXA7CiAgICAgICAgWENsaWVudE1lc3NhZ2VFdmVudCB4Y2xpZW50OwogICAgICAgIFhN YXBwaW5nRXZlbnQgeG1hcHBpbmc7CiAgICAgICAgWEVycm9yRXZlbnQgeGVycm9yOwogICAgICAg IFhLZXltYXBFdmVudCB4a2V5bWFwOwogICAgICAgIGxvbmcgcGFkWzI0XTsKfSBYRXZlbnQ7CgoK CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCBsYmVhcmluZzsKICAgIHNob3J0IHJiZWFy aW5nOwogICAgc2hvcnQgd2lkdGg7CiAgICBzaG9ydCBhc2NlbnQ7CiAgICBzaG9ydCBkZXNjZW50 OwogICAgdW5zaWduZWQgc2hvcnQgYXR0cmlidXRlczsKfSBYQ2hhclN0cnVjdDsKCgoKCgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBBdG9tIG5hbWU7CiAgICB1bnNpZ25lZCBsb25nIGNhcmQzMjsKfSBY Rm9udFByb3A7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYRXh0RGF0YSAqZXh0X2RhdGE7CiAgICBG b250IGZpZDsKICAgIHVuc2lnbmVkIGRpcmVjdGlvbjsKICAgIHVuc2lnbmVkIG1pbl9jaGFyX29y X2J5dGUyOwogICAgdW5zaWduZWQgbWF4X2NoYXJfb3JfYnl0ZTI7CiAgICB1bnNpZ25lZCBtaW5f Ynl0ZTE7CiAgICB1bnNpZ25lZCBtYXhfYnl0ZTE7CiAgICBpbnQgYWxsX2NoYXJzX2V4aXN0Owog ICAgdW5zaWduZWQgZGVmYXVsdF9jaGFyOwogICAgaW50IG5fcHJvcGVydGllczsKICAgIFhGb250 UHJvcCAqcHJvcGVydGllczsKICAgIFhDaGFyU3RydWN0IG1pbl9ib3VuZHM7CiAgICBYQ2hhclN0 cnVjdCBtYXhfYm91bmRzOwogICAgWENoYXJTdHJ1Y3QgKnBlcl9jaGFyOwogICAgaW50IGFzY2Vu dDsKICAgIGludCBkZXNjZW50Owp9IFhGb250U3RydWN0OwoKCgoKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgY2hhciAqY2hhcnM7CiAgICBpbnQgbmNoYXJzOwogICAgaW50IGRlbHRhOwogICAgRm9udCBm b250Owp9IFhUZXh0SXRlbTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2lnbmVkIGNoYXIgYnl0 ZTE7CiAgICB1bnNpZ25lZCBjaGFyIGJ5dGUyOwp9IFhDaGFyMmI7Cgp0eXBlZGVmIHN0cnVjdCB7 CiAgICBYQ2hhcjJiICpjaGFyczsKICAgIGludCBuY2hhcnM7CiAgICBpbnQgZGVsdGE7CiAgICBG b250IGZvbnQ7Cn0gWFRleHRJdGVtMTY7CgoKdHlwZWRlZiB1bmlvbiB7IERpc3BsYXkgKmRpc3Bs YXk7CiAgICAgICAgICAgICAgICBHQyBnYzsKICAgICAgICAgICAgICAgIFZpc3VhbCAqdmlzdWFs OwogICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW47CiAgICAgICAgICAgICAgICBTY3JlZW5G b3JtYXQgKnBpeG1hcF9mb3JtYXQ7CiAgICAgICAgICAgICAgICBYRm9udFN0cnVjdCAqZm9udDsg fSBYRURhdGFPYmplY3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYUmVjdGFuZ2xlIG1heF9pbmtf ZXh0ZW50OwogICAgWFJlY3RhbmdsZSBtYXhfbG9naWNhbF9leHRlbnQ7Cn0gWEZvbnRTZXRFeHRl bnRzOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9YT00gKlhPTTsKdHlwZWRlZiBzdHJ1Y3QgX1hPQyAq WE9DLCAqWEZvbnRTZXQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICpjaGFyczsKICAgIGlu dCBuY2hhcnM7CiAgICBpbnQgZGVsdGE7CiAgICBYRm9udFNldCBmb250X3NldDsKfSBYbWJUZXh0 SXRlbTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHdjaGFyX3QgKmNoYXJzOwogICAgaW50IG5jaGFy czsKICAgIGludCBkZWx0YTsKICAgIFhGb250U2V0IGZvbnRfc2V0Owp9IFh3Y1RleHRJdGVtOwoj IDExMTYgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWGxpYi5oIgp0eXBlZGVmIHN0cnVjdCB7CiAg ICBpbnQgY2hhcnNldF9jb3VudDsKICAgIGNoYXIgKipjaGFyc2V0X2xpc3Q7Cn0gWE9NQ2hhclNl dExpc3Q7Cgp0eXBlZGVmIGVudW0gewogICAgWE9NT3JpZW50YXRpb25fTFRSX1RUQiwKICAgIFhP TU9yaWVudGF0aW9uX1JUTF9UVEIsCiAgICBYT01PcmllbnRhdGlvbl9UVEJfTFRSLAogICAgWE9N T3JpZW50YXRpb25fVFRCX1JUTCwKICAgIFhPTU9yaWVudGF0aW9uX0NvbnRleHQKfSBYT3JpZW50 YXRpb247Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbnVtX29yaWVudGF0aW9uOwogICAgWE9y aWVudGF0aW9uICpvcmllbnRhdGlvbjsKfSBYT01PcmllbnRhdGlvbjsKCnR5cGVkZWYgc3RydWN0 IHsKICAgIGludCBudW1fZm9udDsKICAgIFhGb250U3RydWN0ICoqZm9udF9zdHJ1Y3RfbGlzdDsK ICAgIGNoYXIgKipmb250X25hbWVfbGlzdDsKfSBYT01Gb250SW5mbzsKCnR5cGVkZWYgc3RydWN0 IF9YSU0gKlhJTTsKdHlwZWRlZiBzdHJ1Y3QgX1hJQyAqWElDOwoKdHlwZWRlZiB2b2lkICgqWElN UHJvYykoCgogICAgWElNLAogICAgWFBvaW50ZXIsCiAgICBYUG9pbnRlcgoKKTsKCnR5cGVkZWYg aW50ICgqWElDUHJvYykoCgogICAgWElDLAogICAgWFBvaW50ZXIsCiAgICBYUG9pbnRlcgoKKTsK CnR5cGVkZWYgdm9pZCAoKlhJRFByb2MpKAoKICAgIERpc3BsYXkqLAogICAgWFBvaW50ZXIsCiAg ICBYUG9pbnRlcgoKKTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1TdHlsZTsKCnR5cGVkZWYg c3RydWN0IHsKICAgIHVuc2lnbmVkIHNob3J0IGNvdW50X3N0eWxlczsKICAgIFhJTVN0eWxlICpz dXBwb3J0ZWRfc3R5bGVzOwp9IFhJTVN0eWxlczsKIyAxMjM1ICIvdXNyL1gxMVI2L2luY2x1ZGUv WDExL1hsaWIuaCIKdHlwZWRlZiB2b2lkICpYVmFOZXN0ZWRMaXN0OwoKCgoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgWFBvaW50ZXIgY2xpZW50X2RhdGE7CiAgICBYSU1Qcm9jIGNhbGxiYWNrOwp9IFhJ TUNhbGxiYWNrOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWFBvaW50ZXIgY2xpZW50X2RhdGE7CiAg ICBYSUNQcm9jIGNhbGxiYWNrOwp9IFhJQ0NhbGxiYWNrOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25n IFhJTUZlZWRiYWNrOwojIDEyNjIgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWGxpYi5oIgp0eXBl ZGVmIHN0cnVjdCBfWElNVGV4dCB7CiAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CiAgICBYSU1G ZWVkYmFjayAqZmVlZGJhY2s7CiAgICBpbnQgZW5jb2RpbmdfaXNfd2NoYXI7CiAgICB1bmlvbiB7 CiAgICAgICAgY2hhciAqbXVsdGlfYnl0ZTsKICAgICAgICB3Y2hhcl90ICp3aWRlX2NoYXI7CiAg ICB9IHN0cmluZzsKfSBYSU1UZXh0OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTVByZWVkaXRT dGF0ZTsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWElNUHJlZWRpdFN0YXRlTm90aWZ5Q2FsbGJhY2tT dHJ1Y3QgewogICAgWElNUHJlZWRpdFN0YXRlIHN0YXRlOwp9IFhJTVByZWVkaXRTdGF0ZU5vdGlm eUNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTVJlc2V0U3RhdGU7CgoK Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWElNU3RyaW5nQ29udmVyc2lvbkZlZWRiYWNrOwojIDEy OTYgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWGxpYi5oIgp0eXBlZGVmIHN0cnVjdCBfWElNU3Ry aW5nQ29udmVyc2lvblRleHQgewogICAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElNU3Ry aW5nQ29udmVyc2lvbkZlZWRiYWNrICpmZWVkYmFjazsKICAgIGludCBlbmNvZGluZ19pc193Y2hh cjsKICAgIHVuaW9uIHsKICAgICAgICBjaGFyICptYnM7CiAgICAgICAgd2NoYXJfdCAqd2NzOwog ICAgfSBzdHJpbmc7Cn0gWElNU3RyaW5nQ29udmVyc2lvblRleHQ7Cgp0eXBlZGVmIHVuc2lnbmVk IHNob3J0IFhJTVN0cmluZ0NvbnZlcnNpb25Qb3NpdGlvbjsKCnR5cGVkZWYgdW5zaWduZWQgc2hv cnQgWElNU3RyaW5nQ29udmVyc2lvblR5cGU7CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg WElNU3RyaW5nQ29udmVyc2lvbk9wZXJhdGlvbjsKCgoKCnR5cGVkZWYgZW51bSB7CiAgICBYSU1G b3J3YXJkQ2hhciwgWElNQmFja3dhcmRDaGFyLAogICAgWElNRm9yd2FyZFdvcmQsIFhJTUJhY2t3 YXJkV29yZCwKICAgIFhJTUNhcmV0VXAsIFhJTUNhcmV0RG93biwKICAgIFhJTU5leHRMaW5lLCBY SU1QcmV2aW91c0xpbmUsCiAgICBYSU1MaW5lU3RhcnQsIFhJTUxpbmVFbmQsCiAgICBYSU1BYnNv bHV0ZVBvc2l0aW9uLAogICAgWElNRG9udENoYW5nZQp9IFhJTUNhcmV0RGlyZWN0aW9uOwoKdHlw ZWRlZiBzdHJ1Y3QgX1hJTVN0cmluZ0NvbnZlcnNpb25DYWxsYmFja1N0cnVjdCB7CiAgICBYSU1T dHJpbmdDb252ZXJzaW9uUG9zaXRpb24gcG9zaXRpb247CiAgICBYSU1DYXJldERpcmVjdGlvbiBk aXJlY3Rpb247CiAgICBYSU1TdHJpbmdDb252ZXJzaW9uT3BlcmF0aW9uIG9wZXJhdGlvbjsKICAg IHVuc2lnbmVkIHNob3J0IGZhY3RvcjsKICAgIFhJTVN0cmluZ0NvbnZlcnNpb25UZXh0ICp0ZXh0 Owp9IFhJTVN0cmluZ0NvbnZlcnNpb25DYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IF9Y SU1QcmVlZGl0RHJhd0NhbGxiYWNrU3RydWN0IHsKICAgIGludCBjYXJldDsKICAgIGludCBjaGdf Zmlyc3Q7CiAgICBpbnQgY2hnX2xlbmd0aDsKICAgIFhJTVRleHQgKnRleHQ7Cn0gWElNUHJlZWRp dERyYXdDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7CiAgICBYSU1Jc0ludmlzaWJsZSwK ICAgIFhJTUlzUHJpbWFyeSwKICAgIFhJTUlzU2Vjb25kYXJ5Cn0gWElNQ2FyZXRTdHlsZTsKCnR5 cGVkZWYgc3RydWN0IF9YSU1QcmVlZGl0Q2FyZXRDYWxsYmFja1N0cnVjdCB7CiAgICBpbnQgcG9z aXRpb247CiAgICBYSU1DYXJldERpcmVjdGlvbiBkaXJlY3Rpb247CiAgICBYSU1DYXJldFN0eWxl IHN0eWxlOwp9IFhJTVByZWVkaXRDYXJldENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBlbnVtIHsK ICAgIFhJTVRleHRUeXBlLAogICAgWElNQml0bWFwVHlwZQp9IFhJTVN0YXR1c0RhdGFUeXBlOwoK dHlwZWRlZiBzdHJ1Y3QgX1hJTVN0YXR1c0RyYXdDYWxsYmFja1N0cnVjdCB7CiAgICBYSU1TdGF0 dXNEYXRhVHlwZSB0eXBlOwogICAgdW5pb24gewogICAgICAgIFhJTVRleHQgKnRleHQ7CiAgICAg ICAgUGl4bWFwIGJpdG1hcDsKICAgIH0gZGF0YTsKfSBYSU1TdGF0dXNEcmF3Q2FsbGJhY2tTdHJ1 Y3Q7Cgp0eXBlZGVmIHN0cnVjdCBfWElNSG90S2V5VHJpZ2dlciB7CiAgICBLZXlTeW0ga2V5c3lt OwogICAgaW50IG1vZGlmaWVyOwogICAgaW50IG1vZGlmaWVyX21hc2s7Cn0gWElNSG90S2V5VHJp Z2dlcjsKCnR5cGVkZWYgc3RydWN0IF9YSU1Ib3RLZXlUcmlnZ2VycyB7CiAgICBpbnQgbnVtX2hv dF9rZXk7CiAgICBYSU1Ib3RLZXlUcmlnZ2VyICprZXk7Cn0gWElNSG90S2V5VHJpZ2dlcnM7Cgp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgWElNSG90S2V5U3RhdGU7CgoKCgp0eXBlZGVmIHN0cnVjdCB7 CiAgICB1bnNpZ25lZCBzaG9ydCBjb3VudF92YWx1ZXM7CiAgICBjaGFyICoqc3VwcG9ydGVkX3Zh bHVlczsKfSBYSU1WYWx1ZXNMaXN0OwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIGludCBfWGRl YnVnOwoKZXh0ZXJuIFhGb250U3RydWN0ICpYTG9hZFF1ZXJ5Rm9udCgKCiAgICBEaXNwbGF5KiAs CiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBYRm9udFN0cnVjdCAqWFF1ZXJ5Rm9udCgKCiAg ICBEaXNwbGF5KiAsCiAgICBYSUQKCik7CgoKZXh0ZXJuIFhUaW1lQ29vcmQgKlhHZXRNb3Rpb25F dmVudHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFRpbWUgLAogICAgVGltZSAs CiAgICBpbnQqCgopOwoKZXh0ZXJuIFhNb2RpZmllcktleW1hcCAqWERlbGV0ZU1vZGlmaWVybWFw RW50cnkoCgogICAgWE1vZGlmaWVyS2V5bWFwKiAsCgogICAgdW5zaWduZWQgaW50ICwKCgoKICAg IGludAoKKTsKCmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhHZXRNb2RpZmllck1hcHBpbmcoCgog ICAgRGlzcGxheSoKCik7CgpleHRlcm4gWE1vZGlmaWVyS2V5bWFwICpYSW5zZXJ0TW9kaWZpZXJt YXBFbnRyeSgKCiAgICBYTW9kaWZpZXJLZXltYXAqICwKCiAgICB1bnNpZ25lZCBpbnQgLAoKCgog ICAgaW50CgopOwoKZXh0ZXJuIFhNb2RpZmllcktleW1hcCAqWE5ld01vZGlmaWVybWFwKAoKICAg IGludAoKKTsKCmV4dGVybiBYSW1hZ2UgKlhDcmVhdGVJbWFnZSgKCiAgICBEaXNwbGF5KiAsCiAg ICBWaXN1YWwqICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGNo YXIqICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAg IGludAoKKTsKZXh0ZXJuIGludCBYSW5pdEltYWdlKAoKICAgIFhJbWFnZSoKCik7CmV4dGVybiBY SW1hZ2UgKlhHZXRJbWFnZSgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBpbnQg LAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z aWduZWQgbG9uZyAsCiAgICBpbnQKCik7CmV4dGVybiBYSW1hZ2UgKlhHZXRTdWJJbWFnZSgKCiAg ICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2ln bmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQg LAogICAgWEltYWdlKiAsCiAgICBpbnQgLAogICAgaW50CgopOwoKCgoKZXh0ZXJuIERpc3BsYXkg KlhPcGVuRGlzcGxheSgKCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiB2b2lkIFhybUluaXRp YWxpemUoCgogICAgdm9pZAoKKTsKCmV4dGVybiBjaGFyICpYRmV0Y2hCeXRlcygKCiAgICBEaXNw bGF5KiAsCiAgICBpbnQqCgopOwpleHRlcm4gY2hhciAqWEZldGNoQnVmZmVyKAoKICAgIERpc3Bs YXkqICwKICAgIGludCogLAogICAgaW50CgopOwpleHRlcm4gY2hhciAqWEdldEF0b21OYW1lKAoK ICAgIERpc3BsYXkqICwKICAgIEF0b20KCik7CmV4dGVybiBpbnQgWEdldEF0b21OYW1lcygKCiAg ICBEaXNwbGF5KiAsCiAgICBBdG9tKiAsCiAgICBpbnQgLAogICAgY2hhcioqCgopOwpleHRlcm4g Y2hhciAqWEdldERlZmF1bHQoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAg Y29uc3QgY2hhcioKCik7CmV4dGVybiBjaGFyICpYRGlzcGxheU5hbWUoCgogICAgY29uc3QgY2hh cioKCik7CmV4dGVybiBjaGFyICpYS2V5c3ltVG9TdHJpbmcoCgogICAgS2V5U3ltCgopOwoKZXh0 ZXJuIGludCAoKlhTeW5jaHJvbml6ZSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCikpKAoKICAg IERpc3BsYXkqCgopOwpleHRlcm4gaW50ICgqWFNldEFmdGVyRnVuY3Rpb24oCgogICAgRGlzcGxh eSogLAogICAgaW50ICgqKSAoCgogICAgICAgICAgICAgRGlzcGxheSoKCiAgICAgICAgICAgICkK CikpKAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gQXRvbSBYSW50ZXJuQXRvbSgKCiAgICBEaXNw bGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CmV4dGVybiBpbnQgWEludGVybkF0 b21zKAoKICAgIERpc3BsYXkqICwKICAgIGNoYXIqKiAsCiAgICBpbnQgLAogICAgaW50ICwKICAg IEF0b20qCgopOwpleHRlcm4gQ29sb3JtYXAgWENvcHlDb2xvcm1hcEFuZEZyZWUoCgogICAgRGlz cGxheSogLAogICAgQ29sb3JtYXAKCik7CmV4dGVybiBDb2xvcm1hcCBYQ3JlYXRlQ29sb3JtYXAo CgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFZpc3VhbCogLAogICAgaW50CgopOwpl eHRlcm4gQ3Vyc29yIFhDcmVhdGVQaXhtYXBDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgUGl4 bWFwICwKICAgIFBpeG1hcCAsCiAgICBYQ29sb3IqICwKICAgIFhDb2xvciogLAogICAgdW5zaWdu ZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKZXh0ZXJuIEN1cnNvciBYQ3JlYXRlR2x5cGhD dXJzb3IoCgogICAgRGlzcGxheSogLAogICAgRm9udCAsCiAgICBGb250ICwKICAgIHVuc2lnbmVk IGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgWENvbG9yIGNvbnN0ICogLAogICAgWENvbG9y IGNvbnN0ICoKCik7CmV4dGVybiBDdXJzb3IgWENyZWF0ZUZvbnRDdXJzb3IoCgogICAgRGlzcGxh eSogLAogICAgdW5zaWduZWQgaW50CgopOwpleHRlcm4gRm9udCBYTG9hZEZvbnQoCgogICAgRGlz cGxheSogLAogICAgY29uc3QgY2hhcioKCik7CmV4dGVybiBHQyBYQ3JlYXRlR0MoCgogICAgRGlz cGxheSogLAogICAgRHJhd2FibGUgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBYR0NWYWx1ZXMq CgopOwpleHRlcm4gR0NvbnRleHQgWEdDb250ZXh0RnJvbUdDKAoKICAgIEdDCgopOwpleHRlcm4g dm9pZCBYRmx1c2hHQygKCiAgICBEaXNwbGF5KiAsCiAgICBHQwoKKTsKZXh0ZXJuIFBpeG1hcCBY Q3JlYXRlUGl4bWFwKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIHVuc2lnbmVk IGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwpleHRlcm4gUGl4 bWFwIFhDcmVhdGVCaXRtYXBGcm9tRGF0YSgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAs CiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50Cgop OwpleHRlcm4gUGl4bWFwIFhDcmVhdGVQaXhtYXBGcm9tQml0bWFwRGF0YSgKCiAgICBEaXNwbGF5 KiAsCiAgICBEcmF3YWJsZSAsCiAgICBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICB1 bnNpZ25lZCBpbnQKCik7CmV4dGVybiBXaW5kb3cgWENyZWF0ZVNpbXBsZVdpbmRvdygKCiAgICBE aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBp bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBs b25nICwKICAgIHVuc2lnbmVkIGxvbmcKCik7CmV4dGVybiBXaW5kb3cgWEdldFNlbGVjdGlvbk93 bmVyKAoKICAgIERpc3BsYXkqICwKICAgIEF0b20KCik7CmV4dGVybiBXaW5kb3cgWENyZWF0ZVdp bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAg ICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAg ICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIFZpc3VhbCogLAogICAgdW5zaWduZWQgbG9u ZyAsCiAgICBYU2V0V2luZG93QXR0cmlidXRlcyoKCik7CmV4dGVybiBDb2xvcm1hcCAqWExpc3RJ bnN0YWxsZWRDb2xvcm1hcHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCoK Cik7CmV4dGVybiBjaGFyICoqWExpc3RGb250cygKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBj aGFyKiAsCiAgICBpbnQgLAogICAgaW50KgoKKTsKZXh0ZXJuIGNoYXIgKipYTGlzdEZvbnRzV2l0 aEluZm8oCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAgaW50ICwKICAgIGlu dCogLAogICAgWEZvbnRTdHJ1Y3QqKgoKKTsKZXh0ZXJuIGNoYXIgKipYR2V0Rm9udFBhdGgoCgog ICAgRGlzcGxheSogLAogICAgaW50KgoKKTsKZXh0ZXJuIGNoYXIgKipYTGlzdEV4dGVuc2lvbnMo CgogICAgRGlzcGxheSogLAogICAgaW50KgoKKTsKZXh0ZXJuIEF0b20gKlhMaXN0UHJvcGVydGll cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50KgoKKTsKZXh0ZXJuIFhIb3N0 QWRkcmVzcyAqWExpc3RIb3N0cygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQqICwKICAgIGludCoK Cik7CmV4dGVybiBLZXlTeW0gWEtleWNvZGVUb0tleXN5bSgKCiAgICBEaXNwbGF5KiAsCgogICAg dW5zaWduZWQgaW50ICwKCgoKICAgIGludAoKKTsKZXh0ZXJuIEtleVN5bSBYTG9va3VwS2V5c3lt KAoKICAgIFhLZXlFdmVudCogLAogICAgaW50CgopOwpleHRlcm4gS2V5U3ltICpYR2V0S2V5Ym9h cmRNYXBwaW5nKAoKICAgIERpc3BsYXkqICwKCiAgICB1bnNpZ25lZCBpbnQgLAoKCgogICAgaW50 ICwKICAgIGludCoKCik7CmV4dGVybiBLZXlTeW0gWFN0cmluZ1RvS2V5c3ltKAoKICAgIGNvbnN0 IGNoYXIqCgopOwpleHRlcm4gbG9uZyBYTWF4UmVxdWVzdFNpemUoCgogICAgRGlzcGxheSoKCik7 CmV4dGVybiBsb25nIFhFeHRlbmRlZE1heFJlcXVlc3RTaXplKAoKICAgIERpc3BsYXkqCgopOwpl eHRlcm4gY2hhciAqWFJlc291cmNlTWFuYWdlclN0cmluZygKCiAgICBEaXNwbGF5KgoKKTsKZXh0 ZXJuIGNoYXIgKlhTY3JlZW5SZXNvdXJjZVN0cmluZygKCiAgICAgICAgU2NyZWVuKgoKKTsKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgWERpc3BsYXlNb3Rpb25CdWZmZXJTaXplKAoKICAgIERpc3BsYXkq CgopOwpleHRlcm4gVmlzdWFsSUQgWFZpc3VhbElERnJvbVZpc3VhbCgKCiAgICBWaXN1YWwqCgop OwoKCgpleHRlcm4gaW50IFhJbml0VGhyZWFkcygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQg WExvY2tEaXNwbGF5KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIHZvaWQgWFVubG9ja0Rpc3Bs YXkoCgogICAgRGlzcGxheSoKCik7CgoKCmV4dGVybiBYRXh0Q29kZXMgKlhJbml0RXh0ZW5zaW9u KAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIFhFeHRDb2RlcyAq WEFkZEV4dGVuc2lvbigKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIFhFeHREYXRhICpYRmluZE9u RXh0ZW5zaW9uTGlzdCgKCiAgICBYRXh0RGF0YSoqICwKICAgIGludAoKKTsKZXh0ZXJuIFhFeHRE YXRhICoqWEVIZWFkT2ZFeHRlbnNpb25MaXN0KAoKICAgIFhFRGF0YU9iamVjdAoKKTsKCgpleHRl cm4gV2luZG93IFhSb290V2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJu IFdpbmRvdyBYRGVmYXVsdFJvb3RXaW5kb3coCgogICAgRGlzcGxheSoKCik7CmV4dGVybiBXaW5k b3cgWFJvb3RXaW5kb3dPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwpleHRlcm4gVmlzdWFsICpY RGVmYXVsdFZpc3VhbCgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBWaXN1YWwg KlhEZWZhdWx0VmlzdWFsT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIEdDIFhEZWZh dWx0R0MoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwpleHRlcm4gR0MgWERlZmF1bHRHQ09m U2NyZWVuKAoKICAgIFNjcmVlbioKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhCbGFja1BpeGVs KAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWFdoaXRl UGl4ZWwoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBY QWxsUGxhbmVzKAoKICAgIHZvaWQKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhCbGFja1BpeGVs T2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWFdoaXRlUGl4 ZWxPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYTmV4dFJl cXVlc3QoCgogICAgRGlzcGxheSoKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhMYXN0S25vd25S ZXF1ZXN0UHJvY2Vzc2VkKAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gY2hhciAqWFNlcnZlclZl bmRvcigKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIGNoYXIgKlhEaXNwbGF5U3RyaW5nKAoKICAg IERpc3BsYXkqCgopOwpleHRlcm4gQ29sb3JtYXAgWERlZmF1bHRDb2xvcm1hcCgKCiAgICBEaXNw bGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBDb2xvcm1hcCBYRGVmYXVsdENvbG9ybWFwT2ZTY3Jl ZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIERpc3BsYXkgKlhEaXNwbGF5T2ZTY3JlZW4oCgog ICAgU2NyZWVuKgoKKTsKZXh0ZXJuIFNjcmVlbiAqWFNjcmVlbk9mRGlzcGxheSgKCiAgICBEaXNw bGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBTY3JlZW4gKlhEZWZhdWx0U2NyZWVuT2ZEaXNwbGF5 KAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gbG9uZyBYRXZlbnRNYXNrT2ZTY3JlZW4oCgogICAg U2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWFNjcmVlbk51bWJlck9mU2NyZWVuKAoKICAgIFNjcmVl bioKCik7Cgp0eXBlZGVmIGludCAoKlhFcnJvckhhbmRsZXIpICgKCiAgICBEaXNwbGF5KiAsCiAg ICBYRXJyb3JFdmVudCoKCik7CgpleHRlcm4gWEVycm9ySGFuZGxlciBYU2V0RXJyb3JIYW5kbGVy ICgKCiAgICBYRXJyb3JIYW5kbGVyCgopOwoKCnR5cGVkZWYgaW50ICgqWElPRXJyb3JIYW5kbGVy KSAoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gWElPRXJyb3JIYW5kbGVyIFhTZXRJT0Vycm9y SGFuZGxlciAoCgogICAgWElPRXJyb3JIYW5kbGVyCgopOwoKCmV4dGVybiBYUGl4bWFwRm9ybWF0 VmFsdWVzICpYTGlzdFBpeG1hcEZvcm1hdHMoCgogICAgRGlzcGxheSogLAogICAgaW50KgoKKTsK ZXh0ZXJuIGludCAqWExpc3REZXB0aHMoCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGlu dCoKCik7CgoKCmV4dGVybiBpbnQgWFJlY29uZmlndXJlV01XaW5kb3coCgogICAgRGlzcGxheSog LAogICAgV2luZG93ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgWFdpbmRvd0No YW5nZXMqCgopOwoKZXh0ZXJuIGludCBYR2V0V01Qcm90b2NvbHMoCgogICAgRGlzcGxheSogLAog ICAgV2luZG93ICwKICAgIEF0b20qKiAsCiAgICBpbnQqCgopOwpleHRlcm4gaW50IFhTZXRXTVBy b3RvY29scygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgQXRvbSogLAogICAgaW50 CgopOwpleHRlcm4gaW50IFhJY29uaWZ5V2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRv dyAsCiAgICBpbnQKCik7CmV4dGVybiBpbnQgWFdpdGhkcmF3V2luZG93KAoKICAgIERpc3BsYXkq ICwKICAgIFdpbmRvdyAsCiAgICBpbnQKCik7CmV4dGVybiBpbnQgWEdldENvbW1hbmQoCgogICAg RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGNoYXIqKiogLAogICAgaW50KgoKKTsKZXh0ZXJu IGludCBYR2V0V01Db2xvcm1hcFdpbmRvd3MoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwK ICAgIFdpbmRvdyoqICwKICAgIGludCoKCik7CmV4dGVybiBpbnQgWFNldFdNQ29sb3JtYXBXaW5k b3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cqICwKICAgIGludAoK KTsKZXh0ZXJuIHZvaWQgWEZyZWVTdHJpbmdMaXN0KAoKICAgIGNoYXIqKgoKKTsKZXh0ZXJuIGlu dCBYU2V0VHJhbnNpZW50Rm9ySGludCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg V2luZG93CgopOwoKCgpleHRlcm4gaW50IFhBY3RpdmF0ZVNjcmVlblNhdmVyKAoKICAgIERpc3Bs YXkqCgopOwoKZXh0ZXJuIGludCBYQWRkSG9zdCgKCiAgICBEaXNwbGF5KiAsCiAgICBYSG9zdEFk ZHJlc3MqCgopOwoKZXh0ZXJuIGludCBYQWRkSG9zdHMoCgogICAgRGlzcGxheSogLAogICAgWEhv c3RBZGRyZXNzKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhBZGRUb0V4dGVuc2lvbkxpc3Qo CgogICAgc3RydWN0IF9YRXh0RGF0YSoqICwKICAgIFhFeHREYXRhKgoKKTsKCmV4dGVybiBpbnQg WEFkZFRvU2F2ZVNldCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50 IFhBbGxvY0NvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIFhDb2xvcioK Cik7CgpleHRlcm4gaW50IFhBbGxvY0NvbG9yQ2VsbHMoCgogICAgRGlzcGxheSogLAogICAgQ29s b3JtYXAgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGludCAs CiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhB bGxvY0NvbG9yUGxhbmVzKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIGludCAs CiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBp bnQgLAogICAgdW5zaWduZWQgbG9uZyogLAogICAgdW5zaWduZWQgbG9uZyogLAogICAgdW5zaWdu ZWQgbG9uZyoKCik7CgpleHRlcm4gaW50IFhBbGxvY05hbWVkQ29sb3IoCgogICAgRGlzcGxheSog LAogICAgQ29sb3JtYXAgLAogICAgY29uc3QgY2hhciogLAogICAgWENvbG9yKiAsCiAgICBYQ29s b3IqCgopOwoKZXh0ZXJuIGludCBYQWxsb3dFdmVudHMoCgogICAgRGlzcGxheSogLAogICAgaW50 ICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhBdXRvUmVwZWF0T2ZmKAoKICAgIERpc3BsYXkq CgopOwoKZXh0ZXJuIGludCBYQXV0b1JlcGVhdE9uKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJu IGludCBYQmVsbCgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhCaXRt YXBCaXRPcmRlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEJpdG1hcFBhZCgKCiAg ICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEJpdG1hcFVuaXQoCgogICAgRGlzcGxheSoKCik7 CgpleHRlcm4gaW50IFhDZWxsc09mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CgpleHRlcm4gaW50 IFhDaGFuZ2VBY3RpdmVQb2ludGVyR3JhYigKCiAgICBEaXNwbGF5KiAsCiAgICB1bnNpZ25lZCBp bnQgLAogICAgQ3Vyc29yICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VHQygKCiAg ICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIFhHQ1ZhbHVlcyoK Cik7CgpleHRlcm4gaW50IFhDaGFuZ2VLZXlib2FyZENvbnRyb2woCgogICAgRGlzcGxheSogLAog ICAgdW5zaWduZWQgbG9uZyAsCiAgICBYS2V5Ym9hcmRDb250cm9sKgoKKTsKCmV4dGVybiBpbnQg WENoYW5nZUtleWJvYXJkTWFwcGluZygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgaW50 ICwKICAgIEtleVN5bSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlUG9pbnRlckNv bnRyb2woCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAg aW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWENoYW5nZVByb3BlcnR5KAoKICAgIERpc3Bs YXkqICwKICAgIFdpbmRvdyAsCiAgICBBdG9tICwKICAgIEF0b20gLAogICAgaW50ICwKICAgIGlu dCAsCiAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhD aGFuZ2VTYXZlU2V0KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQKCik7Cgpl eHRlcm4gaW50IFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKAoKICAgIERpc3BsYXkqICwKICAgIFdp bmRvdyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzKgoKKTsK CmV4dGVybiBpbnQgWENoZWNrSWZFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRXZlbnQqICwK ICAgIGludCAoKikgKAoKICAgICAgICAgICAgICAgRGlzcGxheSogLAogICAgICAgICAgICAgICBY RXZlbnQqICwKICAgICAgICAgICAgICAgWFBvaW50ZXIKCiAgICAgICAgICAgICApICwKICAgIFhQ b2ludGVyCgopOwoKZXh0ZXJuIGludCBYQ2hlY2tNYXNrRXZlbnQoCgogICAgRGlzcGxheSogLAog ICAgbG9uZyAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYQ2hlY2tUeXBlZEV2ZW50KAoK ICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYQ2hl Y2tUeXBlZFdpbmRvd0V2ZW50KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQg LAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWENoZWNrV2luZG93RXZlbnQoCgogICAgRGlz cGxheSogLAogICAgV2luZG93ICwKICAgIGxvbmcgLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBp bnQgWENpcmN1bGF0ZVN1YndpbmRvd3MoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg IGludAoKKTsKCmV4dGVybiBpbnQgWENpcmN1bGF0ZVN1YndpbmRvd3NEb3duKAoKICAgIERpc3Bs YXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWENpcmN1bGF0ZVN1YndpbmRvd3NVcCgK CiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhDbGVhckFyZWEoCgog ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWdu ZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhDbGVh cldpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhDbG9z ZURpc3BsYXkoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhDb25maWd1cmVXaW5kb3co CgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBYV2lu ZG93Q2hhbmdlcyoKCik7CgpleHRlcm4gaW50IFhDb25uZWN0aW9uTnVtYmVyKAoKICAgIERpc3Bs YXkqCgopOwoKZXh0ZXJuIGludCBYQ29udmVydFNlbGVjdGlvbigKCiAgICBEaXNwbGF5KiAsCiAg ICBBdG9tICwKICAgIEF0b20gLAogICAgQXRvbSAsCiAgICBXaW5kb3cgLAogICAgVGltZQoKKTsK CmV4dGVybiBpbnQgWENvcHlBcmVhKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAg IERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50 ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBY Q29weUdDKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAg R0MKCik7CgpleHRlcm4gaW50IFhDb3B5UGxhbmUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi bGUgLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNp Z25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5z aWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWERlZmF1bHREZXB0aCgKCiAgICBEaXNwbGF5KiAs CiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEZWZhdWx0RGVwdGhPZlNjcmVlbigKCiAgICBTY3Jl ZW4qCgopOwoKZXh0ZXJuIGludCBYRGVmYXVsdFNjcmVlbigKCiAgICBEaXNwbGF5KgoKKTsKCmV4 dGVybiBpbnQgWERlZmluZUN1cnNvcigKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg Q3Vyc29yCgopOwoKZXh0ZXJuIGludCBYRGVsZXRlUHJvcGVydHkoCgogICAgRGlzcGxheSogLAog ICAgV2luZG93ICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhEZXN0cm95V2luZG93KAoKICAg IERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWERlc3Ryb3lTdWJ3aW5kb3dz KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWERvZXNCYWNraW5n U3RvcmUoCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWERvZXNTYXZlVW5kZXJzKAoKICAg IFNjcmVlbioKCik7CgpleHRlcm4gaW50IFhEaXNhYmxlQWNjZXNzQ29udHJvbCgKCiAgICBEaXNw bGF5KgoKKTsKCgpleHRlcm4gaW50IFhEaXNwbGF5Q2VsbHMoCgogICAgRGlzcGxheSogLAogICAg aW50CgopOwoKZXh0ZXJuIGludCBYRGlzcGxheUhlaWdodCgKCiAgICBEaXNwbGF5KiAsCiAgICBp bnQKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5SGVpZ2h0TU0oCgogICAgRGlzcGxheSogLAogICAg aW50CgopOwoKZXh0ZXJuIGludCBYRGlzcGxheUtleWNvZGVzKAoKICAgIERpc3BsYXkqICwKICAg IGludCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlQbGFuZXMoCgogICAgRGlz cGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRGlzcGxheVdpZHRoKAoKICAgIERpc3Bs YXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlXaWR0aE1NKAoKICAgIERpc3Bs YXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdBcmMoCgogICAgRGlzcGxheSogLAog ICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBp bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50 IFhEcmF3QXJjcygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBY QXJjKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3SW1hZ2VTdHJpbmcoCgogICAgRGlz cGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBj b25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3SW1hZ2VTdHJpbmcxNigK CiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50 ICwKICAgIGNvbnN0IFhDaGFyMmIqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdMaW5l KAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBp bnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdMaW5lcygKCiAgICBE aXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYUG9pbnQqICwKICAgIGludCAs CiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3UG9pbnQoCgogICAgRGlzcGxheSogLAogICAg RHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERy YXdQb2ludHMoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFBv aW50KiAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1JlY3RhbmdsZSgK CiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50 ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhE cmF3UmVjdGFuZ2xlcygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAg ICBYUmVjdGFuZ2xlKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3U2VnbWVudHMoCgog ICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFNlZ21lbnQqICwKICAg IGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdTdHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJh d2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCBjaGFyKiAsCiAg ICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3U3RyaW5nMTYoCgogICAgRGlzcGxheSogLAogICAg RHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCBYQ2hhcjJi KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3VGV4dCgKCiAgICBEaXNwbGF5KiAsCiAg ICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhUZXh0SXRlbSog LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1RleHQxNigKCiAgICBEaXNwbGF5KiAsCiAg ICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhUZXh0SXRlbTE2 KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhFbmFibGVBY2Nlc3NDb250cm9sKAoKICAgIERp c3BsYXkqCgopOwoKZXh0ZXJuIGludCBYRXZlbnRzUXVldWVkKAoKICAgIERpc3BsYXkqICwKICAg IGludAoKKTsKCmV4dGVybiBpbnQgWEZldGNoTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k b3cgLAogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRmlsbEFyYygKCiAgICBEaXNwbGF5KiAs CiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVk IGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp bnQgWEZpbGxBcmNzKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAg IFhBcmMqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEZpbGxQb2x5Z29uKAoKICAgIERpc3Bs YXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhQb2ludCogLAogICAgaW50ICwKICAg IGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xlKAoKICAgIERpc3Bs YXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5z aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiBpbnQgWEZpbGxSZWN0YW5n bGVzKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhSZWN0YW5n bGUqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEZsdXNoKAoKICAgIERpc3BsYXkqCgopOwoK ZXh0ZXJuIGludCBYRm9yY2VTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7 CgpleHRlcm4gaW50IFhGcmVlKAoKICAgIHZvaWQqCgopOwoKZXh0ZXJuIGludCBYRnJlZUNvbG9y bWFwKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwCgopOwoKZXh0ZXJuIGludCBYRnJlZUNv bG9ycygKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICB1bnNpZ25lZCBsb25nKiAs CiAgICBpbnQgLAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWEZyZWVDdXJzb3Io CgogICAgRGlzcGxheSogLAogICAgQ3Vyc29yCgopOwoKZXh0ZXJuIGludCBYRnJlZUV4dGVuc2lv bkxpc3QoCgogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnQoCgogICAgRGlzcGxh eSogLAogICAgWEZvbnRTdHJ1Y3QqCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRJbmZvKAoKICAg IGNoYXIqKiAsCiAgICBYRm9udFN0cnVjdCogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRnJl ZUZvbnROYW1lcygKCiAgICBjaGFyKioKCik7CgpleHRlcm4gaW50IFhGcmVlRm9udFBhdGgoCgog ICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRnJlZUdDKAoKICAgIERpc3BsYXkqICwKICAgIEdD CgopOwoKZXh0ZXJuIGludCBYRnJlZU1vZGlmaWVybWFwKAoKICAgIFhNb2RpZmllcktleW1hcCoK Cik7CgpleHRlcm4gaW50IFhGcmVlUGl4bWFwKAoKICAgIERpc3BsYXkqICwKICAgIFBpeG1hcAoK KTsKCmV4dGVybiBpbnQgWEdlb21ldHJ5KAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBj b25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGlu dCogLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRF cnJvckRhdGFiYXNlVGV4dCgKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBj b25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjaGFyKiAsCiAgICBpbnQKCik7Cgpl eHRlcm4gaW50IFhHZXRFcnJvclRleHQoCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGNo YXIqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEdldEZvbnRQcm9wZXJ0eSgKCiAgICBYRm9u dFN0cnVjdCogLAogICAgQXRvbSAsCiAgICB1bnNpZ25lZCBsb25nKgoKKTsKCmV4dGVybiBpbnQg WEdldEdDVmFsdWVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVuc2lnbmVkIGxvbmcg LAogICAgWEdDVmFsdWVzKgoKKTsKCmV4dGVybiBpbnQgWEdldEdlb21ldHJ5KAoKICAgIERpc3Bs YXkqICwKICAgIERyYXdhYmxlICwKICAgIFdpbmRvdyogLAogICAgaW50KiAsCiAgICBpbnQqICwK ICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQq ICwKICAgIHVuc2lnbmVkIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRJY29uTmFtZSgKCiAgICBE aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYR2V0SW5w dXRGb2N1cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cqICwKICAgIGludCoKCik7CgpleHRl cm4gaW50IFhHZXRLZXlib2FyZENvbnRyb2woCgogICAgRGlzcGxheSogLAogICAgWEtleWJvYXJk U3RhdGUqCgopOwoKZXh0ZXJuIGludCBYR2V0UG9pbnRlckNvbnRyb2woCgogICAgRGlzcGxheSog LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRQb2lu dGVyTWFwcGluZygKCiAgICBEaXNwbGF5KiAsCiAgICB1bnNpZ25lZCBjaGFyKiAsCiAgICBpbnQK Cik7CgpleHRlcm4gaW50IFhHZXRTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQq ICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0VHJh bnNpZW50Rm9ySGludCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93KgoK KTsKCmV4dGVybiBpbnQgWEdldFdpbmRvd1Byb3BlcnR5KAoKICAgIERpc3BsYXkqICwKICAgIFdp bmRvdyAsCiAgICBBdG9tICwKICAgIGxvbmcgLAogICAgbG9uZyAsCiAgICBpbnQgLAogICAgQXRv bSAsCiAgICBBdG9tKiAsCiAgICBpbnQqICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIHVuc2ln bmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGNoYXIqKgoKKTsKCmV4dGVybiBpbnQgWEdldFdpbmRv d0F0dHJpYnV0ZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhXaW5kb3dBdHRy aWJ1dGVzKgoKKTsKCmV4dGVybiBpbnQgWEdyYWJCdXR0b24oCgogICAgRGlzcGxheSogLAogICAg dW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBXaW5kb3cgLAogICAgaW50ICwK ICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFdpbmRvdyAsCiAgICBD dXJzb3IKCik7CgpleHRlcm4gaW50IFhHcmFiS2V5KAoKICAgIERpc3BsYXkqICwKICAgIGludCAs CiAgICB1bnNpZ25lZCBpbnQgLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAg aW50CgopOwoKZXh0ZXJuIGludCBYR3JhYktleWJvYXJkKAoKICAgIERpc3BsYXkqICwKICAgIFdp bmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBUaW1lCgopOwoKZXh0ZXJu IGludCBYR3JhYlBvaW50ZXIoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAs CiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBXaW5kb3cgLAogICAg Q3Vyc29yICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhHcmFiU2VydmVyKAoKICAgIERpc3Bs YXkqCgopOwoKZXh0ZXJuIGludCBYSGVpZ2h0TU1PZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoK ZXh0ZXJuIGludCBYSGVpZ2h0T2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQg WElmRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KiAsCiAgICBpbnQgKCopICgKCiAg ICAgICAgICAgICAgIERpc3BsYXkqICwKICAgICAgICAgICAgICAgWEV2ZW50KiAsCiAgICAgICAg ICAgICAgIFhQb2ludGVyCgogICAgICAgICAgICAgKSAsCiAgICBYUG9pbnRlcgoKKTsKCmV4dGVy biBpbnQgWEltYWdlQnl0ZU9yZGVyKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYSW5z dGFsbENvbG9ybWFwKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwCgopOwoKZXh0ZXJuIEtl eUNvZGUgWEtleXN5bVRvS2V5Y29kZSgKCiAgICBEaXNwbGF5KiAsCiAgICBLZXlTeW0KCik7Cgpl eHRlcm4gaW50IFhLaWxsQ2xpZW50KAoKICAgIERpc3BsYXkqICwKICAgIFhJRAoKKTsKCmV4dGVy biBpbnQgWExvb2t1cENvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIGNv bnN0IGNoYXIqICwKICAgIFhDb2xvciogLAogICAgWENvbG9yKgoKKTsKCmV4dGVybiBpbnQgWExv d2VyV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWE1h cFJhaXNlZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXBT dWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWE1h cFdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXNr RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgbG9uZyAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJu IGludCBYTWF4Q21hcHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYTWlu Q21hcHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYTW92ZVJlc2l6ZVdp bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAg ICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYTW92ZVdp bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludAoKKTsK CmV4dGVybiBpbnQgWE5leHRFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRXZlbnQqCgopOwoK ZXh0ZXJuIGludCBYTm9PcCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWFBhcnNlQ29s b3IoCgogICAgRGlzcGxheSogLAogICAgQ29sb3JtYXAgLAogICAgY29uc3QgY2hhciogLAogICAg WENvbG9yKgoKKTsKCmV4dGVybiBpbnQgWFBhcnNlR2VvbWV0cnkoCgogICAgY29uc3QgY2hhciog LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQg aW50KgoKKTsKCmV4dGVybiBpbnQgWFBlZWtFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRXZl bnQqCgopOwoKZXh0ZXJuIGludCBYUGVla0lmRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2 ZW50KiAsCiAgICBpbnQgKCopICgKCiAgICAgICAgICAgICAgIERpc3BsYXkqICwKICAgICAgICAg ICAgICAgWEV2ZW50KiAsCiAgICAgICAgICAgICAgIFhQb2ludGVyCgogICAgICAgICAgICAgKSAs CiAgICBYUG9pbnRlcgoKKTsKCmV4dGVybiBpbnQgWFBlbmRpbmcoCgogICAgRGlzcGxheSoKCik7 CgpleHRlcm4gaW50IFhQbGFuZXNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgoKKTsKCmV4dGVybiBp bnQgWFByb3RvY29sUmV2aXNpb24oCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhQcm90 b2NvbFZlcnNpb24oCgogICAgRGlzcGxheSoKCik7CgoKZXh0ZXJuIGludCBYUHV0QmFja0V2ZW50 KAoKICAgIERpc3BsYXkqICwKICAgIFhFdmVudCoKCik7CgpleHRlcm4gaW50IFhQdXRJbWFnZSgK CiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYSW1hZ2UqICwKICAg IGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAog ICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYUUxlbmd0aCgKCiAgICBEaXNwbGF5KgoK KTsKCmV4dGVybiBpbnQgWFF1ZXJ5QmVzdEN1cnNvcigKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3 YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVk IGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5QmVzdFNpemUo CgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIERyYXdhYmxlICwKICAgIHVuc2lnbmVkIGlu dCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBp bnQqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlCZXN0U3RpcHBsZSgKCiAgICBEaXNwbGF5KiAsCiAg ICBEcmF3YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVu c2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5QmVz dFRpbGUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgdW5zaWduZWQgaW50ICwK ICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAgIHVuc2lnbmVkIGludCoK Cik7CgpleHRlcm4gaW50IFhRdWVyeUNvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFw ICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50IFhRdWVyeUNvbG9ycygKCiAgICBEaXNwbGF5 KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29sb3IqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg WFF1ZXJ5RXh0ZW5zaW9uKAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGlu dCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlLZXltYXAoCgog ICAgRGlzcGxheSogLAogICAgY2hhciBbMzJdCgopOwoKZXh0ZXJuIGludCBYUXVlcnlQb2ludGVy KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cqICwKICAgIFdpbmRvdyog LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICB1bnNpZ25l ZCBpbnQqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlUZXh0RXh0ZW50cygKCiAgICBEaXNwbGF5KiAs CiAgICBYSUQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50ICwKICAgIGludCogLAogICAgaW50 KiAsCiAgICBpbnQqICwKICAgIFhDaGFyU3RydWN0KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5VGV4 dEV4dGVudHMxNigKCiAgICBEaXNwbGF5KiAsCiAgICBYSUQgLAogICAgY29uc3QgWENoYXIyYiog LAogICAgaW50ICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIFhDaGFyU3Ry dWN0KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5VHJlZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k b3cgLAogICAgV2luZG93KiAsCiAgICBXaW5kb3cqICwKICAgIFdpbmRvdyoqICwKICAgIHVuc2ln bmVkIGludCoKCik7CgpleHRlcm4gaW50IFhSYWlzZVdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAg ICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhSZWFkQml0bWFwRmlsZSgKCiAgICBEaXNwbGF5KiAs CiAgICBEcmF3YWJsZSAsCiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAg IHVuc2lnbmVkIGludCogLAogICAgUGl4bWFwKiAsCiAgICBpbnQqICwKICAgIGludCoKCik7Cgpl eHRlcm4gaW50IFhSZWFkQml0bWFwRmlsZURhdGEoCgogICAgY29uc3QgY2hhciogLAogICAgdW5z aWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAgIHVuc2lnbmVkIGNoYXIqKiAsCiAg ICBpbnQqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhSZWJpbmRLZXlzeW0oCgogICAgRGlz cGxheSogLAogICAgS2V5U3ltICwKICAgIEtleVN5bSogLAogICAgaW50ICwKICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlY29sb3JDdXJzb3IoCgog ICAgRGlzcGxheSogLAogICAgQ3Vyc29yICwKICAgIFhDb2xvciogLAogICAgWENvbG9yKgoKKTsK CmV4dGVybiBpbnQgWFJlZnJlc2hLZXlib2FyZE1hcHBpbmcoCgogICAgWE1hcHBpbmdFdmVudCoK Cik7CgpleHRlcm4gaW50IFhSZW1vdmVGcm9tU2F2ZVNldCgKCiAgICBEaXNwbGF5KiAsCiAgICBX aW5kb3cKCik7CgpleHRlcm4gaW50IFhSZW1vdmVIb3N0KAoKICAgIERpc3BsYXkqICwKICAgIFhI b3N0QWRkcmVzcyoKCik7CgpleHRlcm4gaW50IFhSZW1vdmVIb3N0cygKCiAgICBEaXNwbGF5KiAs CiAgICBYSG9zdEFkZHJlc3MqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlcGFyZW50V2lu ZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cgLAogICAgaW50ICwK ICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlc2V0U2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSoK Cik7CgpleHRlcm4gaW50IFhSZXNpemVXaW5kb3coCgogICAgRGlzcGxheSogLAogICAgV2luZG93 ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhS ZXN0YWNrV2luZG93cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cqICwKICAgIGludAoKKTsK CmV4dGVybiBpbnQgWFJvdGF0ZUJ1ZmZlcnMoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoK ZXh0ZXJuIGludCBYUm90YXRlV2luZG93UHJvcGVydGllcygKCiAgICBEaXNwbGF5KiAsCiAgICBX aW5kb3cgLAogICAgQXRvbSogLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNj cmVlbkNvdW50KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYU2VsZWN0SW5wdXQoCgog ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZW5k RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBsb25nICwK ICAgIFhFdmVudCoKCik7CgpleHRlcm4gaW50IFhTZXRBY2Nlc3NDb250cm9sKAoKICAgIERpc3Bs YXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEFyY01vZGUoCgogICAgRGlzcGxheSog LAogICAgR0MgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0QmFja2dyb3VuZCgKCiAgICBE aXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nCgopOwoKZXh0ZXJuIGludCBYU2V0 Q2xpcE1hc2soCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgUGl4bWFwCgopOwoKZXh0ZXJu IGludCBYU2V0Q2xpcE9yaWdpbigKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICBpbnQgLAog ICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0Q2xpcFJlY3RhbmdsZXMoCgogICAgRGlzcGxheSog LAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBpbnQg LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0Q2xvc2VEb3duTW9kZSgKCiAgICBEaXNwbGF5 KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRDb21tYW5kKAoKICAgIERpc3BsYXkqICwK ICAgIFdpbmRvdyAsCiAgICBjaGFyKiogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0RGFz aGVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIGludCAsCiAgICBjb25zdCBjaGFyKiAs CiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRGaWxsUnVsZSgKCiAgICBEaXNwbGF5KiAsCiAg ICBHQyAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRGaWxsU3R5bGUoCgogICAgRGlzcGxh eSogLAogICAgR0MgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0Rm9udCgKCiAgICBEaXNw bGF5KiAsCiAgICBHQyAsCiAgICBGb250CgopOwoKZXh0ZXJuIGludCBYU2V0Rm9udFBhdGgoCgog ICAgRGlzcGxheSogLAogICAgY2hhcioqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEZv cmVncm91bmQoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgdW5zaWduZWQgbG9uZwoKKTsK CmV4dGVybiBpbnQgWFNldEZ1bmN0aW9uKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIGlu dAoKKTsKCmV4dGVybiBpbnQgWFNldEdyYXBoaWNzRXhwb3N1cmVzKAoKICAgIERpc3BsYXkqICwK ICAgIEdDICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEljb25OYW1lKAoKICAgIERpc3Bs YXkqICwKICAgIFdpbmRvdyAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBpbnQgWFNldElu cHV0Rm9jdXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBUaW1l CgopOwoKZXh0ZXJuIGludCBYU2V0TGluZUF0dHJpYnV0ZXMoCgogICAgRGlzcGxheSogLAogICAg R0MgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoK ZXh0ZXJuIGludCBYU2V0TW9kaWZpZXJNYXBwaW5nKAoKICAgIERpc3BsYXkqICwKICAgIFhNb2Rp ZmllcktleW1hcCoKCik7CgpleHRlcm4gaW50IFhTZXRQbGFuZU1hc2soCgogICAgRGlzcGxheSog LAogICAgR0MgLAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldFBvaW50ZXJN YXBwaW5nKAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqICwKICAgIGlu dAoKKTsKCmV4dGVybiBpbnQgWFNldFNjcmVlblNhdmVyKAoKICAgIERpc3BsYXkqICwKICAgIGlu dCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldFNlbGVj dGlvbk93bmVyKAoKICAgIERpc3BsYXkqICwKICAgIEF0b20gLAogICAgV2luZG93ICwKICAgIFRp bWUKCik7CgpleHRlcm4gaW50IFhTZXRTdGF0ZSgKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAg ICB1bnNpZ25lZCBsb25nICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgaW50ICwKICAgIHVuc2ln bmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZXRTdGlwcGxlKAoKICAgIERpc3BsYXkqICwKICAg IEdDICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNldFN1YndpbmRvd01vZGUoCgogICAg RGlzcGxheSogLAogICAgR0MgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0VFNPcmlnaW4o CgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp bnQgWFNldFRpbGUoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgUGl4bWFwCgopOwoKZXh0 ZXJuIGludCBYU2V0V2luZG93QmFja2dyb3VuZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg LAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0JhY2tncm91bmRQ aXhtYXAoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFBpeG1hcAoKKTsKCmV4dGVy biBpbnQgWFNldFdpbmRvd0JvcmRlcigKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg dW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0JvcmRlclBpeG1hcCgKCiAg ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgUGl4bWFwCgopOwoKZXh0ZXJuIGludCBYU2V0 V2luZG93Qm9yZGVyV2lkdGgoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2ln bmVkIGludAoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0NvbG9ybWFwKAoKICAgIERpc3BsYXkq ICwKICAgIFdpbmRvdyAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQnVmZmVy KAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQKCik7 CgpleHRlcm4gaW50IFhTdG9yZUJ5dGVzKAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIq ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQ29sb3IoCgogICAgRGlzcGxheSogLAog ICAgQ29sb3JtYXAgLAogICAgWENvbG9yKgoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQ29sb3JzKAoK ICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIFhDb2xvciogLAogICAgaW50CgopOwoK ZXh0ZXJuIGludCBYU3RvcmVOYW1lKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBj b25zdCBjaGFyKgoKKTsKCmV4dGVybiBpbnQgWFN0b3JlTmFtZWRDb2xvcigKCiAgICBEaXNwbGF5 KiAsCiAgICBDb2xvcm1hcCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBsb25nICwK ICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFN5bmMoCgogICAgRGlzcGxheSogLAogICAgaW50Cgop OwoKZXh0ZXJuIGludCBYVGV4dEV4dGVudHMoCgogICAgWEZvbnRTdHJ1Y3QqICwKICAgIGNvbnN0 IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBY Q2hhclN0cnVjdCoKCik7CgpleHRlcm4gaW50IFhUZXh0RXh0ZW50czE2KAoKICAgIFhGb250U3Ry dWN0KiAsCiAgICBjb25zdCBYQ2hhcjJiKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBpbnQq ICwKICAgIGludCogLAogICAgWENoYXJTdHJ1Y3QqCgopOwoKZXh0ZXJuIGludCBYVGV4dFdpZHRo KAoKICAgIFhGb250U3RydWN0KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRl cm4gaW50IFhUZXh0V2lkdGgxNigKCiAgICBYRm9udFN0cnVjdCogLAogICAgY29uc3QgWENoYXIy YiogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYVHJhbnNsYXRlQ29vcmRpbmF0ZXMoCgogICAg RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwK ICAgIGludCogLAogICAgaW50KiAsCiAgICBXaW5kb3cqCgopOwoKZXh0ZXJuIGludCBYVW5kZWZp bmVDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYVW5n cmFiQnV0dG9uKAoKICAgIERpc3BsYXkqICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25l ZCBpbnQgLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYVW5ncmFiS2V5KAoKICAgIERpc3Bs YXkqICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgV2luZG93CgopOwoKZXh0ZXJu IGludCBYVW5ncmFiS2V5Ym9hcmQoCgogICAgRGlzcGxheSogLAogICAgVGltZQoKKTsKCmV4dGVy biBpbnQgWFVuZ3JhYlBvaW50ZXIoCgogICAgRGlzcGxheSogLAogICAgVGltZQoKKTsKCmV4dGVy biBpbnQgWFVuZ3JhYlNlcnZlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWFVuaW5z dGFsbENvbG9ybWFwKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwCgopOwoKZXh0ZXJuIGlu dCBYVW5sb2FkRm9udCgKCiAgICBEaXNwbGF5KiAsCiAgICBGb250CgopOwoKZXh0ZXJuIGludCBY VW5tYXBTdWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBp bnQgWFVubWFwV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBp bnQgWFZlbmRvclJlbGVhc2UoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhXYXJwUG9p bnRlcigKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93ICwKICAgIGludCAs CiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQg LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYV2lkdGhNTU9mU2NyZWVuKAoKICAgIFNjcmVlbioK Cik7CgpleHRlcm4gaW50IFhXaWR0aE9mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CgpleHRlcm4g aW50IFhXaW5kb3dFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgbG9uZyAs CiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYV3JpdGVCaXRtYXBGaWxlKAoKICAgIERpc3Bs YXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFBpeG1hcCAsCiAgICB1bnNpZ25lZCBpbnQgLAog ICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTdXBw b3J0c0xvY2FsZSAodm9pZCk7CgpleHRlcm4gY2hhciAqWFNldExvY2FsZU1vZGlmaWVycygKICAg IGNvbnN0IGNoYXIqCik7CgpleHRlcm4gWE9NIFhPcGVuT00oCgogICAgRGlzcGxheSogLAogICAg c3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBj aGFyKgoKKTsKCmV4dGVybiBpbnQgWENsb3NlT00oCgogICAgWE9NCgopOwoKZXh0ZXJuIGNoYXIg KlhTZXRPTVZhbHVlcygKCiAgICBYT00gLAogICAgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhHZXRP TVZhbHVlcygKCiAgICBYT00gLAogICAgLi4uCgopOwoKZXh0ZXJuIERpc3BsYXkgKlhEaXNwbGF5 T2ZPTSgKCiAgICBYT00KCik7CgpleHRlcm4gY2hhciAqWExvY2FsZU9mT00oCgogICAgWE9NCgop OwoKZXh0ZXJuIFhPQyBYQ3JlYXRlT0MoCgogICAgWE9NICwKICAgIC4uLgoKKTsKCmV4dGVybiB2 b2lkIFhEZXN0cm95T0MoCgogICAgWE9DCgopOwoKZXh0ZXJuIFhPTSBYT01PZk9DKAoKICAgIFhP QwoKKTsKCmV4dGVybiBjaGFyICpYU2V0T0NWYWx1ZXMoCgogICAgWE9DICwKICAgIC4uLgoKKTsK CmV4dGVybiBjaGFyICpYR2V0T0NWYWx1ZXMoCgogICAgWE9DICwKICAgIC4uLgoKKTsKCmV4dGVy biBYRm9udFNldCBYQ3JlYXRlRm9udFNldCgKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFy KiAsCiAgICBjaGFyKioqICwKICAgIGludCogLAogICAgY2hhcioqCgopOwoKZXh0ZXJuIHZvaWQg WEZyZWVGb250U2V0KAoKICAgIERpc3BsYXkqICwKICAgIFhGb250U2V0CgopOwoKZXh0ZXJuIGlu dCBYRm9udHNPZkZvbnRTZXQoCgogICAgWEZvbnRTZXQgLAogICAgWEZvbnRTdHJ1Y3QqKiogLAog ICAgY2hhcioqKgoKKTsKCmV4dGVybiBjaGFyICpYQmFzZUZvbnROYW1lTGlzdE9mRm9udFNldCgK CiAgICBYRm9udFNldAoKKTsKCmV4dGVybiBjaGFyICpYTG9jYWxlT2ZGb250U2V0KAoKICAgIFhG b250U2V0CgopOwoKZXh0ZXJuIGludCBYQ29udGV4dERlcGVuZGVudERyYXdpbmcoCgogICAgWEZv bnRTZXQKCik7CgpleHRlcm4gaW50IFhEaXJlY3Rpb25hbERlcGVuZGVudERyYXdpbmcoCgogICAg WEZvbnRTZXQKCik7CgpleHRlcm4gaW50IFhDb250ZXh0dWFsRHJhd2luZygKCiAgICBYRm9udFNl dAoKKTsKCmV4dGVybiBYRm9udFNldEV4dGVudHMgKlhFeHRlbnRzT2ZGb250U2V0KAoKICAgIFhG b250U2V0CgopOwoKZXh0ZXJuIGludCBYbWJUZXh0RXNjYXBlbWVudCgKCiAgICBYRm9udFNldCAs CiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFh3Y1RleHRFc2NhcGVt ZW50KAoKICAgIFhGb250U2V0ICwKICAgIGNvbnN0IHdjaGFyX3QqICwKICAgIGludAoKKTsKCmV4 dGVybiBpbnQgWHV0ZjhUZXh0RXNjYXBlbWVudCgKCiAgICBYRm9udFNldCAsCiAgICBjb25zdCBj aGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhtYlRleHRFeHRlbnRzKAoKICAgIFhGb250 U2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY UmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWHdjVGV4dEV4dGVudHMoCgogICAgWEZvbnRTZXQg LAogICAgY29uc3Qgd2NoYXJfdCogLAogICAgaW50ICwKICAgIFhSZWN0YW5nbGUqICwKICAgIFhS ZWN0YW5nbGUqCgopOwoKZXh0ZXJuIGludCBYdXRmOFRleHRFeHRlbnRzKAoKICAgIFhGb250U2V0 ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBYUmVj dGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWG1iVGV4dFBlckNoYXJFeHRlbnRzKAoKICAgIFhGb250 U2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY UmVjdGFuZ2xlKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY UmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWHdjVGV4dFBlckNoYXJFeHRlbnRzKAoKICAgIFhG b250U2V0ICwKICAgIGNvbnN0IHdjaGFyX3QqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAs CiAgICBYUmVjdGFuZ2xlKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBYUmVjdGFuZ2xlKiAs CiAgICBYUmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWHV0ZjhUZXh0UGVyQ2hhckV4dGVudHMo CgogICAgWEZvbnRTZXQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50ICwKICAgIFhSZWN0YW5n bGUqICwKICAgIFhSZWN0YW5nbGUqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIFhSZWN0YW5n bGUqICwKICAgIFhSZWN0YW5nbGUqCgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd1RleHQoCgogICAg RGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAg ICBYbWJUZXh0SXRlbSogLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgWHdjRHJhd1RleHQoCgog ICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAs CiAgICBYd2NUZXh0SXRlbSogLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgWHV0ZjhEcmF3VGV4 dCgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAg aW50ICwKICAgIFhtYlRleHRJdGVtKiAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYbWJEcmF3 U3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIFhGb250U2V0ICwKICAg IEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50CgopOwoK ZXh0ZXJuIHZvaWQgWHdjRHJhd1N0cmluZygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAs CiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGNvbnN0IHdj aGFyX3QqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh1dGY4RHJhd1N0cmluZygKCiAgICBE aXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBpbnQg LAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFht YkRyYXdJbWFnZVN0cmluZygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9u dFNldCAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAg IGludAoKKTsKCmV4dGVybiB2b2lkIFh3Y0RyYXdJbWFnZVN0cmluZygKCiAgICBEaXNwbGF5KiAs CiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50 ICwKICAgIGNvbnN0IHdjaGFyX3QqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh1dGY4RHJh d0ltYWdlU3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIFhGb250U2V0 ICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50 CgopOwoKZXh0ZXJuIFhJTSBYT3BlbklNKAoKICAgIERpc3BsYXkqICwKICAgIHN0cnVjdCBfWHJt SGFzaEJ1Y2tldFJlYyogLAogICAgY2hhciogLAogICAgY2hhcioKCik7CgpleHRlcm4gaW50IFhD bG9zZUlNKAoKICAgIFhJTQoKKTsKCmV4dGVybiBjaGFyICpYR2V0SU1WYWx1ZXMoCgogICAgWElN ICwgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhTZXRJTVZhbHVlcygKCiAgICBYSU0gLCAuLi4KCik7 CgpleHRlcm4gRGlzcGxheSAqWERpc3BsYXlPZklNKAoKICAgIFhJTQoKKTsKCmV4dGVybiBjaGFy ICpYTG9jYWxlT2ZJTSgKCiAgICBYSU0KCik7CgpleHRlcm4gWElDIFhDcmVhdGVJQygKCiAgICBY SU0gLCAuLi4KCik7CgpleHRlcm4gdm9pZCBYRGVzdHJveUlDKAoKICAgIFhJQwoKKTsKCmV4dGVy biB2b2lkIFhTZXRJQ0ZvY3VzKAoKICAgIFhJQwoKKTsKCmV4dGVybiB2b2lkIFhVbnNldElDRm9j dXMoCgogICAgWElDCgopOwoKZXh0ZXJuIHdjaGFyX3QgKlh3Y1Jlc2V0SUMoCgogICAgWElDCgop OwoKZXh0ZXJuIGNoYXIgKlhtYlJlc2V0SUMoCgogICAgWElDCgopOwoKZXh0ZXJuIGNoYXIgKlh1 dGY4UmVzZXRJQygKCiAgICBYSUMKCik7CgpleHRlcm4gY2hhciAqWFNldElDVmFsdWVzKAoKICAg IFhJQyAsIC4uLgoKKTsKCmV4dGVybiBjaGFyICpYR2V0SUNWYWx1ZXMoCgogICAgWElDICwgLi4u CgopOwoKZXh0ZXJuIFhJTSBYSU1PZklDKAoKICAgIFhJQwoKKTsKCmV4dGVybiBpbnQgWEZpbHRl ckV2ZW50KAoKICAgIFhFdmVudCogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYbWJMb29r dXBTdHJpbmcoCgogICAgWElDICwKICAgIFhLZXlQcmVzc2VkRXZlbnQqICwKICAgIGNoYXIqICwK ICAgIGludCAsCiAgICBLZXlTeW0qICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFh3Y0xvb2t1 cFN0cmluZygKCiAgICBYSUMgLAogICAgWEtleVByZXNzZWRFdmVudCogLAogICAgd2NoYXJfdCog LAogICAgaW50ICwKICAgIEtleVN5bSogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWHV0ZjhM b29rdXBTdHJpbmcoCgogICAgWElDICwKICAgIFhLZXlQcmVzc2VkRXZlbnQqICwKICAgIGNoYXIq ICwKICAgIGludCAsCiAgICBLZXlTeW0qICwKICAgIGludCoKCik7CgpleHRlcm4gWFZhTmVzdGVk TGlzdCBYVmFDcmVhdGVOZXN0ZWRMaXN0KAoKICAgIGludCAsIC4uLgoKKTsKCgoKZXh0ZXJuIGlu dCBYUmVnaXN0ZXJJTUluc3RhbnRpYXRlQ2FsbGJhY2soCgogICAgRGlzcGxheSogLAogICAgc3Ry dWN0IF9Ycm1IYXNoQnVja2V0UmVjKiAsCiAgICBjaGFyKiAsCiAgICBjaGFyKiAsCiAgICBYSURQ cm9jICwKICAgIFhQb2ludGVyCgopOwoKZXh0ZXJuIGludCBYVW5yZWdpc3RlcklNSW5zdGFudGlh dGVDYWxsYmFjaygKCiAgICBEaXNwbGF5KiAsCiAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMq ICwKICAgIGNoYXIqICwKICAgIGNoYXIqICwKICAgIFhJRFByb2MgLAogICAgWFBvaW50ZXIKCik7 Cgp0eXBlZGVmIHZvaWQgKCpYQ29ubmVjdGlvbldhdGNoUHJvYykoCgogICAgRGlzcGxheSogLAog ICAgWFBvaW50ZXIgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYUG9pbnRlcioKCik7CgoKZXh0 ZXJuIGludCBYSW50ZXJuYWxDb25uZWN0aW9uTnVtYmVycygKCiAgICBEaXNwbGF5KiAsCiAgICBp bnQqKiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIHZvaWQgWFByb2Nlc3NJbnRlcm5hbENvbm5lY3Rp b24oCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQWRkQ29ubmVjdGlv bldhdGNoKAoKICAgIERpc3BsYXkqICwKICAgIFhDb25uZWN0aW9uV2F0Y2hQcm9jICwKICAgIFhQ b2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWFJlbW92ZUNvbm5lY3Rpb25XYXRjaCgKCiAgICBEaXNw bGF5KiAsCiAgICBYQ29ubmVjdGlvbldhdGNoUHJvYyAsCiAgICBYUG9pbnRlcgoKKTsKCmV4dGVy biB2b2lkIFhTZXRBdXRob3JpemF0aW9uKAoKICAgIGNoYXIgKiAsCiAgICBpbnQgLAogICAgY2hh ciAqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgX1htYnRvd2MoCgogICAgd2NoYXJfdCAqICwK CgoKCiAgICBjaGFyICogLAogICAgaW50CgoKKTsKCmV4dGVybiBpbnQgX1h3Y3RvbWIoCgogICAg Y2hhciAqICwKICAgIHdjaGFyX3QKCik7Cgp9CiMgNjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9w bHVnaW4vbnNwbHVnaW5kZWZzLmgiIDIKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1h1dGls LmgiIDEKIyA3NCAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVj dCB7CiAgICAgICAgbG9uZyBmbGFnczsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBpbnQgd2lk dGgsIGhlaWdodDsKICAgICAgICBpbnQgbWluX3dpZHRoLCBtaW5faGVpZ2h0OwogICAgICAgIGlu dCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAgICAgICAgaW50IHdpZHRoX2luYywgaGVpZ2h0X2lu YzsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgaW50IHg7CiAgICAgICAgICAgICAg ICBpbnQgeTsKICAgICAgICB9IG1pbl9hc3BlY3QsIG1heF9hc3BlY3Q7CiAgICAgICAgaW50IGJh c2Vfd2lkdGgsIGJhc2VfaGVpZ2h0OwogICAgICAgIGludCB3aW5fZ3Jhdml0eTsKfSBYU2l6ZUhp bnRzOwojIDExMiAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVj dCB7CiAgICAgICAgbG9uZyBmbGFnczsKICAgICAgICBpbnQgaW5wdXQ7CgogICAgICAgIGludCBp bml0aWFsX3N0YXRlOwogICAgICAgIFBpeG1hcCBpY29uX3BpeG1hcDsKICAgICAgICBXaW5kb3cg aWNvbl93aW5kb3c7CiAgICAgICAgaW50IGljb25feCwgaWNvbl95OwogICAgICAgIFBpeG1hcCBp Y29uX21hc2s7CiAgICAgICAgWElEIHdpbmRvd19ncm91cDsKCn0gWFdNSGludHM7CiMgMTU2ICIv dXNyL1gxMVI2L2luY2x1ZGUvWDExL1h1dGlsLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2ln bmVkIGNoYXIgKnZhbHVlOwogICAgQXRvbSBlbmNvZGluZzsKICAgIGludCBmb3JtYXQ7CiAgICB1 bnNpZ25lZCBsb25nIG5pdGVtczsKfSBYVGV4dFByb3BlcnR5OwoKCgoKCnR5cGVkZWYgZW51bSB7 CiAgICBYU3RyaW5nU3R5bGUsCiAgICBYQ29tcG91bmRUZXh0U3R5bGUsCiAgICBYVGV4dFN0eWxl LAogICAgWFN0ZElDQ1RleHRTdHlsZSwKCiAgICBYVVRGOFN0cmluZ1N0eWxlCn0gWElDQ0VuY29k aW5nU3R5bGU7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IG1pbl93aWR0aCwgbWluX2hl aWdodDsKICAgICAgICBpbnQgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0OwogICAgICAgIGludCB3aWR0 aF9pbmMsIGhlaWdodF9pbmM7Cn0gWEljb25TaXplOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg IGNoYXIgKnJlc19uYW1lOwogICAgICAgIGNoYXIgKnJlc19jbGFzczsKfSBYQ2xhc3NIaW50Owoj IDIwNSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVjdCBfWENv bXBvc2VTdGF0dXMgewogICAgWFBvaW50ZXIgY29tcG9zZV9wdHI7CiAgICBpbnQgY2hhcnNfbWF0 Y2hlZDsKfSBYQ29tcG9zZVN0YXR1czsKIyAyNDAgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWHV0 aWwuaCIKdHlwZWRlZiBzdHJ1Y3QgX1hSZWdpb24gKlJlZ2lvbjsKIyAyNTQgIi91c3IvWDExUjYv aW5jbHVkZS9YMTEvWHV0aWwuaCIKdHlwZWRlZiBzdHJ1Y3QgewogIFZpc3VhbCAqdmlzdWFsOwog IFZpc3VhbElEIHZpc3VhbGlkOwogIGludCBzY3JlZW47CiAgaW50IGRlcHRoOwoKICBpbnQgY19j bGFzczsKCgoKICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogIHVuc2lnbmVkIGxvbmcgZ3JlZW5f bWFzazsKICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICBpbnQgY29sb3JtYXBfc2l6ZTsKICBp bnQgYml0c19wZXJfcmdiOwp9IFhWaXN1YWxJbmZvOwojIDI4NyAiL3Vzci9YMTFSNi9pbmNsdWRl L1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgQ29sb3JtYXAgY29sb3JtYXA7 CiAgICAgICAgdW5zaWduZWQgbG9uZyByZWRfbWF4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVk X211bHQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBncmVlbl9tYXg7CiAgICAgICAgdW5zaWduZWQg bG9uZyBncmVlbl9tdWx0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgYmx1ZV9tYXg7CiAgICAgICAg dW5zaWduZWQgbG9uZyBibHVlX211bHQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlX3BpeGVs OwogICAgICAgIFZpc3VhbElEIHZpc3VhbGlkOwogICAgICAgIFhJRCBraWxsaWQ7Cn0gWFN0YW5k YXJkQ29sb3JtYXA7CiMgMzI0ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1h1dGlsLmgiCnR5cGVk ZWYgaW50IFhDb250ZXh0OwoKCgoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBYQ2xhc3NIaW50ICpY QWxsb2NDbGFzc0hpbnQgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWEljb25TaXplICpYQWxsb2NJ Y29uU2l6ZSAoCgogICAgdm9pZAoKKTsKCmV4dGVybiBYU2l6ZUhpbnRzICpYQWxsb2NTaXplSGlu dHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFN0YW5kYXJkQ29sb3JtYXAgKlhBbGxvY1N0YW5k YXJkQ29sb3JtYXAgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFdNSGludHMgKlhBbGxvY1dNSGlu dHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gaW50IFhDbGlwQm94KAoKICAgIFJlZ2lvbiAsCiAg ICBYUmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBSZWdpb24gWENyZWF0ZVJlZ2lvbigKCiAgICB2b2lk CgopOwoKZXh0ZXJuIGNvbnN0IGNoYXIgKlhEZWZhdWx0U3RyaW5nICh2b2lkKTsKCmV4dGVybiBp bnQgWERlbGV0ZUNvbnRleHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0 CgopOwoKZXh0ZXJuIGludCBYRGVzdHJveVJlZ2lvbigKCiAgICBSZWdpb24KCik7CgpleHRlcm4g aW50IFhFbXB0eVJlZ2lvbigKCiAgICBSZWdpb24KCik7CgpleHRlcm4gaW50IFhFcXVhbFJlZ2lv bigKCiAgICBSZWdpb24gLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIGludCBYRmluZENvbnRleHQo CgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0ICwKICAgIFhQb2ludGVyKgoK KTsKCmV4dGVybiBpbnQgWEdldENsYXNzSGludCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg LAogICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gaW50IFhHZXRJY29uU2l6ZXMoCgogICAgRGlz cGxheSogLAogICAgV2luZG93ICwKICAgIFhJY29uU2l6ZSoqICwKICAgIGludCoKCik7CgpleHRl cm4gaW50IFhHZXROb3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg WFNpemVIaW50cyoKCik7CgpleHRlcm4gaW50IFhHZXRSR0JDb2xvcm1hcHMoCgogICAgRGlzcGxh eSogLAogICAgV2luZG93ICwKICAgIFhTdGFuZGFyZENvbG9ybWFwKiogLAogICAgaW50KiAsCiAg ICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0U2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAg IFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0 U3RhbmRhcmRDb2xvcm1hcCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFN0YW5k YXJkQ29sb3JtYXAqICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhHZXRUZXh0UHJvcGVydHko CgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqICwKICAgIEF0 b20KCik7CgpleHRlcm4gWFZpc3VhbEluZm8gKlhHZXRWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkq ICwKICAgIGxvbmcgLAogICAgWFZpc3VhbEluZm8qICwKICAgIGludCoKCik7CgpleHRlcm4gaW50 IFhHZXRXTUNsaWVudE1hY2hpbmUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhU ZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIFhXTUhpbnRzICpYR2V0V01IaW50cygKCiAgICBEaXNw bGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhHZXRXTUljb25OYW1lKAoKICAgIERp c3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYVGV4dFByb3BlcnR5KgoKKTsKCmV4dGVybiBpbnQg WEdldFdNTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0 eSoKCik7CgpleHRlcm4gaW50IFhHZXRXTU5vcm1hbEhpbnRzKAoKICAgIERpc3BsYXkqICwKICAg IFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBsb25nKgoKKTsKCmV4dGVybiBpbnQgWEdl dFdNU2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRz KiAsCiAgICBsb25nKiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0Wm9vbUhpbnRzKAoK ICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBp bnQgWEludGVyc2VjdFJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgUmVnaW9uICwKICAgIFJlZ2lv bgoKKTsKCmV4dGVybiB2b2lkIFhDb252ZXJ0Q2FzZSgKCiAgICBLZXlTeW0gLAogICAgS2V5U3lt KiAsCiAgICBLZXlTeW0qCgopOwoKZXh0ZXJuIGludCBYTG9va3VwU3RyaW5nKAoKICAgIFhLZXlF dmVudCogLAogICAgY2hhciogLAogICAgaW50ICwKICAgIEtleVN5bSogLAogICAgWENvbXBvc2VT dGF0dXMqCgopOwoKZXh0ZXJuIGludCBYTWF0Y2hWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkqICwK ICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhWaXN1YWxJbmZvKgoKKTsKCmV4dGVy biBpbnQgWE9mZnNldFJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgaW50ICwKICAgIGludAoKKTsK CmV4dGVybiBpbnQgWFBvaW50SW5SZWdpb24oCgogICAgUmVnaW9uICwKICAgIGludCAsCiAgICBp bnQKCik7CgpleHRlcm4gUmVnaW9uIFhQb2x5Z29uUmVnaW9uKAoKICAgIFhQb2ludCogLAogICAg aW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlY3RJblJlZ2lvbigKCiAgICBSZWdpb24g LAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50 CgopOwoKZXh0ZXJuIGludCBYU2F2ZUNvbnRleHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwK ICAgIFhDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIGludCBYU2V0Q2xhc3NI aW50KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYQ2xhc3NIaW50KgoKKTsKCmV4 dGVybiBpbnQgWFNldEljb25TaXplcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg WEljb25TaXplKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXROb3JtYWxIaW50cygKCiAg ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gdm9p ZCBYU2V0UkdCQ29sb3JtYXBzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU3Rh bmRhcmRDb2xvcm1hcCogLAogICAgaW50ICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRT aXplSGludHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTaXplSGludHMqICwK ICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRTdGFuZGFyZFByb3BlcnRpZXMoCgogICAgRGlz cGxheSogLAogICAgV2luZG93ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwK ICAgIFBpeG1hcCAsCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIFhTaXplSGludHMqCgopOwoK ZXh0ZXJuIHZvaWQgWFNldFRleHRQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg LAogICAgWFRleHRQcm9wZXJ0eSogLAogICAgQXRvbQoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTUNs aWVudE1hY2hpbmUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVy dHkqCgopOwoKZXh0ZXJuIGludCBYU2V0V01IaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k b3cgLAogICAgWFdNSGludHMqCgopOwoKZXh0ZXJuIHZvaWQgWFNldFdNSWNvbk5hbWUoCgogICAg RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIHZv aWQgWFNldFdNTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9w ZXJ0eSoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01Ob3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAs CiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01Qcm9w ZXJ0aWVzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYVGV4dFByb3BlcnR5KiAs CiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIFhTaXplSGlu dHMqICwKICAgIFhXTUhpbnRzKiAsCiAgICBYQ2xhc3NIaW50KgoKKTsKCmV4dGVybiB2b2lkIFht YlNldFdNUHJvcGVydGllcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3Qg Y2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgY2hhcioqICwKICAgIGludCAsCiAgICBYU2l6 ZUhpbnRzKiAsCiAgICBYV01IaW50cyogLAogICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gdm9p ZCBYdXRmOFNldFdNUHJvcGVydGllcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg Y29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgY2hhcioqICwKICAgIGludCAsCiAg ICBYU2l6ZUhpbnRzKiAsCiAgICBYV01IaW50cyogLAogICAgWENsYXNzSGludCoKCik7CgpleHRl cm4gdm9pZCBYU2V0V01TaXplSGludHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg IFhTaXplSGludHMqICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRSZWdpb24oCgogICAg RGlzcGxheSogLAogICAgR0MgLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIHZvaWQgWFNldFN0YW5k YXJkQ29sb3JtYXAoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTdGFuZGFyZENv bG9ybWFwKiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYU2V0Wm9vbUhpbnRzKAoKICAgIERp c3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBpbnQgWFNo cmlua1JlZ2lvbigKCiAgICBSZWdpb24gLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp bnQgWFN0cmluZ0xpc3RUb1RleHRQcm9wZXJ0eSgKCiAgICBjaGFyKiogLAogICAgaW50ICwKICAg IFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIGludCBYU3VidHJhY3RSZWdpb24oCgogICAgUmVn aW9uICwKICAgIFJlZ2lvbiAsCiAgICBSZWdpb24KCik7CgpleHRlcm4gaW50IFhtYlRleHRMaXN0 VG9UZXh0UHJvcGVydHkoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY2hhcioqIGxpc3QsCiAg ICBpbnQgY291bnQsCiAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKICAgIFhUZXh0UHJvcGVy dHkqIHRleHRfcHJvcF9yZXR1cm4KKTsKCmV4dGVybiBpbnQgWHdjVGV4dExpc3RUb1RleHRQcm9w ZXJ0eSgKICAgIERpc3BsYXkqIGRpc3BsYXksCiAgICB3Y2hhcl90KiogbGlzdCwKICAgIGludCBj b3VudCwKICAgIFhJQ0NFbmNvZGluZ1N0eWxlIHN0eWxlLAogICAgWFRleHRQcm9wZXJ0eSogdGV4 dF9wcm9wX3JldHVybgopOwoKZXh0ZXJuIGludCBYdXRmOFRleHRMaXN0VG9UZXh0UHJvcGVydHko CiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY2hhcioqIGxpc3QsCiAgICBpbnQgY291bnQsCiAg ICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKICAgIFhUZXh0UHJvcGVydHkqIHRleHRfcHJvcF9y ZXR1cm4KKTsKCmV4dGVybiB2b2lkIFh3Y0ZyZWVTdHJpbmdMaXN0KAogICAgd2NoYXJfdCoqIGxp c3QKKTsKCmV4dGVybiBpbnQgWFRleHRQcm9wZXJ0eVRvU3RyaW5nTGlzdCgKCiAgICBYVGV4dFBy b3BlcnR5KiAsCiAgICBjaGFyKioqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhtYlRleHRQ cm9wZXJ0eVRvVGV4dExpc3QoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY29uc3QgWFRleHRQ cm9wZXJ0eSogdGV4dF9wcm9wLAogICAgY2hhcioqKiBsaXN0X3JldHVybiwKICAgIGludCogY291 bnRfcmV0dXJuCik7CgpleHRlcm4gaW50IFh3Y1RleHRQcm9wZXJ0eVRvVGV4dExpc3QoCiAgICBE aXNwbGF5KiBkaXNwbGF5LAogICAgY29uc3QgWFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wLAogICAg d2NoYXJfdCoqKiBsaXN0X3JldHVybiwKICAgIGludCogY291bnRfcmV0dXJuCik7CgpleHRlcm4g aW50IFh1dGY4VGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKICAgIERpc3BsYXkqIGRpc3BsYXksCiAg ICBjb25zdCBYVGV4dFByb3BlcnR5KiB0ZXh0X3Byb3AsCiAgICBjaGFyKioqIGxpc3RfcmV0dXJu LAogICAgaW50KiBjb3VudF9yZXR1cm4KKTsKCmV4dGVybiBpbnQgWFVuaW9uUmVjdFdpdGhSZWdp b24oCgogICAgWFJlY3RhbmdsZSogLAogICAgUmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCmV4dGVy biBpbnQgWFVuaW9uUmVnaW9uKAoKICAgIFJlZ2lvbiAsCiAgICBSZWdpb24gLAogICAgUmVnaW9u CgopOwoKZXh0ZXJuIGludCBYV01HZW9tZXRyeSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAog ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAg IFhTaXplSGludHMqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCog LAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWFhvclJlZ2lvbigKCiAgICBSZWdpb24gLAogICAg UmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCn0KIyA2MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3Bs dWdpbi9uc3BsdWdpbmRlZnMuaCIgMgojIDEyMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdp bi9uc3BsdWdpbmRlZnMuaCIKdHlwZWRlZiBjb25zdCBjaGFyKiBuc01JTUVUeXBlOwoKc3RydWN0 IG5zQnl0ZVJhbmdlIHsKICAgIFBSSW50MzIgb2Zmc2V0OwogICAgUFJVaW50MzIgbGVuZ3RoOwog ICAgc3RydWN0IG5zQnl0ZVJhbmdlKiBuZXh0Owp9OwoKc3RydWN0IG5zUGx1Z2luUmVjdCB7CiAg ICBQUlVpbnQxNiB0b3A7CiAgICBQUlVpbnQxNiBsZWZ0OwogICAgUFJVaW50MTYgYm90dG9tOwog ICAgUFJVaW50MTYgcmlnaHQ7Cn07CiMgMTUwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2lu L25zcGx1Z2luZGVmcy5oIgplbnVtIG5zUGx1Z2luQ2FsbGJhY2tUeXBlIHsKICAgIG5zUGx1Z2lu Q2FsbGJhY2tUeXBlX1NldFdpbmRvdyA9IDEsCiAgICBuc1BsdWdpbkNhbGxiYWNrVHlwZV9Qcmlu dAp9OwoKc3RydWN0IG5zUGx1Z2luQW55Q2FsbGJhY2tTdHJ1Y3QgewogICAgUFJJbnQzMiB0eXBl Owp9OwoKCnN0cnVjdCBuc1BsdWdpblNldFdpbmRvd0NhbGxiYWNrU3RydWN0IHsKICAgIFBSSW50 MzIgdHlwZTsKICAgIERpc3BsYXkqIGRpc3BsYXk7CiAgICBWaXN1YWwqIHZpc3VhbDsKICAgIENv bG9ybWFwIGNvbG9ybWFwOwogICAgUFJVaW50MzIgZGVwdGg7Cn07CgoKCgoKCgpzdHJ1Y3QgbnNQ bHVnaW5QcmludENhbGxiYWNrU3RydWN0IHsKICAgIFBSSW50MzIgdHlwZTsKICAgIEZJTEUqIGZw Owp9OwoKCgoKCgplbnVtIG5zUGx1Z2luVmFyaWFibGUgewogICAgbnNQbHVnaW5WYXJpYWJsZV9O YW1lU3RyaW5nID0gMSwKICAgIG5zUGx1Z2luVmFyaWFibGVfRGVzY3JpcHRpb25TdHJpbmcgPSAy Cn07CgplbnVtIG5zUGx1Z2luTWFuYWdlclZhcmlhYmxlIHsKICAgIG5zUGx1Z2luTWFuYWdlclZh cmlhYmxlX1hEaXNwbGF5ID0gMSwKICAgIG5zUGx1Z2luTWFuYWdlclZhcmlhYmxlX1h0QXBwQ29u dGV4dCA9IDIKfTsKCmVudW0gbnNQbHVnaW5JbnN0YW5jZVBlZXJWYXJpYWJsZSB7CiAgICBuc1Bs dWdpbkluc3RhbmNlUGVlclZhcmlhYmxlX05ldHNjYXBlV2luZG93ID0gMwoKCn07CgplbnVtIG5z UGx1Z2luSW5zdGFuY2VWYXJpYWJsZSB7CiAgICBuc1BsdWdpbkluc3RhbmNlVmFyaWFibGVfV2lu ZG93bGVzc0Jvb2wgPSAzLAogICAgbnNQbHVnaW5JbnN0YW5jZVZhcmlhYmxlX1RyYW5zcGFyZW50 Qm9vbCA9IDQsCiAgICBuc1BsdWdpbkluc3RhbmNlVmFyaWFibGVfRG9DYWNoZUJvb2wgPSA1LAog ICAgbnNQbHVnaW5JbnN0YW5jZVZhcmlhYmxlX0NhbGxTZXRXaW5kb3dBZnRlckRlc3Ryb3lCb29s ID0gNiwKICAgIG5zUGx1Z2luSW5zdGFuY2VWYXJpYWJsZV9TY3JpcHRhYmxlSW5zdGFuY2UgPSAx MCwKICAgIG5zUGx1Z2luSW5zdGFuY2VWYXJpYWJsZV9TY3JpcHRhYmxlSUlEID0gMTEKfTsKCgoK ZW51bSBuc1BsdWdpbk1vZGUgewogICAgbnNQbHVnaW5Nb2RlX0VtYmVkZGVkID0gMSwKICAgIG5z UGx1Z2luTW9kZV9GdWxsCn07CgoKZW51bSBuc1BsdWdpblN0cmVhbVR5cGUgewogICAgbnNQbHVn aW5TdHJlYW1UeXBlX05vcm1hbCA9IDEsCiAgICBuc1BsdWdpblN0cmVhbVR5cGVfU2VlaywKICAg IG5zUGx1Z2luU3RyZWFtVHlwZV9Bc0ZpbGUsCiAgICBuc1BsdWdpblN0cmVhbVR5cGVfQXNGaWxl T25seQp9OwoKCgoKCmVudW0gbnNQbHVnaW5XaW5kb3dUeXBlIHsKICAgIG5zUGx1Z2luV2luZG93 VHlwZV9XaW5kb3cgPSAxLAogICAgbnNQbHVnaW5XaW5kb3dUeXBlX0RyYXdhYmxlCn07CiMgMjUx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zcGx1Z2luZGVmcy5oIgpzdHJ1Y3QgbnNQ bHVnaW5Qb3J0Owp0eXBlZGVmIFJlZ2lvbiBuc1BsdWdpblJlZ2lvbjsKdHlwZWRlZiBEcmF3YWJs ZSBuc1BsdWdpblBsYXRmb3JtV2luZG93UmVmOwojIDI2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3BsdWdpbi9uc3BsdWdpbmRlZnMuaCIKc3RydWN0IG5zUGx1Z2luV2luZG93IHsKICAgIG5zUGx1 Z2luUG9ydCogd2luZG93OwoKCiAgICBQUkludDMyIHg7CiAgICBQUkludDMyIHk7CiAgICBQUlVp bnQzMiB3aWR0aDsKICAgIFBSVWludDMyIGhlaWdodDsKICAgIG5zUGx1Z2luUmVjdCBjbGlwUmVj dDsKCgogICAgdm9pZCogd3NfaW5mbzsKCiAgICBuc1BsdWdpbldpbmRvd1R5cGUgdHlwZTsKfTsK CnN0cnVjdCBuc1BsdWdpbkZ1bGxQcmludCB7CiAgICBQUkJvb2wgcGx1Z2luUHJpbnRlZDsKCiAg ICBQUkJvb2wgcHJpbnRPbmU7CgogICAgdm9pZCogcGxhdGZvcm1QcmludDsKfTsKCnN0cnVjdCBu c1BsdWdpbkVtYmVkUHJpbnQgewogICAgbnNQbHVnaW5XaW5kb3cgd2luZG93OwogICAgdm9pZCog cGxhdGZvcm1QcmludDsKfTsKCnN0cnVjdCBuc1BsdWdpblByaW50IHsKICAgIFBSVWludDE2IG1v ZGU7CiAgICB1bmlvbgogICAgewogICAgICAgIG5zUGx1Z2luRnVsbFByaW50IGZ1bGxQcmludDsK ICAgICAgICBuc1BsdWdpbkVtYmVkUHJpbnQgZW1iZWRQcmludDsKICAgIH0gcHJpbnQ7Cn07Cgpz dHJ1Y3QgbnNQbHVnaW5FdmVudCB7CiMgMzE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2lu L25zcGx1Z2luZGVmcy5oIgogICAgWEV2ZW50IGV2ZW50OwoKCgp9OwoKCgoKCmVudW0gbnNQbHVn aW5FdmVudFR5cGUgewojIDMzOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdp bmRlZnMuaCIKICAgIG5zUGx1Z2luRXZlbnRUeXBlX0lkbGUgPSAwCn07CgoKCmVudW0gbnNQbHVn aW5SZWFzb24gewogICAgbnNQbHVnaW5SZWFzb25fQmFzZSA9IDAsCiAgICBuc1BsdWdpblJlYXNv bl9Eb25lID0gMCwKICAgIG5zUGx1Z2luUmVhc29uX05ldHdvcmtFcnIsCiAgICBuc1BsdWdpblJl YXNvbl9Vc2VyQnJlYWssCiAgICBuc1BsdWdpblJlYXNvbl9Ob1JlYXNvbgp9OwojIDM3MSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbmRlZnMuaCIKY2xhc3MgbnNJUGx1Z2lu OwpjbGFzcyBuc0lFdmVudEhhbmRsZXI7CmNsYXNzIG5zSVBsdWdpbkluc3RhbmNlOwoKCmNsYXNz IG5zSVBsdWdpbk1hbmFnZXI7CmNsYXNzIG5zSUZpbGVVdGlsaXRpZXM7CmNsYXNzIG5zSVBsdWdp bkluc3RhbmNlUGVlcjsKY2xhc3MgbnNJV2luZG93bGVzc1BsdWdpbkluc3RhbmNlUGVlcjsKY2xh c3MgbnNJUGx1Z2luVGFnSW5mbzsKIyAyMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9u c0lQbHVnaW5TdHJlYW1JbmZvLmgiIDIKIyAzMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdp bi9uc0lQbHVnaW5TdHJlYW1JbmZvLmgiCmNsYXNzIG5zSVBsdWdpblN0cmVhbUluZm8gOiBwdWJs aWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZWQ3ZDRjYTAsIDB4YjAwNSwgMHgxMWQyLCB7 IDB4YWQsIDB4YWEsIDB4MDAsIDB4ODAsIDB4NWYsIDB4NmQsIDB4ZWMsIDB4NDkgfX07IHJldHVy biBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50VHlwZShuc01JTUVUeXBlICph Q29udGVudFR5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTZWVrYWJsZShQUkJvb2wg KmFTZWVrYWJsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJVaW50MzIg KmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlmaWVkKFBSVWlu dDMyICphTGFzdE1vZGlmaWVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVSTChjb25z dCBjaGFyICogKmFVUkwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVxdWVzdFJlYWQobnNC eXRlUmFuZ2UgKiBhUmFuZ2VMaXN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmVh bU9mZnNldChQUkludDMyICphU3RyZWFtT2Zmc2V0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRTdHJlYW1PZmZzZXQoUFJJbnQzMiBhU3RyZWFtT2Zmc2V0KSA9IDA7Cgp9OwojIDE5ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblN0cmVhbUxpc3RlbmVyLmgiIDIKCgoK IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW5wdXRTdHJlYW0uaCIgMQojIDE3 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW5wdXRTdHJlYW0uaCIKY2xhc3MgbnNJ SW5wdXRTdHJlYW07CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJbnB1dFN0 cmVhbS5oIgp0eXBlZGVmIG5zcmVzdWx0ICgqIG5zV3JpdGVTZWdtZW50RnVuKShuc0lJbnB1dFN0 cmVhbSAqYUluU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICphQ2xvc3VyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqYUZyb21TZWdtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUlVpbnQzMiBhVG9PZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSVWludDMyIGFDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJVaW50MzIgKmFXcml0ZUNvdW50KTsKIyA1NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUlucHV0U3RyZWFtLmgiCmNsYXNzIG5zSUlucHV0U3RyZWFtIDogcHVibGljIG5z SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGZhOWM3ZjZjLCAweDYxYjMsIDB4MTFkNCwgeyAweDk4 LCAweDc3LCAweDAwLCAweGMwLCAweDRmLCAweGEwLCAweGNmLCAweDRhIH19OyByZXR1cm4gaWlk O30KIyA2OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUlucHV0U3RyZWFtLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBDbG9zZSh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEF2YWlsYWJsZShQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwojIDkxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJSW5wdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlYWQoY2hh ciAqIGFCdWYsIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKIyAxMTUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJbnB1dFN0cmVhbS5oIgogIHZpcnR1YWwg bnNyZXN1bHQgUmVhZFNlZ21lbnRzKG5zV3JpdGVTZWdtZW50RnVuIGFXcml0ZXIsIHZvaWQgKiBh Q2xvc3VyZSwgUFJVaW50MzIgYUNvdW50LCBQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBJc05vbkJsb2NraW5nKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsK IyAyMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5TdHJlYW1MaXN0ZW5l ci5oIiAyCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFt TGlzdGVuZXIuaCIKY2xhc3MgbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIgOiBwdWJsaWMgbnNJU3Vw cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4ZGYwNTU3NzAsIDB4NTQ0OCwgMHgxMWQyLCB7IDB4ODEsIDB4 NjQsIDB4MDAsIDB4NjAsIDB4MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQoj IDU4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblN0cmVhbUxpc3RlbmVy LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBPblN0YXJ0QmluZGluZyhuc0lQbHVnaW5TdHJlYW1JbmZv ICphUGx1Z2luSW5mbykgPSAwOwojIDcyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25z SVBsdWdpblN0cmVhbUxpc3RlbmVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBPbkRhdGFBdmFpbGFi bGUobnNJUGx1Z2luU3RyZWFtSW5mbyAqYVBsdWdpbkluZm8sIG5zSUlucHV0U3RyZWFtICphSW5w dXRTdHJlYW0sIFBSVWludDMyIGFMZW5ndGgpID0gMDsKIyA4MiAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3BsdWdpbi9uc0lQbHVnaW5TdHJlYW1MaXN0ZW5lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQg T25GaWxlQXZhaWxhYmxlKG5zSVBsdWdpblN0cmVhbUluZm8gKmFQbHVnaW5JbmZvLCBjb25zdCBj aGFyICphRmlsZU5hbWUpID0gMDsKIyA5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9u c0lQbHVnaW5TdHJlYW1MaXN0ZW5lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdG9wQmluZGlu Zyhuc0lQbHVnaW5TdHJlYW1JbmZvICphUGx1Z2luSW5mbywgbnNyZXN1bHQgYVN0YXR1cykgPSAw OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmVhbVR5cGUobnNQbHVnaW5TdHJlYW1U eXBlICphU3RyZWFtVHlwZSkgPSAwOwoKfTsKIyAxNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3Bs dWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIiAyCgoKCgoKCgpjbGFzcyBuc0lQbHVnaW5JbnN0YW5j ZVBlZXI7CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFu Y2UuaCIKY2xhc3MgbnNJUGx1Z2luSW5zdGFuY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4ZWJlMDBmNDAsIDB4MDE5OSwgMHgxMWQyLCB7IDB4ODEsIDB4NWIsIDB4MDAsIDB4 NjAsIDB4MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQojIDYyICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBJbml0aWFsaXplKG5zSVBsdWdpbkluc3RhbmNlUGVlciAqYVBlZXIpID0gMDsKIyA3NCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UGVlcihuc0lQbHVnaW5JbnN0YW5jZVBlZXIgKiAqYVBlZXIpID0gMDsK IyA4NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgU3RhcnQodm9pZCkgPSAwOwojIDk2ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTdG9w KHZvaWQpID0gMDsKIyAxMDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2lu SW5zdGFuY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3kodm9pZCkgPSAwOwojIDExOCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0V2luZG93KG5zUGx1Z2luV2luZG93ICogYVdpbmRvdykgPSAwOwojIDEz MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgogIHZp cnR1YWwgbnNyZXN1bHQgTmV3U3RyZWFtKG5zSVBsdWdpblN0cmVhbUxpc3RlbmVyICoqYUxpc3Rl bmVyKSA9IDA7CiMgMTQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbklu c3RhbmNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQcmludChuc1BsdWdpblByaW50ICogYVBsYXRm b3JtUHJpbnQpID0gMDsKIyAxNTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1 Z2luSW5zdGFuY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZhbHVlKG5zUGx1Z2luSW5zdGFu Y2VWYXJpYWJsZSBhVmFyaWFibGUsIHZvaWQgKiBhVmFsdWUpID0gMDsKIyAxNzEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2UuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IEhhbmRsZUV2ZW50KG5zUGx1Z2luRXZlbnQgKiBhRXZlbnQsIFBSQm9vbCAqYUhhbmRsZWQp ID0gMDsKCn07CiMgMTIwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbGF5b3V0L25zSU9iamVjdEZyYW1lLmgiIDEKIyA0MCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2xheW91dC9uc0lPYmplY3RGcmFtZS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9sYXlvdXQvbnNJRnJhbWUuaCIgMQojIDQ5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0 L25zSUZyYW1lLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0 cnVjdC5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVTdHJ1 Y3QuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4L25zQ29sb3IuaCIgMQojIDQzICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4L25zQ29sb3IuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNDb21PYnNvbGV0ZS5oIiAxCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9nZngvbnNDb2xvci5oIiAyCgpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNBU3RyaW5nOwoKCgp0 eXBlZGVmIFBSVWludDMyIG5zY29sb3I7CiMgODkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngv bnNDb2xvci5oIgpleHRlcm4gIkMiIFBSQm9vbCBOU19IZXhUb1JHQihjb25zdCBuc1N0cmluZyYg YUJ1ZiwgbnNjb2xvciogYVJlc3VsdCk7CgoKCgpleHRlcm4gIkMiIFBSQm9vbCBOU19Mb29zZUhl eFRvUkdCKGNvbnN0IG5zU3RyaW5nJiBhQnVmLCBuc2NvbG9yKiBhUmVzdWx0KTsKCgoKZXh0ZXJu ICJDIiBQUkJvb2wgTlNfQ29sb3JOYW1lVG9SR0IoY29uc3QgbnNBU3RyaW5nJiBhQnVmLCBuc2Nv bG9yKiBhUmVzdWx0KTsKCgoKZXh0ZXJuICJDIiBuc2NvbG9yIE5TX0JyaWdodGVuQ29sb3IobnNj b2xvciBpbkNvbG9yKTsKCgoKZXh0ZXJuICJDIiBuc2NvbG9yIE5TX0RhcmtlbkNvbG9yKG5zY29s b3IgaW5Db2xvcik7CiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVT dHJ1Y3QuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNDb29yZC5oIiAxCiMg NTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNDb29yZC5oIgp0eXBlZGVmIFBSSW50MzIg bnNjb29yZDsKIyA0MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVj dC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc01hcmdpbi5oIiAxCiMgNDQg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNNYXJnaW4uaCIKc3RydWN0IG5zTWFyZ2luIHsK ICBuc2Nvb3JkIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKCgogIG5zTWFyZ2luKCkge30KICBu c01hcmdpbihjb25zdCBuc01hcmdpbiYgYU1hcmdpbikgeyp0aGlzID0gYU1hcmdpbjt9CiAgbnNN YXJnaW4obnNjb29yZCBhTGVmdCwgbnNjb29yZCBhVG9wLAogICAgICAgICAgIG5zY29vcmQgYVJp Z2h0LCBuc2Nvb3JkIGFCb3R0b20pIHtsZWZ0ID0gYUxlZnQ7IHRvcCA9IGFUb3A7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gYVJpZ2h0OyBib3R0 b20gPSBhQm90dG9tO30KCiAgdm9pZCBTaXplVG8obnNjb29yZCBhTGVmdCwgbnNjb29yZCBhVG9w LAogICAgICAgICAgICAgIG5zY29vcmQgYVJpZ2h0LCBuc2Nvb3JkIGFCb3R0b20pIHtsZWZ0ID0g YUxlZnQ7IHRvcCA9IGFUb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJpZ2h0ID0gYVJpZ2h0OyBib3R0b20gPSBhQm90dG9tO30KICB2b2lkIFNpemVC eShuc2Nvb3JkIGFMZWZ0LCBuc2Nvb3JkIGFUb3AsCiAgICAgICAgICAgICAgbnNjb29yZCBhUmln aHQsIG5zY29vcmQgYUJvdHRvbSkge2xlZnQgKz0gYUxlZnQ7IHRvcCArPSBhVG9wOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCArPSBhUmlnaHQ7 IGJvdHRvbSArPSBhQm90dG9tO30KCgoKICBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc01hcmdp biYgYU1hcmdpbikgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgobGVmdCA9PSBhTWFyZ2lu LmxlZnQpICYmICh0b3AgPT0gYU1hcmdpbi50b3ApICYmCiAgICAgICAgICAgICAgICAgICAgIChy aWdodCA9PSBhTWFyZ2luLnJpZ2h0KSAmJiAoYm90dG9tID09IGFNYXJnaW4uYm90dG9tKSk7CiAg fQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAg ICByZXR1cm4gKFBSQm9vbCkgKChsZWZ0ICE9IGFNYXJnaW4ubGVmdCkgfHwgKHRvcCAhPSBhTWFy Z2luLnRvcCkgfHwKICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0ICE9IGFNYXJnaW4ucmlnaHQp IHx8IChib3R0b20gIT0gYU1hcmdpbi5ib3R0b20pKTsKICB9CiAgbnNNYXJnaW4gb3BlcmF0b3Ir KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAgICByZXR1cm4gbnNNYXJnaW4obGVm dCArIGFNYXJnaW4ubGVmdCwgdG9wICsgYU1hcmdpbi50b3AsCiAgICAgICAgICAgICAgICAgICAg cmlnaHQgKyBhTWFyZ2luLnJpZ2h0LCBib3R0b20gKyBhTWFyZ2luLmJvdHRvbSk7CiAgfQogIG5z TWFyZ2luIG9wZXJhdG9yLShjb25zdCBuc01hcmdpbiYgYU1hcmdpbikgY29uc3QgewogICAgcmV0 dXJuIG5zTWFyZ2luKGxlZnQgLSBhTWFyZ2luLmxlZnQsIHRvcCAtIGFNYXJnaW4udG9wLAogICAg ICAgICAgICAgICAgICAgIHJpZ2h0IC0gYU1hcmdpbi5yaWdodCwgYm90dG9tIC0gYU1hcmdpbi5i b3R0b20pOwogIH0KICBuc01hcmdpbiYgb3BlcmF0b3IrPShjb25zdCBuc01hcmdpbiYgYU1hcmdp bikge2xlZnQgKz0gYU1hcmdpbi5sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG9wICs9IGFNYXJnaW4udG9wOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgKz0gYU1hcmdpbi5yaWdodDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbSArPSBh TWFyZ2luLmJvdHRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAqdGhpczt9CiAgbnNNYXJnaW4mIG9wZXJhdG9yLT0oY29uc3QgbnNNYXJn aW4mIGFNYXJnaW4pIHtsZWZ0IC09IGFNYXJnaW4ubGVmdDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAtPSBhTWFyZ2luLnRvcDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0IC09IGFNYXJnaW4u cmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi b3R0b20gLT0gYU1hcmdpbi5ib3R0b207CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7fQp9OwojIDQ0ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZ2Z4L25zUmVjdC5oIiAxCiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNSZWN0 LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc1BvaW50LmgiIDEKIyA0NCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc1BvaW50LmgiCnN0cnVjdCBuc1BvaW50IHsKICBuc2Nv b3JkIHgsIHk7CgoKICBuc1BvaW50KCkge30KICBuc1BvaW50KGNvbnN0IG5zUG9pbnQmIGFQb2lu dCkge3ggPSBhUG9pbnQueDsgeSA9IGFQb2ludC55O30KICBuc1BvaW50KG5zY29vcmQgYVgsIG5z Y29vcmQgYVkpIHt4ID0gYVg7IHkgPSBhWTt9CgogIHZvaWQgTW92ZVRvKG5zY29vcmQgYVgsIG5z Y29vcmQgYVkpIHt4ID0gYVg7IHkgPSBhWTt9CiAgdm9pZCBNb3ZlQnkobnNjb29yZCBhRHgsIG5z Y29vcmQgYUR5KSB7eCArPSBhRHg7IHkgKz0gYUR5O30KCgoKICBQUkJvb2wgb3BlcmF0b3I9PShj b25zdCBuc1BvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHggPT0g YVBvaW50LngpICYmICh5ID09IGFQb2ludC55KSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNv bnN0IG5zUG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgoeCAhPSBh UG9pbnQueCkgfHwgKHkgIT0gYVBvaW50LnkpKTsKICB9CiAgbnNQb2ludCBvcGVyYXRvcisoY29u c3QgbnNQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gbnNQb2ludCh4ICsgYVBvaW50 LngsIHkgKyBhUG9pbnQueSk7CiAgfQogIG5zUG9pbnQgb3BlcmF0b3ItKGNvbnN0IG5zUG9pbnQm IGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIG5zUG9pbnQoeCAtIGFQb2ludC54LCB5IC0gYVBv aW50LnkpOwogIH0KICBuc1BvaW50JiBvcGVyYXRvcis9KGNvbnN0IG5zUG9pbnQmIGFQb2ludCkg ewogICAgeCArPSBhUG9pbnQueDsKICAgIHkgKz0gYVBvaW50Lnk7CiAgICByZXR1cm4gKnRoaXM7 CiAgfQogIG5zUG9pbnQmIG9wZXJhdG9yLT0oY29uc3QgbnNQb2ludCYgYVBvaW50KSB7CiAgICB4 IC09IGFQb2ludC54OwogICAgeSAtPSBhUG9pbnQueTsKICAgIHJldHVybiAqdGhpczsKICB9Cn07 CgoKCgoKc3RydWN0IG5zRmxvYXRQb2ludCB7CiAgZmxvYXQgeCwgeTsKCgogIG5zRmxvYXRQb2lu dCgpIHt9CiAgbnNGbG9hdFBvaW50KGNvbnN0IG5zRmxvYXRQb2ludCYgYVBvaW50KSB7eCA9IGFQ b2ludC54OyB5ID0gYVBvaW50Lnk7fQogIG5zRmxvYXRQb2ludChmbG9hdCBhWCwgZmxvYXQgYVkp IHt4ID0gYVg7IHkgPSBhWTt9CgogIHZvaWQgTW92ZVRvKGZsb2F0IGFYLCBmbG9hdCBhWSkge3gg PSBhWDsgeSA9IGFZO30KICB2b2lkIE1vdmVUbyhuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZKSB7eCA9 IChmbG9hdClhWDsgeSA9IChmbG9hdClhWTt9CiAgdm9pZCBNb3ZlQnkoZmxvYXQgYUR4LCBmbG9h dCBhRHkpIHt4ICs9IGFEeDsgeSArPSBhRHk7fQoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0 IG5zRmxvYXRQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh4ID09 IGFQb2ludC54KSAmJiAoeSA9PSBhUG9pbnQueSkpOwogIH0KICBQUkJvb2wgb3BlcmF0b3IhPShj b25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgo eCAhPSBhUG9pbnQueCkgfHwgKHkgIT0gYVBvaW50LnkpKTsKICB9CiAgbnNGbG9hdFBvaW50IG9w ZXJhdG9yKyhjb25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIG5z RmxvYXRQb2ludCh4ICsgYVBvaW50LngsIHkgKyBhUG9pbnQueSk7CiAgfQogIG5zRmxvYXRQb2lu dCBvcGVyYXRvci0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJldHVy biBuc0Zsb2F0UG9pbnQoeCAtIGFQb2ludC54LCB5IC0gYVBvaW50LnkpOwogIH0KICBuc0Zsb2F0 UG9pbnQmIG9wZXJhdG9yKz0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIHsKICAgIHggKz0g YVBvaW50Lng7CiAgICB5ICs9IGFQb2ludC55OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBuc0Zs b2F0UG9pbnQmIG9wZXJhdG9yLT0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIHsKICAgIHgg LT0gYVBvaW50Lng7CiAgICB5IC09IGFQb2ludC55OwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsK CgoKCgoKc3RydWN0IG5zUGF0aFBvaW50OiBwdWJsaWMgbnNGbG9hdFBvaW50ewoKICBQUkJvb2wg bUlzT25DdXJ2ZTsKCgogIG5zUGF0aFBvaW50KCkge30KICBuc1BhdGhQb2ludChjb25zdCBuc1Bh dGhQb2ludCYgYVBvaW50KSB7eCA9IGFQb2ludC54OyB5ID0gYVBvaW50Lnk7bUlzT25DdXJ2ZT1h UG9pbnQubUlzT25DdXJ2ZTt9CiAgbnNQYXRoUG9pbnQoZmxvYXQgYVgsIGZsb2F0IGFZKSB7eCA9 IGFYOyB5ID0gYVk7bUlzT25DdXJ2ZT0xO30KICBuc1BhdGhQb2ludChmbG9hdCBhWCwgZmxvYXQg YVksUFJCb29sIGFJc09uQ3VydmUpIHt4ID0gYVg7IHkgPSBhWTttSXNPbkN1cnZlPWFJc09uQ3Vy dmU7fQoKfTsKIyA0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc1JlY3QuaCIgMgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNTaXplLmgiIDEKIyA0NyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2dmeC9uc1NpemUuaCIKc3RydWN0IG5zU2l6ZSB7CiAgbnNjb29yZCB3aWR0aCwg aGVpZ2h0OwoKCiAgbnNTaXplKCkge30KICBuc1NpemUoY29uc3QgbnNTaXplJiBhU2l6ZSkge3dp ZHRoID0gYVNpemUud2lkdGg7IGhlaWdodCA9IGFTaXplLmhlaWdodDt9CiAgbnNTaXplKG5zY29v cmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHt3aWR0aCA9IGFXaWR0aDsgaGVpZ2h0ID0gYUhl aWdodDt9CgogIHZvaWQgU2l6ZVRvKG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHt3 aWR0aCA9IGFXaWR0aDsgaGVpZ2h0ID0gYUhlaWdodDt9CiAgdm9pZCBTaXplQnkobnNjb29yZCBh RGVsdGFXaWR0aCwgbnNjb29yZCBhRGVsdGFIZWlnaHQpIHt3aWR0aCArPSBhRGVsdGFXaWR0aDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhlaWdodCArPSBhRGVsdGFIZWlnaHQ7fQoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5z U2l6ZSYgYVNpemUpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHdpZHRoID09IGFTaXpl LndpZHRoKSAmJiAoaGVpZ2h0ID09IGFTaXplLmhlaWdodCkpOwogIH0KICBQUkJvb2wgb3BlcmF0 b3IhPShjb25zdCBuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh3 aWR0aCAhPSBhU2l6ZS53aWR0aCkgfHwgKGhlaWdodCAhPSBhU2l6ZS5oZWlnaHQpKTsKICB9CiAg bnNTaXplIG9wZXJhdG9yKyhjb25zdCBuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4g bnNTaXplKHdpZHRoICsgYVNpemUud2lkdGgsIGhlaWdodCArIGFTaXplLmhlaWdodCk7CiAgfQog IG5zU2l6ZSBvcGVyYXRvci0oY29uc3QgbnNTaXplJiBhU2l6ZSkgY29uc3QgewogICAgcmV0dXJu IG5zU2l6ZSh3aWR0aCAtIGFTaXplLndpZHRoLCBoZWlnaHQgLSBhU2l6ZS5oZWlnaHQpOwogIH0K ICBuc1NpemUmIG9wZXJhdG9yKz0oY29uc3QgbnNTaXplJiBhU2l6ZSkge3dpZHRoICs9IGFTaXpl LndpZHRoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0 ICs9IGFTaXplLmhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAqdGhpczt9CiAgbnNTaXplJiBvcGVyYXRvci09KGNvbnN0IG5zU2l6ZSYgYVNp emUpIHt3aWR0aCAtPSBhU2l6ZS53aWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGhlaWdodCAtPSBhU2l6ZS5oZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7fQp9OwojIDQ3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZ2Z4L25zUmVjdC5oIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc1VuaXRDb252ZXJzaW9uLmgiIDEKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y29tL25zVW5pdENvbnZlcnNpb24uaCIKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAy OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMSAzCiMgMjkgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0eXBlZGVmIGxvbmcgZG91YmxlIGZsb2F0X3Q7 Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90OwojIDQxICIvdXNyL2luY2x1ZGUvbWF0aC5o IiAyIDMKIyA2NSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L21hdGhjYWxscy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMK CgpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4yIChk b3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChk b3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3MgKGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuIChkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbmgg KGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBz aW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cg KCk7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91 YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAo KTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3Vi bGUgZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19mcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpl eHRlcm4gZG91YmxlIGxkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93 ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2xvZyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxMCAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBtb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0 cikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19tb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9f aXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy biBkb3VibGUgcG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93 MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwbTEgKGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9n YiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2diIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBk b3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChk b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgc3FydCAoZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gZG91YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2h5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBkb3VibGUg Y2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl eHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoZG91Ymxl IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3Vi bGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3Vi bGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5p dGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZSAoZG91YmxlIF9fdmFsdWUp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRy ZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZHJl bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2ln bmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNh bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkb3VibGUgbmFu IChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gZG91YmxlIF9fbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbiAoZG91 YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0 ZXJuIGludCBpc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fajAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgajEgKGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRv dWJsZSBqbiAoaW50LCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwg ZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX3kwIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkxIChkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVy biBkb3VibGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3luIChp bnQsIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91 YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUp IHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSB0 Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91Ymxl IGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19sZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X3JpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkb3VibGUgbmV4dHRv d2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0dG93YXJkIChkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK ZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQg X19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4g KGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2Fs YmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91Ymxl IG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlp bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVt cXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv bmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg bHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChk b3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9f eSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195 KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93 ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWdu Yml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3Vi bGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91Ymxl IF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3Vi bGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3Vi bGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsKIyA2NiAiL3Vzci9pbmNsdWRlL21hdGguaCIg MiAzCiMgODggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t YXRoY2FsbHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCgoK ZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19h Y29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7Cgpl eHRlcm4gZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0 YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195 LCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKGZsb2F0IF9feSwg ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBm bG9hdCBzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5mIChmbG9h dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxv YXQgY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9h dCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0 ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2Yg KGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X2Fjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX2F0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBleHBm IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBv bmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19l eHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQg X19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgdGhy b3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBm bG9hdCAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwg ZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBf X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgpleHRlcm4gZmxvYXQgcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19wb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2xvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9n YmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2JmIChmbG9hdCBfX3gp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h dCBsb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxv YXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBf X3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZs b2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19oeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZs b2F0IGNicnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jZWls ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mbG9v cmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19mbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZs b2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl cm4gaW50IGZpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4 dGVybiBmbG9hdCBjb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQg X194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK CgoKZXh0ZXJuIGZsb2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hh ciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0 ZXJuIGludCBfX2lzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBm bG9hdCBqMWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgdGhy b3cgKCk7CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19qbmYgKGludCwgZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTBmIChmbG9hdCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kwZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxv YXQgeTFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIHRocm93 ICgpOwpleHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9feW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZs b2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRl cm4gZmxvYXQgZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZs b2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQg dGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxn YW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X2xnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gZmxvYXQgcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl cm4gZmxvYXQgX19uZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGZsb2F0IG5leHR0b3dhcmRmIChmbG9h dCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gZmxvYXQgX19uZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBf X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0 IHJlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g ZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBp bG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBp bnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9u ZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cg KCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5j ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy biBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ks IGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gs IGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBs cmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv bmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxv bmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBm ZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGlt ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQg X194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194 LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0 IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZs b2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQg X194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2Nh bGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxi ZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOwojIDg5ICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAyIDMKIyAxMDkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5o IiAzCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK CmV4dGVybiBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl cm4gbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2F0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxv bmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK ZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy biBsb25nIGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g dm9pZCBzaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcg ZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9u ZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBf X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhw bCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19p cHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUg ZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19l eHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93 MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cx MGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4 cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw bTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cx cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFw bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMmwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cybCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxv bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNi cnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0 bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUg Y2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbG9vcmwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl cm4gbG9uZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbW9kbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRvdWJs ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0 ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFs dWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBk b3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lnbmlmaWNhbmRsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2ln bmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29uc3QgY2hhciAqX190 YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRv dWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192 YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50 IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVy biBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwg KGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGlu dCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRv dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIHRo cm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9u ZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9feW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f ZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgZXJmY2wgKGxv bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wgKGxvbmcgZG91 YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19zaWduZ2Ft cCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAobG9uZyBkb3VibGUs IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmlu dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0 ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg c2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQg X19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3Vi bGUgc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19u KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25n IGRvdWJsZSBfX3RydW5jbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19yZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50 ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50bCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGlt bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBs b25nIGRvdWJsZSBmbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19m bWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9u ZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f Zm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikg dGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwojIDExMCAiL3Vzci9p bmNsdWRlL21hdGguaCIgMiAzCiMgMTI1ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBp bnQgc2lnbmdhbTsKIyAxNjYgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQ X05BTiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwK CiAgICBGUF9OT1JNQUwKCiAgfTsKIyAyNTIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRl ZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAog IF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBF IF9MSUJfVkVSU0lPTjsKIyAyNzUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhj ZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFy ZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50 IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDM2MiAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg MSAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgaW50 Cl9fc2lnbmJpdGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24g eyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3Uu X19pIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0IChkb3VibGUgX194KSB0aHJvdyAoKQp7 CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0gX191ID0g eyBfX2Q6IF9feCB9OwogIHJldHVybiBfX3UuX19pWzFdIDwgMDsKfQpfX2lubGluZSBpbnQKX19z aWduYml0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlv biB7IGxvbmcgZG91YmxlIF9fbDsgaW50IF9faVszXTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAg cmV0dXJuIChfX3UuX19pWzJdICYgMHg4MDAwKSAhPSAwOwp9CiMgMjkxICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUpIHRocm93 ICgpOyBfX2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJu IF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUg ZmxvYXQgX19zZ25mIChmbG9hdCkgdGhyb3cgKCk7IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxv YXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/ IDEuMCA6IC0xLjApOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUp IHRocm93ICgpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAt MS4wKTsgfQojIDQyNSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5l IGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10 IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192 YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJv dyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEp Iik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBk b3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19p bmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUg X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kp IDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKX19pbmxpbmUgZG91YmxlIGZtb2QgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0 IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChf X3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGZtb2Rm IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf X3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxu XHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIg KF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3Vi bGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVt XG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsg fQojIDQ0MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJs ZSBzcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsg X19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gp KTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRo cm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz cXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBf X2lubGluZSBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIg OiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxp bmUgbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAi PXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCgpfX2lubGlu ZSBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2Zh YnMgKF9feCk7IH0KX19pbmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyBy ZXR1cm4gX19idWlsdGluX2ZhYnNmIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194 KTsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQojIDQ2NiAiL3Vzci9pbmNsdWRl L2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0 aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgi ZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyBy ZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cg KCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsg ZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4g X19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGls ZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgx KSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxv bmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKSB7IF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBf X3hsZDsgdW5zaWduZWQgaW50IF9feGlbM107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5f X3hpWzJdID0gKF9fbi5fX3hpWzJdICYgMHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAw eDgwMDAwMDAwOyBfX24uX194aVswXSA9IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA0OTIgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgZmxvb3IgKGRv dWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xh dGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp bnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7 IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJm bGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIg OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAl MCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBmbG9v cmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf X3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9f Y3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGls ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5k aW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZs ZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcg ZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0 Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAw OyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20g X192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7 IH0KIyA1MDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3Vi bGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2ln bmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9 bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192 b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUg KCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5l IGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1 bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIg OiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNt IF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9s YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lu bGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9f Y3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRp bGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYp IHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXAp KTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f eCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJu IF9fdmFsdWU7IH0KIyA1MjEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lu bGluZSBkb3VibGUKbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdp c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDog Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0 dXJuIF9fdmFsdWU7Cn0KIyA1MzkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpf X2lubGluZSBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQy MTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNt IF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAo X192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxp bmUgZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIz NzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9s YXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9u ZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQy MTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNt IF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAo X192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTMg Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXNpbmgg KGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJz bCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kg KyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBfX2lubGluZSBmbG9hdCBh c2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBf X2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAq IF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxv bmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kg LyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194 KSk7IH0KCgoKCl9faW5saW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy ZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEu MCkpOyB9IF9faW5saW5lIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVy biBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7 IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp IHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3gg KyAxLjApKTsgfQoKCl9faW5saW5lIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAq IGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBf X2lubGluZSBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kg KyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBsb25nIGRv dWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBf X3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfQoKCgoKX19pbmxpbmUgZG91Ymxl IGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRs IChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9IF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQg X194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9f eSAqIF9feSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsg X195ICogX195KTsgfQoKX19pbmxpbmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19q dW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAi PXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZs b2F0IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm eHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7 IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAi PXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVl OyB9CiMgNTgzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZmxv YXQKbGRleHBmIChmbG9hdCBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192 YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFs dWU7Cn0KCl9faW5saW5lIGxvbmcgZG91YmxlCmxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQg X195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192 b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChs b25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNjA3ICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gp IHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAo ImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1 cm4gX19scmludHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkgdGhy b3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlz dHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBf X2xyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJm aXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJu IF9fbHJpbnRyZXM7Cn0KIyA2MzAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpf X2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIGxv bmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAl MCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxy aW50cmVzOwp9Cl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChkb3VibGUgX194KSB0aHJv dyAoKQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18g KCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyBy ZXR1cm4gX19sbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2Fz bV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQi IChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKX19pbmxpbmUgZG91 YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91 YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9f ICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAi PXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kp IDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0 ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAi ZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZh IiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9f dmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3Rl ciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJm c3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEi IChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192 YWx1ZTsgfQojIDY2NSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5l IGludApfX2Zpbml0ZSAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIHJldHVybiAoX19leHRlbnNp b25fXwogICAgICAgICAgKCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtf X2Q6IF9feH0pLl9faVsxXQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkp Owp9CiMgMzYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA0MjMgIi91c3IvaW5jbHVkZS9t YXRoLmgiIDMKfQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNVbml0Q29udmVy c2lvbi5oIiAyCiMgNTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc1VuaXRDb252ZXJz aW9uLmgiCmlubGluZSBuc2Nvb3JkIE5TVG9Db29yZEZsb29yKGZsb2F0IGFWYWx1ZSkKewogIHJl dHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlKSA6IG5zY29vcmQoYVZhbHVl IC0gMC45OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgppbmxpbmUgbnNjb29yZCBOU1RvQ29vcmRDZWls KGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZh bHVlICsgMC45OTk5OTk5OTk5OTk5OTk5ZikgOiBuc2Nvb3JkKGFWYWx1ZSkpOwp9CgppbmxpbmUg bnNjb29yZCBOU1RvQ29vcmRSb3VuZChmbG9hdCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBmIDw9 IGFWYWx1ZSkgPyBuc2Nvb3JkKGFWYWx1ZSArIDAuNWYpIDogbnNjb29yZChhVmFsdWUgLSAwLjVm KSk7Cn0KCmlubGluZSBuc2Nvb3JkIE5TVG9Db29yZFJvdW5kRXhjbHVzaXZlKGZsb2F0IGFWYWx1 ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlICsgMC40OTk5 OTk5OTk5OTk5OTk5ZikgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQoYVZh bHVlIC0gMC40OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgoKCgoKaW5saW5lIFBSSW50MzIgTlNUb0lu dEZsb29yKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBSSW50 MzIoYVZhbHVlKSA6IFBSSW50MzIoYVZhbHVlIC0gMC45OTk5OTk5OTk5OTk5OTk5ZikpOwp9Cgpp bmxpbmUgUFJJbnQzMiBOU1RvSW50Q2VpbChmbG9hdCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBm IDw9IGFWYWx1ZSkgPyBQUkludDMyKGFWYWx1ZSArIDAuOTk5OTk5OTk5OTk5OTk5OWYpIDogUFJJ bnQzMihhVmFsdWUpKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUb0ludFJvdW5kKGZsb2F0IGFWYWx1 ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBSSW50MzIoYVZhbHVlICsgMC41Zikg OiBQUkludDMyKGFWYWx1ZSAtIDAuNWYpKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUb0ludFJvdW5k RXhjbHVzaXZlKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBS SW50MzIoYVZhbHVlICsgMC40OTk5OTk5OTk5OTk5OTk5ZikgOgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBSSW50MzIoYVZhbHVlIC0gMC40OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgoKCgoK aW5saW5lIG5zY29vcmQgTlNGbG9hdFBvaW50c1RvVHdpcHMoZmxvYXQgYVBvaW50cykKewogIHJl dHVybiBOU1RvQ29vcmRSb3VuZChhUG9pbnRzICogMjAuMGYpOwp9CgppbmxpbmUgbnNjb29yZCBO U0ludFBvaW50c1RvVHdpcHMoUFJJbnQzMiBhUG9pbnRzKQp7CiAgcmV0dXJuIG5zY29vcmQoYVBv aW50cyAqIDIwKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUd2lwc1RvSW50UG9pbnRzKG5zY29vcmQg YVR3aXBzKQp7CiAgcmV0dXJuIE5TVG9JbnRSb3VuZChhVHdpcHMgLyAyMC4wZik7Cn0KCmlubGlu ZSBQUkludDMyIE5TVHdpcHNUb0Zsb29ySW50UG9pbnRzKG5zY29vcmQgYVR3aXBzKQp7CiAgcmV0 dXJuIE5TVG9JbnRGbG9vcihhVHdpcHMgLyAyMC4wZik7Cn0KCmlubGluZSBQUkludDMyIE5TVHdp cHNUb0NlaWxJbnRQb2ludHMobnNjb29yZCBhVHdpcHMpCnsKICByZXR1cm4gTlNUb0ludENlaWwo YVR3aXBzIC8gMjAuMGYpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1RvRmxvYXRQb2ludHMobnNj b29yZCBhVHdpcHMpCnsKICByZXR1cm4gKGZsb2F0KGFUd2lwcykgLyAyMC4wZik7Cn0KCgoKCmlu bGluZSBuc2Nvb3JkIE5TRmxvYXRQaXhlbHNUb1R3aXBzKGZsb2F0IGFQaXhlbHMsIGZsb2F0IGFU d2lwc1BlclBpeGVsKQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGFQaXhlbHMgKiBhVHdpcHNQ ZXJQaXhlbCk7Cn0KCmlubGluZSBuc2Nvb3JkIE5TSW50UGl4ZWxzVG9Ud2lwcyhQUkludDMyIGFQ aXhlbHMsIGZsb2F0IGFUd2lwc1BlclBpeGVsKQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGZs b2F0KGFQaXhlbHMpICogYVR3aXBzUGVyUGl4ZWwpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1Rv RmxvYXRQaXhlbHMobnNjb29yZCBhVHdpcHMsIGZsb2F0IGFQaXhlbHNQZXJUd2lwKQp7CiAgcmV0 dXJuIChmbG9hdChhVHdpcHMpICogYVBpeGVsc1BlclR3aXApOwp9CgppbmxpbmUgUFJJbnQzMiBO U1R3aXBzVG9JbnRQaXhlbHMobnNjb29yZCBhVHdpcHMsIGZsb2F0IGFQaXhlbHNQZXJUd2lwKQp7 CiAgcmV0dXJuIE5TVG9JbnRSb3VuZChmbG9hdChhVHdpcHMpICogYVBpeGVsc1BlclR3aXApOwp9 CgoKCgppbmxpbmUgbnNjb29yZCBOU1VuaXRzVG9Ud2lwcyhmbG9hdCBhVmFsdWUsIGZsb2F0IGFQ b2ludHNQZXJVbml0KQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGFWYWx1ZSAqIGFQb2ludHNQ ZXJVbml0ICogMjAuMGYpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1RvVW5pdHMobnNjb29yZCBh VHdpcHMsIGZsb2F0IGFVbml0c1BlclBvaW50KQp7CiAgcmV0dXJuIChhVHdpcHMgKiAoYVVuaXRz UGVyUG9pbnQgLyAyMC4wZikpOwp9CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNS ZWN0LmgiIDIKCgpzdHJ1Y3QgbnNSZWN0IHsKICBuc2Nvb3JkIHgsIHk7CiAgbnNjb29yZCB3aWR0 aCwgaGVpZ2h0OwoKCiAgbnNSZWN0KCkgOiB4KDApLCB5KDApLCB3aWR0aCgwKSwgaGVpZ2h0KDAp IHt9CiAgbnNSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QpIHsqdGhpcyA9IGFSZWN0O30KICBuc1Jl Y3QoY29uc3QgbnNQb2ludCYgYU9yaWdpbiwgY29uc3QgbnNTaXplICZhU2l6ZSkge3ggPSBhT3Jp Z2luLng7IHkgPSBhT3JpZ2luLnk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGFTaXplLndpZHRoOyBoZWlnaHQgPSBhU2l6ZS5o ZWlnaHQ7fQogIG5zUmVjdChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwg bnNjb29yZCBhSGVpZ2h0KSB7eCA9IGFYOyB5ID0gYVk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGFXaWR0 aDsgaGVpZ2h0ID0gYUhlaWdodDt9CgoKCiAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7CiAgICBy ZXR1cm4gKFBSQm9vbCkgKChoZWlnaHQgPD0gMCkgfHwgKHdpZHRoIDw9IDApKTsKICB9CiAgdm9p ZCBFbXB0eSgpIHt3aWR0aCA9IGhlaWdodCA9IDA7fQoKCiAgUFJCb29sIENvbnRhaW5zKGNvbnN0 IG5zUmVjdCYgYVJlY3QpIGNvbnN0OwogIFBSQm9vbCBDb250YWlucyhuc2Nvb3JkIGFYLCBuc2Nv b3JkIGFZKSBjb25zdDsKICBQUkJvb2wgQ29udGFpbnMoY29uc3QgbnNQb2ludCYgYVBvaW50KSBj b25zdCB7cmV0dXJuIENvbnRhaW5zKGFQb2ludC54LCBhUG9pbnQueSk7fQoKCgogIFBSQm9vbCBJ bnRlcnNlY3RzKGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNvbnN0OwoKCgoKCgogIFBSQm9vbCBJbnRl cnNlY3RSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QxLCBjb25zdCBuc1JlY3QmIGFSZWN0Mik7CgoK CgoKCiAgUFJCb29sIFVuaW9uUmVjdChjb25zdCBuc1JlY3QmIGFSZWN0MSwgY29uc3QgbnNSZWN0 JiBhUmVjdDIpOwoKCiAgdm9pZCBTZXRSZWN0KG5zY29vcmQgYVgsIG5zY29vcmQgYVksIG5zY29v cmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHsKICAgIHggPSBhWDsgeSA9IGFZOyB3aWR0aCA9 IGFXaWR0aDsgaGVpZ2h0ID0gYUhlaWdodDsKICB9CiAgdm9pZCBNb3ZlVG8obnNjb29yZCBhWCwg bnNjb29yZCBhWSkge3ggPSBhWDsgeSA9IGFZO30KICB2b2lkIE1vdmVUbyhjb25zdCBuc1BvaW50 JiBhUG9pbnQpIHt4ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQueTt9CiAgdm9pZCBNb3ZlQnkobnNj b29yZCBhRHgsIG5zY29vcmQgYUR5KSB7eCArPSBhRHg7IHkgKz0gYUR5O30KICB2b2lkIFNpemVU byhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSB7d2lkdGggPSBhV2lkdGg7IGhlaWdo dCA9IGFIZWlnaHQ7fQogIHZvaWQgU2l6ZVRvKGNvbnN0IG5zU2l6ZSYgYVNpemUpIHtTaXplVG8o YVNpemUud2lkdGgsIGFTaXplLmhlaWdodCk7fQogIHZvaWQgU2l6ZUJ5KG5zY29vcmQgYURlbHRh V2lkdGgsIG5zY29vcmQgYURlbHRhSGVpZ2h0KSB7d2lkdGggKz0gYURlbHRhV2lkdGg7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWln aHQgKz0gYURlbHRhSGVpZ2h0O30KCgogIHZvaWQgSW5mbGF0ZShuc2Nvb3JkIGFEeCwgbnNjb29y ZCBhRHkpOwogIHZvaWQgSW5mbGF0ZShjb25zdCBuc1NpemUmIGFTaXplKSB7SW5mbGF0ZShhU2l6 ZS53aWR0aCwgYVNpemUuaGVpZ2h0KTt9CiAgdm9pZCBJbmZsYXRlKGNvbnN0IG5zTWFyZ2luJiBh TWFyZ2luKTsKCgogIHZvaWQgRGVmbGF0ZShuc2Nvb3JkIGFEeCwgbnNjb29yZCBhRHkpOwogIHZv aWQgRGVmbGF0ZShjb25zdCBuc1NpemUmIGFTaXplKSB7RGVmbGF0ZShhU2l6ZS53aWR0aCwgYVNp emUuaGVpZ2h0KTt9CiAgdm9pZCBEZWZsYXRlKGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKTsKCgoK ICBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc1JlY3QmIGFSZWN0KSBjb25zdCB7CiAgICByZXR1 cm4gKFBSQm9vbCkgKChJc0VtcHR5KCkgJiYgYVJlY3QuSXNFbXB0eSgpKSB8fAogICAgICAgICAg ICAgICAgICAgICAoKHggPT0gYVJlY3QueCkgJiYgKHkgPT0gYVJlY3QueSkgJiYKICAgICAgICAg ICAgICAgICAgICAgICh3aWR0aCA9PSBhUmVjdC53aWR0aCkgJiYgKGhlaWdodCA9PSBhUmVjdC5o ZWlnaHQpKSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNv bnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAhb3BlcmF0b3I9PShhUmVjdCk7CiAgfQogIG5zUmVj dCBvcGVyYXRvcisoY29uc3QgbnNSZWN0JiBhUmVjdCkgY29uc3QgewogICAgcmV0dXJuIG5zUmVj dCh4ICsgYVJlY3QueCwgeSArIGFSZWN0LnksCiAgICAgICAgICAgICAgICAgIHdpZHRoICsgYVJl Y3Qud2lkdGgsIGhlaWdodCArIGFSZWN0LmhlaWdodCk7CiAgfQogIG5zUmVjdCBvcGVyYXRvci0o Y29uc3QgbnNSZWN0JiBhUmVjdCkgY29uc3QgewogICAgcmV0dXJuIG5zUmVjdCh4IC0gYVJlY3Qu eCwgeSAtIGFSZWN0LnksCiAgICAgICAgICAgICAgICAgIHdpZHRoIC0gYVJlY3Qud2lkdGgsIGhl aWdodCAtIGFSZWN0LmhlaWdodCk7CiAgfQogIG5zUmVjdCYgb3BlcmF0b3IrPShjb25zdCBuc1Bv aW50JiBhUG9pbnQpIHt4ICs9IGFQb2ludC54OyB5ICs9IGFQb2ludC55OyByZXR1cm4gKnRoaXM7 fQogIG5zUmVjdCYgb3BlcmF0b3ItPShjb25zdCBuc1BvaW50JiBhUG9pbnQpIHt4IC09IGFQb2lu dC54OyB5IC09IGFQb2ludC55OyByZXR1cm4gKnRoaXM7fQoKICBuc1JlY3QmIG9wZXJhdG9yKj0o Y29uc3QgZmxvYXQgYVNjYWxlKSB7eCA9IE5TVG9Db29yZFJvdW5kKHggKiBhU2NhbGUpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gTlNUb0Nvb3JkUm91bmQo eSAqIGFTY2FsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp ZHRoID0gTlNUb0Nvb3JkUm91bmQod2lkdGggKiBhU2NhbGUpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBOU1RvQ29vcmRSb3VuZChoZWlnaHQgKiBh U2NhbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g KnRoaXM7fQoKICBuc1JlY3QmIFNjYWxlUm91bmRPdXQoY29uc3QgZmxvYXQgYVNjYWxlKTsKICBu c1JlY3QmIFNjYWxlUm91bmRJbihjb25zdCBmbG9hdCBhU2NhbGUpOwoKCiAgbnNjb29yZCBYTW9z dCgpIGNvbnN0IHtyZXR1cm4geCArIHdpZHRoO30KICBuc2Nvb3JkIFlNb3N0KCkgY29uc3Qge3Jl dHVybiB5ICsgaGVpZ2h0O30KfTsKCgpleHRlcm4gRklMRSogb3BlcmF0b3I8PChGSUxFKiBvdXQs IGNvbnN0IG5zUmVjdCYgcmVjdCk7CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50 L25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNGb250 LmgiIDEKIyA1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc0ZvbnQuaCIKdHlwZWRlZiBQ UkJvb2wgKCpuc0ZvbnRGYW1pbHlFbnVtRnVuYykoY29uc3QgbnNTdHJpbmcmIGFGYW1pbHksIFBS Qm9vbCBhR2VuZXJpYywgdm9pZCAqYURhdGEpOwoKCgoKY29uc3QgUFJVaW50OCBrR2VuZXJpY0Zv bnRfTk9ORSA9IDB4MDA7Cgpjb25zdCBQUlVpbnQ4IGtHZW5lcmljRm9udF9tb3pfdmFyaWFibGUg PSAweDAwOwpjb25zdCBQUlVpbnQ4IGtHZW5lcmljRm9udF9tb3pfZml4ZWQgPSAweDAxOwoKY29u c3QgUFJVaW50OCBrR2VuZXJpY0ZvbnRfc2VyaWYgPSAweDAyOwpjb25zdCBQUlVpbnQ4IGtHZW5l cmljRm9udF9zYW5zX3NlcmlmID0gMHgwNDsKY29uc3QgUFJVaW50OCBrR2VuZXJpY0ZvbnRfbW9u b3NwYWNlID0gMHgwODsKY29uc3QgUFJVaW50OCBrR2VuZXJpY0ZvbnRfY3Vyc2l2ZSA9IDB4MTA7 CmNvbnN0IFBSVWludDgga0dlbmVyaWNGb250X2ZhbnRhc3kgPSAweDIwOwoKCnN0cnVjdCBuc0Zv bnQgewoKICBuc1N0cmluZyBuYW1lOwoKCiAgUFJVaW50OCBzdHlsZTsKCgogIFBSVWludDggdmFy aWFudCA6IDc7CgoKCiAgUFJQYWNrZWRCb29sIGZhbWlseU5hbWVRdWlya3MgOiAxOwoKCiAgUFJV aW50MTYgd2VpZ2h0OwoKCgogIFBSVWludDggZGVjb3JhdGlvbnM7CgoKICBuc2Nvb3JkIHNpemU7 CgoKCgoKICBmbG9hdCBzaXplQWRqdXN0OwoKCiAgbnNGb250KGNvbnN0IGNoYXIqIGFOYW1lLCBQ UlVpbnQ4IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFudCwKICAgICAgICAgUFJVaW50MTYgYVdlaWdo dCwgUFJVaW50OCBhRGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6ZSwKICAgICAgICAgZmxvYXQgYVNp emVBZGp1c3Q9MC4wZik7CgoKICBuc0ZvbnQoY29uc3QgbnNTdHJpbmcmIGFOYW1lLCBQUlVpbnQ4 IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFudCwKICAgICAgICAgUFJVaW50MTYgYVdlaWdodCwgUFJV aW50OCBhRGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6ZSwKICAgICAgICAgZmxvYXQgYVNpemVBZGp1 c3Q9MC4wZik7CgoKICBuc0ZvbnQoY29uc3QgbnNGb250JiBhRm9udCk7CgogIG5zRm9udCgpOwog IH5uc0ZvbnQoKTsKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNGb250JiBhT3RoZXIpIGNv bnN0IHsKICAgIHJldHVybiBFcXVhbHMoYU90aGVyKTsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29u c3QgbnNGb250JiBhT3RoZXIpIGNvbnN0IDsKCiAgbnNGb250JiBvcGVyYXRvcj0oY29uc3QgbnNG b250JiBhT3RoZXIpOwoKCgoKCiAgUFJCb29sIEVudW1lcmF0ZUZhbWlsaWVzKG5zRm9udEZhbWls eUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSkgY29uc3Q7CiAgdm9pZCBHZXRGaXJzdEZhbWls eShuc1N0cmluZyYgYUZhbWlseSkgY29uc3Q7CgoKICBzdGF0aWMgdm9pZCBHZXRHZW5lcmljSUQo Y29uc3QgbnNTdHJpbmcmIGFHZW5lcmljLCBQUlVpbnQ4KiBhSUQpOwp9OwojIDQ2ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiIDIKCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZUNvb3JkLmgiIDEKIyA0NCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZUNvb3JkLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2xheW91dC9uc1N0eWxlQ29uc3RzLmgiIDEKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2NvbnRlbnQvbnNTdHlsZUNvb3JkLmgiIDIKY2xhc3MgbnNTdHJpbmc7CgplbnVtIG5zU3R5bGVV bml0IHsKICBlU3R5bGVVbml0X051bGwgPSAwLAogIGVTdHlsZVVuaXRfTm9ybWFsID0gMSwKICBl U3R5bGVVbml0X0F1dG8gPSAyLAogIGVTdHlsZVVuaXRfSW5oZXJpdCA9IDMsCiAgZVN0eWxlVW5p dF9QZXJjZW50ID0gMTAsCiAgZVN0eWxlVW5pdF9GYWN0b3IgPSAxMSwKICBlU3R5bGVVbml0X0Nv b3JkID0gMjAsCiAgZVN0eWxlVW5pdF9JbnRlZ2VyID0gMzAsCiAgZVN0eWxlVW5pdF9Qcm9wb3J0 aW9uYWwgPSAzMSwKICBlU3R5bGVVbml0X0VudW1lcmF0ZWQgPSAzMiwKICBlU3R5bGVVbml0X0No YXJzID0gMzMKfTsKCnR5cGVkZWYgdW5pb24gewogIFBSSW50MzIgbUludDsKICBmbG9hdCBtRmxv YXQ7Cn0gbnNTdHlsZVVuaW9uOwojIDc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9u c1N0eWxlQ29vcmQuaCIKY2xhc3MgbnNTdHlsZUNvb3JkIHsKcHVibGljOgogIG5zU3R5bGVDb29y ZChuc1N0eWxlVW5pdCBhVW5pdCA9IGVTdHlsZVVuaXRfTnVsbCk7CiAgbnNTdHlsZUNvb3JkKG5z Y29vcmQgYVZhbHVlKTsKICBuc1N0eWxlQ29vcmQoUFJJbnQzMiBhVmFsdWUsIG5zU3R5bGVVbml0 IGFVbml0KTsKICBuc1N0eWxlQ29vcmQoZmxvYXQgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7 CiAgbnNTdHlsZUNvb3JkKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvcHkpOwoKICBuc1N0eWxlQ29v cmQmIG9wZXJhdG9yPShjb25zdCBuc1N0eWxlQ29vcmQmIGFDb3B5KTsKICBQUkJvb2wgb3BlcmF0 b3I9PShjb25zdCBuc1N0eWxlQ29vcmQmIGFPdGhlcikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9y IT0oY29uc3QgbnNTdHlsZUNvb3JkJiBhT3RoZXIpIGNvbnN0OwoKICBuc1N0eWxlVW5pdCBHZXRV bml0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Vbml0OyB9CiAgbnNjb29yZCBHZXRDb29yZFZhbHVl KHZvaWQpIGNvbnN0OwogIFBSSW50MzIgR2V0SW50VmFsdWUodm9pZCkgY29uc3Q7CiAgZmxvYXQg R2V0UGVyY2VudFZhbHVlKHZvaWQpIGNvbnN0OwogIGZsb2F0IEdldEZhY3RvclZhbHVlKHZvaWQp IGNvbnN0OwogIHZvaWQgR2V0VW5pb25WYWx1ZShuc1N0eWxlVW5pb24mIGFWYWx1ZSkgY29uc3Q7 CgogIHZvaWQgUmVzZXQodm9pZCk7CiAgdm9pZCBTZXRDb29yZFZhbHVlKG5zY29vcmQgYVZhbHVl KTsKICB2b2lkIFNldEludFZhbHVlKFBSSW50MzIgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7 CiAgdm9pZCBTZXRQZXJjZW50VmFsdWUoZmxvYXQgYVZhbHVlKTsKICB2b2lkIFNldEZhY3RvclZh bHVlKGZsb2F0IGFWYWx1ZSk7CiAgdm9pZCBTZXROb3JtYWxWYWx1ZSh2b2lkKTsKICB2b2lkIFNl dEF1dG9WYWx1ZSh2b2lkKTsKICB2b2lkIFNldEluaGVyaXRWYWx1ZSh2b2lkKTsKICB2b2lkIFNl dFVuaW9uVmFsdWUoY29uc3QgbnNTdHlsZVVuaW9uJiBhVmFsdWUsIG5zU3R5bGVVbml0IGFVbml0 KTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9p ZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CgpwdWJsaWM6CiAgbnNTdHlsZVVu aXQgbVVuaXQ7CiAgbnNTdHlsZVVuaW9uIG1WYWx1ZTsKfTsKCgoKCgoKCmNsYXNzIG5zU3R5bGVT aWRlcyB7CnB1YmxpYzoKICBuc1N0eWxlU2lkZXModm9pZCk7CgoKICBQUkJvb2wgb3BlcmF0b3I9 PShjb25zdCBuc1N0eWxlU2lkZXMmIGFPdGhlcikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9yIT0o Y29uc3QgbnNTdHlsZVNpZGVzJiBhT3RoZXIpIGNvbnN0OwoKCgogIGlubGluZSBuc1N0eWxlVW5p dCBHZXRVbml0KFBSVWludDggYVNpZGUpIGNvbnN0OwogIGlubGluZSBuc1N0eWxlVW5pdCBHZXRM ZWZ0VW5pdCh2b2lkKSBjb25zdDsKICBpbmxpbmUgbnNTdHlsZVVuaXQgR2V0VG9wVW5pdCh2b2lk KSBjb25zdDsKICBpbmxpbmUgbnNTdHlsZVVuaXQgR2V0UmlnaHRVbml0KHZvaWQpIGNvbnN0Owog IGlubGluZSBuc1N0eWxlVW5pdCBHZXRCb3R0b21Vbml0KHZvaWQpIGNvbnN0OwoKICBpbmxpbmUg bnNTdHlsZUNvb3JkJiBHZXQoUFJVaW50OCBhU2lkZSwgbnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNv bnN0OwogIGlubGluZSBuc1N0eWxlQ29vcmQmIEdldExlZnQobnNTdHlsZUNvb3JkJiBhQ29vcmQp IGNvbnN0OwogIGlubGluZSBuc1N0eWxlQ29vcmQmIEdldFRvcChuc1N0eWxlQ29vcmQmIGFDb29y ZCkgY29uc3Q7CiAgaW5saW5lIG5zU3R5bGVDb29yZCYgR2V0UmlnaHQobnNTdHlsZUNvb3JkJiBh Q29vcmQpIGNvbnN0OwogIGlubGluZSBuc1N0eWxlQ29vcmQmIEdldEJvdHRvbShuc1N0eWxlQ29v cmQmIGFDb29yZCkgY29uc3Q7CgogIHZvaWQgUmVzZXQodm9pZCk7CgogIGlubGluZSB2b2lkIFNl dChQUlVpbnQ4IGFTaWRlLCBjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCk7CiAgaW5saW5lIHZv aWQgU2V0TGVmdChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCk7CiAgaW5saW5lIHZvaWQgU2V0 VG9wKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3JkKTsKICBpbmxpbmUgdm9pZCBTZXRSaWdodChj b25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCk7CiAgaW5saW5lIHZvaWQgU2V0Qm90dG9tKGNvbnN0 IG5zU3R5bGVDb29yZCYgYUNvb3JkKTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmluZyYg YUJ1ZmZlcikgY29uc3Q7CiAgdm9pZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7 Cgpwcm90ZWN0ZWQ6CiAgUFJVaW50OCBtVW5pdHNbNF07CiAgbnNTdHlsZVVuaW9uIG1WYWx1ZXNb NF07Cn07CgoKCgppbmxpbmUgUFJCb29sIG5zU3R5bGVDb29yZDo6b3BlcmF0b3IhPShjb25zdCBu c1N0eWxlQ29vcmQmIGFPdGhlcikgY29uc3QKewogIHJldHVybiBQUkJvb2woISAoKCp0aGlzKSA9 PSBhT3RoZXIpKTsKfQoKaW5saW5lIFBSSW50MzIgbnNTdHlsZUNvb3JkOjpHZXRDb29yZFZhbHVl KHZvaWQpIGNvbnN0CnsKICA7CiAgaWYgKG1Vbml0ID09IGVTdHlsZVVuaXRfQ29vcmQpIHsKICAg IHJldHVybiBtVmFsdWUubUludDsKICB9CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBQUkludDMyIG5z U3R5bGVDb29yZDo6R2V0SW50VmFsdWUodm9pZCkgY29uc3QKewogIDsKCgoKICBpZiAoKG1Vbml0 ID09IGVTdHlsZVVuaXRfUHJvcG9ydGlvbmFsKSB8fAogICAgICAobVVuaXQgPT0gZVN0eWxlVW5p dF9FbnVtZXJhdGVkKSB8fAogICAgICAobVVuaXQgPT0gZVN0eWxlVW5pdF9DaGFycykgfHwKICAg ICAgKG1Vbml0ID09IGVTdHlsZVVuaXRfSW50ZWdlcikpIHsKICAgIHJldHVybiBtVmFsdWUubUlu dDsKICB9CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBmbG9hdCBuc1N0eWxlQ29vcmQ6OkdldFBlcmNl bnRWYWx1ZSh2b2lkKSBjb25zdAp7CiAgOwogIGlmIChtVW5pdCA9PSBlU3R5bGVVbml0X1BlcmNl bnQpIHsKICAgIHJldHVybiBtVmFsdWUubUZsb2F0OwogIH0KICByZXR1cm4gMC4wZjsKfQoKaW5s aW5lIGZsb2F0IG5zU3R5bGVDb29yZDo6R2V0RmFjdG9yVmFsdWUodm9pZCkgY29uc3QKewogIDsK ICBpZiAobVVuaXQgPT0gZVN0eWxlVW5pdF9GYWN0b3IpIHsKICAgIHJldHVybiBtVmFsdWUubUZs b2F0OwogIH0KICByZXR1cm4gMC4wZjsKfQoKaW5saW5lIHZvaWQgbnNTdHlsZUNvb3JkOjpHZXRV bmlvblZhbHVlKG5zU3R5bGVVbmlvbiYgYVZhbHVlKSBjb25zdAp7CiAgbWVtY3B5KCZhVmFsdWUs ICZtVmFsdWUsIHNpemVvZihuc1N0eWxlVW5pb24pKTsKfQoKCgoKaW5saW5lIFBSQm9vbCBuc1N0 eWxlU2lkZXM6Om9wZXJhdG9yIT0oY29uc3QgbnNTdHlsZVNpZGVzJiBhT3RoZXIpIGNvbnN0CnsK ICByZXR1cm4gUFJCb29sKCEgKCgqdGhpcykgPT0gYU90aGVyKSk7Cn0KCmlubGluZSBuc1N0eWxl VW5pdCBuc1N0eWxlU2lkZXM6OkdldFVuaXQoUFJVaW50OCBhU2lkZSkgY29uc3QKewogIHJldHVy biAobnNTdHlsZVVuaXQpbVVuaXRzW2FTaWRlXTsKfQoKaW5saW5lIG5zU3R5bGVVbml0IG5zU3R5 bGVTaWRlczo6R2V0TGVmdFVuaXQodm9pZCkgY29uc3QKewogIHJldHVybiBHZXRVbml0KDMpOwp9 CgppbmxpbmUgbnNTdHlsZVVuaXQgbnNTdHlsZVNpZGVzOjpHZXRUb3BVbml0KHZvaWQpIGNvbnN0 CnsKICByZXR1cm4gR2V0VW5pdCgwKTsKfQoKaW5saW5lIG5zU3R5bGVVbml0IG5zU3R5bGVTaWRl czo6R2V0UmlnaHRVbml0KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gR2V0VW5pdCgxKTsKfQoKaW5s aW5lIG5zU3R5bGVVbml0IG5zU3R5bGVTaWRlczo6R2V0Qm90dG9tVW5pdCh2b2lkKSBjb25zdAp7 CiAgcmV0dXJuIEdldFVuaXQoMik7Cn0KCmlubGluZSBuc1N0eWxlQ29vcmQmIG5zU3R5bGVTaWRl czo6R2V0KFBSVWludDggYVNpZGUsIG5zU3R5bGVDb29yZCYgYUNvb3JkKSBjb25zdAp7CiAgYUNv b3JkLlNldFVuaW9uVmFsdWUobVZhbHVlc1thU2lkZV0sIChuc1N0eWxlVW5pdCltVW5pdHNbYVNp ZGVdKTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lk ZXM6OkdldExlZnQobnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNvbnN0CnsKICByZXR1cm4gR2V0KDMs IGFDb29yZCk7Cn0KCmlubGluZSBuc1N0eWxlQ29vcmQmIG5zU3R5bGVTaWRlczo6R2V0VG9wKG5z U3R5bGVDb29yZCYgYUNvb3JkKSBjb25zdAp7CiAgcmV0dXJuIEdldCgwLCBhQ29vcmQpOwp9Cgpp bmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0KG5zU3R5bGVDb29yZCYg YUNvb3JkKSBjb25zdAp7CiAgcmV0dXJuIEdldCgxLCBhQ29vcmQpOwp9CgppbmxpbmUgbnNTdHls ZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldEJvdHRvbShuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29u c3QKewogIHJldHVybiBHZXQoMiwgYUNvb3JkKTsKfQoKaW5saW5lIHZvaWQgbnNTdHlsZVNpZGVz OjpTZXQoUFJVaW50OCBhU2lkZSwgY29uc3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpCnsKICBtVW5p dHNbYVNpZGVdID0gYUNvb3JkLkdldFVuaXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtVmFs dWVzW2FTaWRlXSk7Cn0KCmlubGluZSB2b2lkIG5zU3R5bGVTaWRlczo6U2V0TGVmdChjb25zdCBu c1N0eWxlQ29vcmQmIGFDb29yZCkKewogIFNldCgzLCBhQ29vcmQpOwp9CgppbmxpbmUgdm9pZCBu c1N0eWxlU2lkZXM6OlNldFRvcChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIFNldCgw LCBhQ29vcmQpOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldFJpZ2h0KGNvbnN0IG5z U3R5bGVDb29yZCYgYUNvb3JkKQp7CiAgU2V0KDEsIGFDb29yZCk7Cn0KCmlubGluZSB2b2lkIG5z U3R5bGVTaWRlczo6U2V0Qm90dG9tKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3JkKQp7CiAgU2V0 KDIsIGFDb29yZCk7Cn0KIyA0OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHls ZVN0cnVjdC5oIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVN0eWxl U2V0LmgiIDEKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lTdHlsZVNldC5o IgpjbGFzcyBuc0lBdG9tOwpjbGFzcyBuc0lTdHlsZVJ1bGU7CmNsYXNzIG5zSVN0eWxlU2hlZXQ7 CmNsYXNzIG5zSVN0eWxlQ29udGV4dDsKY2xhc3MgbnNJU3R5bGVSdWxlU3VwcGxpZXI7CmNsYXNz IG5zSVN0eWxlRnJhbWVDb25zdHJ1Y3Rpb247CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBu c0lQcmVzU2hlbGw7CmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lE b2N1bWVudDsKY2xhc3MgbnNJRnJhbWVNYW5hZ2VyOwpjbGFzcyBuc0lTdXBwb3J0c0FycmF5Owpj bGFzcyBuc1J1bGVOb2RlOwpzdHJ1Y3QgbnNGaW5kRnJhbWVIaW50OwoKCmNsYXNzIG5zSVNpemVP ZkhhbmRsZXI7CgpjbGFzcyBuc0lDU1NQc2V1ZG9Db21wYXJhdG9yOwoKCgoKCmNsYXNzIG5zSVN0 eWxlU2V0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhlNTkzOTZiMCwgMHhiMjQ0 LCAweDExZDEsIHsweDgwLCAweDMxLCAweDAwLCAweDYwLCAweDA4LCAweDE1LCAweDliLCAweDVh fX07IHJldHVybiBpaWQ7fQoKCgogIHZpcnR1YWwgdm9pZCBBcHBlbmRPdmVycmlkZVN0eWxlU2hl ZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIEluc2VydE92ZXJy aWRlU3R5bGVTaGVldEFmdGVyKG5zSVN0eWxlU2hlZXQqIGFTaGVldCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYUFmdGVyU2hlZXQp ID0gMDsKICB2aXJ0dWFsIHZvaWQgSW5zZXJ0T3ZlcnJpZGVTdHlsZVNoZWV0QmVmb3JlKG5zSVN0 eWxlU2hlZXQqIGFTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSVN0eWxlU2hlZXQqIGFCZWZvcmVTaGVldCkgPSAwOwogIHZpcnR1YWwgdm9pZCBS ZW1vdmVPdmVycmlkZVN0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmly dHVhbCBQUkludDMyIEdldE51bWJlck9mT3ZlcnJpZGVTdHlsZVNoZWV0cygpID0gMDsKICB2aXJ0 dWFsIG5zSVN0eWxlU2hlZXQqIEdldE92ZXJyaWRlU3R5bGVTaGVldEF0KFBSSW50MzIgYUluZGV4 KSA9IDA7CgoKICB2aXJ0dWFsIHZvaWQgQWRkRG9jU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBh U2hlZXQsIG5zSURvY3VtZW50KiBhRG9jdW1lbnQpID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVtb3Zl RG9jU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIFBSSW50 MzIgR2V0TnVtYmVyT2ZEb2NTdHlsZVNoZWV0cygpID0gMDsKICB2aXJ0dWFsIG5zSVN0eWxlU2hl ZXQqIEdldERvY1N0eWxlU2hlZXRBdChQUkludDMyIGFJbmRleCkgPSAwOwoKICB2aXJ0dWFsIHZv aWQgQXBwZW5kVXNlclN0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmly dHVhbCB2b2lkIEluc2VydFVzZXJTdHlsZVNoZWV0QWZ0ZXIobnNJU3R5bGVTaGVldCogYVNoZWV0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNo ZWV0KiBhQWZ0ZXJTaGVldCkgPSAwOwogIHZpcnR1YWwgdm9pZCBJbnNlcnRVc2VyU3R5bGVTaGVl dEJlZm9yZShuc0lTdHlsZVNoZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhQmVmb3JlU2hlZXQpID0gMDsKICB2 aXJ0dWFsIHZvaWQgUmVtb3ZlVXNlclN0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9 IDA7CiAgdmlydHVhbCBQUkludDMyIEdldE51bWJlck9mVXNlclN0eWxlU2hlZXRzKCkgPSAwOwog IHZpcnR1YWwgbnNJU3R5bGVTaGVldCogR2V0VXNlclN0eWxlU2hlZXRBdChQUkludDMyIGFJbmRl eCkgPSAwOwogIHZpcnR1YWwgdm9pZCBSZXBsYWNlVXNlclN0eWxlU2hlZXRzKG5zSVN1cHBvcnRz QXJyYXkqIGFOZXdTaGVldHMpID0gMDsKCiAgdmlydHVhbCB2b2lkIEFwcGVuZEFnZW50U3R5bGVT aGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIHZvaWQgSW5zZXJ0QWdl bnRTdHlsZVNoZWV0QWZ0ZXIobnNJU3R5bGVTaGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhQWZ0ZXJTaGVldCkg PSAwOwogIHZpcnR1YWwgdm9pZCBJbnNlcnRBZ2VudFN0eWxlU2hlZXRCZWZvcmUobnNJU3R5bGVT aGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJU3R5bGVTaGVldCogYUJlZm9yZVNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIFJlbW92 ZUFnZW50U3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIFBS SW50MzIgR2V0TnVtYmVyT2ZBZ2VudFN0eWxlU2hlZXRzKCkgPSAwOwogIHZpcnR1YWwgbnNJU3R5 bGVTaGVldCogR2V0QWdlbnRTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5kZXgpID0gMDsKICB2aXJ0 dWFsIHZvaWQgUmVwbGFjZUFnZW50U3R5bGVTaGVldHMobnNJU3VwcG9ydHNBcnJheSogYU5ld1No ZWV0cykgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJ1bGVUcmVlKG5zUnVsZU5vZGUqKiBh UmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhckNhY2hlZERhdGFJblJ1bGVUcmVl KG5zSVN0eWxlUnVsZSogYVJ1bGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRSdWxl Tm9kZU1hcHBpbmcobnNSdWxlTm9kZSogYVJ1bGVOb2RlKSA9IDA7CiMgMTMwICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSVN0eWxlU2V0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdp blJ1bGVUcmVlUmVjb25zdHJ1Y3QoKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgRW5kUnVsZVRyZWVS ZWNvbnN0cnVjdCgpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVGcmFtZUNvbnN0cnVj dGlvbihuc0lTdHlsZUZyYW1lQ29uc3RydWN0aW9uKiogYVJlc3VsdCkgPSAwOwojIDE0NCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lTdHlsZVNldC5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgQ2xlYXJTdHlsZURhdGEobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJU3R5bGVS dWxlKiBhUnVsZSwgbnNJU3R5bGVDb250ZXh0KiBhQ29udGV4dCkgPSAwOwoKCgogIHZpcnR1YWwg bnNyZXN1bHQgRW5hYmxlUXVpcmtTdHlsZVNoZWV0KFBSQm9vbCBhRW5hYmxlKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeVN0eWxlU2hlZXRTdGF0ZUNoYW5nZWQoUFJCb29sIGFBcHBs aWNhYmxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zSVN0eWxlQ29udGV4dCogUmVzb2x2ZVN0eWxlRm9y KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRleHQp ID0gMDsKIyAxNjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJU3R5bGVTZXQuaCIK ICB2aXJ0dWFsIG5zSVN0eWxlQ29udGV4dCogUmVzb2x2ZVN0eWxlRm9yTm9uRWxlbWVudCgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBh UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdHlsZUNvbnRleHQqIGFQYXJlbnRDb250ZXh0KSA9IDA7CgoKCiAgdmlydHVhbCBuc0lTdHls ZUNvbnRleHQqIFJlc29sdmVQc2V1ZG9TdHlsZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250 ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ Q29udGVudCogYVBhcmVudENvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHNldWRvVGFnLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29u dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SUNTU1BzZXVkb0NvbXBhcmF0b3IqIGFDb21wYXJhdG9yID0gMCkgPSAwOwoKCgoKICB2aXJ0dWFs IG5zSVN0eWxlQ29udGV4dCogUHJvYmVQc2V1ZG9TdHlsZUZvcihuc0lQcmVzQ29udGV4dCogYVBy ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29u dGV4dCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNodXRkb3duKCk9MDsKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IFJlUGFyZW50U3R5bGVDb250ZXh0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBh U3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxl Q29udGV4dCogYU5ld1BhcmVudENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJU3R5bGVDb250ZXh0KiogYU5ld1N0eWxlQ29udGV4dCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBIYXNTdGF0ZURlcGVuZGVudFN0eWxlKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBh Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYVN0 YXRlTWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYVJl c3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb25zdHJ1Y3RSb290RnJhbWUobnNJUHJl c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJQ29udGVudCogYURvY0VsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zSUZyYW1lKiYgYUZyYW1lU3ViVHJlZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJl Y29uc3RydWN0RG9jRWxlbWVudEhpZXJhcmNoeShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0 KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRBcHBlbmRlZChuc0lQcmVzQ29udGV4 dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQq IGFDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmV3SW5k ZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudEluc2VydGVkKG5z SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD b250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSW5k ZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudFJlcGxhY2VkKG5z SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD b250ZW50KiBhT2xkQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu dCogYU5ld0NoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUluZGV4 SW5Db250YWluZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRSZW1vdmVkKG5zSVBy ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD b250ZW50KiBhQ29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu dCogYUNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSW5kZXhJbkNv bnRhaW5lcikgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRDaGFuZ2VkKG5zSVByZXND b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250 ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiBh U3ViQ29udGVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudFN0YXRlc0NoYW5nZWQo bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSSW50MzIgYVN0YXRlTWFzaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmli dXRlQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSSW50MzIgYU5hbWVTcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu dDMyIGFNb2RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NoYW5nZUhpbnQg YUhpbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVSdWxlQ2hhbmdlZChuc0lQcmVz Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lT dHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ U3R5bGVSdWxlKiBhU3R5bGVSdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0No YW5nZUhpbnQgYUhpbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFN0eWxlUnVsZUFkZGVkKG5z SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SVN0eWxlUnVsZSogYVN0eWxlUnVsZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVSdWxl UmVtb3ZlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJU3R5bGVSdWxlKiBhU3R5bGVSdWxlKSA9IDA7CgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDYW50UmVuZGVyUmVwbGFjZWRFbGVtZW50KG5zSVByZXNDb250ZXh0KiBhUHJl c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l KiBhRnJhbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlQ29udGludWluZ0ZyYW1l KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc0lGcmFtZSogYVBhcmVudEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUZyYW1lKiogYUNvbnRpbnVpbmdGcmFtZSkgPSAwOwojIDI4MiAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2xheW91dC9uc0lTdHlsZVNldC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmlu ZFByaW1hcnlGcmFtZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZU1hbmFnZXIqIGFGcmFtZU1hbmFnZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFGcmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNGaW5kRnJhbWVIaW50KiBhSGludD0wKSA9IDA7CiMg MzAwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVN0eWxlU2V0LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRJbnNlcnRpb25Qb2ludChuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVBhcmVudEZyYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkQ29udGVudCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYUluc2VydGlvblBvaW50KSA9 IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdHlsZVJ1bGVTdXBwbGllcihuc0lTdHlsZVJ1 bGVTdXBwbGllciogYVN1cHBsaWVyKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVSdWxl U3VwcGxpZXIobnNJU3R5bGVSdWxlU3VwcGxpZXIqKiBhU3VwcGxpZXIpPTA7CgoKCgoKCgogIHZp cnR1YWwgdm9pZCBSZXNldFVuaXF1ZVN0eWxlSXRlbXModm9pZCkgPSAwOwoKCgogIHZpcnR1YWwg bnNyZXN1bHQgQXR0cmlidXRlQWZmZWN0c1N0eWxlKG5zSUF0b20gKmFBdHRyaWJ1dGUsIG5zSUNv bnRlbnQgKmFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9v bCAmYUFmZmVjdHMpID0gMDsKfTsKCmV4dGVybiBuc3Jlc3VsdAogIE5TX05ld1N0eWxlU2V0KG5z SVN0eWxlU2V0KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCgpjbGFzcyBuc1VuaXF1ZVN0eWxlSXRl bXMgOiBwcml2YXRlIG5zVm9pZEFycmF5CnsKcHVibGljIDoKCiAgc3RhdGljIG5zVW5pcXVlU3R5 bGVJdGVtcyAqR2V0VW5pcXVlU3R5bGVJdGVtcyggdm9pZCApewogICAgaWYobUluc3RhbmNlID09 IDApewoKCgogICAgICBuZXcgbnNVbmlxdWVTdHlsZUl0ZW1zOwoKICAgICAgOwoKCgogICAgfQog ICAgcmV0dXJuIG1JbnN0YW5jZTsKICB9CgogIHZvaWQgKkdldEl0ZW0odm9pZCAqYVB0cil7CiAg ICBQUkludDMyIGluZGV4ID0gbnNWb2lkQXJyYXk6OkluZGV4T2YoYVB0cik7CiAgICBpZiggaW5k ZXggIT0gLTEpewogICAgICByZXR1cm4gbnNWb2lkQXJyYXk6OkVsZW1lbnRBdChpbmRleCk7CiAg ICB9IGVsc2UgewogICAgICByZXR1cm4gMDsKICAgIH0KICB9CgogIFBSQm9vbCBBZGRJdGVtKHZv aWQgKmFQdHIpewogICAgaWYobnNWb2lkQXJyYXk6OkluZGV4T2YoYVB0cikgPT0gLTEpewogICAg ICByZXR1cm4gbnNWb2lkQXJyYXk6OkFwcGVuZEVsZW1lbnQoYVB0cik7CiAgICB9IGVsc2Ugewog ICAgICByZXR1cm4gMDsKICAgIH0KICB9CgogIFBSQm9vbCBSZW1vdmVJdGVtKHZvaWQgKmFQdHIp ewogICAgcmV0dXJuIG5zVm9pZEFycmF5OjpSZW1vdmVFbGVtZW50KGFQdHIpOwogIH0KCiAgUFJJ bnQzMiBDb3VudCh2b2lkKXsKICAgIHJldHVybiBuc1ZvaWRBcnJheTo6Q291bnQoKTsKICB9Cgog IHZvaWQgQ2xlYXIodm9pZCl7CiAgICBuc1ZvaWRBcnJheTo6Q2xlYXIoKTsKICB9CnByb3RlY3Rl ZDoKCiAgbnNVbmlxdWVTdHlsZUl0ZW1zKCBjb25zdCBuc1VuaXF1ZVN0eWxlSXRlbXMmIHNyYyk7 CiAgbnNVbmlxdWVTdHlsZUl0ZW1zJiBvcGVyYXRvciA9KGNvbnN0IG5zVW5pcXVlU3R5bGVJdGVt cyYgc3JjKTsKCgogIG5zVW5pcXVlU3R5bGVJdGVtcyh2b2lkKSA6IG5zVm9pZEFycmF5KCl7CiAg ICA7CiAgICBtSW5zdGFuY2U9dGhpczsKICB9CgogIHN0YXRpYyBuc1VuaXF1ZVN0eWxlSXRlbXMg Km1JbnN0YW5jZTsKfTsKIyAzOTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJU3R5 bGVTZXQuaCIKc3RydWN0IG5zRmluZEZyYW1lSGludAp7CiAgbnNJRnJhbWUgKm1QcmltYXJ5RnJh bWVGb3JQcmV2U2libGluZzsKICBuc0ZpbmRGcmFtZUhpbnQoKSB7CiAgICBtUHJpbWFyeUZyYW1l Rm9yUHJldlNpYmxpbmcgPSAwOwogIH07Cn07CiMgNTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9j b250ZW50L25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlv dXQvbnNJUHJlc0NvbnRleHQuaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0 L25zSVByZXNDb250ZXh0LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJl cXVlc3QuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5o IgpjbGFzcyBuc0lMb2FkR3JvdXA7Cgp0eXBlZGVmIFBSVWludDMyIG5zTG9hZEZsYWdzOwojIDM0 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5oIgpjbGFzcyBuc0lSZXF1 ZXN0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGVmNmJmYmQyLCAweGZkNDYs IDB4NDhkOCwgeyAweDk2LCAweGI3LCAweDlmLCAweDhmLCAweDBmLCAweGQzLCAweDg3LCAweGZl IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShuc0FDU3Ry aW5nICYgYU5hbWUpID0gMDsKIyA1MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJl cXVlc3QuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGVuZGluZyhQUkJvb2wgKl9yZXR2YWwpID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhdHVzKG5zcmVzdWx0ICphU3RhdHVzKSA9 IDA7CiMgNzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lSZXF1ZXN0LmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBDYW5jZWwobnNyZXN1bHQgYVN0YXR1cykgPSAwOwojIDg5ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3Vz cGVuZCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzdW1lKHZvaWQpID0g MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb2FkR3JvdXAobnNJTG9hZEdyb3VwICog KmFMb2FkR3JvdXApID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExvYWRHcm91cChuc0lMb2Fk R3JvdXAgKiBhTG9hZEdyb3VwKSA9IDA7CiMgMTE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVj a28vbnNJUmVxdWVzdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9hZEZsYWdzKG5zTG9hZEZs YWdzICphTG9hZEZsYWdzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMb2FkRmxhZ3MobnNM b2FkRmxhZ3MgYUxvYWRGbGFncykgPSAwOwoKCgoKCgoKICBlbnVtIHsgTE9BRF9OT1JNQUwgPSAw VSB9OwoKCgoKCiAgZW51bSB7IExPQURfQkFDS0dST1VORCA9IDFVIH07CiMgMTM5ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5oIgogIGVudW0geyBJTkhJQklUX0NBQ0hJ TkcgPSAxMjhVIH07CgoKCgoKCiAgZW51bSB7IElOSElCSVRfUEVSU0lTVEVOVF9DQUNISU5HID0g MjU2VSB9OwojIDE1NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJlcXVlc3QuaCIK ICBlbnVtIHsgTE9BRF9CWVBBU1NfQ0FDSEUgPSA1MTJVIH07CgoKCgoKCgogIGVudW0geyBMT0FE X0ZST01fQ0FDSEUgPSAxMDI0VSB9OwojIDE4OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tv L25zSVJlcXVlc3QuaCIKICBlbnVtIHsgVkFMSURBVEVfQUxXQVlTID0gMjA0OFUgfTsKCiAgZW51 bSB7IFZBTElEQVRFX05FVkVSID0gNDA5NlUgfTsKCiAgZW51bSB7IFZBTElEQVRFX09OQ0VfUEVS X1NFU1NJT04gPSA4MTkyVSB9OwoKfTsKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91 dC9uc0lQcmVzQ29udGV4dC5oIiAyCgoKY2xhc3MgbnNCaWRpUHJlc1V0aWxzOwoKCnN0cnVjdCBu c0ZvbnQ7CnN0cnVjdCBuc1JlY3Q7CgpjbGFzcyBpbWdJUmVxdWVzdDsKCmNsYXNzIG5zSUNvbnRl bnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lEZXZpY2VDb250ZXh0OwpjbGFzcyBuc0lG b250TWV0cmljczsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSUltYWdlOwpjbGFzcyBuc0lMaW5r SGFuZGxlcjsKY2xhc3MgbnNJUHJlc1NoZWxsOwpjbGFzcyBuc0lQcmVmOwpjbGFzcyBuc0lTdHls ZUNvbnRleHQ7CmNsYXNzIG5zSUF0b207CmNsYXNzIG5zU3RyaW5nOwpjbGFzcyBuc0lFdmVudFN0 YXRlTWFuYWdlcjsKY2xhc3MgbnNJVVJJOwpjbGFzcyBuc0lMb29rQW5kRmVlbDsKY2xhc3MgbnNJ SU9TZXJ2aWNlOwpjbGFzcyBuc0lDU1NQc2V1ZG9Db21wYXJhdG9yOwpjbGFzcyBuc0lMYW5ndWFn ZUF0b207CmNsYXNzIG5zSVRoZW1lOwpzdHJ1Y3QgbnNTdHlsZVN0cnVjdDsKc3RydWN0IG5zU3R5 bGVCYWNrZ3JvdW5kOwojIDg1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXND b250ZXh0LmgiCmVudW0gbnNXaWRnZXRSZW5kZXJpbmcgewogIGVXaWRnZXRSZW5kZXJpbmdfTmF0 aXZlID0gMSwKICBlV2lkZ2V0UmVuZGVyaW5nX0dmeCA9IDIsCiAgZVdpZGdldFJlbmRlcmluZ19Q YXJ0aWFsR2Z4ID0gMwp9OwoKZW51bSBuc1dpZGdldFR5cGUgewogIGVXaWRnZXRUeXBlX0J1dHRv biA9IDEsCiAgZVdpZGdldFR5cGVfQ2hlY2tib3ggPSAyLAogIGVXaWRnZXRUeXBlX1JhZGlvID0g MywKICBlV2lkZ2V0VHlwZV9UZXh0ID0gNAp9OwoKZW51bSBuc0xhbmd1YWdlU3BlY2lmaWNUcmFu c2Zvcm1UeXBlIHsKICBlTGFuZ3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGVfVW5rbm93biA9IC0x LAogIGVMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZV9Ob25lID0gMCwKICBlTGFuZ3VhZ2VT cGVjaWZpY1RyYW5zZm9ybVR5cGVfSmFwYW5lc2UsCiAgZUxhbmd1YWdlU3BlY2lmaWNUcmFuc2Zv cm1UeXBlX0tvcmVhbgp9OwoKCmNvbnN0IFBSVWludDMyIGtQcmVzQ29udGV4dF9Vc2VEb2N1bWVu dENvbG9ycyA9IDB4MDE7CmNvbnN0IFBSVWludDMyIGtQcmVzQ29udGV4dF9Vc2VEb2N1bWVudEZv bnRzID0gMHgwMjsKY29uc3QgUFJVaW50MzIga1ByZXNDb250ZXh0X1VuZGVybGluZUxpbmtzID0g MHgwMzsKCgpjb25zdCBQUlVpbnQzMiBrUHJlc0NvbnRleHRfTWluaW11bUZvbnRTaXplID0gMHgw MTsKCgoKY29uc3QgUFJVaW50OCBrUHJlc0NvbnRleHRfRGVmYXVsdFZhcmlhYmxlRm9udF9JRCA9 IDB4MDA7CmNvbnN0IFBSVWludDgga1ByZXNDb250ZXh0X0RlZmF1bHRGaXhlZEZvbnRfSUQgPSAw eDAxOwoKCgpjbGFzcyBuc0lQcmVzQ29udGV4dCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1Ymxp YzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0geyAweDBhNWQxMmUwLCAweDk0NGUsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAs IDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7fQoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IEluaXQobnNJRGV2aWNlQ29udGV4dCogYURldmljZUNvbnRleHQpID0gMDsKCgoKCgog IHZpcnR1YWwgbnNyZXN1bHQgU2V0U2hlbGwobnNJUHJlc1NoZWxsKiBhU2hlbGwpID0gMDsKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaGVsbChuc0lQcmVzU2hlbGwqKiBhUmVzdWx0KSA9IDA7 CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tcGF0aWJpbGl0eU1vZGUobnNDb21wYXRp YmlsaXR5KiBhTW9kZVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29tcGF0aWJp bGl0eU1vZGUobnNDb21wYXRpYmlsaXR5IGFNb2RlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0V2lkZ2V0UmVuZGVyaW5nTW9kZShuc1dpZGdldFJlbmRlcmluZyogYU1vZGVSZXN1bHQp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpZGdldFJlbmRlcmluZ01vZGUobnNXaWRnZXRS ZW5kZXJpbmcgYU1vZGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbWFnZUFuaW1h dGlvbk1vZGUoUFJVaW50MTYqIGFNb2RlUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRJbWFnZUFuaW1hdGlvbk1vZGUoUFJVaW50MTYgYU1vZGUpID0gMDsKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRJbWFnZUxvYWRGbGFncyhuc0xvYWRGbGFncyYgYUxvYWRGbGFncykgPSAwOwoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExvb2tBbmRGZWVsKG5zSUxvb2tBbmRGZWVsKiogYUxv b2tBbmRGZWVsKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SU9TZXJ2aWNlKG5zSUlP U2VydmljZSoqIGFJT1NlcnZpY2UpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCYXNl VVJMKG5zSVVSSSoqIGFVUkxSZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRN ZWRpdW0obnNJQXRvbSoqIGFNZWRpdW1SZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBDbGVhclN0eWxlRGF0YUFuZFJlZmxvdyh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IFJlc29sdmVTdHlsZUNvbnRleHRGb3IobnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCoq IGFSZXN1bHQpID0gMDsKIyAyMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJl c0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29sdmVTdHlsZUNvbnRleHRGb3JOb25F bGVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRl eHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdHlsZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZXNvbHZlUHNldWRvU3R5bGVDb250ZXh0Rm9yKG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHNldWRv VGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNv bnRleHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lTdHlsZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CiMgMjMzICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZXNvbHZlUHNldWRvU3R5bGVXaXRoQ29tcGFyYXRvcihuc0lDb250ZW50KiBhUGFyZW50Q29udGVu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20q IGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lTdHlsZUNvbnRleHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ1NTUHNldWRvQ29tcGFyYXRvciogYUNvbXBhcmF0 b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHls ZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJvYmVQ c2V1ZG9TdHlsZUNvbnRleHRGb3IobnNJQ29udGVudCogYVBhcmVudENvbnRlbnQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHNldWRvVGFnLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFy ZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0 eWxlQ29udGV4dCoqIGFSZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFhC TEJpbmRpbmdVUkwobnNJQ29udGVudCogYUNvbnRlbnQsIG5zQVN0cmluZyYgYVJlc3VsdCkgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZVBhcmVudFN0eWxlQ29udGV4dChuc0lGcmFtZSog YUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0 KiBhTmV3UGFyZW50Q29udGV4dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZUZy b21TaGVsbChzaXplX3QgYVNpemUsIHZvaWQqKiBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBGcmVlVG9TaGVsbChzaXplX3QgYVNpemUsIHZvaWQqIGFGcmVlQ2h1bmspID0gMDsKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRyaWNzRm9yKGNvbnN0IG5zRm9udCYgYUZvbnQsIG5z SUZvbnRNZXRyaWNzKiogYVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZh dWx0Rm9udChQUlVpbnQ4IGFGb250SUQsIGNvbnN0IG5zRm9udCoqIGFSZXN1bHQpID0gMDsKCiAg dmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0Rm9udChQUlVpbnQ4IGFGb250SUQsIGNvbnN0IG5z Rm9udCYgYUZvbnQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhY2hlZEJvb2xQ cmVmKFBSVWludDMyIGFQcmVmVHlwZSwgUFJCb29sJiBhVmFsdWUpID0gMDsKCgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldENhY2hlZEludFByZWYoUFJVaW50MzIgYVByZWZUeXBlLCBQUkludDMy JiBhVmFsdWUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb250U2NhbGVyKFBSSW50 MzIqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbnRTY2FsZXIoUFJJbnQz MiBhU2NhbGVyKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdENvbG9yKG5z Y29sb3IqIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91 bmRDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1 bHRMaW5rQ29sb3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE ZWZhdWx0VmlzaXRlZExpbmtDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEZvY3VzQmFja2dyb3VuZENvbG9yKG5zY29sb3IqIGFDb2xvcikgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNUZXh0Q29sb3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRVc2VGb2N1c0NvbG9ycyhQUkJvb2wmIHVzZUZvY3VzQ29sb3Jz KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2N1c1JpbmdXaWR0aChQUlVpbnQ4ICpmb2N1 c1JpbmdXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNSaW5nT25Bbnl0aGlu ZyhQUkJvb2wmIGZvY3VzUmluZ09uQW55dGhpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg U2V0RGVmYXVsdENvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXREZWZhdWx0QmFja2dyb3VuZENvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXREZWZhdWx0TGlua0NvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXREZWZhdWx0VmlzaXRlZExpbmtDb2xvcihuc2NvbG9yIGFDb2xvcikgPSAw OwojIDMyNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lQcmVzQ29udGV4dC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgTG9hZEltYWdlKGNvbnN0IG5zU3RyaW5nJiBhVVJMLAogICAgICAg ICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhVGFyZ2V0RnJhbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgaW1nSVJlcXVlc3QgKiphUmVxdWVzdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBTdG9wSW1hZ2VzRm9yKG5zSUZyYW1lKiBhVGFyZ2V0RnJhbWUpID0gMDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRDb250YWluZXIobnNJU3VwcG9ydHMqIGFDb250YWluZXIpID0gMDsKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDb250YWluZXIobnNJU3VwcG9ydHMqKiBhUmVzdWx0KSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldExpbmtIYW5kbGVyKG5zSUxpbmtIYW5kbGVyKiBhSGFuZGxl cikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlua0hhbmRsZXIobnNJTGlua0hhbmRsZXIq KiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VmlzaWJsZUFyZWEo bnNSZWN0JiBhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpc2libGVB cmVhKGNvbnN0IG5zUmVjdCYgcikgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1BhZ2lu YXRlZChQUkJvb2wqIGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFn aW5hdGVkU2Nyb2xsaW5nKFBSQm9vbCBhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFBhZ2luYXRlZFNjcm9sbGluZyhQUkJvb2wqIGFSZXN1bHQpID0gMDsKIyAzODMgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc0NvbnRleHQuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFBhZ2VEaW0obnNSZWN0KiBhQWN0dWFsUmVjdCwgbnNSZWN0KiBhQWRqUmVjdCkg PSAwOwojIDM5MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lQcmVzQ29udGV4dC5o IgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFnZURpbShuc1JlY3QqIGFSZWN0KSA9IDA7CgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0UGl4ZWxzVG9Ud2lwcyhmbG9hdCogYVJlc3VsdCkgY29uc3QgPSAw OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR3aXBzVG9QaXhlbHMoZmxvYXQqIGFSZXN1bHQpIGNv bnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUd2lwc1RvUGl4ZWxzRm9yRm9udHMoZmxv YXQqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjYWxl ZFBpeGVsc1RvVHdpcHMoZmxvYXQqIGFTY2FsZSkgY29uc3QgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXREZXZpY2VDb250ZXh0KG5zSURldmljZUNvbnRleHQqKiBhUmVzdWx0KSBjb25zdCA9 IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXZlbnRTdGF0ZU1hbmFnZXIobnNJRXZlbnRTdGF0 ZU1hbmFnZXIqKiBhTWFuYWdlcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3VhZ2Uo bnNJTGFuZ3VhZ2VBdG9tKiogYUxhbmd1YWdlKSA9IDA7CiMgNDIxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5n dWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZSgKICAgICAgICAgICAgICBuc0xhbmd1YWdlU3BlY2lm aWNUcmFuc2Zvcm1UeXBlKiBhVHlwZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJh Y2tncm91bmRJbWFnZURyYXcoUFJCb29sICZhQ2FuRHJhdyk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldEJhY2tncm91bmRJbWFnZURyYXcoUFJCb29sIGFDYW5EcmF3KT0wOwogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0QmFja2dyb3VuZENvbG9yRHJhdyhQUkJvb2wgJmFDYW5EcmF3KT0wOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0QmFja2dyb3VuZENvbG9yRHJhdyhQUkJvb2wgYUNhbkRyYXcpPTA7CiMg NDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRCaWRpRW5hYmxlZChQUkJvb2wqIGFCaWRpRW5hYmxlZCkgY29uc3Qg PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmlkaUVuYWJsZWQoUFJCb29sIGFCaWRp RW5hYmxlZCkgY29uc3QgPSAwOwojIDQ2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9u c0lQcmVzQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmlzdWFsTW9kZShQUkJvb2wg YUlzVmlzdWFsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc3VhbE1vZGUoUFJC b29sJiBhSXNWaXN1YWwpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJp ZGlVdGlscyhuc0JpZGlQcmVzVXRpbHMqKiBhQmlkaVV0aWxzKSA9IDA7CgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgU2V0QmlkaShQUlVpbnQzMiBhQmlkaU9wdGlvbnMsIFBSQm9vbCBhRm9yY2VSZWZs b3cgPSAwKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaShQUlVpbnQzMiogYUJp ZGlPcHRpb25zKSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc1JUTChQ UkJvb2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNBcmFi aWNFbmNvZGluZyhQUkJvb2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0SXNCaWRpU3lzdGVtKFBSQm9vbCBhSXNCaWRpKSA9IDA7CgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldElzQmlkaVN5c3RlbShQUkJvb2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCaWRpQ2hhcnNldChuc0FTdHJpbmcgJmFDaGFyU2V0KSBj b25zdCA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SXNSZW5kZXJpbmdPbmx5U2Vs ZWN0aW9uKFBSQm9vbCBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBJc1JlbmRlcmlu Z09ubHlTZWxlY3Rpb24oUFJCb29sKiBhUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0VGhlbWUobnNJVGhlbWUqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgVGhlbWVDaGFuZ2VkKCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFN5c0NvbG9y Q2hhbmdlZCgpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZpbmRGcmFtZUJhY2tncm91 bmQobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbnNTdHlsZUJhY2tncm91bmQqKiBhQmFja2dyb3VuZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUFJCb29sKiBhSXNDYW5hdnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSQm9vbCogYUZvdW5kQmFja2dyb3VuZCkgPSAwOwoKCgoKCn07CiMgNTY5ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCmV4dGVybiBuc3Jlc3Vs dAogIE5TX05ld0dhbGxleUNvbnRleHQobnNJUHJlc0NvbnRleHQqKiBhSW5zdGFuY2VQdHJSZXN1 bHQpOwojIDUyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0Lmgi IDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIiAxCiMg NDMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc1JlZmxvd1R5cGUuaCIgMQojIDQxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbGF5b3V0L25zUmVmbG93VHlwZS5oIgplbnVtIG5zUmVmbG93VHlwZSB7 CgoKCgoKCgogIGVSZWZsb3dUeXBlX0NvbnRlbnRDaGFuZ2VkLAoKCgoKCgoKICBlUmVmbG93VHlw ZV9TdHlsZUNoYW5nZWQsCgoKCgogIGVSZWZsb3dUeXBlX1JlZmxvd0RpcnR5LAoKCgoKICBlUmVm bG93VHlwZV9Vc2VyRGVmaW5lZAp9OwojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0 L25zSVByZXNTaGVsbC5oIiAyCgoKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJQ29udGVudDsKY2xh c3MgbnNJQ29udGVudEl0ZXJhdG9yOwpjbGFzcyBuc0lEb2N1bWVudDsKY2xhc3MgbnNJRG9jdW1l bnRPYnNlcnZlcjsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBu c0lTdHlsZVNldDsKY2xhc3MgbnNJVmlld01hbmFnZXI7CmNsYXNzIG5zSURldmljZUNvbnRleHQ7 CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNzIG5zSVBhZ2VTZXF1ZW5jZUZyYW1lOwpj bGFzcyBuc1N0cmluZzsKY2xhc3MgbnNBU3RyaW5nOwpjbGFzcyBuc1N0cmluZ0FycmF5OwpjbGFz cyBuc0lDYXJldDsKY2xhc3MgbnNJU3R5bGVDb250ZXh0OwpjbGFzcyBuc0lGcmFtZVNlbGVjdGlv bjsKY2xhc3MgbnNJRnJhbWVNYW5hZ2VyOwpjbGFzcyBuc0lMYXlvdXRIaXN0b3J5U3RhdGU7CmNs YXNzIG5zSUFyZW5hOwpjbGFzcyBuc0lSZWZsb3dDYWxsYmFjazsKY2xhc3MgbnNJU3VwcG9ydHNB cnJheTsKY2xhc3MgbnNJRE9NTm9kZTsKY2xhc3MgbnNIVE1MUmVmbG93Q29tbWFuZDsKIyAxMDYg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCmVudW0gbnNBdHRy aWJ1dGVDaGFuZ2VUeXBlIHsKICBlQ2hhbmdlVHlwZV9TZXQgPSAwLAogIGVDaGFuZ2VUeXBlX1Jl bW92ZSA9IDEKfTsKIyAxMjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1No ZWxsLmgiCmNsYXNzIG5zSVByZXNTaGVsbCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g eyAweDc2ZTc5YzYwLCAweDk0NGUsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAsIDB4 NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0 IEluaXQobnNJRG9jdW1lbnQqIGFEb2N1bWVudCwKICAgICAgICAgICAgICAgICAgbnNJUHJlc0Nv bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgbnNJVmlld01hbmFnZXIqIGFW aWV3TWFuYWdlciwKICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTZXQqIGFTdHlsZVNldCwKICAg ICAgICAgICAgICAgICAgbnNDb21wYXRpYmlsaXR5IGFDb21wYXRNb2RlKSA9IDA7CiMgMTM5ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgRGVzdHJveSgpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZUZyYW1l KHNpemVfdCBhU2l6ZSwgdm9pZCoqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEZy ZWVGcmFtZShzaXplX3QgYVNpemUsIHZvaWQqIGFGcmVlQ2h1bmspID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgUHVzaFN0YWNrTWVtb3J5KCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgUG9wU3Rh Y2tNZW1vcnkoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZVN0YWNrTWVtb3J5KHNp emVfdCBhU2l6ZSwgdm9pZCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE b2N1bWVudChuc0lEb2N1bWVudCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRQcmVzQ29udGV4dChuc0lQcmVzQ29udGV4dCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRWaWV3TWFuYWdlcihuc0lWaWV3TWFuYWdlcioqIGFSZXN1bHQpID0gMDsKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZVNldChuc0lTdHlsZVNldCoqIGFSZXN1bHQpID0gMDsK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBY3RpdmVBbHRlcm5hdGVTdHlsZVNoZWV0KG5zU3RyaW5n JiBhU2hlZXRUaXRsZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdEFsdGVybmF0ZVN0 eWxlU2hlZXQoY29uc3QgbnNTdHJpbmcmIGFTaGVldFRpdGxlKSA9IDA7CgoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBSZWNvbnN0cnVjdFN0eWxlRGF0YShQUkJvb2wgYVJlYnVpbGRSdWxlVHJlZSkg PSAwOwojIDE3OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lQcmVzU2hlbGwuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZWZlcmVuY2VTdHlsZVJ1bGVzKFBSQm9vbCBhRm9yY2VS ZWZsb3cpID0gMDsKIyAxODggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1No ZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVQcmVmU3R5bGVSdWxlcyhQUkJvb2wgYUVu YWJsZSwgUFJVaW50OCBhUHJlZlR5cGU9MHhGRikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQXJl UHJlZlN0eWxlUnVsZXNFbmFibGVkKFBSQm9vbCYgYUVuYWJsZWQpID0gMDsKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgTGlzdEFsdGVybmF0ZVN0eWxlU2hlZXRzKG5zU3RyaW5nQXJyYXkmIGFUaXRs ZUxpc3QpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVTZWxlY3Rpb24obnNJ RnJhbWVTZWxlY3Rpb24qKiBhU2VsZWN0aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJl Z2luT2JzZXJ2aW5nRG9jdW1lbnQoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZE9ic2Vy dmluZ0RvY3VtZW50KCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlkSW5pdGlh bFJlZmxvdyhQUkJvb2wgKmFEaWRJbml0aWFsUmVmbG93KSA9IDA7CiMgMjIzICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5p dGlhbFJlZmxvdyhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IFJlc2l6ZVJlZmxvdyhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVp Z2h0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVDaGFuZ2VSZWZsb3coKSA9IDA7 CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9vdEZyYW1lKG5zSUZyYW1lKiogYUZyYW1lKSBjb25z dCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhZ2VTZXF1ZW5jZUZyYW1lKG5zSVBh Z2VTZXF1ZW5jZUZyYW1lKiogYVJlc3VsdCkgY29uc3QgPSAwOwojIDI1OCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2xheW91dC9uc0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBy aW1hcnlGcmFtZUZvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lGcmFtZSoqIGFQcmltYXJ5RnJhbWUpIGNvbnN0ID0gMDsKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVDb250ZXh0Rm9yKG5zSUZyYW1lKiBhRnJhbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYVN0eWxlQ29udGV4 dCkgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExheW91dE9iamVjdEZv cihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdXBwb3J0cyoqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0UGxhY2Vob2xkZXJGcmFtZUZvcihuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFQbGFjZWhvbGRlckZyYW1lKSBjb25zdCA9 IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kUmVmbG93Q29tbWFuZChuc0hUTUxSZWZs b3dDb21tYW5kKiBhUmVmbG93Q29tbWFuZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2Vs UmVmbG93Q29tbWFuZChuc0lGcmFtZSogYVRhcmdldEZyYW1lLCBuc1JlZmxvd1R5cGUqIGFDbWRU eXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDYW5jZWxBbGxSZWZsb3dDb21tYW5kcygpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWNyZWF0ZUZyYW1lc0Zvcihuc0lDb250ZW50KiBh Q29udGVudCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTYWZlVG9GbHVzaChQUkJv b2wmIGFJc1NhZmVUb0ZsdXNoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGbHVzaFBl bmRpbmdOb3RpZmljYXRpb25zKFBSQm9vbCBhVXBkYXRlVmlld3MpID0gMDsKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBQb3N0RE9NRXZlbnQobnNJQ29udGVudCogYUNvbnRlbnQsIG5zRXZlbnQqIGFF dmVudCk9MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQb3N0QXR0cmlidXRlQ2hhbmdlKG5zSUNv bnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy IGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSog YU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3RyaW5nJiBh VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJpYnV0ZUNoYW5nZVR5cGUgYVR5 cGUpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBQb3N0UmVmbG93Q2FsbGJhY2sobnNJUmVmbG93 Q2FsbGJhY2sqIGFDYWxsYmFjaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2VsUmVmbG93 Q2FsbGJhY2sobnNJUmVmbG93Q2FsbGJhY2sqIGFDYWxsYmFjaykgPSAwOwoKCgogIHZpcnR1YWwg bnNyZXN1bHQgQmVnaW5SZWZsb3dCYXRjaGluZygpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEVu ZFJlZmxvd0JhdGNoaW5nKFBSQm9vbCBhRmx1c2hQZW5kaW5nUmVmbG93cykgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UmVmbG93QmF0Y2hpbmdTdGF0dXMoUFJCb29sKiBhSXNCYXRjaGluZykg PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENsZWFyRnJhbWVSZWZzKG5zSUZyYW1lKiBhRnJhbWUp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlUmVuZGVyaW5nQ29udGV4dChuc0lG cmFtZSAqYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5k ZXJpbmdDb250ZXh0KiogYUNvbnRleHQpID0gMDsKIyAzNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDYW50UmVuZGVyUmVw bGFjZWRFbGVtZW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUpID0gMDsKIyAzNjIgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBHb1RvQW5jaG9yKGNvbnN0IG5zQVN0cmluZyYgYUFuY2hvck5hbWUsIFBSQm9vbCBhU2Ny b2xsKSA9IDA7CiMgMzkyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVs bC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsRnJhbWVJbnRvVmlldyhuc0lGcmFtZSAqYUZy YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYVZQZXJjZW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYUhQZXJjZW50KSBjb25zdCA9 IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldElnbm9yZUZyYW1lRGVzdHJ1Y3Rpb24oUFJC b29sIGFJZ25vcmUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeURlc3Ryb3lp bmdGcmFtZShuc0lGcmFtZSogYUZyYW1lKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 RnJhbWVNYW5hZ2VyKG5zSUZyYW1lTWFuYWdlcioqIGFGcmFtZU1hbmFnZXIpIGNvbnN0ID0gMDsK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEb0NvcHkoKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0TGlua0xvY2F0aW9uKG5zSURPTU5vZGUqIGFOb2RlLCBuc0FTdHJpbmcmIGFMb2NhdGlv bikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlTG9jYXRpb24obnNJRE9NTm9k ZSogYU5vZGUsIG5zQVN0cmluZyYgYUxvY2F0aW9uKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgRG9Db3B5SW1hZ2VDb250ZW50cyhuc0lET01Ob2RlKiBhTm9kZSkgPSAwOwoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldENhcmV0KG5zSUNhcmV0ICoqYU91dENhcmV0KSA9IDA7CiMgNDQ4ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0U2VsZWN0aW9uRmxhZ3MoUFJJbnQxNiBhSW5FbmFibGUpID0gMDsKIyA0NTcgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRTZWxlY3Rpb25GbGFncyhQUkludDE2ICphT3V0RW5hYmxlZCkgPSAwOwoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZUV2ZW50V2l0aFRhcmdldChuc0V2ZW50KiBhRXZlbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYVN0YXR1cykgPSAwOwoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZURPTUV2ZW50V2l0aFRhcmdldChuc0lDb250ZW50KiBh VGFyZ2V0Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnQqIGFFdmVu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0dXMqIGFTdGF0dXMpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudFRhcmdldEZyYW1lKG5zSUZyYW1lKiog YUZyYW1lKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXZlbnRUYXJnZXRDb250ZW50 KG5zRXZlbnQqIGFFdmVudCwgbnNJQ29udGVudCoqIGFDb250ZW50KSA9IDA7CgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IENhcHR1cmVIaXN0b3J5U3RhdGUobnNJTGF5b3V0SGlzdG9yeVN0YXRlKiog YUxheW91dEhpc3RvcnlTdGF0ZSwgUFJCb29sIGFMZWF2aW5nUGFnZSA9IDApID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEhpc3RvcnlTdGF0ZShuc0lMYXlvdXRIaXN0b3J5U3RhdGUqKiBhTGF5 b3V0SGlzdG9yeVN0YXRlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIaXN0b3J5U3RhdGUo bnNJTGF5b3V0SGlzdG9yeVN0YXRlKiBhTGF5b3V0SGlzdG9yeVN0YXRlKSA9IDA7CgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IElzUmVmbG93TG9ja2VkKFBSQm9vbCogYUlzTG9ja2VkKSA9IDA7CiMg NTA2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIGVudW0g R2VuZXJhdGVkQ29udGVudFR5cGUge0JlZm9yZSwgQWZ0ZXJ9OwogIHZpcnR1YWwgbnNyZXN1bHQg R2V0R2VuZXJhdGVkQ29udGVudEl0ZXJhdG9yKG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZENvbnRlbnRUeXBlIGFU eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnRJ dGVyYXRvcioqIGFJdGVyYXRvcikgY29uc3QgPSAwOwojIDUyMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2xheW91dC9uc0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFub255bW91 c0NvbnRlbnRGb3IobnNJQ29udGVudCogYUNvbnRlbnQsIG5zSVN1cHBvcnRzQXJyYXkqIGFBbm9u eW1vdXNFbGVtZW50cykgPSAwOwojIDUzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9u c0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFub255bW91c0NvbnRlbnRGb3Io bnNJQ29udGVudCogYUNvbnRlbnQsIG5zSVN1cHBvcnRzQXJyYXkqKiBhQW5vbnltb3VzRWxlbWVu dHMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVsZWFzZUFub255bW91c0NvbnRlbnQo KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1BhaW50aW5nU3VwcHJlc3NlZChQUkJv b2wqIGFSZXN1bHQpPTA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVW5zdXBwcmVzc1BhaW50aW5n KCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERpc2FibGVUaGVtZVN1cHBvcnQoKSA9IDA7 CgoKCgogIHZpcnR1YWwgUFJCb29sIElzVGhlbWVTdXBwb3J0RW5hYmxlZCgpID0gMDsKCgoKCgoK CiAgc3RhdGljIFBSQm9vbCBHZXRWZXJpZnlSZWZsb3dFbmFibGUoKTsKCgoKCiAgc3RhdGljIHZv aWQgU2V0VmVyaWZ5UmVmbG93RW5hYmxlKFBSQm9vbCBhRW5hYmxlZCk7CgoKCgogIHN0YXRpYyBQ UkludDMyIEdldFZlcmlmeVJlZmxvd0ZsYWdzKCk7CiMgNTk2ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2FyZXRCaWRp TGV2ZWwoUFJVaW50OCBhTGV2ZWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDYXJl dEJpZGlMZXZlbChQUlVpbnQ4ICphT3V0TGV2ZWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBVbmRlZmluZUNhcmV0QmlkaUxldmVsKHZvaWQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBCaWRpU3R5bGVDaGFuZ2VSZWZsb3codm9pZCkgPSAwOwoKCn07CgoKCgoKZXh0ZXJuIG5zcmVz dWx0CiAgTlNfTmV3UHJlc1NoZWxsKG5zSVByZXNTaGVsbCoqIGFJbnN0YW5jZVB0clJlc3VsdCk7 CiMgNTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVTdHJ1Y3QuaCIgMgoK IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbG9jYWxlL25zSUxhbmd1YWdlQXRvbS5oIiAxCiMg MTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sb2NhbGUvbnNJTGFuZ3VhZ2VBdG9tLmgiCiMgMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUF0b20uaCIgMQojIDE3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJQXRvbS5oIgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwojIDI5 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQXRvbS5oIgpjbGFzcyBuc0lBdG9tIDog cHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDNkMWIxNWIwLCAweDkzYjQsIDB4MTFk MSwgeyAweDg5LCAweDViLCAweDAwLCAweDYwLCAweDA4LCAweDkxLCAweDFiLCAweDgxIH19OyBy ZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcobnNBU3RyaW5nICYg X3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVbmljb2RlKGNvbnN0IFBS VW5pY2hhciAqKmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2l6ZU9mKG5z SVNpemVPZkhhbmRsZXIgKmFIYW5kbGVyLCBQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKfTsKIyAx NDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lBdG9tLmgiCmV4dGVybiBuc0lBdG9t KiBOU19OZXdBdG9tKGNvbnN0IGNoYXIqIGlzb2xhdGluMSk7CmV4dGVybiBuc0lBdG9tKiBOU19O ZXdQZXJtYW5lbnRBdG9tKGNvbnN0IGNoYXIqIGlzb2xhdGluMSk7CmlubGluZSBhbHJlYWR5X0Fk ZFJlZmVkPG5zSUF0b20+IGRvX0dldEF0b20oY29uc3QgY2hhciogaXNvbGF0aW4xKQogICAgeyBy ZXR1cm4gTlNfTmV3QXRvbShpc29sYXRpbjEpOyB9CmlubGluZSBhbHJlYWR5X0FkZFJlZmVkPG5z SUF0b20+IGRvX0dldFBlcm1hbmVudEF0b20oY29uc3QgY2hhciogaXNvbGF0aW4xKQogICAgeyBy ZXR1cm4gTlNfTmV3UGVybWFuZW50QXRvbShpc29sYXRpbjEpOyB9CgoKCgpleHRlcm4gbnNJQXRv bSogTlNfTmV3QXRvbShjb25zdCBQUlVuaWNoYXIqIHVuaWNvZGUpOwpleHRlcm4gbnNJQXRvbSog TlNfTmV3UGVybWFuZW50QXRvbShjb25zdCBQUlVuaWNoYXIqIHVuaWNvZGUpOwppbmxpbmUgYWxy ZWFkeV9BZGRSZWZlZDxuc0lBdG9tPiBkb19HZXRBdG9tKGNvbnN0IFBSVW5pY2hhciogdW5pY29k ZSkKICAgIHsgcmV0dXJuIE5TX05ld0F0b20odW5pY29kZSk7IH0KaW5saW5lIGFscmVhZHlfQWRk UmVmZWQ8bnNJQXRvbT4gZG9fR2V0UGVybWFuZW50QXRvbShjb25zdCBQUlVuaWNoYXIqIHVuaWNv ZGUpCiAgICB7IHJldHVybiBOU19OZXdQZXJtYW5lbnRBdG9tKHVuaWNvZGUpOyB9CgoKCmV4dGVy biBuc0lBdG9tKiBOU19OZXdBdG9tKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyk7CmV4dGVybiBu c0lBdG9tKiBOU19OZXdQZXJtYW5lbnRBdG9tKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyk7Cmlu bGluZSBhbHJlYWR5X0FkZFJlZmVkPG5zSUF0b20+IGRvX0dldEF0b20oY29uc3QgbnNBU3RyaW5n JiBhU3RyaW5nKQogICAgeyByZXR1cm4gTlNfTmV3QXRvbShhU3RyaW5nKTsgfQppbmxpbmUgYWxy ZWFkeV9BZGRSZWZlZDxuc0lBdG9tPiBkb19HZXRQZXJtYW5lbnRBdG9tKGNvbnN0IG5zQVN0cmlu ZyYgYVN0cmluZykKICAgIHsgcmV0dXJuIE5TX05ld1Blcm1hbmVudEF0b20oYVN0cmluZyk7IH0K CgoKCmV4dGVybiBuc3JlZmNudCBOU19HZXROdW1iZXJPZkF0b21zKHZvaWQpOwojIDE1ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbG9jYWxlL25zSUxhbmd1YWdlQXRvbS5oIiAyCiMgMjkgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9sb2NhbGUvbnNJTGFuZ3VhZ2VBdG9tLmgiCmNsYXNzIG5zSUxhbmd1 YWdlQXRvbSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTExZSwgMHgx NWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwg MHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhbmd1YWdlKFBS VW5pY2hhciAqICphTGFuZ3VhZ2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3Vh Z2VHcm91cChuc0lBdG9tICogKmFMYW5ndWFnZUdyb3VwKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IExhbmd1YWdlSXMoY29uc3QgUFJVbmljaGFyICphTGFuZ3VhZ2UsIFBSQm9vbCAqX3JldHZh bCkgPSAwOwoKfTsKIyA1NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0 cnVjdC5oIiAyCgpjbGFzcyBuc0lGcmFtZTsKCmVudW0gbnNTdHlsZVN0cnVjdElEIHsKIyA2OCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVjdC5oIgojIDEgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVTdHJ1Y3RMaXN0LmgiIDEKIyA1NyAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVjdExpc3QuaCIKZVN0eWxlU3Ry dWN0X0ZvbnQsCmVTdHlsZVN0cnVjdF9Db2xvciwKZVN0eWxlU3RydWN0X0JhY2tncm91bmQsCmVT dHlsZVN0cnVjdF9MaXN0LAplU3R5bGVTdHJ1Y3RfUG9zaXRpb24sCmVTdHlsZVN0cnVjdF9UZXh0 LAplU3R5bGVTdHJ1Y3RfVGV4dFJlc2V0LAplU3R5bGVTdHJ1Y3RfRGlzcGxheSwKZVN0eWxlU3Ry dWN0X1Zpc2liaWxpdHksCmVTdHlsZVN0cnVjdF9Db250ZW50LAplU3R5bGVTdHJ1Y3RfUXVvdGVz LAplU3R5bGVTdHJ1Y3RfVXNlckludGVyZmFjZSwKZVN0eWxlU3RydWN0X1VJUmVzZXQsCmVTdHls ZVN0cnVjdF9UYWJsZSwKZVN0eWxlU3RydWN0X1RhYmxlQm9yZGVyLAplU3R5bGVTdHJ1Y3RfTWFy Z2luLAplU3R5bGVTdHJ1Y3RfUGFkZGluZywKZVN0eWxlU3RydWN0X0JvcmRlciwKZVN0eWxlU3Ry dWN0X091dGxpbmUsCgplU3R5bGVTdHJ1Y3RfWFVMLAojIDY5ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiIDIKCgpuc1N0eWxlU3RydWN0SURfTGVuZ3RoCgp9 OwojIDg4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiCnN0 cnVjdCBuc1N0eWxlU3RydWN0IHsKfTsKCgoKc3RydWN0IG5zU3R5bGVGb250IDogcHVibGljIG5z U3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVGb250KHZvaWQpOwogIH5uc1N0eWxlRm9udCh2b2lkKSB7 fTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3Jl dHVybiBlU3R5bGVTdHJ1Y3RfRm9udDt9CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShj b25zdCBuc1N0eWxlRm9udCYgYU90aGVyKSBjb25zdDsKICBzdGF0aWMgbnNDaGFuZ2VIaW50IENh bGNGb250RGlmZmVyZW5jZShjb25zdCBuc0ZvbnQmIGFGb250MSwgY29uc3QgbnNGb250JiBhRm9u dDIpOwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNv bnRleHQpIHRocm93KCk7CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCk7 CgogIFBSVWludDggbUZsYWdzOwogIG5zRm9udCBtRm9udDsKICBuc2Nvb3JkIG1TaXplOwoKCgoK ICBuc1N0eWxlRm9udChjb25zdCBuc0ZvbnQmIGFGb250KTsKICBuc1N0eWxlRm9udChjb25zdCBu c1N0eWxlRm9udCYgYVN0eWxlRm9udCk7CiAgbnNTdHlsZUZvbnQobnNJUHJlc0NvbnRleHQqIGFQ cmVzQ29udGV4dCk7Cn07CgpzdHJ1Y3QgbnNTdHlsZUNvbG9yIDogcHVibGljIG5zU3R5bGVTdHJ1 Y3QgewogIG5zU3R5bGVDb2xvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKICBuc1N0 eWxlQ29sb3IoY29uc3QgbnNTdHlsZUNvbG9yJiBhT3RoZXIpOwogIH5uc1N0eWxlQ29sb3Iodm9p ZCkge307CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgp IHtyZXR1cm4gZVN0eWxlU3RydWN0X0NvbG9yO30KCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJl bmNlKGNvbnN0IG5zU3R5bGVDb2xvciYgYU90aGVyKSBjb25zdDsKCiAgdm9pZCogb3BlcmF0b3Ig bmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZv aWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1 bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0 KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVDb2xvcigpOwogICAgYUNvbnRleHQtPkZy ZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlQ29sb3IpLCB0aGlzKTsKICB9OwoKCgogIG5zY29sb3Ig bUNvbG9yOwp9OwoKc3RydWN0IG5zU3R5bGVCYWNrZ3JvdW5kIDogcHVibGljIG5zU3R5bGVTdHJ1 Y3QgewogIG5zU3R5bGVCYWNrZ3JvdW5kKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwog IG5zU3R5bGVCYWNrZ3JvdW5kKGNvbnN0IG5zU3R5bGVCYWNrZ3JvdW5kJiBhT3RoZXIpOwogIH5u c1N0eWxlQmFja2dyb3VuZCgpIHt9OwoKICBzdGF0aWMgY29uc3QgbnNTdHlsZVN0cnVjdElEIEdl dFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9CYWNrZ3JvdW5kO30KCiAgdm9p ZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJv dygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hl bGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5z SVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVCYWNrZ3JvdW5kKCk7 CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVCYWNrZ3JvdW5kKSwgdGhp cyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVCYWNr Z3JvdW5kJiBhT3RoZXIpIGNvbnN0OwoKCgoKCiAgUFJVaW50OCBtQmFja2dyb3VuZEZsYWdzOwog IFBSVWludDggbUJhY2tncm91bmRBdHRhY2htZW50IDogNDsKICBQUlVpbnQ4IG1CYWNrZ3JvdW5k Q2xpcCA6IDM7CiAgUFJVaW50OCBtQmFja2dyb3VuZElubGluZVBvbGljeSA6IDI7CiAgUFJVaW50 OCBtQmFja2dyb3VuZE9yaWdpbiA6IDM7CiAgUFJVaW50OCBtQmFja2dyb3VuZFJlcGVhdCA6IDQ7 CgoKCiAgdW5pb24gewogICAgbnNjb29yZCBtQ29vcmQ7CiAgICBmbG9hdCBtRmxvYXQ7CiAgfSBt QmFja2dyb3VuZFhQb3NpdGlvbiwKICAgIG1CYWNrZ3JvdW5kWVBvc2l0aW9uOwoKICBuc2NvbG9y IG1CYWNrZ3JvdW5kQ29sb3I7CiAgbnNTdHJpbmcgbUJhY2tncm91bmRJbWFnZTsKCiAgUFJCb29s IElzVHJhbnNwYXJlbnQoKSBjb25zdAogIHsKICAgIHJldHVybiAobUJhY2tncm91bmRGbGFncyAm CiAgICAgICAgICAgICgweDAxIHwgMHgwMikpID09CiAgICAgICAgICAgICgweDAxIHwgMHgwMik7 CiAgfQp9OwojIDIwMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVj dC5oIgpzdHJ1Y3QgbnNTdHlsZU1hcmdpbjogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5 bGVNYXJnaW4odm9pZCk7CiAgbnNTdHlsZU1hcmdpbihjb25zdCBuc1N0eWxlTWFyZ2luJiBhTWFy Z2luKTsKICB+bnNTdHlsZU1hcmdpbih2b2lkKSB7fTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVT dHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVybiBlU3R5bGVTdHJ1Y3RfTWFyZ2luO30K CiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0 KSB0aHJvdygpOwogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpOwoKICB2 b2lkIFJlY2FsY0RhdGEoKTsKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNT dHlsZU1hcmdpbiYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVNpZGVzIG1NYXJnaW47CgogIFBS Qm9vbCBHZXRNYXJnaW4obnNNYXJnaW4mIGFNYXJnaW4pIGNvbnN0CiAgewogICAgaWYgKG1IYXND YWNoZWRNYXJnaW4pIHsKICAgICAgYU1hcmdpbiA9IG1DYWNoZWRNYXJnaW47CiAgICAgIHJldHVy biAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKCiAgdm9pZCBDYWxjTWFyZ2luRm9yKGNvbnN0 IG5zSUZyYW1lKiBhRnJhbWUsIG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdDsKCnByb3RlY3RlZDoK ICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZE1hcmdpbjsKICBuc01hcmdpbiBtQ2FjaGVkTWFyZ2lu Owp9OwoKCnN0cnVjdCBuc1N0eWxlUGFkZGluZzogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5z U3R5bGVQYWRkaW5nKHZvaWQpOwogIG5zU3R5bGVQYWRkaW5nKGNvbnN0IG5zU3R5bGVQYWRkaW5n JiBhUGFkZGluZyk7CiAgfm5zU3R5bGVQYWRkaW5nKHZvaWQpIHt9OwoKICBzdGF0aWMgY29uc3Qg bnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9Q YWRkaW5nO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQq IGFDb250ZXh0KSB0aHJvdygpOwogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRl eHQpOwoKICB2b2lkIFJlY2FsY0RhdGEoKTsKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2Uo Y29uc3QgbnNTdHlsZVBhZGRpbmcmIGFPdGhlcikgY29uc3Q7CgogIG5zU3R5bGVTaWRlcyBtUGFk ZGluZzsKCiAgUFJCb29sIEdldFBhZGRpbmcobnNNYXJnaW4mIGFQYWRkaW5nKSBjb25zdAogIHsK ICAgIGlmIChtSGFzQ2FjaGVkUGFkZGluZykgewogICAgICBhUGFkZGluZyA9IG1DYWNoZWRQYWRk aW5nOwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCgogIHZvaWQgQ2Fs Y1BhZGRpbmdGb3IoY29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4mIGFQYWRkaW5nKSBj b25zdDsKCnByb3RlY3RlZDoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZFBhZGRpbmc7CiAgbnNN YXJnaW4gbUNhY2hlZFBhZGRpbmc7Cn07CgpzdHJ1Y3QgbnNCb3JkZXJDb2xvcnMgewogIG5zQm9y ZGVyQ29sb3JzKiBtTmV4dDsKICBuc2NvbG9yIG1Db2xvcjsKICBQUkJvb2wgbVRyYW5zcGFyZW50 OwoKICBuc0JvcmRlckNvbG9ycyogQ29weUNvbG9ycygpIHsKICAgIG5zQm9yZGVyQ29sb3JzKiBu ZXh0ID0gMDsKICAgIGlmIChtTmV4dCkKICAgICAgbmV4dCA9IG1OZXh0LT5Db3B5Q29sb3JzKCk7 CiAgICByZXR1cm4gbmV3IG5zQm9yZGVyQ29sb3JzKG1Db2xvciwgbVRyYW5zcGFyZW50LCBuZXh0 KTsKICB9CgogIG5zQm9yZGVyQ29sb3JzKCkgOm1OZXh0KDApIHsgbUNvbG9yID0gKChuc2NvbG9y KSAoKDI1NSA8PCAyNCkgfCAoKDApPDwxNikgfCAoKDApPDw4KSB8ICgwKSkpOyB9OwoKICBuc0Jv cmRlckNvbG9ycyhjb25zdCBuc2NvbG9yJiBhQ29sb3IsIFBSQm9vbCBhVHJhbnNwYXJlbnQsIG5z Qm9yZGVyQ29sb3JzKiBhTmV4dD0wKSB7CiAgICBtQ29sb3IgPSBhQ29sb3I7CiAgICBtVHJhbnNw YXJlbnQgPSBhVHJhbnNwYXJlbnQ7CiAgICBtTmV4dCA9IGFOZXh0OwogIH0KCiAgfm5zQm9yZGVy Q29sb3JzKCkgewogICAgZGVsZXRlIG1OZXh0OwogIH0KCiAgUFJCb29sIEVxdWFscyhuc0JvcmRl ckNvbG9ycyogYU90aGVyKSB7CiAgICBuc0JvcmRlckNvbG9ycyogYzEgPSB0aGlzOwogICAgbnNC b3JkZXJDb2xvcnMqIGMyID0gYU90aGVyOwogICAgd2hpbGUgKGMxICYmIGMyKSB7CiAgICAgIGlm IChjMS0+bUNvbG9yICE9IGMyLT5tQ29sb3IgfHwKICAgICAgICAgIGMxLT5tVHJhbnNwYXJlbnQg IT0gYzItPm1UcmFuc3BhcmVudCkKICAgICAgICByZXR1cm4gMDsKICAgICAgYzEgPSBjMS0+bU5l eHQ7CiAgICAgIGMyID0gYzItPm1OZXh0OwogICAgfQogICAgcmV0dXJuICFjMSAmJiAhYzI7CiAg fQp9OwoKc3RydWN0IG5zU3R5bGVCb3JkZXI6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0 eWxlQm9yZGVyKCkgOm1Cb3JkZXJDb2xvcnMoMCkge307CiAgbnNTdHlsZUJvcmRlcihuc0lQcmVz Q29udGV4dCogYUNvbnRleHQpOwogIG5zU3R5bGVCb3JkZXIoY29uc3QgbnNTdHlsZUJvcmRlciYg YUJvcmRlcik7CiAgfm5zU3R5bGVCb3JkZXIodm9pZCkgewogICAgaWYgKG1Cb3JkZXJDb2xvcnMp IHsKICAgICAgZm9yIChQUkludDMyIGkgPSAwOyBpIDwgNDsgaSsrKQogICAgICAgIGRlbGV0ZSBt Qm9yZGVyQ29sb3JzW2ldOwogICAgICBkZWxldGUgW11tQm9yZGVyQ29sb3JzOwogICAgfQogIH07 CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgpIHtyZXR1 cm4gZVN0eWxlU3RydWN0X0JvcmRlcjt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3os IG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKTsKICB2b2lkIERlc3Ryb3kobnNJUHJl c0NvbnRleHQqIGFDb250ZXh0KTsKCiAgUFJCb29sIElzQm9yZGVyU2lkZVZpc2libGUoUFJVaW50 OCBhU2lkZSkgY29uc3Q7CiAgdm9pZCBSZWNhbGNEYXRhKCk7CiAgbnNDaGFuZ2VIaW50IENhbGNE aWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVCb3JkZXImIGFPdGhlcikgY29uc3Q7CgogIG5zU3R5bGVT aWRlcyBtQm9yZGVyOwogIG5zU3R5bGVTaWRlcyBtQm9yZGVyUmFkaXVzOwogIFBSVWludDggbUZs b2F0RWRnZTsKICBuc0JvcmRlckNvbG9ycyoqIG1Cb3JkZXJDb2xvcnM7CgogIHZvaWQgRW5zdXJl Qm9yZGVyQ29sb3JzKCkgewogICAgaWYgKCFtQm9yZGVyQ29sb3JzKSB7CiAgICAgIG1Cb3JkZXJD b2xvcnMgPSBuZXcgbnNCb3JkZXJDb2xvcnMqWzRdOwogICAgICBpZiAobUJvcmRlckNvbG9ycykK ICAgICAgICBmb3IgKFBSSW50MzIgaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAgICBtQm9yZGVy Q29sb3JzW2ldID0gMDsKICAgIH0KICB9CgogIHZvaWQgQ2xlYXJCb3JkZXJDb2xvcnMoUFJVaW50 OCBhU2lkZSkgewogICAgaWYgKG1Cb3JkZXJDb2xvcnNbYVNpZGVdKSB7CiAgICAgIGRlbGV0ZSBt Qm9yZGVyQ29sb3JzW2FTaWRlXTsKICAgICAgbUJvcmRlckNvbG9yc1thU2lkZV0gPSAwOwogICAg fQogIH0KCiAgUFJCb29sIEdldEJvcmRlcihuc01hcmdpbiYgYUJvcmRlcikgY29uc3QKICB7CiAg ICBpZiAobUhhc0NhY2hlZEJvcmRlcikgewogICAgICBhQm9yZGVyID0gbUNhY2hlZEJvcmRlcjsK ICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIFBSVWludDggR2V0Qm9y ZGVyU3R5bGUoUFJVaW50OCBhU2lkZSkgY29uc3QKICB7CiAgICA7CiAgICByZXR1cm4gKG1Cb3Jk ZXJTdHlsZVthU2lkZV0gJiAweDFGKTsKICB9CgogIHZvaWQgU2V0Qm9yZGVyU3R5bGUoUFJVaW50 OCBhU2lkZSwgUFJVaW50OCBhU3R5bGUpCiAgewogICAgOwogICAgbUJvcmRlclN0eWxlW2FTaWRl XSAmPSB+MHgxRjsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gfD0gKGFTdHlsZSAmIDB4MUYpOwoK ICB9CgogIHZvaWQgR2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSwgbnNjb2xvciYgYUNvbG9y LAogICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhVHJhbnNwYXJlbnQsIFBSQm9vbCYgYUZv cmVncm91bmQpIGNvbnN0CiAgewogICAgYVRyYW5zcGFyZW50ID0gYUZvcmVncm91bmQgPSAwOwog ICAgOwogICAgaWYgKChtQm9yZGVyU3R5bGVbYVNpZGVdICYgMHg2MCkgPT0gMCkKICAgICAgYUNv bG9yID0gbUJvcmRlckNvbG9yW2FTaWRlXTsKICAgIGVsc2UgaWYgKG1Cb3JkZXJTdHlsZVthU2lk ZV0gJiAweDIwKQogICAgICBhRm9yZWdyb3VuZCA9IDE7CiAgICBlbHNlCiAgICAgIGFUcmFuc3Bh cmVudCA9IDE7CiAgfQoKICB2b2lkIFNldEJvcmRlckNvbG9yKFBSVWludDggYVNpZGUsIG5zY29s b3IgYUNvbG9yKQogIHsKICAgIDsKICAgIG1Cb3JkZXJDb2xvclthU2lkZV0gPSBhQ29sb3I7CiAg ICBtQm9yZGVyU3R5bGVbYVNpZGVdICY9IH4weDYwOwogICAgbUJvcmRlclN0eWxlW2FTaWRlXSB8 PSAweDgwOwogIH0KCiAgdm9pZCBHZXRDb21wb3NpdGVDb2xvcnMoUFJJbnQzMiBhSW5kZXgsIG5z Qm9yZGVyQ29sb3JzKiogYUNvbG9ycykgY29uc3QKICB7CiAgICBpZiAoIW1Cb3JkZXJDb2xvcnMp CiAgICAgICphQ29sb3JzID0gMDsKICAgIGVsc2UKICAgICAgKmFDb2xvcnMgPSBtQm9yZGVyQ29s b3JzW2FJbmRleF07CiAgfQoKICB2b2lkIEFwcGVuZEJvcmRlckNvbG9yKFBSSW50MzIgYUluZGV4 LCBuc2NvbG9yIGFDb2xvciwgUFJCb29sIGFUcmFuc3BhcmVudCkKICB7CiAgICA7CiAgICBuc0Jv cmRlckNvbG9ycyogY29sb3JFbnRyeSA9IG5ldyBuc0JvcmRlckNvbG9ycyhhQ29sb3IsIGFUcmFu c3BhcmVudCk7CiAgICBpZiAoIW1Cb3JkZXJDb2xvcnNbYUluZGV4XSkKICAgICAgbUJvcmRlckNv bG9yc1thSW5kZXhdID0gY29sb3JFbnRyeTsKICAgIGVsc2UgewogICAgICBuc0JvcmRlckNvbG9y cyogbGFzdCA9IG1Cb3JkZXJDb2xvcnNbYUluZGV4XTsKICAgICAgd2hpbGUgKGxhc3QtPm1OZXh0 KQogICAgICAgIGxhc3QgPSBsYXN0LT5tTmV4dDsKICAgICAgbGFzdC0+bU5leHQgPSBjb2xvckVu dHJ5OwogICAgfQogICAgbUJvcmRlclN0eWxlW2FJbmRleF0gJj0gfjB4NjA7CiAgICBtQm9yZGVy U3R5bGVbYUluZGV4XSB8PSAweDgwOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJUcmFuc3BhcmVudChQ UlVpbnQ4IGFTaWRlKQogIHsKICAgIDsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gJj0gfjB4NjA7 CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9ICgweDgwIHwgMHg0MCk7CiAgfQoKICB2b2lkIFNl dEJvcmRlclRvRm9yZWdyb3VuZChQUlVpbnQ4IGFTaWRlKQogIHsKICAgIDsKICAgIG1Cb3JkZXJT dHlsZVthU2lkZV0gJj0gfjB4NjA7CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9ICgweDgwIHwg MHgyMCk7CiAgfQoKICB2b2lkIFVuc2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSkKICB7CiAg ICA7CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdICY9IDB4MUY7CiAgfQoKCiAgdm9pZCBDYWxjQm9y ZGVyRm9yKGNvbnN0IG5zSUZyYW1lKiBhRnJhbWUsIG5zTWFyZ2luJiBhQm9yZGVyKSBjb25zdDsK ICB2b2lkIENhbGNCb3JkZXJGb3IoY29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgUFJVaW50OCBhU2lk ZSwgbnNjb29yZCYgYVdpZHRoKSBjb25zdDsKCnByb3RlY3RlZDoKICBQUlBhY2tlZEJvb2wgbUhh c0NhY2hlZEJvcmRlcjsKICBuc01hcmdpbiBtQ2FjaGVkQm9yZGVyOwoKICBQUlVpbnQ4IG1Cb3Jk ZXJTdHlsZVs0XTsKICBuc2NvbG9yIG1Cb3JkZXJDb2xvcls0XTsKCgoKICBuc2Nvb3JkIG1Cb3Jk ZXJXaWR0aHNbM107Cn07CgoKc3RydWN0IG5zU3R5bGVCb3JkZXJQYWRkaW5nOiBwdWJsaWMgbnNT dHlsZVN0cnVjdCB7CiAgbnNTdHlsZUJvcmRlclBhZGRpbmcodm9pZCkgeyBtSGFzQ2FjaGVkQm9y ZGVyUGFkZGluZyA9IDA7IH07CiAgfm5zU3R5bGVCb3JkZXJQYWRkaW5nKHZvaWQpIHt9OwoKCgoK ICBQUkJvb2wgR2V0Qm9yZGVyUGFkZGluZyhuc01hcmdpbiYgYUJvcmRlclBhZGRpbmcpIGNvbnN0 IHsKICAgIGlmIChtSGFzQ2FjaGVkQm9yZGVyUGFkZGluZykgewogICAgICBhQm9yZGVyUGFkZGlu ZyA9IG1DYWNoZWRCb3JkZXJQYWRkaW5nOwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVy biAwOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJQYWRkaW5nKG5zTWFyZ2luIGFCb3JkZXJQYWRkaW5n KSB7CiAgICBtQ2FjaGVkQm9yZGVyUGFkZGluZyA9IGFCb3JkZXJQYWRkaW5nOwogICAgbUhhc0Nh Y2hlZEJvcmRlclBhZGRpbmcgPSAxOwogIH0KCnByb3RlY3RlZDoKICBuc01hcmdpbiBtQ2FjaGVk Qm9yZGVyUGFkZGluZzsKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZEJvcmRlclBhZGRpbmc7Cn07 CgoKc3RydWN0IG5zU3R5bGVPdXRsaW5lOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls ZU91dGxpbmUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CiAgbnNTdHlsZU91dGxpbmUo Y29uc3QgbnNTdHlsZU91dGxpbmUmIGFPdXRsaW5lKTsKICB+bnNTdHlsZU91dGxpbmUodm9pZCkg e307CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgpIHty ZXR1cm4gZVN0eWxlU3RydWN0X091dGxpbmU7fQoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90 IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHRocm93KCkgewogICAgdm9pZCogcmVzdWx0 ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7CiAgICBy ZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFDb250ZXh0 KSB7CiAgICB0aGlzLT5+bnNTdHlsZU91dGxpbmUoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVs bChzaXplb2YobnNTdHlsZU91dGxpbmUpLCB0aGlzKTsKICB9OwoKICB2b2lkIFJlY2FsY0RhdGEo KTsKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZU91dGxpbmUmIGFP dGhlcikgY29uc3Q7CgogIG5zU3R5bGVTaWRlcyBtT3V0bGluZVJhZGl1czsKCgogIG5zU3R5bGVD b29yZCBtT3V0bGluZVdpZHRoOwoKICBQUkJvb2wgR2V0T3V0bGluZVdpZHRoKG5zY29vcmQmIGFX aWR0aCkgY29uc3QKICB7CiAgICBpZiAobUhhc0NhY2hlZE91dGxpbmUpIHsKICAgICAgYVdpZHRo ID0gbUNhY2hlZE91dGxpbmVXaWR0aDsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4g MDsKICB9CgogIFBSVWludDggR2V0T3V0bGluZVN0eWxlKHZvaWQpIGNvbnN0CiAgewogICAgcmV0 dXJuIChtT3V0bGluZVN0eWxlICYgMHgxRik7CiAgfQoKICB2b2lkIFNldE91dGxpbmVTdHlsZShQ UlVpbnQ4IGFTdHlsZSkKICB7CiAgICBtT3V0bGluZVN0eWxlICY9IH4weDFGOwogICAgbU91dGxp bmVTdHlsZSB8PSAoYVN0eWxlICYgMHgxRik7CiAgfQoKCiAgUFJCb29sIEdldE91dGxpbmVDb2xv cihuc2NvbG9yJiBhQ29sb3IpIGNvbnN0CiAgewogICAgaWYgKChtT3V0bGluZVN0eWxlICYgMHg2 MCkgPT0gMCkgewogICAgICBhQ29sb3IgPSBtT3V0bGluZUNvbG9yOwogICAgICByZXR1cm4gMTsK ICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgdm9pZCBTZXRPdXRsaW5lQ29sb3IobnNjb2xvciBh Q29sb3IpCiAgewogICAgbU91dGxpbmVDb2xvciA9IGFDb2xvcjsKICAgIG1PdXRsaW5lU3R5bGUg Jj0gfjB4NjA7CiAgICBtT3V0bGluZVN0eWxlIHw9IDB4ODA7CiAgfQoKICB2b2lkIFNldE91dGxp bmVJbnZlcnQodm9pZCkKICB7CiAgICBtT3V0bGluZVN0eWxlIHw9ICgweDgwIHwgMHg2MCk7CiAg fQoKICBQUkJvb2wgR2V0T3V0bGluZUludmVydCh2b2lkKSBjb25zdAogIHsKICAgIHJldHVybiht T3V0bGluZVN0eWxlICYgMHg2MCk7CiAgfQoKcHJvdGVjdGVkOgogIG5zY29vcmQgbUNhY2hlZE91 dGxpbmVXaWR0aDsKCiAgbnNjb2xvciBtT3V0bGluZUNvbG9yOwoKCiAgbnNjb29yZCBtQm9yZGVy V2lkdGhzWzNdOwoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZE91dGxpbmU7CiAgUFJVaW50OCBt T3V0bGluZVN0eWxlOwp9OwoKCnN0cnVjdCBuc1N0eWxlTGlzdCA6IHB1YmxpYyBuc1N0eWxlU3Ry dWN0IHsKICBuc1N0eWxlTGlzdCh2b2lkKTsKICBuc1N0eWxlTGlzdChjb25zdCBuc1N0eWxlTGlz dCYgYVN0eWxlTGlzdCk7CiAgfm5zU3R5bGVMaXN0KHZvaWQpOwoKICBzdGF0aWMgY29uc3QgbnNT dHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9MaXN0 O30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250 ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2Nh dGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBE ZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVMaXN0 KCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVMaXN0KSwgdGhpcyk7 CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVMaXN0JiBh T3RoZXIpIGNvbnN0OwoKICBQUlVpbnQ4IG1MaXN0U3R5bGVUeXBlOwogIFBSVWludDggbUxpc3RT dHlsZVBvc2l0aW9uOwogIG5zU3RyaW5nIG1MaXN0U3R5bGVJbWFnZTsKICBuc1JlY3QgbUltYWdl UmVnaW9uOwp9OwoKc3RydWN0IG5zU3R5bGVQb3NpdGlvbiA6IHB1YmxpYyBuc1N0eWxlU3RydWN0 IHsKICBuc1N0eWxlUG9zaXRpb24odm9pZCk7CiAgbnNTdHlsZVBvc2l0aW9uKGNvbnN0IG5zU3R5 bGVQb3NpdGlvbiYgYU90aGVyKTsKICB+bnNTdHlsZVBvc2l0aW9uKHZvaWQpOwoKICBzdGF0aWMg Y29uc3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0 cnVjdF9Qb3NpdGlvbjt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXND b250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNv bnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7 CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMt Pn5uc1N0eWxlUG9zaXRpb24oKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNT dHlsZVBvc2l0aW9uKSwgdGhpcyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNl KGNvbnN0IG5zU3R5bGVQb3NpdGlvbiYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVNpZGVzIG1P ZmZzZXQ7CiAgbnNTdHlsZUNvb3JkIG1XaWR0aDsKICBuc1N0eWxlQ29vcmQgbU1pbldpZHRoOwog IG5zU3R5bGVDb29yZCBtTWF4V2lkdGg7CiAgbnNTdHlsZUNvb3JkIG1IZWlnaHQ7CiAgbnNTdHls ZUNvb3JkIG1NaW5IZWlnaHQ7CiAgbnNTdHlsZUNvb3JkIG1NYXhIZWlnaHQ7CiAgUFJVaW50OCBt Qm94U2l6aW5nOwogIG5zU3R5bGVDb29yZCBtWkluZGV4Owp9OwoKc3RydWN0IG5zU3R5bGVUZXh0 UmVzZXQgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVRleHRSZXNldCh2b2lkKTsK ICBuc1N0eWxlVGV4dFJlc2V0KGNvbnN0IG5zU3R5bGVUZXh0UmVzZXQmIGFPdGhlcik7CiAgfm5z U3R5bGVUZXh0UmVzZXQodm9pZCk7CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0 U3R5bGVTdHJ1Y3RJRCgpIHtyZXR1cm4gZVN0eWxlU3RydWN0X1RleHRSZXNldDt9CgogIHZvaWQq IG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3co KSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxs KHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQ cmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVGV4dFJlc2V0KCk7CiAg ICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVUZXh0UmVzZXQpLCB0aGlzKTsK ICB9OwoKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVRleHRSZXNl dCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtVGV4dERlY29yYXRpb247CiAgUFJVaW50OCBt VW5pY29kZUJpZGk7CgogIG5zU3R5bGVDb29yZCBtVmVydGljYWxBbGlnbjsKfTsKCnN0cnVjdCBu c1N0eWxlVGV4dCA6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlVGV4dCh2b2lkKTsK ICBuc1N0eWxlVGV4dChjb25zdCBuc1N0eWxlVGV4dCYgYU90aGVyKTsKICB+bnNTdHlsZVRleHQo dm9pZCk7CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgp IHtyZXR1cm4gZVN0eWxlU3RydWN0X1RleHQ7fQoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90 IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHRocm93KCkgewogICAgdm9pZCogcmVzdWx0 ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7CiAgICBy ZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFDb250ZXh0 KSB7CiAgICB0aGlzLT5+bnNTdHlsZVRleHQoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChz aXplb2YobnNTdHlsZVRleHQpLCB0aGlzKTsKICB9OwoKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZl cmVuY2UoY29uc3QgbnNTdHlsZVRleHQmIGFPdGhlcikgY29uc3Q7CgogIFBSVWludDggbVRleHRB bGlnbjsKICBQUlVpbnQ4IG1UZXh0VHJhbnNmb3JtOwogIFBSVWludDggbVdoaXRlU3BhY2U7Cgog IG5zU3R5bGVDb29yZCBtTGV0dGVyU3BhY2luZzsKICBuc1N0eWxlQ29vcmQgbUxpbmVIZWlnaHQ7 CiAgbnNTdHlsZUNvb3JkIG1UZXh0SW5kZW50OwogIG5zU3R5bGVDb29yZCBtV29yZFNwYWNpbmc7 CgogIFBSQm9vbCBXaGl0ZVNwYWNlSXNTaWduaWZpY2FudCgpIGNvbnN0IHsKICAgIHJldHVybiBt V2hpdGVTcGFjZSA9PSAxIHx8CiAgICAgICAgICAgbVdoaXRlU3BhY2UgPT0gMzsKICB9Cn07Cgpz dHJ1Y3QgbnNTdHlsZVZpc2liaWxpdHkgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls ZVZpc2liaWxpdHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CiAgbnNTdHlsZVZpc2li aWxpdHkoY29uc3QgbnNTdHlsZVZpc2liaWxpdHkmIGFWaXNpYmlsaXR5KTsKICB+bnNTdHlsZVZp c2liaWxpdHkoKSB7fTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0 cnVjdElEKCkge3JldHVybiBlU3R5bGVTdHJ1Y3RfVmlzaWJpbGl0eTt9CgogIHZvaWQqIG9wZXJh dG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAg ICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAm cmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29u dGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVmlzaWJpbGl0eSgpOwogICAgYUNv bnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVmlzaWJpbGl0eSksIHRoaXMpOwogIH07 CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxlVmlzaWJpbGl0eSYg YU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtRGlyZWN0aW9uOwogIFBSVWludDggbVZpc2libGU7 CiAgbnNDT01QdHI8bnNJTGFuZ3VhZ2VBdG9tPiBtTGFuZ3VhZ2U7CiAgZmxvYXQgbU9wYWNpdHk7 CgogIFBSQm9vbCBJc1Zpc2libGUoKSBjb25zdCB7CiAgICAgICAgICAgICAgICByZXR1cm4gKG1W aXNpYmxlID09IDEpOwogICAgICAgIH0KCiAgICAgICAgUFJCb29sIElzVmlzaWJsZU9yQ29sbGFw c2VkKCkgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuICgobVZpc2libGUgPT0gMSkgfHwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1WaXNpYmxl ID09IDIpKTsKICAgICAgICB9Cn07CgpzdHJ1Y3QgbnNTdHlsZURpc3BsYXkgOiBwdWJsaWMgbnNT dHlsZVN0cnVjdCB7CiAgbnNTdHlsZURpc3BsYXkoKTsKICBuc1N0eWxlRGlzcGxheShjb25zdCBu c1N0eWxlRGlzcGxheSYgYU90aGVyKTsKICB+bnNTdHlsZURpc3BsYXkoKSB7fTsKCiAgc3RhdGlj IGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVybiBlU3R5bGVT dHJ1Y3RfRGlzcGxheTt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXND b250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNv bnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7 CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMt Pn5uc1N0eWxlRGlzcGxheSgpOwogICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0 eWxlRGlzcGxheSksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShj b25zdCBuc1N0eWxlRGlzcGxheSYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHJpbmcgbUJpbmRpbmc7 CgoKCgoKCiAgbnNSZWN0IG1DbGlwOwoKICBQUlVpbnQ4IG1EaXNwbGF5OwogIFBSVWludDggbU9y aWdpbmFsRGlzcGxheTsKICBQUlVpbnQ4IG1BcHBlYXJhbmNlOwogIFBSVWludDggbVBvc2l0aW9u OwogIFBSVWludDggbUZsb2F0czsKICBQUlVpbnQ4IG1CcmVha1R5cGU7CiAgUFJQYWNrZWRCb29s IG1CcmVha0JlZm9yZTsKICBQUlBhY2tlZEJvb2wgbUJyZWFrQWZ0ZXI7CiAgUFJVaW50OCBtT3Zl cmZsb3c7CgogIFBSVWludDggbUNsaXBGbGFnczsKCiAgUFJCb29sIElzQmxvY2tMZXZlbCgpIGNv bnN0IHtyZXR1cm4gKDEgPT0gbURpc3BsYXkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDQgPT0gbURpc3BsYXkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDggPT0gbURpc3BsYXkpO30KCiAgUFJCb29sIElzRmxvYXRpbmcoKSBjb25z dCB7CiAgICByZXR1cm4gMCAhPSBtRmxvYXRzOwogIH0KCiAgUFJCb29sIElzQWJzb2x1dGVseVBv c2l0aW9uZWQoKSBjb25zdCB7cmV0dXJuICgyID09IG1Qb3NpdGlvbikgfHwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMgPT0gbVBvc2l0aW9uKTt9Cgog IFBSQm9vbCBJc1Bvc2l0aW9uZWQoKSBjb25zdCB7cmV0dXJuIElzQWJzb2x1dGVseVBvc2l0aW9u ZWQoKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxID09IG1Qb3Np dGlvbik7fQp9OwoKc3RydWN0IG5zU3R5bGVUYWJsZTogcHVibGljIG5zU3R5bGVTdHJ1Y3Qgewog IG5zU3R5bGVUYWJsZSh2b2lkKTsKICBuc1N0eWxlVGFibGUoY29uc3QgbnNTdHlsZVRhYmxlJiBh T3RoZXIpOwogIH5uc1N0eWxlVGFibGUodm9pZCk7CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3Ry dWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgpIHtyZXR1cm4gZVN0eWxlU3RydWN0X1RhYmxlO30KCiAg dm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0 aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9t U2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95 KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVUYWJsZSgpOwog ICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVGFibGUpLCB0aGlzKTsKICB9 OwoKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVRhYmxlJiBhT3Ro ZXIpIGNvbnN0OwoKICBQUlVpbnQ4IG1MYXlvdXRTdHJhdGVneTsKICBQUlVpbnQ4IG1GcmFtZTsK ICBQUlVpbnQ4IG1SdWxlczsKICBQUkludDMyIG1Db2xzOwogIFBSSW50MzIgbVNwYW47Cn07Cgpz dHJ1Y3QgbnNTdHlsZVRhYmxlQm9yZGVyOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls ZVRhYmxlQm9yZGVyKG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCk7CiAgbnNTdHlsZVRhYmxlQm9y ZGVyKGNvbnN0IG5zU3R5bGVUYWJsZUJvcmRlciYgYU90aGVyKTsKICB+bnNTdHlsZVRhYmxlQm9y ZGVyKHZvaWQpOwoKICBzdGF0aWMgY29uc3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0 SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9UYWJsZUJvcmRlcjt9CgogIHZvaWQqIG9wZXJhdG9y IG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2 b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVz dWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4 dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVGFibGVCb3JkZXIoKTsKICAgIGFDb250 ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVRhYmxlQm9yZGVyKSwgdGhpcyk7CiAgfTsK CiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVUYWJsZUJvcmRlciYg YU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZUNvb3JkIG1Cb3JkZXJTcGFjaW5nWDsKICBuc1N0eWxl Q29vcmQgbUJvcmRlclNwYWNpbmdZOwogIFBSVWludDggbUJvcmRlckNvbGxhcHNlOwogIFBSVWlu dDggbUNhcHRpb25TaWRlOwogIFBSVWludDggbUVtcHR5Q2VsbHM7Cn07CgplbnVtIG5zU3R5bGVD b250ZW50VHlwZSB7CiAgZVN0eWxlQ29udGVudFR5cGVfU3RyaW5nID0gMSwKICBlU3R5bGVDb250 ZW50VHlwZV9VUkwgPSAxMCwKICBlU3R5bGVDb250ZW50VHlwZV9BdHRyID0gMjAsCiAgZVN0eWxl Q29udGVudFR5cGVfQ291bnRlciA9IDMwLAogIGVTdHlsZUNvbnRlbnRUeXBlX0NvdW50ZXJzID0g MzEsCiAgZVN0eWxlQ29udGVudFR5cGVfT3BlblF1b3RlID0gNDAsCiAgZVN0eWxlQ29udGVudFR5 cGVfQ2xvc2VRdW90ZSA9IDQxLAogIGVTdHlsZUNvbnRlbnRUeXBlX05vT3BlblF1b3RlID0gNDIs CiAgZVN0eWxlQ29udGVudFR5cGVfTm9DbG9zZVF1b3RlID0gNDMKfTsKCnN0cnVjdCBuc1N0eWxl Q29udGVudERhdGEgewogIG5zU3R5bGVDb250ZW50VHlwZSBtVHlwZTsKICBuc1N0cmluZyBtQ29u dGVudDsKfTsKCnN0cnVjdCBuc1N0eWxlQ291bnRlckRhdGEgewogIG5zU3RyaW5nIG1Db3VudGVy OwogIFBSSW50MzIgbVZhbHVlOwp9OwoKCgoKc3RydWN0IG5zU3R5bGVRdW90ZXMgOiBwdWJsaWMg bnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVF1b3RlcygpOwogIG5zU3R5bGVRdW90ZXMoY29uc3Qg bnNTdHlsZVF1b3RlcyYgYVF1b3Rlcyk7CiAgfm5zU3R5bGVRdW90ZXMoKTsKCiAgc3RhdGljIGNv bnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVybiBlU3R5bGVTdHJ1 Y3RfUXVvdGVzO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRl eHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4 dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9 CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5z U3R5bGVRdW90ZXMoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVF1 b3RlcyksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShjb25zdCBu c1N0eWxlUXVvdGVzJiBhT3RoZXIpIGNvbnN0OwoKCiAgUFJVaW50MzIgUXVvdGVzQ291bnQodm9p ZCkgY29uc3QgeyByZXR1cm4gbVF1b3Rlc0NvdW50OyB9CiAgbnNyZXN1bHQgR2V0UXVvdGVzQXQo UFJVaW50MzIgYUluZGV4LCBuc1N0cmluZyYgYU9wZW4sIG5zU3RyaW5nJiBhQ2xvc2UpIGNvbnN0 IHsKICAgIGlmIChhSW5kZXggPCBtUXVvdGVzQ291bnQpIHsKICAgICAgYUluZGV4ICo9IDI7CiAg ICAgIGFPcGVuID0gbVF1b3Rlc1thSW5kZXhdOwogICAgICBhQ2xvc2UgPSBtUXVvdGVzWysrYUlu ZGV4XTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3 MDA1N0wpOwogIH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVRdW90ZXMoUFJVaW50MzIgYUNvdW50KSB7 CiAgICBpZiAoYUNvdW50ICE9IG1RdW90ZXNDb3VudCkgewogICAgICBpZiAobVF1b3RlcykgeyBk ZWxldGVbXSBtUXVvdGVzOyBtUXVvdGVzID0gMDsgfTsKICAgICAgaWYgKGFDb3VudCkgewogICAg ICAgIG1RdW90ZXMgPSBuZXcgbnNTdHJpbmdbYUNvdW50ICogMl07CiAgICAgICAgaWYgKCEgbVF1 b3RlcykgewogICAgICAgICAgbVF1b3Rlc0NvdW50ID0gMDsKICAgICAgICAgIHJldHVybiAoKG5z cmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1RdW90ZXNDb3Vu dCA9IGFDb3VudDsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgbnNyZXN1bHQgU2V0UXVvdGVz QXQoUFJVaW50MzIgYUluZGV4LCBjb25zdCBuc1N0cmluZyYgYU9wZW4sIGNvbnN0IG5zU3RyaW5n JiBhQ2xvc2UpIHsKICAgIGlmIChhSW5kZXggPCBtUXVvdGVzQ291bnQpIHsKICAgICAgYUluZGV4 ICo9IDI7CiAgICAgIG1RdW90ZXNbYUluZGV4XSA9IGFPcGVuOwogICAgICBtUXVvdGVzWysrYUlu ZGV4XSA9IGFDbG9zZTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3Vs dCkgMHg4MDA3MDA1N0wpOwogIH0KCnByb3RlY3RlZDoKICBQUlVpbnQzMiBtUXVvdGVzQ291bnQ7 CiAgbnNTdHJpbmcqIG1RdW90ZXM7Cn07CgpzdHJ1Y3QgbnNTdHlsZUNvbnRlbnQ6IHB1YmxpYyBu c1N0eWxlU3RydWN0IHsKICBuc1N0eWxlQ29udGVudCh2b2lkKTsKICBuc1N0eWxlQ29udGVudChj b25zdCBuc1N0eWxlQ29udGVudCYgYUNvbnRlbnQpOwogIH5uc1N0eWxlQ29udGVudCh2b2lkKTsK CiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVy biBlU3R5bGVTdHJ1Y3RfQ29udGVudDt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3os IG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2b2lkKiByZXN1bHQgPSAw OwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVy biByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsK ICAgIHRoaXMtPn5uc1N0eWxlQ29udGVudCgpOwogICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNp emVvZihuc1N0eWxlQ29udGVudCksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlm ZmVyZW5jZShjb25zdCBuc1N0eWxlQ29udGVudCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50MzIg Q29udGVudENvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Db250ZW50Q291bnQ7IH0KICBuc3Jl c3VsdCBHZXRDb250ZW50QXQoUFJVaW50MzIgYUluZGV4LCBuc1N0eWxlQ29udGVudFR5cGUmIGFU eXBlLCBuc1N0cmluZyYgYUNvbnRlbnQpIGNvbnN0IHsKICAgIGlmIChhSW5kZXggPCBtQ29udGVu dENvdW50KSB7CiAgICAgIGFUeXBlID0gbUNvbnRlbnRzW2FJbmRleF0ubVR5cGU7CiAgICAgIGFD b250ZW50ID0gbUNvbnRlbnRzW2FJbmRleF0ubUNvbnRlbnQ7CiAgICAgIHJldHVybiAwOwogICAg fQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsKICB9CgogIG5zcmVzdWx0IEFs bG9jYXRlQ29udGVudHMoUFJVaW50MzIgYUNvdW50KSB7CiAgICBpZiAoYUNvdW50ICE9IG1Db250 ZW50Q291bnQpIHsKICAgICAgaWYgKG1Db250ZW50cykgeyBkZWxldGVbXSBtQ29udGVudHM7IG1D b250ZW50cyA9IDA7IH07CiAgICAgIGlmIChhQ291bnQpIHsKICAgICAgICBtQ29udGVudHMgPSBu ZXcgbnNTdHlsZUNvbnRlbnREYXRhW2FDb3VudF07CiAgICAgICAgaWYgKCEgbUNvbnRlbnRzKSB7 CiAgICAgICAgICBtQ29udGVudENvdW50ID0gMDsKICAgICAgICAgIHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDcwMDBlTCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1Db250ZW50Q291bnQgPSBh Q291bnQ7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFNldENvbnRlbnRBdChQ UlVpbnQzMiBhSW5kZXgsIG5zU3R5bGVDb250ZW50VHlwZSBhVHlwZSwgY29uc3QgbnNTdHJpbmcm IGFDb250ZW50KSB7CiAgICBpZiAoYUluZGV4IDwgbUNvbnRlbnRDb3VudCkgewogICAgICBtQ29u dGVudHNbYUluZGV4XS5tVHlwZSA9IGFUeXBlOwogICAgICBpZiAoYVR5cGUgPCBlU3R5bGVDb250 ZW50VHlwZV9PcGVuUXVvdGUpIHsKICAgICAgICBtQ29udGVudHNbYUluZGV4XS5tQ29udGVudCA9 IGFDb250ZW50OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIG1Db250ZW50c1thSW5kZXhd Lm1Db250ZW50LlRydW5jYXRlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBy ZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDA1N0wpOwogIH0KCiAgUFJVaW50MzIgQ291bnRlcklu Y3JlbWVudENvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JbmNyZW1lbnRDb3VudDsgfQogIG5z cmVzdWx0IEdldENvdW50ZXJJbmNyZW1lbnRBdChQUlVpbnQzMiBhSW5kZXgsIG5zU3RyaW5nJiBh Q291bnRlciwgUFJJbnQzMiYgYUluY3JlbWVudCkgY29uc3QgewogICAgaWYgKGFJbmRleCA8IG1J bmNyZW1lbnRDb3VudCkgewogICAgICBhQ291bnRlciA9IG1JbmNyZW1lbnRzW2FJbmRleF0ubUNv dW50ZXI7CiAgICAgIGFJbmNyZW1lbnQgPSBtSW5jcmVtZW50c1thSW5kZXhdLm1WYWx1ZTsKICAg ICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDA1N0wpOwog IH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVDb3VudGVySW5jcmVtZW50cyhQUlVpbnQzMiBhQ291bnQp IHsKICAgIGlmIChhQ291bnQgIT0gbUluY3JlbWVudENvdW50KSB7CiAgICAgIGlmIChtSW5jcmVt ZW50cykgeyBkZWxldGVbXSBtSW5jcmVtZW50czsgbUluY3JlbWVudHMgPSAwOyB9OwogICAgICBp ZiAoYUNvdW50KSB7CiAgICAgICAgbUluY3JlbWVudHMgPSBuZXcgbnNTdHlsZUNvdW50ZXJEYXRh W2FDb3VudF07CiAgICAgICAgaWYgKCEgbUluY3JlbWVudHMpIHsKICAgICAgICAgIG1JbmNyZW1l bnRDb3VudCA9IDA7CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOwog ICAgICAgIH0KICAgICAgfQogICAgICBtSW5jcmVtZW50Q291bnQgPSBhQ291bnQ7CiAgICB9CiAg ICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFNldENvdW50ZXJJbmNyZW1lbnRBdChQUlVpbnQz MiBhSW5kZXgsIGNvbnN0IG5zU3RyaW5nJiBhQ291bnRlciwgUFJJbnQzMiBhSW5jcmVtZW50KSB7 CiAgICBpZiAoYUluZGV4IDwgbUluY3JlbWVudENvdW50KSB7CiAgICAgIG1JbmNyZW1lbnRzW2FJ bmRleF0ubUNvdW50ZXIgPSBhQ291bnRlcjsKICAgICAgbUluY3JlbWVudHNbYUluZGV4XS5tVmFs dWUgPSBhSW5jcmVtZW50OwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5zcmVz dWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBQUlVpbnQzMiBDb3VudGVyUmVzZXRDb3VudCh2b2lk KSBjb25zdCB7IHJldHVybiBtUmVzZXRDb3VudDsgfQogIG5zcmVzdWx0IEdldENvdW50ZXJSZXNl dEF0KFBSVWludDMyIGFJbmRleCwgbnNTdHJpbmcmIGFDb3VudGVyLCBQUkludDMyJiBhVmFsdWUp IGNvbnN0IHsKICAgIGlmIChhSW5kZXggPCBtUmVzZXRDb3VudCkgewogICAgICBhQ291bnRlciA9 IG1SZXNldHNbYUluZGV4XS5tQ291bnRlcjsKICAgICAgYVZhbHVlID0gbVJlc2V0c1thSW5kZXhd Lm1WYWx1ZTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4 MDA3MDA1N0wpOwogIH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVDb3VudGVyUmVzZXRzKFBSVWludDMy IGFDb3VudCkgewogICAgaWYgKGFDb3VudCAhPSBtUmVzZXRDb3VudCkgewogICAgICBpZiAobVJl c2V0cykgeyBkZWxldGVbXSBtUmVzZXRzOyBtUmVzZXRzID0gMDsgfTsKICAgICAgaWYgKGFDb3Vu dCkgewogICAgICAgIG1SZXNldHMgPSBuZXcgbnNTdHlsZUNvdW50ZXJEYXRhW2FDb3VudF07CiAg ICAgICAgaWYgKCEgbVJlc2V0cykgewogICAgICAgICAgbVJlc2V0Q291bnQgPSAwOwogICAgICAg ICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsKICAgICAgICB9CiAgICAgIH0KICAg ICAgbVJlc2V0Q291bnQgPSBhQ291bnQ7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVz dWx0IFNldENvdW50ZXJSZXNldEF0KFBSVWludDMyIGFJbmRleCwgY29uc3QgbnNTdHJpbmcmIGFD b3VudGVyLCBQUkludDMyIGFWYWx1ZSkgewogICAgaWYgKGFJbmRleCA8IG1SZXNldENvdW50KSB7 CiAgICAgIG1SZXNldHNbYUluZGV4XS5tQ291bnRlciA9IGFDb3VudGVyOwogICAgICBtUmVzZXRz W2FJbmRleF0ubVZhbHVlID0gYVZhbHVlOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBuc1N0eWxlQ29vcmQgbU1hcmtlck9m ZnNldDsKCnByb3RlY3RlZDoKICBQUlVpbnQzMiBtQ29udGVudENvdW50OwogIG5zU3R5bGVDb250 ZW50RGF0YSogbUNvbnRlbnRzOwoKICBQUlVpbnQzMiBtSW5jcmVtZW50Q291bnQ7CiAgbnNTdHls ZUNvdW50ZXJEYXRhKiBtSW5jcmVtZW50czsKCiAgUFJVaW50MzIgbVJlc2V0Q291bnQ7CiAgbnNT dHlsZUNvdW50ZXJEYXRhKiBtUmVzZXRzOwp9OwoKc3RydWN0IG5zU3R5bGVVSVJlc2V0OiBwdWJs aWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVVJUmVzZXQodm9pZCk7CiAgbnNTdHlsZVVJUmVz ZXQoY29uc3QgbnNTdHlsZVVJUmVzZXQmIGFPdGhlcik7CiAgfm5zU3R5bGVVSVJlc2V0KHZvaWQp OwoKICBzdGF0aWMgY29uc3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0 dXJuIGVTdHlsZVN0cnVjdF9VSVJlc2V0O30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBz eiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9 IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0 dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkg ewogICAgdGhpcy0+fm5zU3R5bGVVSVJlc2V0KCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwo c2l6ZW9mKG5zU3R5bGVVSVJlc2V0KSwgdGhpcyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNE aWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVVSVJlc2V0JiBhT3RoZXIpIGNvbnN0OwoKICBQUlVuaWNo YXIgbUtleUVxdWl2YWxlbnQ7CiAgUFJVaW50OCBtVXNlclNlbGVjdDsKICBQUlVpbnQ4IG1SZXNp emVyOwogIFBSVWludDggbUZvcmNlQnJva2VuSW1hZ2VJY29uOwp9OwoKc3RydWN0IG5zU3R5bGVV c2VySW50ZXJmYWNlOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVVzZXJJbnRlcmZh Y2Uodm9pZCk7CiAgbnNTdHlsZVVzZXJJbnRlcmZhY2UoY29uc3QgbnNTdHlsZVVzZXJJbnRlcmZh Y2UmIGFPdGhlcik7CiAgfm5zU3R5bGVVc2VySW50ZXJmYWNlKHZvaWQpOwoKICBzdGF0aWMgY29u c3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVj dF9Vc2VySW50ZXJmYWNlO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJl c0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBh Q29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3Vs dDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhp cy0+fm5zU3R5bGVVc2VySW50ZXJmYWNlKCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6 ZW9mKG5zU3R5bGVVc2VySW50ZXJmYWNlKSwgdGhpcyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENh bGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVVc2VySW50ZXJmYWNlJiBhT3RoZXIpIGNvbnN0OwoK ICBQUlVpbnQ4IG1Vc2VySW5wdXQ7CiAgUFJVaW50OCBtVXNlck1vZGlmeTsKICBQUlVpbnQ4IG1V c2VyRm9jdXM7CgogIFBSVWludDggbUN1cnNvcjsKICBuc1N0cmluZyBtQ3Vyc29ySW1hZ2U7Cn07 CgoKc3RydWN0IG5zU3R5bGVYVUwgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVhV TCgpOwogIG5zU3R5bGVYVUwoY29uc3QgbnNTdHlsZVhVTCYgYVNvdXJjZSk7CiAgfm5zU3R5bGVY VUwoKTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkg e3JldHVybiBlU3R5bGVTdHJ1Y3RfWFVMO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBz eiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9 IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0 dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkg ewogICAgdGhpcy0+fm5zU3R5bGVYVUwoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXpl b2YobnNTdHlsZVhVTCksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5j ZShjb25zdCBuc1N0eWxlWFVMJiBhT3RoZXIpIGNvbnN0OwoKICBmbG9hdCBtQm94RmxleDsKICBQ UlVpbnQzMiBtQm94T3JkaW5hbDsKICBQUlVpbnQ4IG1Cb3hBbGlnbjsKICBQUlVpbnQ4IG1Cb3hE aXJlY3Rpb247CiAgUFJVaW50OCBtQm94T3JpZW50OwogIFBSVWludDggbUJveFBhY2s7Cn07CiMg MTE3MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVjdC5oIgpzdHJ1 Y3QgbnNCb3JkZXJFZGdlczsKCgpzdHJ1Y3QgbnNCb3JkZXJFZGdlCnsKCiAgbnNjb29yZCBtV2lk dGg7CgogIG5zY29vcmQgbUxlbmd0aDsKICBuc2NvbG9yIG1Db2xvcjsKCiAgbnNCb3JkZXJFZGdl cyAqIG1JbnNpZGVOZWlnaGJvcjsKICBQUlVpbnQ4IG1TdHlsZTsKCiAgUFJVaW50OCBtU2lkZTsK CiAgbnNCb3JkZXJFZGdlKCk7Cn07CgppbmxpbmUgbnNCb3JkZXJFZGdlOjpuc0JvcmRlckVkZ2Uo KQp7CiAgbVdpZHRoPTA7CiAgbUxlbmd0aD0wOwogIG1TdHlsZT0wOwogIG1Db2xvcj0wOwogIG1T aWRlPTM7CiAgbUluc2lkZU5laWdoYm9yID0gMDsKfTsKCgoKCnN0cnVjdCBuc0JvcmRlckVkZ2Vz CnsKICBuc1ZvaWRBcnJheSBtRWRnZXNbNF07CiAgbnNNYXJnaW4gbU1heEJvcmRlcldpZHRoOwog IFBSUGFja2VkQm9vbCBtT3V0c2lkZUVkZ2U7CgogIG5zQm9yZGVyRWRnZXMoKTsKfTsKCmlubGlu ZSBuc0JvcmRlckVkZ2VzOjpuc0JvcmRlckVkZ2VzKCkKewogIG1NYXhCb3JkZXJXaWR0aC5TaXpl VG8oMCwwLDAsMCk7CiAgbU91dHNpZGVFZGdlID0gMTsKfTsKIyA1MCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xh eW91dC9uc0lTdHlsZUNvbnRleHQuaCIgMQojIDU0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5 b3V0L25zSVN0eWxlQ29udGV4dC5oIgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKY2xhc3MgbnNJ RnJhbWU7CmNsYXNzIG5zSVN0eWxlU2V0OwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJ U3VwcG9ydHNBcnJheTsKY2xhc3MgbnNJU3R5bGVDb250ZXh0OwpjbGFzcyBuc1J1bGVOb2RlOwoK CgoKCgoKY2xhc3MgbnNJU3R5bGVDb250ZXh0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGlj OgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7IDB4MjZhNGQ5NzAsIDB4YTM0MiwgMHgxMWQxLCB7MHg4OSwgMHg3NCwgMHgwMCwgMHg2MCwg MHgwOCwgMHg5MSwgMHgxYiwgMHg4MX0gfTsgcmV0dXJuIGlpZDt9CgogIHZpcnR1YWwgUFJCb29s IEVxdWFscyhjb25zdCBuc0lTdHlsZUNvbnRleHQqIGFPdGhlcikgY29uc3QgPSAwOwoKICB2aXJ0 dWFsIGFscmVhZHlfQWRkUmVmZWQ8bnNJU3R5bGVDb250ZXh0PiBHZXRQYXJlbnQodm9pZCkgY29u c3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rmlyc3RDaGlsZChuc0lTdHlsZUNvbnRleHQq KiBhQ29udGV4dCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQc2V1ZG9UeXBlKG5zSUF0b20q JiBhUHNldWRvVGFnKSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZENoaWxkV2l0 aFJ1bGVzKGNvbnN0IG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNSdWxlTm9kZSogYVJ1bGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVN0eWxlQ29udGV4dComIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBQUkJvb2wgSGFz VGV4dERlY29yYXRpb25zKCk9MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyUGFkZGlu Z0Zvcihuc1N0eWxlQm9yZGVyUGFkZGluZyYgYUJvcmRlclBhZGRpbmcpPTA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgQ2FsY1N0eWxlRGlmZmVyZW5jZShuc0lTdHlsZUNvbnRleHQqIGFPdGhl ciwgbnNDaGFuZ2VIaW50JiBhSGludCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJ1bGVO b2RlKG5zUnVsZU5vZGUqKiBhUmVzdWx0KT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgQWRkU3R5bGVC aXQoY29uc3QgUFJVaW50MzImIGFCaXQpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZUJp dHMoUFJVaW50MzIqIGFCaXRzKT0wOwojIDExMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91 dC9uc0lTdHlsZUNvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0eWxlKG5zU3R5bGVT dHJ1Y3RJRCBhU0lELCBuc1N0eWxlU3RydWN0KiBhU3RydWN0KSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBjb25zdCBuc1N0eWxlU3RydWN0 KiogYVN0cnVjdCkgPSAwOwoKICB2aXJ0dWFsIGNvbnN0IG5zU3R5bGVTdHJ1Y3QqIEdldFN0eWxl RGF0YShuc1N0eWxlU3RydWN0SUQgYVNJRCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zU3R5bGVTdHJ1 Y3QqIEdldFVuaXF1ZVN0eWxlRGF0YShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBjb25z dCBuc1N0eWxlU3RydWN0SUQmIGFTSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJD YWNoZWREYXRhRm9yUnVsZShuc0lTdHlsZVJ1bGUqIGFSdWxlKSA9IDA7CgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBDbGVhclN0eWxlRGF0YShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lT dHlsZVJ1bGUqIGFSdWxlKSA9IDA7Cn07CgoKCmV4dGVybiBuc3Jlc3VsdAogIE5TX05ld1N0eWxl Q29udGV4dChuc0lTdHlsZUNvbnRleHQqKiBhSW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UeXBlLAogICAgICAgICAgICAgICAgICAgICBuc1J1bGVO b2RlKiBhUnVsZU5vZGUsCiAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJl c0NvbnRleHQpOwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIHZvaWQKR2V0U3R5bGVEYXRh KG5zSVN0eWxlQ29udGV4dCogYVN0eWxlQ29udGV4dCwgY29uc3QgVCoqIGFTdHlsZVN0cnVjdCkK ewogICAgKmFTdHlsZVN0cnVjdCA9IHN0YXRpY19jYXN0PCBjb25zdCBUKiA+KGFTdHlsZUNvbnRl eHQtPkdldFN0eWxlRGF0YSgoVDo6R2V0U3R5bGVTdHJ1Y3RJRCgpKSkpOwoKfQojIDUxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiIDIKIyA3MCAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgpzdHJ1Y3QgbnNIVE1MUmVmbG93U3RhdGU7CmNs YXNzIG5zSFRNTFJlZmxvd0NvbW1hbmQ7CnN0cnVjdCBuc0hUTUxSZWZsb3dNZXRyaWNzOwoKY2xh c3MgbnNJQXRvbTsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSVByZXNTaGVsbDsKY2xh c3MgbnNJUmVuZGVyaW5nQ29udGV4dDsKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNJ VmlldzsKY2xhc3MgbnNJV2lkZ2V0OwpjbGFzcyBuc0lET01SYW5nZTsKY2xhc3MgbnNJU2VsZWN0 aW9uQ29udHJvbGxlcjsKCmNsYXNzIG5zSUFjY2Vzc2libGU7CgoKc3RydWN0IG5zUGVla09mZnNl dFN0cnVjdDsKc3RydWN0IG5zUG9pbnQ7CnN0cnVjdCBuc1JlY3Q7CnN0cnVjdCBuc1NpemU7CnN0 cnVjdCBuc01hcmdpbjsKCgp0eXBlZGVmIHZvaWQKKCpOU0ZyYW1lUHJvcGVydHlEdG9yRnVuYyko bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBy b3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYVByb3BlcnR5VmFs dWUpOwojIDExOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgp0eXBl ZGVmIFBSVWludDMyIG5zU3BsaXR0YWJsZVR5cGU7CiMgMTM2ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbGF5b3V0L25zSUZyYW1lLmgiCnR5cGVkZWYgUFJVaW50MzIgbnNGcmFtZVN0YXRlOwojIDIz MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgplbnVtIG5zRnJhbWVQ YWludExheWVyIHsKICBlRnJhbWVQYWludExheWVyX1VuZGVybGF5ID0gMCwKICBlRnJhbWVQYWlu dExheWVyX0NvbnRlbnQgPSAxLAogIGVGcmFtZVBhaW50TGF5ZXJfT3ZlcmxheSA9IDIKfTsKCmVu dW0gbnNTZWxlY3Rpb25BbW91bnQgewogIGVTZWxlY3RDaGFyYWN0ZXIgPSAwLAogIGVTZWxlY3RX b3JkID0gMSwKICBlU2VsZWN0TGluZSA9IDIsCiAgZVNlbGVjdEJlZ2luTGluZSA9IDMsCiAgZVNl bGVjdEVuZExpbmUgPSA0LAogIGVTZWxlY3ROb0Ftb3VudCA9IDUsCiAgZVNlbGVjdERpciA9IDYs CiAgZVNlbGVjdFBhcmFncmFwaCA9IDcKfTsKCmVudW0gbnNEaXJlY3Rpb24gewogIGVEaXJOZXh0 ID0gMCwKICBlRGlyUHJldmlvdXM9IDEKfTsKCmVudW0gbnNTcHJlYWQgewogIGVTcHJlYWROb25l ID0gMCwKICBlU3ByZWFkQWNyb3NzID0gMSwKICBlU3ByZWFkRG93biA9IDIKfTsKIyAyOTIgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKdHlwZWRlZiBQUlVpbnQzMiBu c1JlZmxvd1N0YXR1czsKIyAzNzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJh bWUuaCIKdHlwZWRlZiBQUkJvb2wgbnNEaWRSZWZsb3dTdGF0dXM7CiMgMzk2ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCmNsYXNzIG5zSUZyYW1lIDogcHVibGljIG5z SVN1cHBvcnRzCnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4YTZjZjkwNTAsIDB4MTViMywgMHgxMWQyLHsweDkzLCAw eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfX07IHJldHVybiBpaWQ7fQoj IDQxOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwg bnNyZXN1bHQgSW5pdChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg ICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSog YVBhcmVudCwKICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYUNvbnRleHQsCiAg ICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVByZXZJbkZsb3cpID0gMDsKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CgoK CgogIHZpcnR1YWwgdm9pZCBSZW1vdmVkQXNQcmltYXJ5RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQ cmVzQ29udGV4dCkge30KIyA0NTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJh bWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEluaXRpYWxDaGlsZExpc3QobnNJUHJlc0NvbnRl eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0 b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l KiBhQ2hpbGRMaXN0KSA9IDA7CiMgNDcxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25z SUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRGcmFtZXMobnNJUHJlc0NvbnRleHQq IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQ cmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0KSA9IDA7CiMgNDkx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBJbnNlcnRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg IG5zSUZyYW1lKiBhUHJldkZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l KiBhRnJhbWVMaXN0KSA9IDA7CiMgNTEzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25z SUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVGcmFtZShuc0lQcmVzQ29udGV4dCog YVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJl c1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPbGRGcmFtZSkgPSAwOwojIDUzNSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg UmVwbGFjZUZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG cmFtZSogYU9sZEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3 RnJhbWUpID0gMDsKCgoKCgoKCiAgbnNyZXN1bHQgR2V0Q29udGVudChuc0lDb250ZW50KiogYUNv bnRlbnQpIGNvbnN0IHsgKmFDb250ZW50ID0gbUNvbnRlbnQ7IG5zX2lmX2FkZHJlZigqYUNvbnRl bnQpOyByZXR1cm4gMDsgfQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPZmZzZXRzKFBSSW50 MzIgJnN0YXJ0LCBQUkludDMyICZlbmQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgbnNyZXN1bHQgR2V0 U3R5bGVDb250ZXh0KG5zSVN0eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRleHQpIGNvbnN0IHsKICAg ICphU3R5bGVDb250ZXh0ID0gbVN0eWxlQ29udGV4dDsgbnNfaWZfYWRkcmVmKCphU3R5bGVDb250 ZXh0KTsgcmV0dXJuIDA7CiAgfQogIG5zcmVzdWx0IFNldFN0eWxlQ29udGV4dChuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0LCBuc0lTdHlsZUNvbnRleHQqIGFDb250ZXh0KSB7CiAgICBpZiAo YUNvbnRleHQgIT0gbVN0eWxlQ29udGV4dCkgewogICAgICBkbyB7IGlmIChtU3R5bGVDb250ZXh0 KSB7IChtU3R5bGVDb250ZXh0KS0+UmVsZWFzZSgpOyAobVN0eWxlQ29udGV4dCkgPSAwOyB9IH0g d2hpbGUgKDApOwogICAgICBpZiAoMCAhPSBhQ29udGV4dCkgewogICAgICAgIG1TdHlsZUNvbnRl eHQgPSBhQ29udGV4dDsKICAgICAgICAoYUNvbnRleHQpLT5BZGRSZWYoKTsKICAgICAgICBEaWRT ZXRTdHlsZUNvbnRleHQoYVByZXNDb250ZXh0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7 CiAgfQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEaWRTZXRTdHlsZUNvbnRleHQobnNJUHJlc0NvbnRl eHQqIGFQcmVzQ29udGV4dCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0eWxlRGF0 YUV4dGVybmFsKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgbnNTdHlsZVN0cnVjdComIGFTdHlsZVN0cnVjdCkgY29uc3QgPSAwOwoj IDU5MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIG5zcmVzdWx0 IEdldFN0eWxlRGF0YShuc1N0eWxlU3RydWN0SUQgYVNJRCwKICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgbnNTdHlsZVN0cnVjdComIGFTdHlsZVN0cnVjdCkgY29uc3QgewogICAgcmV0dXJu IEdldFN0eWxlRGF0YUV4dGVybmFsKGFTSUQsIGFTdHlsZVN0cnVjdCk7CiAgfQoKCgogIG5zcmVz dWx0IEdldFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBjb25zdCBuc1N0eWxlU3RydWN0Kiog YVN0cnVjdCkgY29uc3QgewogICAgOwogICAgbVN0eWxlQ29udGV4dC0+R2V0U3R5bGUoYVNJRCwg YVN0cnVjdCk7CiAgICByZXR1cm4gMDsKICB9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbGNCb3Jk ZXJQYWRkaW5nKG5zTWFyZ2luJiBhQm9yZGVyUGFkZGluZykgY29uc3QgPSAwOwojIDYxOSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0QWRkaXRpb25hbFN0eWxlQ29udGV4dChQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRleHQp IGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFkZGl0aW9uYWxTdHlsZUNvbnRleHQo UFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lTdHlsZUNvbnRleHQqIGFTdHlsZUNvbnRleHQpID0gMDsKCgoKCiAgbnNyZXN1bHQgR2V0UGFy ZW50KG5zSUZyYW1lKiogYVBhcmVudCkgY29uc3QgeyAqYVBhcmVudCA9IG1QYXJlbnQ7IHJldHVy biAwOyB9CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJlbnQoY29uc3QgbnNJRnJhbWUqIGFQYXJl bnQpIHsgbVBhcmVudCA9IChuc0lGcmFtZSopYVBhcmVudDsgcmV0dXJuIDA7IH0KIyA2MzggIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICBuc3Jlc3VsdCBHZXRSZWN0 KG5zUmVjdCYgYVJlY3QpIGNvbnN0IHsKICAgIGFSZWN0ID0gbVJlY3Q7CiAgICByZXR1cm4gMDsK ICB9CgogIG5zcmVzdWx0IEdldE9yaWdpbihuc1BvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIGFQ b2ludC54ID0gbVJlY3QueDsKICAgIGFQb2ludC55ID0gbVJlY3QueTsKICAgIHJldHVybiAwOwog IH0KCiAgbnNyZXN1bHQgR2V0U2l6ZShuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICBhU2l6ZS53 aWR0aCA9IG1SZWN0LndpZHRoOwogICAgYVNpemUuaGVpZ2h0ID0gbVJlY3QuaGVpZ2h0OwogICAg cmV0dXJuIDA7CiAgfQoKICBuc3Jlc3VsdCBTZXRSZWN0KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv bnRleHQsCiAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYVJlY3QpIHsKICAgIE1vdmVUbyhh UHJlc0NvbnRleHQsIGFSZWN0LngsIGFSZWN0LnkpOwogICAgU2l6ZVRvKGFQcmVzQ29udGV4dCwg YVJlY3Qud2lkdGgsIGFSZWN0LmhlaWdodCk7CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0 IE1vdmVUbyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBu c2Nvb3JkIGFYLAogICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFZKSB7CiAgICBtUmVjdC54ID0g YVg7CiAgICBtUmVjdC55ID0gYVk7CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFNpemVU byhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBuc2Nvb3Jk IGFXaWR0aCwKICAgICAgICAgICAgICAgICAgbnNjb29yZCBhSGVpZ2h0KSB7CiAgICBtUmVjdC53 aWR0aCA9IGFXaWR0aDsKICAgIG1SZWN0LmhlaWdodCA9IGFIZWlnaHQ7CiAgICByZXR1cm4gMDsK ICB9CiMgNjg4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRBZGRpdGlvbmFsQ2hpbGRMaXN0TmFtZShQUkludDMyIGFJbmRleCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiogYUxpc3RO YW1lKSBjb25zdCA9IDA7CiMgNjk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZy YW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGaXJzdENoaWxkKG5zSVByZXNDb250ZXh0KiBhUHJl c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFGaXJzdENoaWxkKSBjb25zdCA9IDA7 CgoKCgogIG5zcmVzdWx0IEdldE5leHRTaWJsaW5nKG5zSUZyYW1lKiogYU5leHRTaWJsaW5nKSBj b25zdCB7CiAgICAqYU5leHRTaWJsaW5nID0gbU5leHRTaWJsaW5nOwogICAgcmV0dXJuIDA7CiAg fQoKICBuc3Jlc3VsdCBTZXROZXh0U2libGluZyhuc0lGcmFtZSogYU5leHRTaWJsaW5nKSB7CiAg ICBtTmV4dFNpYmxpbmcgPSBhTmV4dFNpYmxpbmc7CiAgICByZXR1cm4gMDsKICB9CgoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg ICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAgICAg ICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllciwKICAgICAgICAgICAgICAgICAg ICBQUlVpbnQzMiBhRmxhZ3MgPSAwKSA9IDA7CgoKCgoKICB2aXJ0dWFsIFBSQm9vbCBDYW5QYWlu dEJhY2tncm91bmQoKSB7IHJldHVybiAxOyB9CiMgNzQ4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv bGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVFdmVudChuc0lQcmVz Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zR1VJRXZl bnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50U3RhdHVzKiBhRXZl bnRTdGF0dXMpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50Rm9yRXZlbnQobnNJ UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNFdmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD b250ZW50KiogYUNvbnRlbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50QW5k T2Zmc2V0c0Zyb21Qb2ludChuc0lQcmVzQ29udGV4dCogYUNYLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNQb2ludCYgYVBvaW50LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCAqKiBhTmV3Q29udGVu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzImIGFD b250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UFJJbnQzMiYgYUNvbnRlbnRPZmZzZXRFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQUkJvb2wmIGFCZWdpbkZyYW1lQ29udGVudCkgPSAwOwoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDdXJzb3IobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgbnNQb2ludCYgYVBvaW50LAogICAgICAgICAgICAgICAgICAg ICAgICBQUkludDMyJiBhQ3Vyc29yKSA9IDA7CiMgNzc4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv bGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUZvclBvaW50KG5z SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBuc1BvaW50JiBhUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSUZyYW1lKiogYUZyYW1lKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 UG9pbnRGcm9tT2Zmc2V0KG5zSVByZXNDb250ZXh0KiBpblByZXNDb250ZXh0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0KiBpblJlbmRDb250ZXh0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGluT2Zmc2V0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50KiBvdXRQb2ludCkgPSAwOwojIDgw MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0Q2hpbGRGcmFtZUNvbnRhaW5pbmdPZmZzZXQoUFJJbnQzMiBpbkNvbnRlbnRPZmZz ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBpbkhpbnQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIG91dEZyYW1lQ29udGVudE9mZnNl dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqICpvdXRDaGlsZEZy YW1lKSA9IDA7CgoKCgoKICBuc3Jlc3VsdCBHZXRGcmFtZVN0YXRlKG5zRnJhbWVTdGF0ZSogYVJl c3VsdCkgewogICAgKmFSZXN1bHQgPSBtU3RhdGU7CiAgICByZXR1cm4gMDsKICB9CgoKCgogIG5z cmVzdWx0IFNldEZyYW1lU3RhdGUobnNGcmFtZVN0YXRlIGFOZXdTdGF0ZSkgewogICAgbVN0YXRl ID0gYU5ld1N0YXRlOwogICAgcmV0dXJuIDA7CiAgfQojIDgzMyAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudENoYW5nZWQo bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3Vw cG9ydHMqIGFTdWJDb250ZW50KSA9IDA7CiMgODQ3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5 b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSVBy ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy IGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFB dHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFNb2RUeXBl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCkgPSAwOwojIDg2 MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgQ29udGVudFN0YXRlQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCkgPSAwOwoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IElzU3BsaXR0YWJsZShuc1NwbGl0dGFibGVUeXBlJiBhSXNTcGxpdHRh YmxlKSBjb25zdCA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJldkluRmxvdyhuc0lG cmFtZSoqIGFQcmV2SW5GbG93KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmV2 SW5GbG93KG5zSUZyYW1lKikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dEluRmxvdyhu c0lGcmFtZSoqIGFOZXh0SW5GbG93KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRO ZXh0SW5GbG93KG5zSUZyYW1lKikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zSUZyYW1lKiBHZXRGaXJz dEluRmxvdygpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9jYXN0PCBuc0lGcmFtZSogPih0aGlz KTsKICB9CgoKCgogIHZpcnR1YWwgbnNJRnJhbWUqIEdldExhc3RJbkZsb3coKSBjb25zdCB7CiAg ICByZXR1cm4gY29uc3RfY2FzdDwgbnNJRnJhbWUqID4odGhpcyk7CiAgfQojIDkwMyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgV2ls bFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CiMgOTQ1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZs b3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBuc0hU TUxSZWZsb3dNZXRyaWNzJiBhUmVmbG93TWV0cmljcywKICAgICAgICAgICAgICAgICAgICBjb25z dCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxvd1N0YXRlLAogICAgICAgICAgICAgICAgICAgIG5z UmVmbG93U3RhdHVzJiBhU3RhdHVzKSA9IDA7CiMgOTY1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv bGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEaWRSZWZsb3cobnNJUHJlc0Nv bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1M UmVmbG93U3RhdGUqIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNEaWRS ZWZsb3dTdGF0dXMgYVN0YXR1cykgPSAwOwojIDk4MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xh eW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuQ29udGludWVUZXh0UnVuKFBS Qm9vbCYgYUNvbnRpbnVlVGV4dFJ1bikgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEFkanVzdEZyYW1lU2l6ZShuc2Nvb3JkIGFFeHRyYVNwYWNlLCBuc2Nvb3JkJiBhVXNlZFNwYWNl KSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUcmltVHJhaWxpbmdXaGl0ZVNwYWNlKG5zSVBy ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSQywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNjb29yZCYgYURlbHRhV2lkdGgpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRWaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg ICAgICBuc0lWaWV3KiogYVZpZXcpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZp ZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgIG5z SVZpZXcqIGFWaWV3KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50V2l0aFZp ZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lGcmFtZSoqIGFQYXJlbnQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0T2Zmc2V0RnJvbVZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50JiBhT2Zmc2V0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVZpZXcqKiBhVmlldykgY29uc3QgPSAwOwojIDEwMjUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE9yaWdpblRvVmlld09mZnNldChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50JiBhT2Zmc2V0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3KiogYVZpZXcpIGNvbnN0ID0g MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNJUHJlc0NvbnRleHQqIGFQ cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2lkZ2V0KiogYVdpZGdldCkg Y29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVUeXBlKG5zSUF0b20q KiBhVHlwZSkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGVyY2VudGFnZUJh c2UoUFJCb29sJiBhQmFzZSkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3Jv bGxlZChuc0lWaWV3ICphVmlldykgPSAwOwojIDEwNjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9s YXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNlbGVjdGVkKG5zSVByZXND b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NUmFu Z2UqIGFSYW5nZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVNlbGVjdGVkLAog ICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3ByZWFkIGFTcHJlYWQpID0gMDsKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRTZWxlY3RlZChQUkJvb2wgKmFTZWxlY3RlZCkgY29uc3QgPSAwOwojIDEw ODIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IElzU2VsZWN0YWJsZShQUkJvb2wqIGFJc1NlbGVjdGFibGUsIFBSVWludDgqIGFTZWxl Y3RTdHlsZSkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9u Q29udHJvbGxlcihuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lTZWxlY3Rpb25Db250 cm9sbGVyICoqYVNlbENvbikgPSAwOwojIDExMDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlv dXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENhcHR1cmVNb3VzZShuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0LCBQUkJvb2wgYUdyYWJNb3VzZUV2ZW50cykgPSAwOwojIDExMDkg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IFBlZWtPZmZzZXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNQZWVrT2Zmc2V0 U3RydWN0ICphUG9zKSA9IDA7CiMgMTEyMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9u c0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tWaXNpYmlsaXR5KG5zSVByZXNDb250 ZXh0KiBhQ29udGV4dCwgUFJJbnQzMiBhU3RhcnRJbmRleCwgUFJJbnQzMiBhRW5kSW5kZXgsIFBS Qm9vbCBhUmVjdXJzZSwgUFJCb29sICphRmluaXNoZWQsIFBSQm9vbCAqX3JldHZhbCk9MDsKCgoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZsb3dEaXJ0eUNoaWxkKG5zSVByZXNTaGVsbCogYVBy ZXNTaGVsbCwgbnNJRnJhbWUqIGFDaGlsZCkgPSAwOwojIDExNDAgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFjY2Vzc2libGUo bnNJQWNjZXNzaWJsZSoqIGFBY2Nlc3NpYmxlKSA9IDA7CiMgMTE2MCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50U3R5 bGVDb250ZXh0RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYVByb3ZpZGVyRnJhbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFJc0NoaWxkKSA9 IDA7CiMgMTE3MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZp cnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlRm9yUGFpbnRpbmcobnNJUHJlc0NvbnRleHQgKiBhUHJl c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdD b250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBSQm9vbCBhQ2hlY2tWaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ UkJvb2wqIGFJc1Zpc2libGUpID0gMDsKIyAxMTg4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5 b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0VtcHR5KG5zQ29tcGF0aWJpbGl0 eSBhQ29tcGF0TW9kZSwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFJc1ByZSwKICAgICAg ICAgICAgICAgICAgICAgUFJCb29sKiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIFBSQm9vbCBJc0dl bmVyYXRlZENvbnRlbnRGcmFtZSgpIHsKICAgIHJldHVybiAobVN0YXRlICYgMHgwMDAwMDA0MCkg IT0gMDsKICB9CiMgMTIxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5o IgogIFBSQm9vbCBJc1BzZXVkb0ZyYW1lKG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50KSB7CiAg ICByZXR1cm4gbUNvbnRlbnQgPT0gYVBhcmVudENvbnRlbnQ7CiAgfQoKCgogIHZpcnR1YWwgdm9p ZCogR2V0UHJvcGVydHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQUkJvb2wgYVJlbW92ZVByb3BlcnR5KSBjb25zdCA9IDA7CgogIHZpcnR1YWwg bnNyZXN1bHQgU2V0UHJvcGVydHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQcm9wZXJ0eU5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhUHJvcGVydHlWYWx1ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5TRnJhbWVQcm9wZXJ0eUR0b3JGdW5jIGFQcm9wRHRvckZ1bmMp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaVByb3BlcnR5KG5zSVByZXNDb250 ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSog YVByb3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogYVByb3Bl cnR5VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFTaXplICkgY29u c3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmlkaVByb3BlcnR5KG5zSVByZXNDb250ZXh0 KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBy b3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhUHJvcGVydHlW YWx1ZSkgPSAwOwoKCnByb3RlY3RlZDoKCiAgbnNSZWN0IG1SZWN0OwogIG5zSUNvbnRlbnQqIG1D b250ZW50OwogIG5zSVN0eWxlQ29udGV4dCogbVN0eWxlQ29udGV4dDsKICBuc0lGcmFtZSogbVBh cmVudDsKICBuc0lGcmFtZSogbU5leHRTaWJsaW5nOwogIG5zRnJhbWVTdGF0ZSBtU3RhdGU7Cgpw cml2YXRlOgogIHZpcnR1YWwgbnNyZWZjbnQgQWRkUmVmKHZvaWQpID0gMDsKICB2aXJ0dWFsIG5z cmVmY250IFJlbGVhc2Uodm9pZCkgPSAwOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5l IHZvaWQKR2V0U3R5bGVEYXRhKG5zSUZyYW1lKiBhRnJhbWUsIGNvbnN0IFQqKiBhU3R5bGVTdHJ1 Y3QpCnsKICAgIGFGcmFtZS0+R2V0U3R5bGVEYXRhKChUOjpHZXRTdHlsZVN0cnVjdElEKCkpLAog ICAgICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PCBjb25zdCBuc1N0eWxlU3RydWN0 KiogPihhU3R5bGVTdHJ1Y3QpKTsKfQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0 L25zSU9iamVjdEZyYW1lLmgiIDIKCmNsYXNzIG5zSVBsdWdpbkluc3RhbmNlOwoKCgoKCmNsYXNz IG5zSU9iamVjdEZyYW1lIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4NmQxMGIw N2QsIDB4ZTc1YiwgMHgxMWQ0LCB7IDB4OTgsIDB4ODUsIDB4MCwgMHhjMCwgMHg0ZiwgMHhhMCwg MHhjZiwgMHg0YiB9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsdWdp bkluc3RhbmNlKG5zSVBsdWdpbkluc3RhbmNlKiYgYVBsdWdpbkluc3RhbmNlKSA9IDA7Cn07CiMg MTIxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1 Z2luL25zSVNjcmlwdGFibGVQbHVnaW4uaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv cGx1Z2luL25zSVNjcmlwdGFibGVQbHVnaW4uaCIKY2xhc3MgbnNJU2NyaXB0YWJsZVBsdWdpbiA6 IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmMWExMmJiYSwgMHgxZGQxLCAweDEx YjIsIHsgMHhhOSwgMHg1ZiwgMHhjZCwgMHhjMSwgMHgxOCwgMHg2MCwgMHg1ZSwgMHg5MiB9fTsg cmV0dXJuIGlpZDt9CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRhYmxlUGVlcih2 b2lkICogKmFTY3JpcHRhYmxlUGVlcikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFNjcmlwdGFibGVJbnRlcmZhY2UobnNJSUQgKiAqYVNjcmlwdGFibGVJbnRlcmZhY2UpID0gMDsK Cn07CiMgMTIyICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvcGx1Z2luL25zSVBsdWdpbkhvc3QuaCIgMQojIDE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv cGx1Z2luL25zSVBsdWdpbkhvc3QuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2lu L25zSVBsdWdpbkluc3RhbmNlT3duZXIuaCIgMQojIDIxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv cGx1Z2luL25zSVBsdWdpbkluc3RhbmNlT3duZXIuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvcGx1Z2luL25zcGx1Z2luLmgiIDEKIyAxMDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVn aW4vbnNwbHVnaW4uaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdp bi5oIiAxCiMgNTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luLmgiCmNs YXNzIG5zSVBsdWdpbiA6IHB1YmxpYyBuc0lGYWN0b3J5IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGRmNzczMDcw LCAweDAxOTksIDB4MTFkMiwgeyAweDgxLCAweDViLCAweDAwLCAweDYwLCAweDA4LCAweDExLCAw eDlkLCAweDdhIH19OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVh dGVQbHVnaW5JbnN0YW5jZShuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJRCAmIGFJSUQs IGNvbnN0IGNoYXIgKmFQbHVnaW5NSU1FVHlwZSwgdm9pZCAqICphUmVzdWx0KSA9IDA7CiMgNzUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBJbml0aWFsaXplKHZvaWQpID0gMDsKIyA4NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3Bs dWdpbi9uc0lQbHVnaW4uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNodXRkb3duKHZvaWQpID0gMDsK IyAxMDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRNSU1FRGVzY3JpcHRpb24oY29uc3QgY2hhciAqICphTUlNRURlc2NyaXB0 aW9uKSA9IDA7CiMgMTEzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbi5o IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VmFsdWUobnNQbHVnaW5WYXJpYWJsZSBhVmFyaWFibGUs IHZvaWQgKiBhVmFsdWUpID0gMDsKCn07CiMgMTA5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1 Z2luL25zcGx1Z2luLmgiIDIKIyAxMjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNw bHVnaW4uaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFn ZXIuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFn ZXIuaCIKY2xhc3MgbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXI7CiMgMzkgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlci5oIgpjbGFzcyBuc0lQbHVnaW5NYW5hZ2Vy IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGRhNThhZDgwLCAweDRlYjYsIDB4 MTFkMiwgeyAweDgxLCAweDY0LCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweDlkLCAweDdhIH19 OyByZXR1cm4gaWlkO30KIyA1NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVn aW5NYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShuc1BsdWdpbk1hbmFnZXJW YXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqIHZhbHVlKSA9IDA7CiMgNjYgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVs b2FkUGx1Z2lucyhQUkJvb2wgcmVsb2FkUGFnZXMpID0gMDsKIyA3NiAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVc2Vy QWdlbnQoY29uc3QgY2hhciAqICogcmVzdWx0aW5nQWdlbnRTdHJpbmcpID0gMDsKCiAgICB2aXJ0 dWFsIG5zcmVzdWx0CiAgICBHZXRVUkwobnNJU3VwcG9ydHMqIHBsdWdpbkluc3QsCiAgICAgICAg ICAgY29uc3QgY2hhciogdXJsLAogICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCA9IF9fbnVs bCwKICAgICAgICAgICBuc0lQbHVnaW5TdHJlYW1MaXN0ZW5lciogc3RyZWFtTGlzdGVuZXIgPSBf X251bGwsCiAgICAgICAgICAgY29uc3QgY2hhciogYWx0SG9zdCA9IF9fbnVsbCwKICAgICAgICAg ICBjb25zdCBjaGFyKiByZWZlcnJlciA9IF9fbnVsbCwKICAgICAgICAgICBQUkJvb2wgZm9yY2VK U0VuYWJsZWQgPSAwKSA9IDA7CiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBQb3N0VVJMKG5zSVN1 cHBvcnRzKiBwbHVnaW5JbnN0LAogICAgICAgICAgICBjb25zdCBjaGFyKiB1cmwsCiAgICAgICAg ICAgIFBSVWludDMyIHBvc3REYXRhTGVuLAogICAgICAgICAgICBjb25zdCBjaGFyKiBwb3N0RGF0 YSwKICAgICAgICAgICAgUFJCb29sIGlzRmlsZSA9IDAsCiAgICAgICAgICAgIGNvbnN0IGNoYXIq IHRhcmdldCA9IF9fbnVsbCwKICAgICAgICAgICAgbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIqIHN0 cmVhbUxpc3RlbmVyID0gX19udWxsLAogICAgICAgICAgICBjb25zdCBjaGFyKiBhbHRIb3N0ID0g X19udWxsLAogICAgICAgICAgICBjb25zdCBjaGFyKiByZWZlcnJlciA9IF9fbnVsbCwKICAgICAg ICAgICAgUFJCb29sIGZvcmNlSlNFbmFibGVkID0gMCwKICAgICAgICAgICAgUFJVaW50MzIgcG9z dEhlYWRlcnNMZW5ndGggPSAwLAogICAgICAgICAgICBjb25zdCBjaGFyKiBwb3N0SGVhZGVycyA9 IF9fbnVsbCkgPSAwOwojIDE3MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVn aW5NYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlclBsdWdpbihjb25zdCBuc0lJ RCYgYUNJRCwgY29uc3QgY2hhciAqYVBsdWdpbk5hbWUsIGNvbnN0IGNoYXIgKmFEZXNjcmlwdGlv biwgY29uc3QgY2hhciAqICogYU1pbWVUeXBlcywgY29uc3QgY2hhciAqICogYU1pbWVEZXNjcmlw dGlvbnMsIGNvbnN0IGNoYXIgKiAqIGFGaWxlRXh0ZW5zaW9ucywgUFJJbnQzMiBhQ291bnQpID0g MDsKIyAxODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlci5o IgogIHZpcnR1YWwgbnNyZXN1bHQgVW5yZWdpc3RlclBsdWdpbihjb25zdCBuc0lJRCYgYUNJRCkg PSAwOwojIDE5MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2Vy LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBHZXRVUkxXaXRoSGVhZGVycyhuc0lTdXBwb3J0 cyogcGx1Z2luSW5zdCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHVybCwKICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCA9IF9fbnVsbCwKICAgICAgICAg ICAgICAgICAgICAgIG5zSVBsdWdpblN0cmVhbUxpc3RlbmVyKiBzdHJlYW1MaXN0ZW5lciA9IF9f bnVsbCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFsdEhvc3QgPSBfX251bGws CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWZlcnJlciA9IF9fbnVsbCwKICAg ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBmb3JjZUpTRW5hYmxlZCA9IDAsCiAgICAgICAgICAg ICAgICAgICAgICBQUlVpbnQzMiBnZXRIZWFkZXJzTGVuZ3RoID0gMCwKICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIqIGdldEhlYWRlcnMgPSBfX251bGwpID0gMDsKfTsKIyAxMjcgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4uaCIgMgoKCgoKCgojIDEgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VQZWVyLmgiIDEKIyAyMiAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZVBlZXIuaCIKc3Ry dWN0IEpTT2JqZWN0OwpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CiMgNDIgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VQZWVyLmgiCmNsYXNzIG5zSVBsdWdpbklu c3RhbmNlUGVlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg0YjdjZWEyMCwg MHgwMTliLCAweDExZDIsIHsgMHg4MSwgMHg1YiwgMHgwMCwgMHg2MCwgMHgwOCwgMHgxMSwgMHg5 ZCwgMHg3YSB9fTsgcmV0dXJuIGlpZDt9CiMgNTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVn aW4vbnNJUGx1Z2luSW5zdGFuY2VQZWVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShu c1BsdWdpbkluc3RhbmNlUGVlclZhcmlhYmxlIGFWYXJpYWJsZSwgdm9pZCAqIGFWYWx1ZSkgPSAw OwojIDY4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlUGVl ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TUlNRVR5cGUobnNNSU1FVHlwZSAqYU1JTUVUeXBl KSA9IDA7CiMgODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFu Y2VQZWVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb2RlKG5zUGx1Z2luTW9kZSAqYU1vZGUp ID0gMDsKIyA5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5j ZVBlZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1N0cmVhbShuc01JTUVUeXBlIGFUeXBlLCBj b25zdCBjaGFyICphVGFyZ2V0LCBuc0lPdXRwdXRTdHJlYW0gKiphUmVzdWx0KSA9IDA7CiMgMTA4 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlUGVlci5oIgog IHZpcnR1YWwgbnNyZXN1bHQgU2hvd1N0YXR1cyhjb25zdCBjaGFyICphTWVzc2FnZSkgPSAwOwoj IDExOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZVBlZXIu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpbmRvd1NpemUoUFJVaW50MzIgYVdpZHRoLCBQUlVp bnQzMiBhSGVpZ2h0KSA9IDA7Cgp9OwojIDEzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdp bi9uc3BsdWdpbi5oIiAyCgoKCgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4v bnNJUGx1Z2luVGFnSW5mby5oIiAxCiMgMjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4v bnNJUGx1Z2luVGFnSW5mby5oIgpjbGFzcyBuc0lET01FbGVtZW50OwojIDM3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8uaCIKY2xhc3MgbnNJUGx1Z2luVGFn SW5mbyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1ZjFlYzFkMCwgMHgwMTli LCAweDExZDIsIHsgMHg4MSwgMHg1YiwgMHgwMCwgMHg2MCwgMHgwOCwgMHgxMSwgMHg5ZCwgMHg3 YSB9fTsgcmV0dXJuIGlpZDt9CiMgNTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJ UGx1Z2luVGFnSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlcyhQUlVpbnQx NiAmIGFDb3VudCwgY29uc3QgY2hhciogY29uc3QqICYgYU5hbWVzLCBjb25zdCBjaGFyKiBjb25z dCogJiBhVmFsdWVzKSA9IDA7CiMgNjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJ UGx1Z2luVGFnSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlKGNvbnN0IGNo YXIgKmFOYW1lLCBjb25zdCBjaGFyICogKmFSZXN1bHQpID0gMDsKCn07CiMgMTQyICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvcGx1Z2luL25zcGx1Z2luLmgiIDIKCgoKCgoKCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lXaW5kb3dsZXNzUGx1Z0luc3RQZWVyLmgiIDEKIyAzMCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lXaW5kb3dsZXNzUGx1Z0luc3RQZWVyLmgi CmNsYXNzIG5zSVdpbmRvd2xlc3NQbHVnaW5JbnN0YW5jZVBlZXIgOiBwdWJsaWMgbnNJU3VwcG9y dHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4NTdiNGUyZjAsIDB4MDE5YiwgMHgxMWQyLCB7IDB4ODEsIDB4NWIs IDB4MDAsIDB4NjAsIDB4MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVjdChuc1BsdWdpblJlY3QgKiBhUmVjdCkg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVnaW9uKG5zUGx1Z2luUmVn aW9uIGFSZWdpb24pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRm9yY2VSZWRyYXcodm9p ZCkgPSAwOwoKfTsKIyAxNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4u aCIgMgojIDE2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbi5oIgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlcjIuaCIgMQojIDE3 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFnZXIyLmgiCmNsYXNz IG5zSVBsdWdpbjsKCmNsYXNzIG5zSUV2ZW50SGFuZGxlcjsKIyAzMyAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyMi5oIgpjbGFzcyBuc0lQbHVnaW5NYW5hZ2Vy MiA6IHB1YmxpYyBuc0lQbHVnaW5NYW5hZ2VyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQyOTYyZGMwLCAweDRl YjYsIDB4MTFkMiwgeyAweDgxLCAweDY0LCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweDlkLCAw eDdhIH19OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdpbldhaXRD dXJzb3Iodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZFdhaXRDdXJzb3Io dm9pZCkgPSAwOwojIDYyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1h bmFnZXIyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTdXBwb3J0c1VSTFByb3RvY29sKGNvbnN0IGNo YXIgKmFQcm90b2NvbCwgUFJCb29sICphUmVzdWx0KSA9IDA7CiMgNzUgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlcjIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5v dGlmeVN0YXR1c0NoYW5nZShuc0lQbHVnaW4gKmFQbHVnaW4sIG5zcmVzdWx0IGFTdGF0dXMpID0g MDsKIyA5MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyMi5o IgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZFByb3h5Rm9yVVJMKGNvbnN0IGNoYXIgKmFVUkwsIGNo YXIgKiphUmVzdWx0KSA9IDA7CiMgMTAyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25z SVBsdWdpbk1hbmFnZXIyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlcldpbmRvdyhuc0lF dmVudEhhbmRsZXIgKmFIYW5kbGVyLCBuc1BsdWdpblBsYXRmb3JtV2luZG93UmVmIGFXaW5kb3cp ID0gMDsKIyAxMTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdl cjIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJXaW5kb3cobnNJRXZlbnRIYW5kbGVy ICphSGFuZGxlciwgbnNQbHVnaW5QbGF0Zm9ybVdpbmRvd1JlZiBhV2luZG93KSA9IDA7CiMgMTI0 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFnZXIyLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZU1lbnVJRChuc0lFdmVudEhhbmRsZXIgKmFIYW5kbGVyLCBQ UkJvb2wgYUlzU3VibWVudSwgUFJJbnQxNiAqYVJlc3VsdCkgPSAwOwojIDEzNCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyMi5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgRGVhbGxvY2F0ZU1lbnVJRChuc0lFdmVudEhhbmRsZXIgKmFIYW5kbGVyLCBQUkludDE2IGFN ZW51SUQpID0gMDsKIyAxNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2lu TWFuYWdlcjIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0FsbG9jYXRlZE1lbnVJRChuc0lFdmVu dEhhbmRsZXIgKmFIYW5kbGVyLCBQUkludDE2IGFNZW51SUQsIFBSQm9vbCAqYVJlc3VsdCkgPSAw OwoKfTsKIyAxNjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4uaCIgMgoK CgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSUZpbGVVdGlsaXRpZXMu aCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSUZpbGVVdGlsaXRpZXMu aCIKY2xhc3MgbnNJRmlsZVV0aWxpdGllcyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHg4OWEzMWNlMCwgMHgwMTlhLCAweDExZDIsIHsgMHg4MSwgMHg1YiwgMHgwMCwgMHg2MCwg MHgwOCwgMHgxMSwgMHg5ZCwgMHg3YSB9fTsgcmV0dXJuIGlpZDt9CiMgNDYgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9wbHVnaW4vbnNJRmlsZVV0aWxpdGllcy5oIgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0UHJvZ3JhbVBhdGgoY29uc3QgY2hhciAqICphUHJvZ3JhbVBhdGgpID0gMDsKIyA1NSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lGaWxlVXRpbGl0aWVzLmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRUZW1wRGlyUGF0aChjb25zdCBjaGFyICogKmFUZW1wRGlyUGF0aCkgPSAwOwoj IDY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSUZpbGVVdGlsaXRpZXMuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IE5ld1RlbXBGaWxlTmFtZShjb25zdCBjaGFyICphUHJlZml4LCBQUlVp bnQzMiBhTGVuZ3RoLCBjaGFyICogYUJ1ZmZlcikgPSAwOwoKfTsKIyAxNzIgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4uaCIgMgoKCgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8yLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5UYWdJbmZvMi5oIgplbnVtIG5zUGx1Z2luVGFnVHlw ZSB7CiAgbnNQbHVnaW5UYWdUeXBlX1Vua25vd24sCiAgbnNQbHVnaW5UYWdUeXBlX0VtYmVkLAog IG5zUGx1Z2luVGFnVHlwZV9PYmplY3QsCiAgbnNQbHVnaW5UYWdUeXBlX0FwcGxldAp9OwojIDMx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8yLmgiCmNsYXNz IG5zSVBsdWdpblRhZ0luZm8yIDogcHVibGljIG5zSVBsdWdpblRhZ0luZm8gewogcHVibGljOgoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g ezB4NmE0OWM5YTAsIDB4MDE5YiwgMHgxMWQyLCB7IDB4ODEsIDB4NWIsIDB4MDAsIDB4NjAsIDB4 MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0VGFnVHlwZShuc1BsdWdpblRhZ1R5cGUgKmFUYWdUeXBlKSA9IDA7CgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFRhZ1RleHQoY29uc3QgY2hhciAqICphVGFnVGV4dCkgPSAwOwoj IDU2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8yLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJhbWV0ZXJzKFBSVWludDE2ICYgYUNvdW50LCBjb25zdCBj aGFyKiBjb25zdCogJiBhTmFtZXMsIGNvbnN0IGNoYXIqIGNvbnN0KiAmIGFWYWx1ZXMpID0gMDsK IyA2NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5UYWdJbmZvMi5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyYW1ldGVyKGNvbnN0IGNoYXIgKmFOYW1lLCBjb25zdCBj aGFyICogKmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnRC YXNlKGNvbnN0IGNoYXIgKiAqYURvY3VtZW50QmFzZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0RG9jdW1lbnRFbmNvZGluZyhjb25zdCBjaGFyICogKmFEb2N1bWVudEVuY29kaW5n KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWdubWVudChjb25zdCBjaGFyICog KmFFbGlnbm1lbnQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgoUFJVaW50 MzIgKmFXaWR0aCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQoUFJVaW50 MzIgKmFIZWlnaHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyVmVydFNw YWNlKFBSVWludDMyICphQm9yZGVyVmVydFNwYWNlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldEJvcmRlckhvcml6U3BhY2UoUFJVaW50MzIgKmFCb3JkZXJIb3JpelNwYWNlKSA9IDA7 CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaXF1ZUlEKFBSVWludDMyICphVW5pcXVlSUQp ID0gMDsKIyAxMjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luVGFnSW5m bzIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERPTUVsZW1lbnQobnNJRE9NRWxlbWVudCAqICph RE9NRWxlbWVudCkgPSAwOwoKfTsKIyAxODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4v bnNwbHVnaW4uaCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJT3V0cHV0 U3RyZWFtLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSU91dHB1dFN0 cmVhbS5oIgpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CgpjbGFzcyBuc0lJbnB1dFN0cmVhbTsKIyA0 MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSU91dHB1dFN0cmVhbS5oIgp0eXBlZGVm IG5zcmVzdWx0ICgqIG5zUmVhZFNlZ21lbnRGdW4pKG5zSU91dHB1dFN0cmVhbSAqYU91dFN0cmVh bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ2xvc3VyZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphVG9TZWdtZW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFGcm9tT2Zmc2V0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFDb3VudCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiAqYVJlYWRDb3Vu dCk7CiMgNTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIK Y2xhc3MgbnNJT3V0cHV0U3RyZWFtIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw eDBkMGFjZDJhLCAweDYxYjQsIDB4MTFkNCwgeyAweDk4LCAweDc3LCAweDAwLCAweGMwLCAweDRm LCAweGEwLCAweGNmLCAweDRhIH19OyByZXR1cm4gaWlkO30KIyA3MyAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3hwY29tL25zSU91dHB1dFN0cmVhbS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvc2Uo dm9pZCkgPSAwOwojIDgyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJT3V0cHV0U3Ry ZWFtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGbHVzaCh2b2lkKSA9IDA7CiMgOTcgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0 IFdyaXRlKGNvbnN0IGNoYXIgKmFCdWYsIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2 YWwpID0gMDsKIyAxMTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJl YW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFdyaXRlRnJvbShuc0lJbnB1dFN0cmVhbSAqYUZyb21T dHJlYW0sIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKIyAxNDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5z cmVzdWx0IFdyaXRlU2VnbWVudHMobnNSZWFkU2VnbWVudEZ1biBhUmVhZGVyLCB2b2lkICogYUNs b3N1cmUsIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKIyAxNTAgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5z cmVzdWx0IElzTm9uQmxvY2tpbmcoUFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDE4MiAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbi5oIiAyCiMgMjIgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VPd25lci5oIiAyCmNsYXNzIG5zSVBs dWdpbkluc3RhbmNlOwoKY2xhc3MgbnNJRG9jdW1lbnQ7CiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VPd25lci5oIgpjbGFzcyBuc0lQbHVnaW5JbnN0 YW5jZU93bmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDE4MjcwODcwLCAw eDMyZjEsIDB4MTFkMiwgeyAweGE4LCAweDMwLCAweDAwLCAweDQwLCAweDk1LCAweDlhLCAweDI4 LCAweGM5IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SW5zdGFu Y2UobnNJUGx1Z2luSW5zdGFuY2UgKmFJbnN0YW5jZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRJbnN0YW5jZShuc0lQbHVnaW5JbnN0YW5jZSAqICYgYUluc3RhbmNlKSA9IDA7CgoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNQbHVnaW5XaW5kb3cgKiAmIGFXaW5k b3cpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW9kZShuc1BsdWdpbk1vZGUgKmFN b2RlKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlV2lkZ2V0KHZvaWQpID0g MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0CiAgR2V0VVJMKGNvbnN0IGNoYXIgKmFVUkwsIGNv bnN0IGNoYXIgKmFUYXJnZXQsCiAgICAgICAgIHZvaWQgKmFQb3N0RGF0YSwgUFJVaW50MzIgYVBv c3REYXRhTGVuLAogICAgICAgICB2b2lkICphSGVhZGVyc0RhdGEsIFBSVWludDMyIGFIZWFkZXJz RGF0YUxlbiwKICAgICAgICAgUFJCb29sIGFJc0ZpbGUgPSAwKSA9IDA7CgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgU2hvd1N0YXR1cyhjb25zdCBjaGFyICphU3RhdHVzTXNnKSA9IDA7CgogIHZpcnR1 YWwgbnNyZXN1bHQKICBTaG93U3RhdHVzKGNvbnN0IFBSVW5pY2hhciAqYVN0YXR1c01zZykgPSAw OwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERvY3VtZW50KG5zSURvY3VtZW50ICogKmFEb2N1 bWVudCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVjdChuc1BsdWdp blJlY3QgKiBhUmVjdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVn aW9uKG5zUGx1Z2luUmVnaW9uIGFSZWdpb24pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg Rm9yY2VSZWRyYXcodm9pZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShu c1BsdWdpbkluc3RhbmNlUGVlclZhcmlhYmxlIGFWYXJpYWJsZSwgdm9pZCAqIGFWYWx1ZSkgPSAw OwoKfTsKIyAxOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5Ib3N0Lmgi IDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTGlzdGVuZXIu aCIgMQojIDEwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTGlzdGVuZXIu aCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdE9ic2VydmVyLmgi IDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJlcXVlc3RPYnNlcnZlci5o IgpjbGFzcyBuc0lSZXF1ZXN0OwojIDMyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJ UmVxdWVzdE9ic2VydmVyLmgiCmNsYXNzIG5zSVJlcXVlc3RPYnNlcnZlciA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmZDkxZTJlMCwgMHgxNDgxLCAweDExZDMsIHsgMHg5Mywg MHgzMywgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MCB9fTsgcmV0dXJuIGlpZDt9 CiMgNDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lSZXF1ZXN0T2JzZXJ2ZXIuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IE9uU3RhcnRSZXF1ZXN0KG5zSVJlcXVlc3QgKmFSZXF1ZXN0LCBu c0lTdXBwb3J0cyAqYUNvbnRleHQpID0gMDsKIyA2MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25l Y2tvL25zSVJlcXVlc3RPYnNlcnZlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdG9wUmVxdWVz dChuc0lSZXF1ZXN0ICphUmVxdWVzdCwgbnNJU3VwcG9ydHMgKmFDb250ZXh0LCBuc3Jlc3VsdCBh U3RhdHVzQ29kZSkgPSAwOwoKfTsKIyAxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25z SVN0cmVhbUxpc3RlbmVyLmgiIDIKCgoKCgoKY2xhc3MgbnNJSW5wdXRTdHJlYW07CiMgMzIgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lTdHJlYW1MaXN0ZW5lci5oIgpjbGFzcyBuc0lT dHJlYW1MaXN0ZW5lciA6IHB1YmxpYyBuc0lSZXF1ZXN0T2JzZXJ2ZXIgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 MWE2MzcwMjAsIDB4MTQ4MiwgMHgxMWQzLCB7IDB4OTMsIDB4MzMsIDB4MDAsIDB4MTAsIDB4NGIs IDB4YTAsIDB4ZmQsIDB4NDAgfX07IHJldHVybiBpaWQ7fQojIDUyICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbmVja28vbnNJU3RyZWFtTGlzdGVuZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE9uRGF0 YUF2YWlsYWJsZShuc0lSZXF1ZXN0ICphUmVxdWVzdCwgbnNJU3VwcG9ydHMgKmFDb250ZXh0LCBu c0lJbnB1dFN0cmVhbSAqYUlucHV0U3RyZWFtLCBQUlVpbnQzMiBhT2Zmc2V0LCBQUlVpbnQzMiBh Q291bnQpID0gMDsKCn07CiMgMjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1 Z2luSG9zdC5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN0cmlu Z1N0cmVhbS5oIiAxCiMgMzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdHJpbmdT dHJlYW0uaCIKY2xhc3MgbnNJU3RyaW5nSW5wdXRTdHJlYW0gOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4NDUwY2QyZDQsIDB4ZjBmZCwgMHg0MjRkLCB7IDB4YjMsIDB4NjUsIDB4 YjEsIDB4MjUsIDB4MWYsIDB4ODAsIDB4ZmQsIDB4NTMgfX07IHJldHVybiBpaWQ7fQojIDQ2ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3RyaW5nU3RyZWFtLmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXREYXRhKGNvbnN0IGNoYXIgKmRhdGEsIFBSSW50MzIgZGF0YUxlbikgPSAwOwoj IDYxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3RyaW5nU3RyZWFtLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBBZG9wdERhdGEoY2hhciAqIGRhdGEsIFBSSW50MzIgZGF0YUxlbikgPSAw OwojIDcyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3RyaW5nU3RyZWFtLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBTaGFyZURhdGEoY29uc3QgY2hhciAqZGF0YSwgUFJJbnQzMiBkYXRh TGVuKSA9IDA7Cgp9OwojIDE1MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN0cmlu Z1N0cmVhbS5oIgpleHRlcm4gIkMiIG5zcmVzdWx0IE5TX05ld1N0cmluZ0lucHV0U3RyZWFtKAog ICAgbnNJSW5wdXRTdHJlYW0qKiBhU3RyZWFtUmVzdWx0LAogICAgY29uc3QgbnNBU3RyaW5nJiBh U3RyaW5nVG9SZWFkKTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdDU3RyaW5nSW5wdXRT dHJlYW0oCiAgICBuc0lJbnB1dFN0cmVhbSoqIGFTdHJlYW1SZXN1bHQsCiAgICBjb25zdCBuc0FD U3RyaW5nJiBhU3RyaW5nVG9SZWFkKTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdDaGFy SW5wdXRTdHJlYW0oCiAgICBuc0lTdXBwb3J0cyoqIGFTdHJlYW1SZXN1bHQsCiAgICBjb25zdCBj aGFyKiBhU3RyaW5nVG9SZWFkKTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdDaGFyT3V0 cHV0U3RyZWFtKAogICAgbnNJU3VwcG9ydHMqKiBhU3RyZWFtUmVzdWx0LAogICAgY2hhcioqIGFT dHJpbmdUb0NoYW5nZSk7CgoKCmV4dGVybiAiQyIgbnNyZXN1bHQgTlNfTmV3Qnl0ZUlucHV0U3Ry ZWFtKAogICAgbnNJU3VwcG9ydHMqKiBhU3RyZWFtUmVzdWx0LAogICAgY29uc3QgY2hhciogYVN0 cmluZ1RvUmVhZCwKICAgIFBSSW50MzIgYUxlbmd0aCk7CiMgMjcgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9wbHVnaW4vbnNJUGx1Z2luSG9zdC5oIiAyCiMgMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9wbHVnaW4vbnNJUGx1Z2luSG9zdC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNr by9uc05ldFV0aWwuaCIgMQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRV dGlsLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0RXJyb3IuaCIgMQoj IDQyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRDSUQuaCIgMQojIDQzICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKCgoKCiMgMSAiL3Zhci90bXAvcG9ydGFnZS9t b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAxCiMg NDcgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3ByaW8uaCIKIyAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgNTIgIi92YXIvdG1w L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW5ydmFsLmgiCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgUFJVaW50MzIgUFJJbnRlcnZhbFRp bWU7CiMgMTA1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4gUFJJbnRlcnZhbFRpbWUgUFJfSW50 ZXJ2YWxOb3codm9pZCk7CiMgMTIzICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4gUFJVaW50MzIg UFJfVGlja3NQZXJTZWNvbmQodm9pZCk7CiMgMTQyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEt MS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4g UFJJbnRlcnZhbFRpbWUgUFJfU2Vjb25kc1RvSW50ZXJ2YWwoUFJVaW50MzIgc2Vjb25kcyk7CmV4 dGVybiBQUkludGVydmFsVGltZSBQUl9NaWxsaXNlY29uZHNUb0ludGVydmFsKFBSVWludDMyIG1p bGxpKTsKZXh0ZXJuIFBSSW50ZXJ2YWxUaW1lIFBSX01pY3Jvc2Vjb25kc1RvSW50ZXJ2YWwoUFJV aW50MzIgbWljcm8pOwojIDE2MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3Jr L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIKZXh0ZXJuIFBSVWludDMyIFBS X0ludGVydmFsVG9TZWNvbmRzKFBSSW50ZXJ2YWxUaW1lIHRpY2tzKTsKZXh0ZXJuIFBSVWludDMy IFBSX0ludGVydmFsVG9NaWxsaXNlY29uZHMoUFJJbnRlcnZhbFRpbWUgdGlja3MpOwpleHRlcm4g UFJVaW50MzIgUFJfSW50ZXJ2YWxUb01pY3Jvc2Vjb25kcyhQUkludGVydmFsVGltZSB0aWNrcyk7 Cgp9CiMgNDggIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIgMgojIDEgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0x LjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAxCiMgNjUgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3ByaW5ldC5oIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDEgMwojIDI1ICIv dXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL3Vpby5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIgMwpleHRlcm4g IkMiIHsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Vpby5oIiAxIDMKIyA0MiAiL3Vzci9pbmNs dWRlL2JpdHMvdWlvLmgiIDMKc3RydWN0IGlvdmVjCiAgewogICAgdm9pZCAqaW92X2Jhc2U7CiAg ICBzaXplX3QgaW92X2xlbjsKICB9OwojIDMwICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAyIDMK CgoKCgoKCmV4dGVybiBzc2l6ZV90IHJlYWR2IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92 ZWMgKl9fdmVjdG9yLCBpbnQgX19jb3VudCkKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNz aXplX3Qgd3JpdGV2IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9fdmVjdG9yLCBp bnQgX19jb3VudCkKICAgICB0aHJvdyAoKTsKCn0KIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy9zb2Nr ZXQuaCIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIg MwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDEgMwojIDI5ICIvdXNyL2lu Y2x1ZGUvYml0cy9zb2NrZXQuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRz L3NvY2tldC5oIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8z LjIuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0 LmgiIDIgMwoKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CgoKCgplbnVtIF9fc29j a2V0X3R5cGUKewogIFNPQ0tfU1RSRUFNID0gMSwKCgogIFNPQ0tfREdSQU0gPSAyLAoKCiAgU09D S19SQVcgPSAzLAoKICBTT0NLX1JETSA9IDQsCgogIFNPQ0tfU0VRUEFDS0VUID0gNSwKCgogIFNP Q0tfUEFDS0VUID0gMTAKCgoKfTsKIyAxNDIgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2FkZHIuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk ZS9iaXRzL3NvY2thZGRyLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5 X3Q7CiMgMTQzICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCgoKc3RydWN0IHNvY2th ZGRyCiAgewogICAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogICAgY2hhciBzYV9kYXRhWzE0XTsK ICB9OwojIDE2MiAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMKc3RydWN0IHNvY2thZGRy X3N0b3JhZ2UKICB7CiAgICBzYV9mYW1pbHlfdCBzc19mYW1pbHk7CiAgICBfX3VpbnQzMl90IF9f c3NfYWxpZ247CiAgICBjaGFyIF9fc3NfcGFkZGluZ1soMTI4IC0gKDIgKiBzaXplb2YgKF9fdWlu dDMyX3QpKSldOwogIH07CgoKCmVudW0KICB7CiAgICBNU0dfT09CID0gMHgwMSwKCiAgICBNU0df UEVFSyA9IDB4MDIsCgogICAgTVNHX0RPTlRST1VURSA9IDB4MDQsCgoKCiAgICBNU0dfVFJZSEFS RCA9IE1TR19ET05UUk9VVEUsCgoKICAgIE1TR19DVFJVTkMgPSAweDA4LAoKICAgIE1TR19QUk9Y WSA9IDB4MTAsCgogICAgTVNHX1RSVU5DID0gMHgyMCwKCiAgICBNU0dfRE9OVFdBSVQgPSAweDQw LAoKICAgIE1TR19FT1IgPSAweDgwLAoKICAgIE1TR19XQUlUQUxMID0gMHgxMDAsCgogICAgTVNH X0ZJTiA9IDB4MjAwLAoKICAgIE1TR19TWU4gPSAweDQwMCwKCiAgICBNU0dfQ09ORklSTSA9IDB4 ODAwLAoKICAgIE1TR19SU1QgPSAweDEwMDAsCgogICAgTVNHX0VSUlFVRVVFID0gMHgyMDAwLAoK ICAgIE1TR19OT1NJR05BTCA9IDB4NDAwMCwKCiAgICBNU0dfTU9SRSA9IDB4ODAwMAoKICB9OwoK CgoKc3RydWN0IG1zZ2hkcgogIHsKICAgIHZvaWQgKm1zZ19uYW1lOwogICAgc29ja2xlbl90IG1z Z19uYW1lbGVuOwoKICAgIHN0cnVjdCBpb3ZlYyAqbXNnX2lvdjsKICAgIGludCBtc2dfaW92bGVu OwoKICAgIHZvaWQgKm1zZ19jb250cm9sOwogICAgc29ja2xlbl90IG1zZ19jb250cm9sbGVuOwoK ICAgIGludCBtc2dfZmxhZ3M7CiAgfTsKCgpzdHJ1Y3QgY21zZ2hkcgogIHsKICAgIHNpemVfdCBj bXNnX2xlbjsKCiAgICBpbnQgY21zZ19sZXZlbDsKICAgIGludCBjbXNnX3R5cGU7CgoKCiAgfTsK IyAyNTcgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAzCmV4dGVybiBzdHJ1Y3QgY21zZ2hk ciAqX19jbXNnX254dGhkciAoc3RydWN0IG1zZ2hkciAqX19taGRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpIHRocm93ICgpOwoK CgoKZXh0ZXJuIF9faW5saW5lIHN0cnVjdCBjbXNnaGRyICoKX19jbXNnX254dGhkciAoc3RydWN0 IG1zZ2hkciAqX19taGRyLCBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKSB0aHJvdyAoKQp7CiAgaWYg KChzaXplX3QpIF9fY21zZy0+Y21zZ19sZW4gPCBzaXplb2YgKHN0cnVjdCBjbXNnaGRyKSkKCiAg ICByZXR1cm4gMDsKCiAgX19jbXNnID0gKHN0cnVjdCBjbXNnaGRyICopICgodW5zaWduZWQgY2hh ciAqKSBfX2Ntc2cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKCgoX19jbXNnLT5j bXNnX2xlbikgKyBzaXplb2YgKHNpemVfdCkgLSAxKSAmIChzaXplX3QpIH4oc2l6ZW9mIChzaXpl X3QpIC0gMSkpKTsKICBpZiAoKHVuc2lnbmVkIGNoYXIgKikgKF9fY21zZyArIDEpID4gKCh1bnNp Z25lZCBjaGFyICopIF9fbWhkci0+bXNnX2NvbnRyb2wKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsgX19taGRyLT5tc2dfY29udHJvbGxlbikKICAgICAgfHwgKCh1bnNp Z25lZCBjaGFyICopIF9fY21zZyArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChzaXpl X3QpIC0gMSkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKQogICAgICAgICAgPiAo KHVuc2lnbmVkIGNoYXIgKikgX19taGRyLT5tc2dfY29udHJvbCArIF9fbWhkci0+bXNnX2NvbnRy b2xsZW4pKSkKCiAgICByZXR1cm4gMDsKICByZXR1cm4gX19jbXNnOwp9CgoKCgplbnVtCiAgewog ICAgU0NNX1JJR0hUUyA9IDB4MDEsCgoKICAgIFNDTV9DUkVERU5USUFMUyA9IDB4MDIsCgoKICAg IF9fU0NNX0NPTk5FQ1QgPSAweDAzCiAgfTsKCgoKc3RydWN0IHVjcmVkCnsKICBwaWRfdCBwaWQ7 CiAgdWlkX3QgdWlkOwogIGdpZF90IGdpZDsKfTsKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vc29j a2V0LmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxIDMKIyA1ICIv dXNyL2luY2x1ZGUvYXNtL3NvY2tldC5oIiAyIDMKIyAzMDYgIi91c3IvaW5jbHVkZS9iaXRzL3Nv Y2tldC5oIiAyIDMKCgoKc3RydWN0IGxpbmdlcgogIHsKICAgIGludCBsX29ub2ZmOwogICAgaW50 IGxfbGluZ2VyOwogIH07CiMgMzYgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIgMwoKCgoK c3RydWN0IG9zb2NrYWRkcgogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBzYV9mYW1pbHk7CiAg ICB1bnNpZ25lZCBjaGFyIHNhX2RhdGFbMTRdOwogIH07CgoKCgplbnVtCnsKICBTSFVUX1JEID0g MCwKCiAgU0hVVF9XUiwKCiAgU0hVVF9SRFdSCgp9OwojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy9z b2NrZXQuaCIgMwpleHRlcm4gaW50IHNvY2tldCAoaW50IF9fZG9tYWluLCBpbnQgX190eXBlLCBp bnQgX19wcm90b2NvbCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzb2NrZXRwYWlyIChpbnQg X19kb21haW4sIGludCBfX3R5cGUsIGludCBfX3Byb3RvY29sLAogICAgICAgICAgICAgICAgICAg ICAgIGludCBfX2Zkc1syXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kIChpbnQgX19mZCwg X19jb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbikKICAgICB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHNvY2tuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2th ZGRyICpfX3Jlc3RyaWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90 ICpfX3Jlc3RyaWN0IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGNvbm5lY3QgKGlu dCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqIF9fYWRkciwgc29ja2xlbl90IF9fbGVu KQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGdldHBlZXJuYW1lIChpbnQgX19mZCwgc3Ry dWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAg c29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3Qg c2VuZCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sIGludCBfX2Zs YWdzKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gc3NpemVfdCByZWN2IChpbnQgX19mZCwgdm9p ZCAqX19idWYsIHNpemVfdCBfX24sIGludCBfX2ZsYWdzKQogICAgIHRocm93ICgpOwoKCgpleHRl cm4gc3NpemVfdCBzZW5kdG8gKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3Qg X19uLAogICAgICAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCBfX2NvbnN0IHN0cnVjdCBz b2NrYWRkciAqIF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgX19hZGRy X2xlbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNzaXplX3QgcmVjdmZyb20gKGludCBfX2ZkLCB2 b2lkICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19uLCBpbnQgX19mbGFncywKICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX2FkZHIsIHNvY2ts ZW5fdCAqX19yZXN0cmljdCBfX2FkZHJfbGVuKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNz aXplX3Qgc2VuZG1zZyAoaW50IF9fZmQsIF9fY29uc3Qgc3RydWN0IG1zZ2hkciAqX19tZXNzYWdl LCBpbnQgX19mbGFncykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3QgcmVjdm1zZyAo aW50IF9fZmQsIHN0cnVjdCBtc2doZHIgKl9fbWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50IF9fbGV2ZWws IGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBf X29wdHZhbCwKICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19v cHRsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50 IF9fbGV2ZWwsIGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2 b2lkICpfX29wdHZhbCwgc29ja2xlbl90IF9fb3B0bGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IGxpc3RlbiAoaW50IF9fZmQsIGludCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IGFjY2VwdCAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX2FkZHIsCiAg ICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19hZGRyX2xlbikKICAgICB0 aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgc2h1dGRvd24gKGludCBfX2ZkLCBpbnQgX19ob3cp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzb2NrYXRtYXJrIChpbnQgX19mZCkgdGhyb3cgKCk7 CgoKCgoKCgpleHRlcm4gaW50IGlzZmR0eXBlIChpbnQgX19mZCwgaW50IF9fZmR0eXBlKSB0aHJv dyAoKTsKCgp9CiMgNjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL25ldGlu ZXQvaW4uaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvc3RkaW50LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N0 ZGludC5oIiAyIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgdW5zaWdu ZWQgY2hhciB1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50MTZfdDsKCnR5 cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwoKCgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnQ2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFy IGludF9sZWFzdDhfdDsKdHlwZWRlZiBzaG9ydCBpbnQgaW50X2xlYXN0MTZfdDsKdHlwZWRlZiBp bnQgaW50X2xlYXN0MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQg aW50X2xlYXN0NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfbGVhc3Q4X3Q7CnR5 cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnRfbGVhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVk IGludCB1aW50X2xlYXN0MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgdWludF9sZWFzdDY0X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50 X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiBpbnQgaW50X2Zhc3QxNl90Owp0eXBlZGVmIGludCBpbnRf ZmFzdDMyX3Q7Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9mYXN0NjRf dDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfZmFzdDhfdDsKCgoKCgp0eXBlZGVmIHVu c2lnbmVkIGludCB1aW50X2Zhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2Zhc3Qz Ml90OwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50X2Zh c3Q2NF90OwojIDEyNiAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgaW50IGludHB0 cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsKIyAxMzggIi91c3IvaW5jbHVk ZS9zdGRpbnQuaCIgMwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRtYXhf dDsKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludG1heF90 OwojIDI0ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgoKZXh0ZXJuICJDIiB7CgoK ZW51bQogIHsKICAgIElQUFJPVE9fSVAgPSAwLAoKICAgIElQUFJPVE9fSE9QT1BUUyA9IDAsCgog ICAgSVBQUk9UT19JQ01QID0gMSwKCiAgICBJUFBST1RPX0lHTVAgPSAyLAoKICAgIElQUFJPVE9f SVBJUCA9IDQsCgogICAgSVBQUk9UT19UQ1AgPSA2LAoKICAgIElQUFJPVE9fRUdQID0gOCwKCiAg ICBJUFBST1RPX1BVUCA9IDEyLAoKICAgIElQUFJPVE9fVURQID0gMTcsCgogICAgSVBQUk9UT19J RFAgPSAyMiwKCiAgICBJUFBST1RPX1RQID0gMjksCgogICAgSVBQUk9UT19JUFY2ID0gNDEsCgog ICAgSVBQUk9UT19ST1VUSU5HID0gNDMsCgogICAgSVBQUk9UT19GUkFHTUVOVCA9IDQ0LAoKICAg IElQUFJPVE9fUlNWUCA9IDQ2LAoKICAgIElQUFJPVE9fR1JFID0gNDcsCgogICAgSVBQUk9UT19F U1AgPSA1MCwKCiAgICBJUFBST1RPX0FIID0gNTEsCgogICAgSVBQUk9UT19JQ01QVjYgPSA1OCwK CiAgICBJUFBST1RPX05PTkUgPSA1OSwKCiAgICBJUFBST1RPX0RTVE9QVFMgPSA2MCwKCiAgICBJ UFBST1RPX01UUCA9IDkyLAoKICAgIElQUFJPVE9fRU5DQVAgPSA5OCwKCiAgICBJUFBST1RPX1BJ TSA9IDEwMywKCiAgICBJUFBST1RPX0NPTVAgPSAxMDgsCgogICAgSVBQUk9UT19SQVcgPSAyNTUs CgogICAgSVBQUk9UT19NQVgKICB9OwoKCgp0eXBlZGVmIHVpbnQxNl90IGluX3BvcnRfdDsKCgpl bnVtCiAgewogICAgSVBQT1JUX0VDSE8gPSA3LAogICAgSVBQT1JUX0RJU0NBUkQgPSA5LAogICAg SVBQT1JUX1NZU1RBVCA9IDExLAogICAgSVBQT1JUX0RBWVRJTUUgPSAxMywKICAgIElQUE9SVF9O RVRTVEFUID0gMTUsCiAgICBJUFBPUlRfRlRQID0gMjEsCiAgICBJUFBPUlRfVEVMTkVUID0gMjMs CiAgICBJUFBPUlRfU01UUCA9IDI1LAogICAgSVBQT1JUX1RJTUVTRVJWRVIgPSAzNywKICAgIElQ UE9SVF9OQU1FU0VSVkVSID0gNDIsCiAgICBJUFBPUlRfV0hPSVMgPSA0MywKICAgIElQUE9SVF9N VFAgPSA1NywKCiAgICBJUFBPUlRfVEZUUCA9IDY5LAogICAgSVBQT1JUX1JKRSA9IDc3LAogICAg SVBQT1JUX0ZJTkdFUiA9IDc5LAogICAgSVBQT1JUX1RUWUxJTksgPSA4NywKICAgIElQUE9SVF9T VVBEVVAgPSA5NSwKCgogICAgSVBQT1JUX0VYRUNTRVJWRVIgPSA1MTIsCiAgICBJUFBPUlRfTE9H SU5TRVJWRVIgPSA1MTMsCiAgICBJUFBPUlRfQ01EU0VSVkVSID0gNTE0LAogICAgSVBQT1JUX0VG U1NFUlZFUiA9IDUyMCwKCgogICAgSVBQT1JUX0JJRkZVRFAgPSA1MTIsCiAgICBJUFBPUlRfV0hP U0VSVkVSID0gNTEzLAogICAgSVBQT1JUX1JPVVRFU0VSVkVSID0gNTIwLAoKCiAgICBJUFBPUlRf UkVTRVJWRUQgPSAxMDI0LAoKCiAgICBJUFBPUlRfVVNFUlJFU0VSVkVEID0gNTAwMAogIH07CgoK CnR5cGVkZWYgdWludDMyX3QgaW5fYWRkcl90OwpzdHJ1Y3QgaW5fYWRkcgogIHsKICAgIGluX2Fk ZHJfdCBzX2FkZHI7CiAgfTsKIyAxOTAgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3Ry dWN0IGluNl9hZGRyCiAgewogICAgdW5pb24KICAgICAgewogICAgICAgIHVpbnQ4X3QgdTZfYWRk cjhbMTZdOwogICAgICAgIHVpbnQxNl90IHU2X2FkZHIxNls4XTsKICAgICAgICB1aW50MzJfdCB1 Nl9hZGRyMzJbNF07CiAgICAgIH0gaW42X3U7CgoKCiAgfTsKCmV4dGVybiBjb25zdCBzdHJ1Y3Qg aW42X2FkZHIgaW42YWRkcl9hbnk7CmV4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRk cl9sb29wYmFjazsKIyAyMTYgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3RydWN0IHNv Y2thZGRyX2luCiAgewogICAgc2FfZmFtaWx5X3Qgc2luX2ZhbWlseTsKICAgIGluX3BvcnRfdCBz aW5fcG9ydDsKICAgIHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOwoKCiAgICB1bnNpZ25lZCBjaGFy IHNpbl96ZXJvW3NpemVvZiAoc3RydWN0IHNvY2thZGRyKSAtCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzaXplb2YgKHVuc2lnbmVkIHNob3J0IGludCkpIC0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mIChpbl9wb3J0X3QpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcildOwogIH07CgoKc3RydWN0IHNvY2thZGRyX2luNgogIHsK ICAgIHNhX2ZhbWlseV90IHNpbjZfZmFtaWx5OwogICAgaW5fcG9ydF90IHNpbjZfcG9ydDsKICAg IHVpbnQzMl90IHNpbjZfZmxvd2luZm87CiAgICBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOwog ICAgdWludDMyX3Qgc2luNl9zY29wZV9pZDsKICB9OwoKCnN0cnVjdCBpcHY2X21yZXEKICB7Cgog ICAgc3RydWN0IGluNl9hZGRyIGlwdjZtcl9tdWx0aWFkZHI7CgoKICAgIHVuc2lnbmVkIGludCBp cHY2bXJfaW50ZXJmYWNlOwogIH07CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbi5oIiAxIDMK IyA2NiAiL3Vzci9pbmNsdWRlL2JpdHMvaW4uaCIgMwpzdHJ1Y3QgaXBfb3B0cwogIHsKICAgIHN0 cnVjdCBpbl9hZGRyIGlwX2RzdDsKICAgIGNoYXIgaXBfb3B0c1s0MF07CiAgfTsKCgpzdHJ1Y3Qg aXBfbXJlcQogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CiAgICBzdHJ1Y3Qg aW5fYWRkciBpbXJfaW50ZXJmYWNlOwogIH07CgoKc3RydWN0IGlwX21yZXFuCiAgewogICAgc3Ry dWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNz OwogICAgaW50IGltcl9pZmluZGV4OwogIH07CgoKc3RydWN0IGluX3BrdGluZm8KICB7CiAgICBp bnQgaXBpX2lmaW5kZXg7CiAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7CiAgICBzdHJ1 Y3QgaW5fYWRkciBpcGlfYWRkcjsKICB9OwojIDI1MSAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4u aCIgMiAzCiMgMjU5ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCmV4dGVybiB1aW50MzJf dCBudG9obCAodWludDMyX3QgX19uZXRsb25nKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CmV4dGVybiB1aW50MTZfdCBudG9ocyAodWludDE2X3QgX19uZXRzaG9ydCkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiB1aW50MzJfdCBo dG9ubCAodWludDMyX3QgX19ob3N0bG9uZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CmV4dGVybiB1aW50MTZfdCBodG9ucyAodWludDE2X3QgX19ob3N0c2hvcnQp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9ieXRlc3dhcC5oIiAxIDMKIyAyNzEgIi91c3IvaW5jbHVkZS9uZXRpbmV0 L2luLmgiIDIgMwojIDMzMyAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpleHRlcm4gaW50 IGJpbmRyZXN2cG9ydCAoaW50IF9fc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKl9fc29ja19p bikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kcmVzdnBvcnQ2IChpbnQgX19zb2NrZmQsIHN0 cnVjdCBzb2NrYWRkcl9pbjYgKl9fc29ja19pbikKICAgICB0aHJvdyAoKTsKIyAzNjEgIi91c3Iv aW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3RydWN0IGluNl9wa3RpbmZvCiAgewogICAgc3RydWN0 IGluNl9hZGRyIGlwaTZfYWRkcjsKICAgIHVuc2lnbmVkIGludCBpcGk2X2lmaW5kZXg7CiAgfTsK Cn0KIyA2NyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyA4MSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxh LTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiCiMgMSAiL3Vz ci9pbmNsdWRlL2FycGEvaW5ldC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2FycGEvaW5ldC5o IiAzCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfYWRkciAoX19jb25zdCBj aGFyICpfX2NwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfbG5hb2YgKHN0cnVj dCBpbl9hZGRyIF9faW4pIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IGluX2FkZHIgaW5ldF9t YWtlYWRkciAoaW5fYWRkcl90IF9fbmV0LCBpbl9hZGRyX3QgX19ob3N0KQogICAgIHRocm93ICgp OwoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9uZXRvZiAoc3RydWN0IGluX2FkZHIgX19pbikgdGhy b3cgKCk7CgoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9uZXR3b3JrIChfX2NvbnN0IGNoYXIgKl9f Y3ApIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqaW5ldF9udG9hIChzdHJ1Y3QgaW5fYWRkciBf X2luKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaW5ldF9wdG9uIChpbnQgX19hZiwgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fY3AsCiAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3Jl c3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2NvbnN0IGNoYXIgKmluZXRfbnRv cCAoaW50IF9fYWYsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX2NwLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNvY2tsZW5fdCBfX2xl bikKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2F0b24gKF9fY29u c3QgY2hhciAqX19jcCwgc3RydWN0IGluX2FkZHIgKl9faW5wKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGNoYXIgKmluZXRfbmV0YSAoaW5fYWRkcl90IF9fbmV0LCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICppbmV0X25ldF9udG9wIChpbnQgX19hZiwg X19jb25zdCB2b2lkICpfX2NwLCBpbnQgX19iaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlu ZXRfbmV0X3B0b24gKGludCBfX2FmLCBfX2NvbnN0IGNoYXIgKl9fY3AsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRl cm4gdW5zaWduZWQgaW50IGluZXRfbnNhcF9hZGRyIChfX2NvbnN0IGNoYXIgKl9fY3AsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYnVmLCBpbnQg X19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqaW5ldF9uc2FwX250b2EgKGludCBfX2xl biwgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX2NwLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgp9CiMgODIgIi92YXIvdG1wL3BvcnRhZ2UvbW96 aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAyCgoj IDEgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL25ldGRiLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmgiIDEgMwojIDQyICIvdXNyL2luY2x1ZGUv cnBjL25ldGRiLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMu Mi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmgi IDIgMwoKZXh0ZXJuICJDIiB7CgpzdHJ1Y3QgcnBjZW50CnsKICBjaGFyICpyX25hbWU7CiAgY2hh ciAqKnJfYWxpYXNlczsKICBpbnQgcl9udW1iZXI7Cn07CgpleHRlcm4gdm9pZCBzZXRycGNlbnQg KGludCBfX3N0YXlvcGVuKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgZW5kcnBjZW50ICh2b2lkKSB0 aHJvdyAoKTsKZXh0ZXJuIHN0cnVjdCBycGNlbnQgKmdldHJwY2J5bmFtZSAoX19jb25zdCBjaGFy ICpfX25hbWUpIHRocm93ICgpOwpleHRlcm4gc3RydWN0IHJwY2VudCAqZ2V0cnBjYnludW1iZXIg KGludCBfX251bWJlcikgdGhyb3cgKCk7CmV4dGVybiBzdHJ1Y3QgcnBjZW50ICpnZXRycGNlbnQg KHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cnBjYnluYW1lX3IgKF9fY29uc3QgY2hh ciAqX19uYW1lLCBzdHJ1Y3QgcnBjZW50ICpfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKl9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBycGNlbnQgKipfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4g aW50IGdldHJwY2J5bnVtYmVyX3IgKGludCBfX251bWJlciwgc3RydWN0IHJwY2VudCAqX19yZXN1 bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fYnVmZmVyLCBzaXpl X3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJwY2VudCAq Kl9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cnBjZW50X3IgKHN0cnVjdCBycGNl bnQgKl9fcmVzdWx0X2J1ZiwgY2hhciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX2J1Zmxlbiwgc3RydWN0IHJwY2VudCAqKl9fcmVzdWx0KSB0aHJvdyAoKTsKCgp9 CiMgMzQgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAyIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc2lnaW5mby5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnaW5mby5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9i aXRzL3NpZ2luZm8uaCIgMiAzCgoKCgoKCgp0eXBlZGVmIHVuaW9uIHNpZ3ZhbAogIHsKICAgIGlu dCBzaXZhbF9pbnQ7CiAgICB2b2lkICpzaXZhbF9wdHI7CiAgfSBzaWd2YWxfdDsKIyAyNzEgIi91 c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwpzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfczsKCnR5 cGVkZWYgc3RydWN0IHNpZ2V2ZW50CiAgewogICAgc2lndmFsX3Qgc2lnZXZfdmFsdWU7CiAgICBp bnQgc2lnZXZfc2lnbm87CiAgICBpbnQgc2lnZXZfbm90aWZ5OwoKICAgIHVuaW9uCiAgICAgIHsK ICAgICAgICBpbnQgX3BhZFsoKDY0IC8gc2l6ZW9mIChpbnQpKSAtIDMpXTsKCiAgICAgICAgc3Ry dWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIHZvaWQgKCpfZnVuY3Rpb24pIChzaWd2YWxfdCk7 CiAgICAgICAgICAgIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zICpfYXR0cmlidXRlOwogICAgICAg ICAgfSBfc2lnZXZfdGhyZWFkOwogICAgICB9IF9zaWdldl91bjsKICB9IHNpZ2V2ZW50X3Q7CgoK CgoKCmVudW0KewogIFNJR0VWX1NJR05BTCA9IDAsCgogIFNJR0VWX05PTkUsCgogIFNJR0VWX1RI UkVBRAoKfTsKIyAzOSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvbmV0ZGIuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL25ldGRi LmgiIDMKc3RydWN0IG5ldGVudAp7CiAgY2hhciAqbl9uYW1lOwogIGNoYXIgKipuX2FsaWFzZXM7 CiAgaW50IG5fYWRkcnR5cGU7CiAgdWludDMyX3Qgbl9uZXQ7Cn07CiMgNDQgIi91c3IvaW5jbHVk ZS9uZXRkYi5oIiAyIDMKIyA1NCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0ZXJuICJDIiB7 CgoKCgoKCmV4dGVybiBpbnQgKl9faF9lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDg4ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMwpl eHRlcm4gdm9pZCBoZXJyb3IgKF9fY29uc3QgY2hhciAqX19zdHIpIHRocm93ICgpOwoKCmV4dGVy biBfX2NvbnN0IGNoYXIgKmhzdHJlcnJvciAoaW50IF9fZXJyX251bSkgdGhyb3cgKCk7CgoKCgpz dHJ1Y3QgaG9zdGVudAp7CiAgY2hhciAqaF9uYW1lOwogIGNoYXIgKipoX2FsaWFzZXM7CiAgaW50 IGhfYWRkcnR5cGU7CiAgaW50IGhfbGVuZ3RoOwogIGNoYXIgKipoX2FkZHJfbGlzdDsKCn07CgoK CmV4dGVybiB2b2lkIHNldGhvc3RlbnQgKGludCBfX3N0YXlfb3BlbikgdGhyb3cgKCk7CgoKZXh0 ZXJuIHZvaWQgZW5kaG9zdGVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgaG9z dGVudCAqZ2V0aG9zdGVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVu dCAqZ2V0aG9zdGJ5YWRkciAoX19jb25zdCB2b2lkICpfX2FkZHIsIF9fc29ja2xlbl90IF9fbGVu LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3R5cGUpIHRocm93 ICgpOwoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5bmFtZSAoX19jb25zdCBjaGFy ICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5 bmFtZTIgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX19hZikgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBpbnQgZ2V0aG9zdGVudF9yIChzdHJ1Y3QgaG9zdGVudCAqX19yZXN0cmljdCBfX3Jlc3Vs dF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz aXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAq Kl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldGhvc3RieWFkZHJfciAo X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fYWRkciwgX19zb2NrbGVuX3QgX19sZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190eXBlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0 IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f aF9lcnJub3ApIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRob3N0YnluYW1lX3IgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgaG9zdGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkg dGhyb3cgKCk7CgpleHRlcm4gaW50IGdldGhvc3RieW5hbWUyX3IgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25hbWUsIGludCBfX2FmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0IF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJy bm9wKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRuZXRlbnQgKGludCBfX3N0YXlfb3Bl bikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kbmV0ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdldG5ldGVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVy biBzdHJ1Y3QgbmV0ZW50ICpnZXRuZXRieWFkZHIgKHVpbnQzMl90IF9fbmV0LCBpbnQgX190eXBl KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbmV0ZW50ICpnZXRuZXRieW5hbWUgKF9f Y29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0bmV0ZW50 X3IgKHN0cnVjdCBuZXRlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAog ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cg KCk7CgpleHRlcm4gaW50IGdldG5ldGJ5YWRkcl9yICh1aW50MzJfdCBfX25ldCwgaW50IF9fdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGVudCAqX19yZXN0cmljdCBf X3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3Qg X19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IG5ldGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0bmV0 YnluYW1lX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19i dWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKipfX3Jlc3Ry aWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19oX2Vycm5vcCkgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgc2VydmVudAp7CiAgY2hhciAqc19uYW1l OwogIGNoYXIgKipzX2FsaWFzZXM7CiAgaW50IHNfcG9ydDsKICBjaGFyICpzX3Byb3RvOwp9OwoK CgpleHRlcm4gdm9pZCBzZXRzZXJ2ZW50IChpbnQgX19zdGF5X29wZW4pIHRocm93ICgpOwoKCmV4 dGVybiB2b2lkIGVuZHNlcnZlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHNl cnZlbnQgKmdldHNlcnZlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHNlcnZl bnQgKmdldHNlcnZieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19wcm90bykgdGhyb3cgKCk7CgoK CmV4dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5cG9ydCAoaW50IF9fcG9ydCwgX19jb25z dCBjaGFyICpfX3Byb3RvKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0c2VydmVu dF9yIChzdHJ1Y3Qgc2VydmVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqKl9fcmVzdHJpY3QgX19yZXN1 bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRzZXJ2YnluYW1lX3IgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19wcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBzZXJ2ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkg dGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHNlcnZieXBvcnRfciAoaW50IF9fcG9ydCwgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgc2VydmVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqKl9fcmVzdHJpY3QgX19yZXN1 bHQpIHRocm93ICgpOwoKCgoKc3RydWN0IHByb3RvZW50CnsKICBjaGFyICpwX25hbWU7CiAgY2hh ciAqKnBfYWxpYXNlczsKICBpbnQgcF9wcm90bzsKfTsKCgoKZXh0ZXJuIHZvaWQgc2V0cHJvdG9l bnQgKGludCBfX3N0YXlfb3BlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kcHJvdG9lbnQg KHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHByb3RvZW50ICpnZXRwcm90b2VudCAo dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9ieW5hbWUg KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IHByb3RvZW50 ICpnZXRwcm90b2J5bnVtYmVyIChpbnQgX19wcm90bykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu dCBnZXRwcm90b2VudF9yIChzdHJ1Y3QgcHJvdG9lbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVm LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVf dCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKipf X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cHJvdG9ieW5hbWVf ciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1 ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKipfX3Jl c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cHJvdG9ieW51bWJlcl9y IChpbnQgX19wcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm90 b2VudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0 KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0bmV0Z3JlbnQgKF9fY29uc3QgY2hhciAqX19u ZXRncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kbmV0Z3JlbnQgKHZvaWQpIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IGdldG5ldGdyZW50IChjaGFyICoqX19yZXN0cmljdCBfX2hvc3Rw LAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3VzZXJwLAogICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2RvbWFpbnApIHRocm93ICgp OwoKCgpleHRlcm4gaW50IGlubmV0Z3IgKF9fY29uc3QgY2hhciAqX19uZXRncm91cCwgX19jb25z dCBjaGFyICpfX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3VzZXIs IF9fY29uc3QgY2hhciAqZG9tYWluKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldG5ldGdyZW50 X3IgKGNoYXIgKipfX3Jlc3RyaWN0IF9faG9zdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX191c2VycCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2RvbWFpbnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq X19yZXN0cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKIyAzMzQgIi91 c3IvaW5jbHVkZS9uZXRkYi5oIiAzCmV4dGVybiBpbnQgcmNtZCAoY2hhciAqKl9fcmVzdHJpY3Qg X19haG9zdCwgdW5zaWduZWQgc2hvcnQgaW50IF9fcnBvcnQsCiAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbG9jdXNlciwKICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19yZW11c2VyLAogICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2NtZCwgaW50ICpfX3Jlc3RyaWN0IF9fZmQycCkKICAgICB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCByY21kX2FmIChjaGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCB1bnNp Z25lZCBzaG9ydCBpbnQgX19ycG9ydCwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19sb2N1c2VyLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3JlbXVzZXIsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3QgX19mZDJwLAogICAgICAgICAgICAgICAg ICAgIHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHJleGVjIChj aGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCBpbnQgX19ycG9ydCwKICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcGFzcywKICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3QgX19mZDJwKQogICAgIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHJleGVjX2FmIChjaGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCBpbnQg X19ycG9ydCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bmFtZSwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcGFz cywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY21kLCBp bnQgKl9fcmVzdHJpY3QgX19mZDJwLAogICAgICAgICAgICAgICAgICAgICBzYV9mYW1pbHlfdCBf X2FmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcnVzZXJvayAoX19jb25zdCBjaGFyICpfX3Jo b3N0LCBpbnQgX19zdXNlciwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVt dXNlciwgX19jb25zdCBjaGFyICpfX2xvY3VzZXIpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJ1 c2Vyb2tfYWYgKF9fY29uc3QgY2hhciAqX19yaG9zdCwgaW50IF9fc3VzZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3JlbXVzZXIsIF9fY29uc3QgY2hhciAqX19sb2N1 c2VyLAogICAgICAgICAgICAgICAgICAgICAgIHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBycmVzdnBvcnQgKGludCAqX19hbHBvcnQpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IHJyZXN2cG9ydF9hZiAoaW50ICpfX2FscG9ydCwgc2FfZmFtaWx5X3QgX19hZikgdGhy b3cgKCk7CgoKCgoKCnN0cnVjdCBhZGRyaW5mbwp7CiAgaW50IGFpX2ZsYWdzOwogIGludCBhaV9m YW1pbHk7CiAgaW50IGFpX3NvY2t0eXBlOwogIGludCBhaV9wcm90b2NvbDsKICBzb2NrbGVuX3Qg YWlfYWRkcmxlbjsKICBzdHJ1Y3Qgc29ja2FkZHIgKmFpX2FkZHI7CiAgY2hhciAqYWlfY2Fub25u YW1lOwogIHN0cnVjdCBhZGRyaW5mbyAqYWlfbmV4dDsKfTsKCgoKc3RydWN0IGdhaWNiCnsKICBj b25zdCBjaGFyICphcl9uYW1lOwogIGNvbnN0IGNoYXIgKmFyX3NlcnZpY2U7CiAgY29uc3Qgc3Ry dWN0IGFkZHJpbmZvICphcl9yZXF1ZXN0OwogIHN0cnVjdCBhZGRyaW5mbyAqYXJfcmVzdWx0OwoK ICBpbnQgX19yZXR1cm47CiAgaW50IF9fdW51c2VkWzVdOwp9OwojIDQ1OSAiL3Vzci9pbmNsdWRl L25ldGRiLmgiIDMKZXh0ZXJuIGludCBnZXRhZGRyaW5mbyAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgYWRk cmluZm8gKl9fcmVzdHJpY3QgX19yZXEsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBh ZGRyaW5mbyAqKl9fcmVzdHJpY3QgX19wYWkpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZyZWVh ZGRyaW5mbyAoc3RydWN0IGFkZHJpbmZvICpfX2FpKSB0aHJvdyAoKTsKCgpleHRlcm4gX19jb25z dCBjaGFyICpnYWlfc3RyZXJyb3IgKGludCBfX2Vjb2RlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IGdldG5hbWVpbmZvIChfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX3NhLAog ICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgX19zYWxlbiwgY2hhciAqX19yZXN0cmlj dCBfX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBfX2hvc3RsZW4sIGNo YXIgKl9fcmVzdHJpY3QgX19zZXJ2LAogICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3Qg X19zZXJ2bGVuLCB1bnNpZ25lZCBpbnQgX19mbGFncykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu dCBnZXRhZGRyaW5mb19hIChpbnQgX19tb2RlLCBzdHJ1Y3QgZ2FpY2IgKl9fbGlzdFtdLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2VudCwgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3Ry aWN0IF9fc2lnKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnYWlfc3VzcGVuZCAoX19j b25zdCBzdHJ1Y3QgZ2FpY2IgKl9fY29uc3QgX19saXN0W10sIGludCBfX2VudCwKICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBnYWlfZXJyb3IgKHN0cnVjdCBnYWljYiAqX19yZXEpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgZ2FpX2NhbmNlbCAoc3RydWN0IGdhaWNiICpfX2dhaWNicCkgdGhyb3cg KCk7CgoKCn0KIyA4NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyA0OSAiL3Zhci90bXAvcG9ydGFnZS9t b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCgpl eHRlcm4gIkMiIHsKCgp0eXBlZGVmIHN0cnVjdCBQUkRpciBQUkRpcjsKdHlwZWRlZiBzdHJ1Y3Qg UFJEaXJFbnRyeSBQUkRpckVudHJ5OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlRGVzYyBQUkZp bGVEZXNjOwp0eXBlZGVmIHN0cnVjdCBQUkZpbGVJbmZvIFBSRmlsZUluZm87CnR5cGVkZWYgc3Ry dWN0IFBSRmlsZUluZm82NCBQUkZpbGVJbmZvNjQ7CnR5cGVkZWYgdW5pb24gUFJOZXRBZGRyIFBS TmV0QWRkcjsKdHlwZWRlZiBzdHJ1Y3QgUFJJT01ldGhvZHMgUFJJT01ldGhvZHM7CnR5cGVkZWYg c3RydWN0IFBSUG9sbERlc2MgUFJQb2xsRGVzYzsKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlUHJpdmF0 ZSBQUkZpbGVQcml2YXRlOwp0eXBlZGVmIHN0cnVjdCBQUlNlbmRGaWxlRGF0YSBQUlNlbmRGaWxl RGF0YTsKIyA3OSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIFBSSW50biBQUkRlc2NJZGVudGl0eTsK CnN0cnVjdCBQUkZpbGVEZXNjIHsKICAgIGNvbnN0IFBSSU9NZXRob2RzICptZXRob2RzOwogICAg UFJGaWxlUHJpdmF0ZSAqc2VjcmV0OwogICAgUFJGaWxlRGVzYyAqbG93ZXIsICpoaWdoZXI7CiAg ICB2b2lkICggKmR0b3IpKFBSRmlsZURlc2MgKmZkKTsKCiAgICBQUkRlc2NJZGVudGl0eSBpZGVu dGl0eTsKfTsKIyA5OSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0gUFJUcmFuc21pdEZpbGVG bGFncyB7CiAgICBQUl9UUkFOU01JVEZJTEVfS0VFUF9PUEVOID0gMCwKCiAgICBQUl9UUkFOU01J VEZJTEVfQ0xPU0VfU09DS0VUID0gMQoKfSBQUlRyYW5zbWl0RmlsZUZsYWdzOwojIDE1MiAiL3Zh ci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJpby5oIgpzdHJ1Y3QgUFJJUHY2QWRkciB7CiAgICAgICAgdW5pb24gewogICAgICAgICAg ICAgICAgUFJVaW50OCBfUzZfdThbMTZdOwogICAgICAgICAgICAgICAgUFJVaW50MTYgX1M2X3Ux Nls4XTsKICAgICAgICAgICAgICAgIFBSVWludDMyIF9TNl91MzJbNF07CiAgICAgICAgICAgICAg ICBQUlVpbnQ2NCBfUzZfdTY0WzJdOwogICAgICAgIH0gX1M2X3VuOwp9OwoKCgoKCnR5cGVkZWYg c3RydWN0IFBSSVB2NkFkZHIgUFJJUHY2QWRkcjsKCnVuaW9uIFBSTmV0QWRkciB7CiAgICBzdHJ1 Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKCgoKICAgICAgICBjaGFyIGRhdGFbMTRdOwoK ICAgIH0gcmF3OwogICAgc3RydWN0IHsKICAgICAgICBQUlVpbnQxNiBmYW1pbHk7CiAgICAgICAg UFJVaW50MTYgcG9ydDsKICAgICAgICBQUlVpbnQzMiBpcDsKCgoKICAgICAgICBjaGFyIHBhZFs4 XTsKCiAgICB9IGluZXQ7CiAgICBzdHJ1Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKICAg ICAgICBQUlVpbnQxNiBwb3J0OwogICAgICAgIFBSVWludDMyIGZsb3dpbmZvOwogICAgICAgIFBS SVB2NkFkZHIgaXA7CiAgICAgICAgUFJVaW50MzIgc2NvcGVfaWQ7CiAgICB9IGlwdjY7CgogICAg c3RydWN0IHsKICAgICAgICBQUlVpbnQxNiBmYW1pbHk7CiAgICAgICAgY2hhciBwYXRoWzEwNF07 CiAgICB9IGxvY2FsOwoKfTsKIyAyMTAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEv d29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU29j a09wdGlvbgp7CiAgICBQUl9Tb2NrT3B0X05vbmJsb2NraW5nLAogICAgUFJfU29ja09wdF9MaW5n ZXIsCiAgICBQUl9Tb2NrT3B0X1JldXNlYWRkciwKICAgIFBSX1NvY2tPcHRfS2VlcGFsaXZlLAog ICAgUFJfU29ja09wdF9SZWN2QnVmZmVyU2l6ZSwKICAgIFBSX1NvY2tPcHRfU2VuZEJ1ZmZlclNp emUsCgogICAgUFJfU29ja09wdF9JcFRpbWVUb0xpdmUsCiAgICBQUl9Tb2NrT3B0X0lwVHlwZU9m U2VydmljZSwKCiAgICBQUl9Tb2NrT3B0X0FkZE1lbWJlciwKICAgIFBSX1NvY2tPcHRfRHJvcE1l bWJlciwKICAgIFBSX1NvY2tPcHRfTWNhc3RJbnRlcmZhY2UsCiAgICBQUl9Tb2NrT3B0X01jYXN0 VGltZVRvTGl2ZSwKICAgIFBSX1NvY2tPcHRfTWNhc3RMb29wYmFjaywKCiAgICBQUl9Tb2NrT3B0 X05vRGVsYXksCiAgICBQUl9Tb2NrT3B0X01heFNlZ21lbnQsCiAgICBQUl9Tb2NrT3B0X0Jyb2Fk Y2FzdCwKICAgIFBSX1NvY2tPcHRfTGFzdAp9IFBSU29ja09wdGlvbjsKCnR5cGVkZWYgc3RydWN0 IFBSTGluZ2VyIHsKICAgICAgICBQUkJvb2wgcG9sYXJpdHk7CiAgICAgICAgUFJJbnRlcnZhbFRp bWUgbGluZ2VyOwp9IFBSTGluZ2VyOwoKdHlwZWRlZiBzdHJ1Y3QgUFJNY2FzdFJlcXVlc3Qgewog ICAgICAgIFBSTmV0QWRkciBtY2FkZHI7CiAgICAgICAgUFJOZXRBZGRyIGlmYWRkcjsKfSBQUk1j YXN0UmVxdWVzdDsKCnR5cGVkZWYgc3RydWN0IFBSU29ja2V0T3B0aW9uRGF0YQp7CiAgICBQUlNv Y2tPcHRpb24gb3B0aW9uOwogICAgdW5pb24KICAgIHsKICAgICAgICBQUlVpbnRuIGlwX3R0bDsK ICAgICAgICBQUlVpbnRuIG1jYXN0X3R0bDsKICAgICAgICBQUlVpbnRuIHRvczsKICAgICAgICBQ UkJvb2wgbm9uX2Jsb2NraW5nOwogICAgICAgIFBSQm9vbCByZXVzZV9hZGRyOwogICAgICAgIFBS Qm9vbCBrZWVwX2FsaXZlOwogICAgICAgIFBSQm9vbCBtY2FzdF9sb29wYmFjazsKICAgICAgICBQ UkJvb2wgbm9fZGVsYXk7CiAgICAgICAgUFJCb29sIGJyb2FkY2FzdDsKICAgICAgICBQUlNpemUg bWF4X3NlZ21lbnQ7CiAgICAgICAgUFJTaXplIHJlY3ZfYnVmZmVyX3NpemU7CiAgICAgICAgUFJT aXplIHNlbmRfYnVmZmVyX3NpemU7CiAgICAgICAgUFJMaW5nZXIgbGluZ2VyOwogICAgICAgIFBS TWNhc3RSZXF1ZXN0IGFkZF9tZW1iZXI7CiAgICAgICAgUFJNY2FzdFJlcXVlc3QgZHJvcF9tZW1i ZXI7CiAgICAgICAgUFJOZXRBZGRyIG1jYXN0X2lmOwogICAgfSB2YWx1ZTsKfSBQUlNvY2tldE9w dGlvbkRhdGE7CiMgMjc2ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgc3RydWN0IFBSSU9WZWMgewog ICAgY2hhciAqaW92X2Jhc2U7CiAgICBpbnQgaW92X2xlbjsKfSBQUklPVmVjOwoKCgoKCgp0eXBl ZGVmIGVudW0gUFJEZXNjVHlwZQp7CiAgICBQUl9ERVNDX0ZJTEUgPSAxLAogICAgUFJfREVTQ19T T0NLRVRfVENQID0gMiwKICAgIFBSX0RFU0NfU09DS0VUX1VEUCA9IDMsCiAgICBQUl9ERVNDX0xB WUVSRUQgPSA0LAogICAgUFJfREVTQ19QSVBFID0gNQp9IFBSRGVzY1R5cGU7Cgp0eXBlZGVmIGVu dW0gUFJTZWVrV2hlbmNlIHsKICAgIFBSX1NFRUtfU0VUID0gMCwKICAgIFBSX1NFRUtfQ1VSID0g MSwKICAgIFBSX1NFRUtfRU5EID0gMgp9IFBSU2Vla1doZW5jZTsKCmV4dGVybiBQUkRlc2NUeXBl IFBSX0dldERlc2NUeXBlKFBSRmlsZURlc2MgKmZpbGUpOwojIDMxOSAiL3Zhci90bXAvcG9ydGFn ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0 eXBlZGVmIFBSU3RhdHVzICggKlBSQ2xvc2VGTikoUFJGaWxlRGVzYyAqZmQpOwp0eXBlZGVmIFBS SW50MzIgKCAqUFJSZWFkRk4pKFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYsIFBSSW50MzIgYW1v dW50KTsKdHlwZWRlZiBQUkludDMyICggKlBSV3JpdGVGTikoUFJGaWxlRGVzYyAqZmQsIGNvbnN0 IHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJBdmFpbGFi bGVGTikoUFJGaWxlRGVzYyAqZmQpOwp0eXBlZGVmIFBSSW50NjQgKCAqUFJBdmFpbGFibGU2NEZO KShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGc3luY0ZOKShQUkZpbGVE ZXNjICpmZCk7CnR5cGVkZWYgUFJPZmZzZXQzMiAoICpQUlNlZWtGTikoUFJGaWxlRGVzYyAqZmQs IFBST2Zmc2V0MzIgb2Zmc2V0LCBQUlNlZWtXaGVuY2UgaG93KTsKdHlwZWRlZiBQUk9mZnNldDY0 ICggKlBSU2VlazY0Rk4pKFBSRmlsZURlc2MgKmZkLCBQUk9mZnNldDY0IG9mZnNldCwgUFJTZWVr V2hlbmNlIGhvdyk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGaWxlSW5mb0ZOKShQUkZpbGVEZXNj ICpmZCwgUFJGaWxlSW5mbyAqaW5mbyk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGaWxlSW5mbzY0 Rk4pKFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvNjQgKmluZm8pOwp0eXBlZGVmIFBSSW50MzIg KCAqUFJXcml0ZXZGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJJT1ZlYyAqaW92LCBQ UkludDMyIGlvdl9zaXplLAogICAgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJT dGF0dXMgKCAqUFJDb25uZWN0Rk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSTmV0QWRk ciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJGaWxlRGVzYyogKCAq UFJBY2NlcHRGTikgKAogICAgUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAqYWRkciwgUFJJbnRl cnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJCaW5kRk4pKFBSRmlsZURl c2MgKmZkLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSTGlz dGVuRk4pKFBSRmlsZURlc2MgKmZkLCBQUkludG4gYmFja2xvZyk7CnR5cGVkZWYgUFJTdGF0dXMg KCAqUFJTaHV0ZG93bkZOKShQUkZpbGVEZXNjICpmZCwgUFJJbnRuIGhvdyk7CnR5cGVkZWYgUFJJ bnQzMiAoICpQUlJlY3ZGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgdm9pZCAqYnVmLCBQUkludDMy IGFtb3VudCwKICAgIFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVk ZWYgUFJJbnQzMiAoICpQUlNlbmRGTikgKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZvaWQg KmJ1ZiwgUFJJbnQzMiBhbW91bnQsCiAgICBQUkludG4gZmxhZ3MsIFBSSW50ZXJ2YWxUaW1lIHRp bWVvdXQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJSZWN2ZnJvbUZOKSgKICAgIFBSRmlsZURlc2Mg KmZkLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LAogICAgUFJJbnRuIGZsYWdzLCBQUk5ldEFk ZHIgKmFkZHIsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJT ZW5kdG9GTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFt b3VudCwKICAgIFBSSW50biBmbGFncywgY29uc3QgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFs VGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUkludDE2ICggKlBSUG9sbEZOKSgKICAgIFBSRmlsZURl c2MgKmZkLCBQUkludDE2IGluX2ZsYWdzLCBQUkludDE2ICpvdXRfZmxhZ3MpOwp0eXBlZGVmIFBS SW50MzIgKCAqUFJBY2NlcHRyZWFkRk4pKAogICAgUFJGaWxlRGVzYyAqc2QsIFBSRmlsZURlc2Mg KipuZCwgUFJOZXRBZGRyICoqcmFkZHIsCiAgICB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LCBQ UkludGVydmFsVGltZSB0KTsKdHlwZWRlZiBQUkludDMyICggKlBSVHJhbnNtaXRmaWxlRk4pKAog ICAgIFBSRmlsZURlc2MgKnNkLCBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqaGVhZGVycywK ICAgICBQUkludDMyIGhsZW4sIFBSVHJhbnNtaXRGaWxlRmxhZ3MgZmxhZ3MsIFBSSW50ZXJ2YWxU aW1lIHQpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSR2V0c29ja25hbWVGTikoUFJGaWxlRGVzYyAq ZmQsIFBSTmV0QWRkciAqYWRkcik7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJHZXRwZWVybmFtZUZO KShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQ UkdldHNvY2tldG9wdGlvbkZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBQUlNvY2tldE9wdGlvbkRh dGEgKmRhdGEpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSU2V0c29ja2V0b3B0aW9uRk4pKAogICAg UFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0YSk7CnR5cGVkZWYg UFJJbnQzMiAoICpQUlNlbmRmaWxlRk4pKAogICAgICAgIFBSRmlsZURlc2MgKm5ldHdvcmtTb2Nr ZXQsIFBSU2VuZEZpbGVEYXRhICpzZW5kRGF0YSwKICAgICAgICBQUlRyYW5zbWl0RmlsZUZsYWdz IGZsYWdzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkNv bm5lY3Rjb250aW51ZUZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBQUkludDE2IG91dF9mbGFncyk7 CnR5cGVkZWYgUFJJbnRuICggKlBSUmVzZXJ2ZWRGTikoUFJGaWxlRGVzYyAqZmQpOwoKc3RydWN0 IFBSSU9NZXRob2RzIHsKICAgIFBSRGVzY1R5cGUgZmlsZV90eXBlOwogICAgUFJDbG9zZUZOIGNs b3NlOwogICAgUFJSZWFkRk4gcmVhZDsKICAgIFBSV3JpdGVGTiB3cml0ZTsKICAgIFBSQXZhaWxh YmxlRk4gYXZhaWxhYmxlOwogICAgUFJBdmFpbGFibGU2NEZOIGF2YWlsYWJsZTY0OwogICAgUFJG c3luY0ZOIGZzeW5jOwogICAgUFJTZWVrRk4gc2VlazsKICAgIFBSU2VlazY0Rk4gc2VlazY0Owog ICAgUFJGaWxlSW5mb0ZOIGZpbGVJbmZvOwogICAgUFJGaWxlSW5mbzY0Rk4gZmlsZUluZm82NDsK ICAgIFBSV3JpdGV2Rk4gd3JpdGV2OwogICAgUFJDb25uZWN0Rk4gY29ubmVjdDsKICAgIFBSQWNj ZXB0Rk4gYWNjZXB0OwogICAgUFJCaW5kRk4gYmluZDsKICAgIFBSTGlzdGVuRk4gbGlzdGVuOwog ICAgUFJTaHV0ZG93bkZOIHNodXRkb3duOwogICAgUFJSZWN2Rk4gcmVjdjsKICAgIFBSU2VuZEZO IHNlbmQ7CiAgICBQUlJlY3Zmcm9tRk4gcmVjdmZyb207CiAgICBQUlNlbmR0b0ZOIHNlbmR0bzsK ICAgIFBSUG9sbEZOIHBvbGw7CiAgICBQUkFjY2VwdHJlYWRGTiBhY2NlcHRyZWFkOwogICAgUFJU cmFuc21pdGZpbGVGTiB0cmFuc21pdGZpbGU7CiAgICBQUkdldHNvY2tuYW1lRk4gZ2V0c29ja25h bWU7CiAgICBQUkdldHBlZXJuYW1lRk4gZ2V0cGVlcm5hbWU7CiAgICBQUlJlc2VydmVkRk4gcmVz ZXJ2ZWRfZm5fNjsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl81OwogICAgUFJHZXRzb2Nr ZXRvcHRpb25GTiBnZXRzb2NrZXRvcHRpb247CgogICAgUFJTZXRzb2NrZXRvcHRpb25GTiBzZXRz b2NrZXRvcHRpb247CgogICAgUFJTZW5kZmlsZUZOIHNlbmRmaWxlOwogICAgUFJDb25uZWN0Y29u dGludWVGTiBjb25uZWN0Y29udGludWU7CgogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzM7 CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5fMjsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZl ZF9mbl8xOwogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzA7Cn07CiMgNDMzICIvdmFyL3Rt cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cmlvLmgiCnR5cGVkZWYgZW51bSBQUlNwZWNpYWxGRAp7CiAgICBQUl9TdGFuZGFyZElucHV0LAog ICAgUFJfU3RhbmRhcmRPdXRwdXQsCiAgICBQUl9TdGFuZGFyZEVycm9yCn0gUFJTcGVjaWFsRkQ7 CgpleHRlcm4gUFJGaWxlRGVzYyogUFJfR2V0U3BlY2lhbEZEKFBSU3BlY2lhbEZEIGlkKTsKIyA0 ODAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRGVzY0lkZW50aXR5IFBSX0dldFVuaXF1ZUlkZW50 aXR5KGNvbnN0IGNoYXIgKmxheWVyX25hbWUpOwpleHRlcm4gY29uc3QgY2hhciogUFJfR2V0TmFt ZUZvcklkZW50aXR5KFBSRGVzY0lkZW50aXR5IGlkZW50KTsKZXh0ZXJuIFBSRGVzY0lkZW50aXR5 IFBSX0dldExheWVyc0lkZW50aXR5KFBSRmlsZURlc2MqIGZkKTsKZXh0ZXJuIFBSRmlsZURlc2Mq IFBSX0dldElkZW50aXRpZXNMYXllcihQUkZpbGVEZXNjKiBmZF9zdGFjaywgUFJEZXNjSWRlbnRp dHkgaWQpOwojIDQ5MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gY29uc3QgUFJJT01ldGhvZHMgKiBQ Ul9HZXREZWZhdWx0SU9NZXRob2RzKHZvaWQpOwojIDUwNCAiL3Zhci90bXAvcG9ydGFnZS9tb3pp bGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4g UFJGaWxlRGVzYyogUFJfQ3JlYXRlSU9MYXllclN0dWIoCiAgICBQUkRlc2NJZGVudGl0eSBpZGVu dCwgY29uc3QgUFJJT01ldGhvZHMgKm1ldGhvZHMpOwojIDUyMSAiL3Zhci90bXAvcG9ydGFnZS9t b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRl cm4gUFJGaWxlRGVzYyogUFJfQ3JlYXRlSU9MYXllcihQUkZpbGVEZXNjKiBmZCk7CiMgNTM3ICIv dmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9QdXNoSU9MYXllcigKICAgIFBSRmlsZURl c2MgKmZkX3N0YWNrLCBQUkRlc2NJZGVudGl0eSBpZCwgUFJGaWxlRGVzYyAqbGF5ZXIpOwojIDU1 NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfUG9wSU9MYXllcihQUkZpbGVE ZXNjICpmZF9zdGFjaywgUFJEZXNjSWRlbnRpdHkgaWQpOwojIDYyOCAiL3Zhci90bXAvcG9ydGFn ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpl eHRlcm4gUFJGaWxlRGVzYyogUFJfT3Blbihjb25zdCBjaGFyICpuYW1lLCBQUkludG4gZmxhZ3Ms IFBSSW50biBtb2RlKTsKIyA2NTQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29y ay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBS X09wZW5GaWxlKAogICAgY29uc3QgY2hhciAqbmFtZSwgUFJJbnRuIGZsYWdzLCBQUkludG4gbW9k ZSk7CiMgNjg1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9DbG9zZShQUkZpbGVE ZXNjICpmZCk7CiMgNzIwICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1JlYWQoUFJG aWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwojIDc0NCAiL3Zhci90bXAv cG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJp by5oIgpleHRlcm4gUFJJbnQzMiBQUl9Xcml0ZShQUkZpbGVEZXNjICpmZCxjb25zdCB2b2lkICpi dWYsUFJJbnQzMiBhbW91bnQpOwojIDc3OCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQ Ul9Xcml0ZXYoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJJT1ZlYyAqaW92LCBQUkludDMy IGlvdl9zaXplLAogICAgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgNzk5ICIvdmFyL3RtcC9w b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlv LmgiCmV4dGVybiBQUlN0YXR1cyBQUl9EZWxldGUoY29uc3QgY2hhciAqbmFtZSk7CgoKCnR5cGVk ZWYgZW51bSBQUkZpbGVUeXBlCnsKICAgIFBSX0ZJTEVfRklMRSA9IDEsCiAgICBQUl9GSUxFX0RJ UkVDVE9SWSA9IDIsCiAgICBQUl9GSUxFX09USEVSID0gMwp9IFBSRmlsZVR5cGU7CgpzdHJ1Y3Qg UFJGaWxlSW5mbyB7CiAgICBQUkZpbGVUeXBlIHR5cGU7CiAgICBQUk9mZnNldDMyIHNpemU7CiAg ICBQUlRpbWUgY3JlYXRpb25UaW1lOwogICAgUFJUaW1lIG1vZGlmeVRpbWU7Cn07CgpzdHJ1Y3Qg UFJGaWxlSW5mbzY0IHsKICAgIFBSRmlsZVR5cGUgdHlwZTsKICAgIFBST2Zmc2V0NjQgc2l6ZTsK ICAgIFBSVGltZSBjcmVhdGlvblRpbWU7CiAgICBQUlRpbWUgbW9kaWZ5VGltZTsKfTsKIyA4NDIg Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvKGNvbnN0IGNoYXIg KmZuLCBQUkZpbGVJbmZvICppbmZvKTsKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvNjQo Y29uc3QgY2hhciAqZm4sIFBSRmlsZUluZm82NCAqaW5mbyk7CiMgODY5ICIvdmFyL3RtcC9wb3J0 YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi CmV4dGVybiBQUlN0YXR1cyBQUl9HZXRPcGVuRmlsZUluZm8oUFJGaWxlRGVzYyAqZmQsIFBSRmls ZUluZm8gKmluZm8pOwpleHRlcm4gUFJTdGF0dXMgUFJfR2V0T3BlbkZpbGVJbmZvNjQoUFJGaWxl RGVzYyAqZmQsIFBSRmlsZUluZm82NCAqaW5mbyk7CiMgODg4ICIvdmFyL3RtcC9wb3J0YWdlL21v emlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy biBQUlN0YXR1cyBQUl9SZW5hbWUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOwoj IDkxNCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0gUFJBY2Nlc3NIb3cgewogICAgUFJfQUND RVNTX0VYSVNUUyA9IDEsCiAgICBQUl9BQ0NFU1NfV1JJVEVfT0sgPSAyLAogICAgUFJfQUNDRVNT X1JFQURfT0sgPSAzCn0gUFJBY2Nlc3NIb3c7CgpleHRlcm4gUFJTdGF0dXMgUFJfQWNjZXNzKGNv bnN0IGNoYXIgKm5hbWUsIFBSQWNjZXNzSG93IGhvdyk7CiMgOTU1ICIvdmFyL3RtcC9wb3J0YWdl L21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4 dGVybiBQUk9mZnNldDMyIFBSX1NlZWsoUFJGaWxlRGVzYyAqZmQsIFBST2Zmc2V0MzIgb2Zmc2V0 LCBQUlNlZWtXaGVuY2Ugd2hlbmNlKTsKZXh0ZXJuIFBST2Zmc2V0NjQgUFJfU2VlazY0KFBSRmls ZURlc2MgKmZkLCBQUk9mZnNldDY0IG9mZnNldCwgUFJTZWVrV2hlbmNlIHdoZW5jZSk7CiMgOTc4 ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX0F2YWlsYWJsZShQUkZpbGVEZXNjICpm ZCk7CmV4dGVybiBQUkludDY0IFBSX0F2YWlsYWJsZTY0KFBSRmlsZURlc2MgKmZkKTsKIyA5OTgg Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1N5bmMoUFJGaWxlRGVzYyAqZmQpOwoK CgpzdHJ1Y3QgUFJEaXJFbnRyeSB7CiAgICBjb25zdCBjaGFyICpuYW1lOwp9OwojIDEwMzcgIi92 YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3ByaW8uaCIKZXh0ZXJuIFBSRGlyKiBQUl9PcGVuRGlyKGNvbnN0IGNoYXIgKm5hbWUpOwoj IDEwNjkgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSRGlyRmxhZ3MgewogICAgUFJfU0tJ UF9OT05FID0gMHgwLAogICAgUFJfU0tJUF9ET1QgPSAweDEsCiAgICBQUl9TS0lQX0RPVF9ET1Qg PSAweDIsCiAgICBQUl9TS0lQX0JPVEggPSAweDMsCiAgICBQUl9TS0lQX0hJRERFTiA9IDB4NAp9 IFBSRGlyRmxhZ3M7CgpleHRlcm4gUFJEaXJFbnRyeSogUFJfUmVhZERpcihQUkRpciAqZGlyLCBQ UkRpckZsYWdzIGZsYWdzKTsKIyAxMTAzICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQ Ul9DbG9zZURpcihQUkRpciAqZGlyKTsKIyAxMTMyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEt MS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0 YXR1cyBQUl9Na0Rpcihjb25zdCBjaGFyICpuYW1lLCBQUkludG4gbW9kZSk7CiMgMTE0NCAiL3Zh ci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTWFrZURpcihjb25zdCBjaGFyICpuYW1lLCBQ UkludG4gbW9kZSk7CiMgMTE2NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3Jr L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfUm1E aXIoY29uc3QgY2hhciAqbmFtZSk7CiMgMTE4MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxl RGVzYyogUFJfTmV3VURQU29ja2V0KHZvaWQpOwojIDEyMDIgIi92YXIvdG1wL3BvcnRhZ2UvbW96 aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJu IFBSRmlsZURlc2MqIFBSX05ld1RDUFNvY2tldCh2b2lkKTsKIyAxMjIyICIvdmFyL3RtcC9wb3J0 YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi CmV4dGVybiBQUkZpbGVEZXNjKiBQUl9PcGVuVURQU29ja2V0KFBSSW50biBhZik7CiMgMTI0MiAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfT3BlblRDUFNvY2tldChQUkludG4g YWYpOwojIDEyNjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nvbm5lY3QoCiAg ICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGltZSB0 aW1lb3V0KTsKIyAxMzAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9Db25uZWN0 Q29udGludWUoUFJGaWxlRGVzYyAqZmQsIFBSSW50MTYgb3V0X2ZsYWdzKTsKIyAxMzMxICIvdmFy L3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9HZXRDb25uZWN0U3RhdHVzKGNvbnN0IFBSUG9s bERlc2MgKnBkKTsKIyAxMzU1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9B Y2NlcHQoCiAgICBQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGlt ZSB0aW1lb3V0KTsKIyAxMzc3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9CaW5k KFBSRmlsZURlc2MgKmZkLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIpOwojIDEzOTkgIi92YXIvdG1w L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0xpc3RlbihQUkZpbGVEZXNjICpmZCwgUFJJbnRuIGJh Y2tsb2cpOwojIDE0MjMgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU2h1dGRvd25Ib3cK ewogICAgUFJfU0hVVERPV05fUkNWID0gMCwKICAgIFBSX1NIVVRET1dOX1NFTkQgPSAxLAogICAg UFJfU0hVVERPV05fQk9USCA9IDIKfSBQUlNodXRkb3duSG93OwoKZXh0ZXJuIFBSU3RhdHVzIFBS X1NodXRkb3duKFBSRmlsZURlc2MgKmZkLCBQUlNodXRkb3duSG93IGhvdyk7CiMgMTQ2MyAiL3Zh ci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9SZWN2KFBSRmlsZURlc2MgKmZkLCB2b2lkICpi dWYsIFBSSW50MzIgYW1vdW50LAogICAgICAgICAgICAgICAgUFJJbnRuIGZsYWdzLCBQUkludGVy dmFsVGltZSB0aW1lb3V0KTsKIyAxNDk0ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBS X1NlbmQoUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRuIGZsYWdzLCBQUkludGVydmFsVGlt ZSB0aW1lb3V0KTsKIyAxNTI5ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1JlY3ZG cm9tKAogICAgUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBSSW50 biBmbGFncywKICAgIFBSTmV0QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMg MTU2MiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9TZW5kVG8oCiAgICBQUkZpbGVE ZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCwgUFJJbnRuIGZsYWdzLAog ICAgY29uc3QgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxNjAy ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1RyYW5zbWl0RmlsZSgKICAgIFBSRmls ZURlc2MgKm5ldHdvcmtTb2NrZXQsIFBSRmlsZURlc2MgKnNvdXJjZUZpbGUsCiAgICBjb25zdCB2 b2lkICpoZWFkZXJzLCBQUkludDMyIGhsZW4sIFBSVHJhbnNtaXRGaWxlRmxhZ3MgZmxhZ3MsCiAg ICBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxNjQxICIvdmFyL3RtcC9wb3J0YWdlL21vemls bGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnN0cnVjdCBQ UlNlbmRGaWxlRGF0YSB7CiAgICAgICAgUFJGaWxlRGVzYyAqZmQ7CiAgICAgICAgUFJVaW50MzIg ZmlsZV9vZmZzZXQ7CiAgICAgICAgUFJTaXplIGZpbGVfbmJ5dGVzOwoKCiAgICAgICAgY29uc3Qg dm9pZCAqaGVhZGVyOwogICAgICAgIFBSSW50MzIgaGxlbjsKICAgICAgICBjb25zdCB2b2lkICp0 cmFpbGVyOwogICAgICAgIFBSSW50MzIgdGxlbjsKfTsKCgpleHRlcm4gUFJJbnQzMiBQUl9TZW5k RmlsZSgKICAgIFBSRmlsZURlc2MgKm5ldHdvcmtTb2NrZXQsIFBSU2VuZEZpbGVEYXRhICpzZW5k RGF0YSwKICAgICAgICBQUlRyYW5zbWl0RmlsZUZsYWdzIGZsYWdzLCBQUkludGVydmFsVGltZSB0 aW1lb3V0KTsKIyAxNzA4ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX0FjY2VwdFJl YWQoCiAgICBQUkZpbGVEZXNjICpsaXN0ZW5Tb2NrLCBQUkZpbGVEZXNjICoqYWNjZXB0ZWRTb2Nr LAogICAgUFJOZXRBZGRyICoqcGVlckFkZHIsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBS SW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE3MzIgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0x LjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3Rh dHVzIFBSX05ld1RDUFNvY2tldFBhaXIoUFJGaWxlRGVzYyAqZmRzWzJdKTsKIyAxNzUyICIvdmFy L3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9HZXRTb2NrTmFtZShQUkZpbGVEZXNjICpmZCwg UFJOZXRBZGRyICphZGRyKTsKIyAxNzc0ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQ Ul9HZXRQZWVyTmFtZShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsKCmV4dGVybiBQ UlN0YXR1cyBQUl9HZXRTb2NrZXRPcHRpb24oCiAgICBQUkZpbGVEZXNjICpmZCwgUFJTb2NrZXRP cHRpb25EYXRhICpkYXRhKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9TZXRTb2NrZXRPcHRpb24oCiAg ICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJTb2NrZXRPcHRpb25EYXRhICpkYXRhKTsKIyAxODA5 ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9TZXRGREluaGVyaXRhYmxlKAogICAg UFJGaWxlRGVzYyAqZmQsCiAgICBQUkJvb2wgaW5oZXJpdGFibGUpOwojIDE4MjkgIi92YXIvdG1w L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MgKiBQUl9HZXRJbmhlcml0ZWRGRChjb25zdCBjaGFyICpu YW1lKTsKIyAxODM5ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgc3RydWN0IFBSRmlsZU1hcCBQUkZp bGVNYXA7CgoKCgp0eXBlZGVmIGVudW0gUFJGaWxlTWFwUHJvdGVjdCB7CiAgICBQUl9QUk9UX1JF QURPTkxZLAogICAgUFJfUFJPVF9SRUFEV1JJVEUsCiAgICBQUl9QUk9UX1dSSVRFQ09QWQp9IFBS RmlsZU1hcFByb3RlY3Q7CgpleHRlcm4gUFJGaWxlTWFwICogUFJfQ3JlYXRlRmlsZU1hcCgKICAg IFBSRmlsZURlc2MgKmZkLAogICAgUFJJbnQ2NCBzaXplLAogICAgUFJGaWxlTWFwUHJvdGVjdCBw cm90KTsKCgoKCmV4dGVybiBQUkludDMyIFBSX0dldE1lbU1hcEFsaWdubWVudCh2b2lkKTsKCmV4 dGVybiB2b2lkICogUFJfTWVtTWFwKAogICAgUFJGaWxlTWFwICpmbWFwLAogICAgUFJPZmZzZXQ2 NCBvZmZzZXQsCgogICAgUFJVaW50MzIgbGVuKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9NZW1Vbm1h cCh2b2lkICphZGRyLCBQUlVpbnQzMiBsZW4pOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlRmls ZU1hcChQUkZpbGVNYXAgKmZtYXApOwojIDE4ODMgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0x LjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3Rh dHVzIFBSX0NyZWF0ZVBpcGUoCiAgICBQUkZpbGVEZXNjICoqcmVhZFBpcGUsCiAgICBQUkZpbGVE ZXNjICoqd3JpdGVQaXBlCik7CgoKCgoKc3RydWN0IFBSUG9sbERlc2MgewogICAgUFJGaWxlRGVz YyogZmQ7CiAgICBQUkludDE2IGluX2ZsYWdzOwogICAgUFJJbnQxNiBvdXRfZmxhZ3M7Cn07CiMg MTk2NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9Qb2xsKAogICAgUFJQb2xsRGVz YyAqcGRzLCBQUkludG4gbnBkcywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMjAwOCAiL3Zh ci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyAqIFBSX05ld1BvbGxhYmxlRXZlbnQodm9pZCk7 CgpleHRlcm4gUFJTdGF0dXMgUFJfRGVzdHJveVBvbGxhYmxlRXZlbnQoUFJGaWxlRGVzYyAqZXZl bnQpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldFBvbGxhYmxlRXZlbnQoUFJGaWxlRGVzYyAqZXZl bnQpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1dhaXRGb3JQb2xsYWJsZUV2ZW50KFBSRmlsZURlc2Mg KmV2ZW50KTsKCn0KIyA0OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5o IiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVUkkuaCIgMQojIDcyICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVVJJLmgiCmNsYXNzIG5zSVVSSSA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwN2EyMmNjMCwgMHgwY2U1LCAweDExZDMsIHsg MHg5MywgMHgzMSwgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MCB9fTsgcmV0dXJu IGlpZDt9CiMgODcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVUkkuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFNwZWMobnNBQ1N0cmluZyAmIGFTcGVjKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRTcGVjKGNvbnN0IG5zQUNTdHJpbmcgJiBhU3BlYykgPSAwOwojIDk3ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ cmVQYXRoKG5zQUNTdHJpbmcgJiBhUHJlUGF0aCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0U2NoZW1lKG5zQUNTdHJpbmcgJiBhU2NoZW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRTY2hlbWUoY29uc3QgbnNBQ1N0cmluZyAmIGFTY2hlbWUpID0gMDsKCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRVc2VyUGFzcyhuc0FDU3RyaW5nICYgYVVzZXJQYXNzKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRVc2VyUGFzcyhjb25zdCBuc0FDU3RyaW5nICYgYVVzZXJQYXNz KSA9IDA7CiMgMTIzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVVJJLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRVc2VybmFtZShuc0FDU3RyaW5nICYgYVVzZXJuYW1lKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRVc2VybmFtZShjb25zdCBuc0FDU3RyaW5nICYgYVVzZXJuYW1l KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhc3N3b3JkKG5zQUNTdHJpbmcgJiBhUGFz c3dvcmQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhc3N3b3JkKGNvbnN0IG5zQUNTdHJp bmcgJiBhUGFzc3dvcmQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIb3N0UG9y dChuc0FDU3RyaW5nICYgYUhvc3RQb3J0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIb3N0 UG9ydChjb25zdCBuc0FDU3RyaW5nICYgYUhvc3RQb3J0KSA9IDA7CiMgMTQ3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIb3N0KG5z QUNTdHJpbmcgJiBhSG9zdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SG9zdChjb25zdCBu c0FDU3RyaW5nICYgYUhvc3QpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBvcnQo UFJJbnQzMiAqYVBvcnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBvcnQoUFJJbnQzMiBh UG9ydCkgPSAwOwojIDE2NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVVSSS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0UGF0aChuc0FDU3RyaW5nICYgYVBhdGgpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFBhdGgoY29uc3QgbnNBQ1N0cmluZyAmIGFQYXRoKSA9IDA7CiMgMTc3 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBFcXVhbHMobnNJVVJJICpvdGhlciwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgU2NoZW1lSXMoY29uc3QgY2hhciAqc2NoZW1lLCBQUkJvb2wgKl9yZXR2 YWwpID0gMDsKIyAxOTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVUkkuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSVVSSSAqKl9yZXR2YWwpID0gMDsKIyAyMDMgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVUkkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29s dmUoY29uc3QgbnNBQ1N0cmluZyAmIHJlbGF0aXZlUGF0aCwgbnNBQ1N0cmluZyAmIF9yZXR2YWwp ID0gMDsKIyAyMTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVUkkuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEFzY2lpU3BlYyhuc0FDU3RyaW5nICYgYUFzY2lpU3BlYykgPSAwOwoK CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFzY2lpSG9zdChuc0FDU3RyaW5nICYgYUFzY2lp SG9zdCkgPSAwOwojIDIzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVVSSS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0T3JpZ2luQ2hhcnNldChuc0FDU3RyaW5nICYgYU9yaWdpbkNo YXJzZXQpID0gMDsKCn07CiMgNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc05ldFV0 aWwuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lSZXF1ZXN0T2Jz ZXJ2ZXJQcm94eS5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lSZXF1 ZXN0T2JzZXJ2ZXJQcm94eS5oIgpjbGFzcyBuc0lFdmVudFF1ZXVlOwojIDM1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdE9ic2VydmVyUHJveHkuaCIKY2xhc3MgbnNJUmVx dWVzdE9ic2VydmVyUHJveHkgOiBwdWJsaWMgbnNJUmVxdWVzdE9ic2VydmVyIHsKIHB1YmxpYzoK CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9 IHsweDNjOWI1MzJlLCAweGRiODQsIDB4NGVjZiwgeyAweGFhLCAweDZhLCAweDRkLCAweDM4LCAw eGE5LCAweGM0LCAweGM1LCAweGYwIH19OyByZXR1cm4gaWlkO30KIyA0NyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25lY2tvL25zSVJlcXVlc3RPYnNlcnZlclByb3h5LmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBJbml0KG5zSVJlcXVlc3RPYnNlcnZlciAqb2JzZXJ2ZXIsIG5zSUV2ZW50UXVldWUgKmV2 ZW50USkgPSAwOwoKfTsKIyA1NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRp bC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVN0cmVhbUxpc3RlbmVy UHJveHkuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTGlz dGVuZXJQcm94eS5oIgpjbGFzcyBuc0lFdmVudFF1ZXVlOwojIDM1ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbmVja28vbnNJU3RyZWFtTGlzdGVuZXJQcm94eS5oIgpjbGFzcyBuc0lTdHJlYW1MaXN0 ZW5lclByb3h5IDogcHVibGljIG5zSVN0cmVhbUxpc3RlbmVyIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGU0MDBl Njg4LCAweDZiNTQsIDB4NGE4NCwgeyAweDhjLCAweDRlLCAweDU2LCAweGI0LCAweDAyLCAweDgx LCAweDk4LCAweDFhIH19OyByZXR1cm4gaWlkO30KIyA0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25lY2tvL25zSVN0cmVhbUxpc3RlbmVyUHJveHkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQo bnNJU3RyZWFtTGlzdGVuZXIgKmFMaXN0ZW5lciwgbnNJRXZlbnRRdWV1ZSAqYUV2ZW50USwgUFJV aW50MzIgYUJ1ZmZlclNlZ21lbnRTaXplLCBQUlVpbnQzMiBhQnVmZmVyTWF4U2l6ZSkgPSAwOwoK fTsKIyAxMjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lTdHJlYW1MaXN0ZW5lclBy b3h5LmgiCmNsYXNzIG5zSUFzeW5jU3RyZWFtTGlzdGVuZXIgOiBwdWJsaWMgbnNJU3RyZWFtTGlz dGVuZXIgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4MWIwMTJhZGUsIDB4OTFiZiwgMHgxMWQzLCB7IDB4OGMsIDB4 ZDksIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoj IDEzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVN0cmVhbUxpc3RlbmVyUHJveHku aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJU3RyZWFtTGlzdGVuZXIgKmFSZWNlaXZlciwg bnNJRXZlbnRRdWV1ZSAqYUV2ZW50USkgPSAwOwoKfTsKIyA1NSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tv L25zSVNpbXBsZVN0cmVhbUxpc3RlbmVyLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25lY2tvL25zSVNpbXBsZVN0cmVhbUxpc3RlbmVyLmgiCmNsYXNzIG5zSU91dHB1dFN0cmVhbTsK IyAzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVNpbXBsZVN0cmVhbUxpc3RlbmVy LmgiCmNsYXNzIG5zSVNpbXBsZVN0cmVhbUxpc3RlbmVyIDogcHVibGljIG5zSVN0cmVhbUxpc3Rl bmVyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweGE5Yjg0ZjZhLCAweDA4MjQsIDB4NDI3OCwgeyAweGJhLCAweGU2 LCAweGJmLCAweGNhLCAweDA1LCAweDcwLCAweGEyLCAweDZlIH19OyByZXR1cm4gaWlkO30KIyA0 MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVNpbXBsZVN0cmVhbUxpc3RlbmVyLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSU91dHB1dFN0cmVhbSAqYVNpbmssIG5zSVJlcXVl c3RPYnNlcnZlciAqYU9ic2VydmVyKSA9IDA7Cgp9OwojIDU2ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28v bnNJTG9hZEdyb3VwLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUxv YWRHcm91cC5oIgpjbGFzcyBuc0lTaW1wbGVFbnVtZXJhdG9yOwoKY2xhc3MgbnNJUmVxdWVzdE9i c2VydmVyOwoKY2xhc3MgbnNJSW50ZXJmYWNlUmVxdWVzdG9yOwojIDMxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJTG9hZEdyb3VwLmgiCmNsYXNzIG5zSUxvYWRHcm91cCA6IHB1Ymxp YyBuc0lSZXF1ZXN0IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7 c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDNkZTBhMzFjLCAweGZlYWYsIDB4NDAwZiwgeyAw eDlmLCAweDFlLCAweDRlLCAweGY3LCAweDFmLCAweDhiLCAweDIwLCAweGNjIH19OyByZXR1cm4g aWlkO30KIyA0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUxvYWRHcm91cC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0R3JvdXBPYnNlcnZlcihuc0lSZXF1ZXN0T2JzZXJ2ZXIgKiAq YUdyb3VwT2JzZXJ2ZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEdyb3VwT2JzZXJ2ZXIo bnNJUmVxdWVzdE9ic2VydmVyICogYUdyb3VwT2JzZXJ2ZXIpID0gMDsKIyA1OSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25lY2tvL25zSUxvYWRHcm91cC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 RGVmYXVsdExvYWRSZXF1ZXN0KG5zSVJlcXVlc3QgKiAqYURlZmF1bHRMb2FkUmVxdWVzdCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdExvYWRSZXF1ZXN0KG5zSVJlcXVlc3QgKiBh RGVmYXVsdExvYWRSZXF1ZXN0KSA9IDA7CiMgNzIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNr by9uc0lMb2FkR3JvdXAuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZFJlcXVlc3QobnNJUmVxdWVz dCAqYVJlcXVlc3QsIG5zSVN1cHBvcnRzICphQ29udGV4dCkgPSAwOwoKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgUmVtb3ZlUmVxdWVzdChuc0lSZXF1ZXN0ICphUmVxdWVzdCwgbnNJU3VwcG9ydHMg KmFDb250ZXh0LCBuc3Jlc3VsdCBhU3RhdHVzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRSZXF1ZXN0cyhuc0lTaW1wbGVFbnVtZXJhdG9yICogKmFSZXF1ZXN0cykgPSAwOwoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWN0aXZlQ291bnQoUFJVaW50MzIgKmFBY3RpdmVDb3Vu dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb3RpZmljYXRpb25DYWxsYmFja3Mo bnNJSW50ZXJmYWNlUmVxdWVzdG9yICogKmFOb3RpZmljYXRpb25DYWxsYmFja3MpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldE5vdGlmaWNhdGlvbkNhbGxiYWNrcyhuc0lJbnRlcmZhY2VSZXF1 ZXN0b3IgKiBhTm90aWZpY2F0aW9uQ2FsbGJhY2tzKSA9IDA7Cgp9OwojIDU3ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uZWNrby9uc0lJT1NlcnZpY2UuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv bmVja28vbnNJSU9TZXJ2aWNlLmgiCmNsYXNzIG5zSVByb3RvY29sSGFuZGxlcjsKCmNsYXNzIG5z SUNoYW5uZWw7CgpjbGFzcyBuc0lVUkk7CgpjbGFzcyBuc0lGaWxlOwojIDQ0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJSU9TZXJ2aWNlLmgiCmNsYXNzIG5zSUlPU2VydmljZSA6IHB1 YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhiZGRlZGEzZiwgMHg5MDIwLCAweDRkMTIs IHsgMHg4YywgMHg3MCwgMHg5OCwgMHg0ZSwgMHhlOSwgMHhmNywgMHg5MywgMHg1ZSB9fTsgcmV0 dXJuIGlpZDt9CiMgNTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJT1NlcnZpY2Uu aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3RvY29sSGFuZGxlcihjb25zdCBjaGFyICphU2No ZW1lLCBuc0lQcm90b2NvbEhhbmRsZXIgKipfcmV0dmFsKSA9IDA7CiMgNjUgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uZWNrby9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBy b3RvY29sRmxhZ3MoY29uc3QgY2hhciAqYVNjaGVtZSwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsK IyA3NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUlPU2VydmljZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgTmV3VVJJKGNvbnN0IG5zQUNTdHJpbmcgJiBhU3BlYywgY29uc3QgY2hhciAq YU9yaWdpbkNoYXJzZXQsIG5zSVVSSSAqYUJhc2VVUkksIG5zSVVSSSAqKl9yZXR2YWwpID0gMDsK IyA4NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUlPU2VydmljZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgTmV3RmlsZVVSSShuc0lGaWxlICphRmlsZSwgbnNJVVJJICoqX3JldHZhbCkg PSAwOwojIDk0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJSU9TZXJ2aWNlLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBOZXdDaGFubmVsRnJvbVVSSShuc0lVUkkgKmFVUkksIG5zSUNoYW5u ZWwgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld0NoYW5uZWwoY29u c3QgbnNBQ1N0cmluZyAmIGFTcGVjLCBjb25zdCBjaGFyICphT3JpZ2luQ2hhcnNldCwgbnNJVVJJ ICphQmFzZVVSSSwgbnNJQ2hhbm5lbCAqKl9yZXR2YWwpID0gMDsKIyAxMTAgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uZWNrby9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9m ZmxpbmUoUFJCb29sICphT2ZmbGluZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T2ZmbGlu ZShQUkJvb2wgYU9mZmxpbmUpID0gMDsKIyAxMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNr by9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFsbG93UG9ydChQUkludDMyIGFQ b3J0LCBjb25zdCBjaGFyICphU2NoZW1lLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKIyAxNDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IEV4dHJhY3RTY2hlbWUoY29uc3QgbnNBQ1N0cmluZyAmIHVybFN0cmluZywgbnNBQ1N0cmlu ZyAmIF9yZXR2YWwpID0gMDsKCn07CiMgNjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9u c05ldFV0aWwuaCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJQ2hhbm5l bC5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lDaGFubmVsLmgiCmNs YXNzIG5zSVVSSTsKCmNsYXNzIG5zSUludGVyZmFjZVJlcXVlc3RvcjsKCmNsYXNzIG5zSUlucHV0 U3RyZWFtOwoKY2xhc3MgbnNJU3RyZWFtTGlzdGVuZXI7CiMgNDcgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uZWNrby9uc0lDaGFubmVsLmgiCmNsYXNzIG5zSUNoYW5uZWwgOiBwdWJsaWMgbnNJUmVx dWVzdCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHhjNjNhMDU1YSwgMHhhNjc2LCAweDRlNzEsIHsgMHhiZiwgMHgz YywgMHg2YywgMHhmYSwgMHgxMSwgMHgwOCwgMHgyMCwgMHgxOCB9fTsgcmV0dXJuIGlpZDt9CiMg NjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lDaGFubmVsLmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRPcmlnaW5hbFVSSShuc0lVUkkgKiAqYU9yaWdpbmFsVVJJKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRPcmlnaW5hbFVSSShuc0lVUkkgKiBhT3JpZ2luYWxVUkkpID0gMDsK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VVJJKG5zSVVSSSAqICphVVJJKSA9IDA7CiMgODEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRPd25lcihuc0lTdXBwb3J0cyAqICphT3duZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldE93bmVyKG5zSVN1cHBvcnRzICogYU93bmVyKSA9IDA7CiMgOTQgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uZWNrby9uc0lDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb3Rp ZmljYXRpb25DYWxsYmFja3MobnNJSW50ZXJmYWNlUmVxdWVzdG9yICogKmFOb3RpZmljYXRpb25D YWxsYmFja3MpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5vdGlmaWNhdGlvbkNhbGxiYWNr cyhuc0lJbnRlcmZhY2VSZXF1ZXN0b3IgKiBhTm90aWZpY2F0aW9uQ2FsbGJhY2tzKSA9IDA7CgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlY3VyaXR5SW5mbyhuc0lTdXBwb3J0cyAqICphU2Vj dXJpdHlJbmZvKSA9IDA7CiMgMTExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJQ2hh bm5lbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudFR5cGUobnNBQ1N0cmluZyAmIGFD b250ZW50VHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29udGVudFR5cGUoY29uc3Qg bnNBQ1N0cmluZyAmIGFDb250ZW50VHlwZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q29udGVudENoYXJzZXQobnNBQ1N0cmluZyAmIGFDb250ZW50Q2hhcnNldCkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0Q29udGVudENoYXJzZXQoY29uc3QgbnNBQ1N0cmluZyAmIGFDb250 ZW50Q2hhcnNldCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudExlbmd0 aChQUkludDMyICphQ29udGVudExlbmd0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29u dGVudExlbmd0aChQUkludDMyIGFDb250ZW50TGVuZ3RoKSA9IDA7CiMgMTQwICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJQ2hhbm5lbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT3Blbihu c0lJbnB1dFN0cmVhbSAqKl9yZXR2YWwpID0gMDsKIyAxNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uZWNrby9uc0lDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBc3luY09wZW4obnNJU3Ry ZWFtTGlzdGVuZXIgKmFMaXN0ZW5lciwgbnNJU3VwcG9ydHMgKmFDb250ZXh0KSA9IDA7CiMgMTYy ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJQ2hhbm5lbC5oIgogIGVudW0geyBMT0FE X0RPQ1VNRU5UX1VSSSA9IDY1NTM2VSB9OwoKCgoKCiAgZW51bSB7IExPQURfUkVUQVJHRVRFRF9E T0NVTUVOVF9VUkkgPSAxMzEwNzJVIH07CgoKCgoKCiAgZW51bSB7IExPQURfUkVQTEFDRSA9IDI2 MjE0NFUgfTsKCgoKCgogIGVudW0geyBMT0FEX0lOSVRJQUxfRE9DVU1FTlRfVVJJID0gNTI0Mjg4 VSB9OwoKfTsKIyA2MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAy CiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUlucHV0U3RyZWFtQ2hhbm5lbC5o IiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJbnB1dFN0cmVhbUNoYW5u ZWwuaCIKY2xhc3MgbnNJSW5wdXRTdHJlYW07CiMgMzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u ZWNrby9uc0lJbnB1dFN0cmVhbUNoYW5uZWwuaCIKY2xhc3MgbnNJSW5wdXRTdHJlYW1DaGFubmVs IDogcHVibGljIG5zSUNoYW5uZWwgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NTYwYTY0Y2UsIDB4NmQ2NiwgMHg0 NGRiLCB7IDB4YjMsIDB4OGUsIDB4ODYsIDB4NDQsIDB4NjksIDB4YzUsIDB4MmQsIDB4MDMgfX07 IHJldHVybiBpaWQ7fQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRVUkkobnNJVVJJICphVVJJ KSA9IDA7CiMgNTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJbnB1dFN0cmVhbUNo YW5uZWwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRTdHJlYW0obnNJSW5wdXRTdHJl YW0gKiAqYUNvbnRlbnRTdHJlYW0pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbnRlbnRT dHJlYW0obnNJSW5wdXRTdHJlYW0gKiBhQ29udGVudFN0cmVhbSkgPSAwOwoKfTsKIyA2MyAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25lY2tvL25zSVRyYW5zcG9ydC5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uZWNrby9uc0lUcmFuc3BvcnQuaCIKY2xhc3MgbnNJSW5wdXRTdHJlYW07CgpjbGFzcyBu c0lPdXRwdXRTdHJlYW07CgpjbGFzcyBuc0lUcmFuc3BvcnRFdmVudFNpbms7CgpjbGFzcyBuc0lF dmVudFF1ZXVlOwojIDMzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVHJhbnNwb3J0 LmgiCmNsYXNzIG5zSVRyYW5zcG9ydCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHhjYmIwYmFlYiwgMHg1ZmNiLCAweDQwOGIsIHsgMHhhMiwgMHhiZSwgMHg5ZiwgMHg4ZiwgMHhj OSwgMHg4ZCwgMHgwYSwgMHhmMSB9fTsgcmV0dXJuIGlpZDt9CgoKCgogIGVudW0geyBPUEVOX0JM T0NLSU5HID0gMVUgfTsKCiAgZW51bSB7IE9QRU5fVU5CVUZGRVJFRCA9IDJVIH07CiMgNTggIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lUcmFuc3BvcnQuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IE9wZW5JbnB1dFN0cmVhbShQUlVpbnQzMiBhRmxhZ3MsIFBSVWludDMyIGFTZWdtZW50U2l6 ZSwgUFJVaW50MzIgYVNlZ21lbnRDb3VudCwgbnNJSW5wdXRTdHJlYW0gKipfcmV0dmFsKSA9IDA7 CiMgNzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lUcmFuc3BvcnQuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IE9wZW5PdXRwdXRTdHJlYW0oUFJVaW50MzIgYUZsYWdzLCBQUlVpbnQzMiBh U2VnbWVudFNpemUsIFBSVWludDMyIGFTZWdtZW50Q291bnQsIG5zSU91dHB1dFN0cmVhbSAqKl9y ZXR2YWwpID0gMDsKIyA4MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVRyYW5zcG9y dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvc2UobnNyZXN1bHQgYVJlYXNvbikgPSAwOwojIDk1 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVHJhbnNwb3J0LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRFdmVudFNpbmsobnNJVHJhbnNwb3J0RXZlbnRTaW5rICphU2luaywgbnNJRXZl bnRRdWV1ZSAqYUV2ZW50USkgPSAwOwoKCgoKCgogIGVudW0geyBTVEFUVVNfUkVBRElORyA9IDIx NTIzOTg4NTZVIH07CgogIGVudW0geyBTVEFUVVNfV1JJVElORyA9IDIxNTIzOTg4NTdVIH07Cgp9 OwojIDE5MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVRyYW5zcG9ydC5oIgpjbGFz cyBuc0lUcmFuc3BvcnRFdmVudFNpbmsgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g ezB4NTYxZGU4YWYsIDB4MWI3NCwgMHg0Y2Q0LCB7IDB4ODQsIDB4NzksIDB4ODksIDB4NDQsIDB4 N2QsIDB4NDgsIDB4MTgsIDB4NWMgfX07IHJldHVybiBpaWQ7fQojIDIxMyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25lY2tvL25zSVRyYW5zcG9ydC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25UcmFu c3BvcnRTdGF0dXMobnNJVHJhbnNwb3J0ICphVHJhbnNwb3J0LCBuc3Jlc3VsdCBhU3RhdHVzLCBQ UlVpbnQzMiBhUHJvZ3Jlc3MsIFBSVWludDMyIGFQcm9ncmVzc01heCkgPSAwOwoKfTsKIyA2NCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25lY2tvL25zSUh0dHBDaGFubmVsLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25lY2tvL25zSUh0dHBDaGFubmVsLmgiCmNsYXNzIG5zSUh0dHBIZWFkZXJWaXNp dG9yOwojIDM2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJSHR0cENoYW5uZWwuaCIK Y2xhc3MgbnNJSHR0cENoYW5uZWwgOiBwdWJsaWMgbnNJQ2hhbm5lbCB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5 Mjc3ZmUwOSwgMHhmMGNjLCAweDRjZDksIHsgMHhiYiwgMHhjZSwgMHg1OCwgMHgxZCwgMHhkOSwg MHg0YiwgMHgwMiwgMHg2MCB9fTsgcmV0dXJuIGlpZDt9CiMgNTYgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9uZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVxdWVz dE1ldGhvZChuc0FDU3RyaW5nICYgYVJlcXVlc3RNZXRob2QpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldFJlcXVlc3RNZXRob2QoY29uc3QgbnNBQ1N0cmluZyAmIGFSZXF1ZXN0TWV0aG9kKSA9 IDA7CiMgNzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVmZXJyZXIobnNJVVJJICogKmFSZWZlcnJlcikgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVmZXJyZXIobnNJVVJJICogYVJlZmVycmVyKSA9IDA7CiMg ODQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UmVxdWVzdEhlYWRlcihjb25zdCBuc0FDU3RyaW5nICYgYUhlYWRlciwg bnNBQ1N0cmluZyAmIF9yZXR2YWwpID0gMDsKIyAxMDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u ZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVxdWVzdEhlYWRl cihjb25zdCBuc0FDU3RyaW5nICYgYUhlYWRlciwgY29uc3QgbnNBQ1N0cmluZyAmIGFWYWx1ZSwg UFJCb29sIGFNZXJnZSkgPSAwOwojIDExOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25z SUh0dHBDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBWaXNpdFJlcXVlc3RIZWFkZXJzKG5z SUh0dHBIZWFkZXJWaXNpdG9yICphVmlzaXRvcikgPSAwOwojIDEzMiAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25lY2tvL25zSUh0dHBDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGxv d1BpcGVsaW5pbmcoUFJCb29sICphQWxsb3dQaXBlbGluaW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRBbGxvd1BpcGVsaW5pbmcoUFJCb29sIGFBbGxvd1BpcGVsaW5pbmcpID0gMDsKIyAx NDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UmVkaXJlY3Rpb25MaW1pdChQUlVpbnQzMiAqYVJlZGlyZWN0aW9uTGlt aXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlZGlyZWN0aW9uTGltaXQoUFJVaW50MzIg YVJlZGlyZWN0aW9uTGltaXQpID0gMDsKIyAxNjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNr by9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVzcG9uc2VTdGF0dXMo UFJVaW50MzIgKmFSZXNwb25zZVN0YXR1cykgPSAwOwojIDE3MCAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL25lY2tvL25zSUh0dHBDaGFubmVsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZXNwb25z ZVN0YXR1c1RleHQobnNBQ1N0cmluZyAmIGFSZXNwb25zZVN0YXR1c1RleHQpID0gMDsKIyAxODMg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lIdHRwQ2hhbm5lbC5oIgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0UmVxdWVzdFN1Y2NlZWRlZChQUkJvb2wgKmFSZXF1ZXN0U3VjY2VlZGVkKSA9 IDA7CiMgMTk1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJSHR0cENoYW5uZWwuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IG5zQUNTdHJpbmcgJiBo ZWFkZXIsIG5zQUNTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CiMgMjIwICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbmVja28vbnNJSHR0cENoYW5uZWwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlc3Bv bnNlSGVhZGVyKGNvbnN0IG5zQUNTdHJpbmcgJiBoZWFkZXIsIGNvbnN0IG5zQUNTdHJpbmcgJiB2 YWx1ZSwgUFJCb29sIG1lcmdlKSA9IDA7CiMgMjMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVj a28vbnNJSHR0cENoYW5uZWwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFZpc2l0UmVzcG9uc2VIZWFk ZXJzKG5zSUh0dHBIZWFkZXJWaXNpdG9yICphVmlzaXRvcikgPSAwOwoKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgSXNOb1N0b3JlUmVzcG9uc2UoUFJCb29sICpfcmV0dmFsKSA9IDA7CiMgMjQ3ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJSHR0cENoYW5uZWwuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IElzTm9DYWNoZVJlc3BvbnNlKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyA2NSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25lY2tvL25zSURvd25sb2FkZXIuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJRG93bmxvYWRlci5oIgpjbGFzcyBuc0lVUkk7CgpjbGFzcyBuc0lM b2FkR3JvdXA7CgpjbGFzcyBuc0lJbnRlcmZhY2VSZXF1ZXN0b3I7CgpjbGFzcyBuc0lGaWxlOwoK Y2xhc3MgbnNJRG93bmxvYWRlcjsKIyAzNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25z SURvd25sb2FkZXIuaCIKY2xhc3MgbnNJRG93bmxvYWRPYnNlcnZlciA6IHB1YmxpYyBuc0lTdXBw b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHg2ZTBmYzk2MiwgMHg0YTZmLCAweDRmYTYsIHsgMHg4MywgMHgx ZiwgMHg4YywgMHgyNiwgMHhjNSwgMHg1NCwgMHg0MCwgMHg3ZiB9fTsgcmV0dXJuIGlpZDt9CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IE9uRG93bmxvYWRDb21wbGV0ZShuc0lEb3dubG9hZGVyICpkb3du bG9hZGVyLCBuc0lTdXBwb3J0cyAqY3R4dCwgbnNyZXN1bHQgc3RhdHVzLCBuc0lGaWxlICpyZXN1 bHQpID0gMDsKCn07CiMgMTAyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJRG93bmxv YWRlci5oIgpjbGFzcyBuc0lEb3dubG9hZGVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1Ymxp YzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp ZCA9IHsweDk2MzJjYzBkLCAweDg2NGQsIDB4NGY5MiwgeyAweGI3LCAweGU1LCAweGJkLCAweDgw LCAweDk3LCAweGM0LCAweGU5LCAweGE1IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNy ZXN1bHQgSW5pdChuc0lVUkkgKnVyaSwgbnNJRG93bmxvYWRPYnNlcnZlciAqY29tcGxldGlvbk9i c2VydmVyLCBuc0lTdXBwb3J0cyAqY3R4dCwgUFJCb29sIHN5bmNocm9ub3VzLCBuc0lMb2FkR3Jv dXAgKmxvYWRHcm91cCwgbnNJSW50ZXJmYWNlUmVxdWVzdG9yICpub3RpZmljYXRpb25DYWxsYmFj a3MsIG5zTG9hZEZsYWdzIGxvYWRBdHRyaWJ1dGVzKSA9IDA7Cgp9OwojIDY2ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvbmVja28vbnNJUmVzdW1hYmxlRW50aXR5SUQuaCIgMQojIDI4ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbmVja28vbnNJUmVzdW1hYmxlRW50aXR5SUQuaCIKY2xhc3MgbnNJUmVzdW1hYmxlRW50 aXR5SUQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YzlkZjM4ZDQsIDB4MWRk MSwgMHgxMWIyLCB7IDB4ODEsIDB4YWUsIDB4YzksIDB4ZTcsIDB4NjcsIDB4MjUsIDB4NmQsIDB4 MWIgfX07IHJldHVybiBpaWQ7fQoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2l6ZShQUlVpbnQz MiAqYVNpemUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNpemUoUFJVaW50MzIgYVNpemUp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlmaWVkKFBSVGltZSAqYUxh c3RNb2RpZmllZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFzdE1vZGlmaWVkKFBSVGlt ZSBhTGFzdE1vZGlmaWVkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXF1YWxzKG5zSVJl c3VtYWJsZUVudGl0eUlEICpvdGhlciwgUFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDY3ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTG9hZGVyLmgiIDEKIyAyNiAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL25lY2tvL25zSVN0cmVhbUxvYWRlci5oIgpjbGFzcyBuc0lSZXF1ZXN0OwoKY2xh c3MgbnNJVVJJOwoKY2xhc3MgbnNJTG9hZEdyb3VwOwoKY2xhc3MgbnNJU3RyZWFtTG9hZGVyOwoK Y2xhc3MgbnNJSW50ZXJmYWNlUmVxdWVzdG9yOwojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv bmVja28vbnNJU3RyZWFtTG9hZGVyLmgiCmNsYXNzIG5zSVN0cmVhbUxvYWRlck9ic2VydmVyIDog cHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDM1OWY3OTkwLCAweGQ0ZTksIDB4MTFk MywgeyAweGExLCAweGE1LCAweDAwLCAweDUwLCAweDA0LCAweDFjLCAweGFmLCAweDQ0IH19OyBy ZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdHJlYW1Db21wbGV0ZShuc0lTdHJl YW1Mb2FkZXIgKmxvYWRlciwgbnNJU3VwcG9ydHMgKmN0eHQsIG5zcmVzdWx0IHN0YXR1cywgUFJV aW50MzIgcmVzdWx0TGVuZ3RoLCBjb25zdCBjaGFyICpyZXN1bHQpID0gMDsKCn07CiMgMTExICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTG9hZGVyLmgiCmNsYXNzIG5zSVN0 cmVhbUxvYWRlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMWQzNzM2MCwg MHg4ZTVhLCAweDExZDMsIHsgMHg5MywgMHhhZCwgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhm ZCwgMHg0MCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJQ2hh bm5lbCAqYUNoYW5uZWwsIG5zSVN0cmVhbUxvYWRlck9ic2VydmVyICphT2JzZXJ2ZXIsIG5zSVN1 cHBvcnRzICphQ29udGV4dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROdW1CeXRl c1JlYWQoUFJVaW50MzIgKmFOdW1CeXRlc1JlYWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0UmVxdWVzdChuc0lSZXF1ZXN0ICogKmFSZXF1ZXN0KSA9IDA7Cgp9OwojIDY4ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJVW5pY2hhclN0cmVhbUxvYWRlci5oIiAxCiMgMTcgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVbmljaGFyU3RyZWFtTG9hZGVyLmgiCmNsYXNzIG5zSVVu aWNoYXJJbnB1dFN0cmVhbTsKCmNsYXNzIG5zSVVuaWNoYXJTdHJlYW1Mb2FkZXI7CgpjbGFzcyBu c0lDaGFubmVsOwojIDMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVW5pY2hhclN0 cmVhbUxvYWRlci5oIgpjbGFzcyBuc0lVbmljaGFyU3RyZWFtTG9hZGVyT2JzZXJ2ZXIgOiBwdWJs aWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZTA2ZThiMDgsIDB4OGNkZCwgMHg0NTAzLCB7 IDB4YTAsIDB4YTAsIDB4NmYsIDB4M2IsIDB4OTQsIDB4MzYsIDB4MDIsIDB4YWYgfX07IHJldHVy biBpaWQ7fQojIDQ3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJVW5pY2hhclN0cmVh bUxvYWRlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25EZXRlcm1pbmVDaGFyc2V0KG5zSVVuaWNo YXJTdHJlYW1Mb2FkZXIgKmFMb2FkZXIsIG5zSVN1cHBvcnRzICphQ29udGV4dCwgY29uc3QgY2hh ciAqYUZpcnN0U2VnbWVudCwgUFJVaW50MzIgYUxlbmd0aCwgbnNBQ1N0cmluZyAmIF9yZXR2YWwp ID0gMDsKIyA1OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVVuaWNoYXJTdHJlYW1M b2FkZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE9uU3RyZWFtQ29tcGxldGUobnNJVW5pY2hhclN0 cmVhbUxvYWRlciAqYUxvYWRlciwgbnNJU3VwcG9ydHMgKmFDb250ZXh0LCBuc3Jlc3VsdCBhU3Rh dHVzLCBuc0lVbmljaGFySW5wdXRTdHJlYW0gKmFVbmljaGFyRGF0YSkgPSAwOwoKfTsKIyAxMjkg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lVbmljaGFyU3RyZWFtTG9hZGVyLmgiCmNs YXNzIG5zSVVuaWNoYXJTdHJlYW1Mb2FkZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGlj OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0gezB4OGEzZWNhMTYsIDB4MTY3ZSwgMHg0NDNkLCB7IDB4OTQsIDB4ODUsIDB4N2UsIDB4ODQs IDB4ZWQsIDB4ODIsIDB4MmUsIDB4OTUgfX07IHJldHVybiBpaWQ7fQoKICBlbnVtIHsgREVGQVVM VF9TRUdNRU5UX1NJWkUgPSA0MDk2VSB9OwojIDE0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25l Y2tvL25zSVVuaWNoYXJTdHJlYW1Mb2FkZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJ Q2hhbm5lbCAqYUNoYW5uZWwsIG5zSVVuaWNoYXJTdHJlYW1Mb2FkZXJPYnNlcnZlciAqYU9ic2Vy dmVyLCBuc0lTdXBwb3J0cyAqYUNvbnRleHQsIFBSVWludDMyIGFTZWdtZW50U2l6ZSkgPSAwOwoK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2hhbm5lbChuc0lDaGFubmVsICogKmFDaGFubmVs KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGFyc2V0KG5zQUNTdHJpbmcgJiBh Q2hhcnNldCkgPSAwOwoKfTsKIyA2OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0 VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVBpcGUuaCIgMQoj IDEwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJUGlwZS5oIgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lBc3luY0lucHV0U3RyZWFtLmgiIDEKIyAxNyAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUFzeW5jSW5wdXRTdHJlYW0uaCIKY2xhc3MgbnNJSW5w dXRTdHJlYW1Ob3RpZnk7CgpjbGFzcyBuc0lFdmVudFF1ZXVlOwojIDI5ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUveHBjb20vbnNJQXN5bmNJbnB1dFN0cmVhbS5oIgpjbGFzcyBuc0lBc3luY0lucHV0 U3RyZWFtIDogcHVibGljIG5zSUlucHV0U3RyZWFtIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGNjOTExZTA5LCAw eDJhMDIsIDB4NGQyZCwgeyAweGJhLCAweDRiLCAweGIyLCAweGFmLCAweGIxLCAweDczLCAweGU5 LCAweDZkIH19OyByZXR1cm4gaWlkO30KIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L25zSUFzeW5jSW5wdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENsb3NlRXgobnNyZXN1 bHQgcmVhc29uKSA9IDA7CiMgNjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lBc3lu Y0lucHV0U3RyZWFtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBc3luY1dhaXQobnNJSW5wdXRTdHJl YW1Ob3RpZnkgKmFOb3RpZnksIFBSVWludDMyIGFSZXF1ZXN0ZWRDb3VudCwgbnNJRXZlbnRRdWV1 ZSAqYUV2ZW50USkgPSAwOwoKfTsKIyAxMzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u c0lBc3luY0lucHV0U3RyZWFtLmgiCmNsYXNzIG5zSUlucHV0U3RyZWFtTm90aWZ5IDogcHVibGlj IG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7 c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDIwYzY2NWEzLCAweDBlYmYsIDB4NGViYiwgeyAw eDk3LCAweGJhLCAweDc5LCAweDQyLCAweDQ4LCAweGJmLCAweGE4LCAweGZlIH19OyByZXR1cm4g aWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgT25JbnB1dFN0cmVhbVJlYWR5KG5zSUFzeW5jSW5w dXRTdHJlYW0gKmFTdHJlYW0pID0gMDsKCn07CiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0lQaXBlLmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ QXN5bmNPdXRwdXRTdHJlYW0uaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJQXN5bmNPdXRwdXRTdHJlYW0uaCIKY2xhc3MgbnNJT3V0cHV0U3RyZWFtTm90aWZ5OwoKY2xh c3MgbnNJRXZlbnRRdWV1ZTsKIyAyOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUFz eW5jT3V0cHV0U3RyZWFtLmgiCmNsYXNzIG5zSUFzeW5jT3V0cHV0U3RyZWFtIDogcHVibGljIG5z SU91dHB1dFN0cmVhbSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwNGJhMWI1MywgMHhmYWQwLCAweDQwMzMsIHsg MHg5MSwgMHhjOSwgMHgzZSwgMHgyNCwgMHhkYiwgMHgyMiwgMHgwNywgMHg5YyB9fTsgcmV0dXJu IGlpZDt9CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lBc3luY091dHB1dFN0 cmVhbS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvc2VFeChuc3Jlc3VsdCByZWFzb24pID0gMDsK IyA2MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUFzeW5jT3V0cHV0U3RyZWFtLmgi CiAgdmlydHVhbCBuc3Jlc3VsdCBBc3luY1dhaXQobnNJT3V0cHV0U3RyZWFtTm90aWZ5ICphTm90 aWZ5LCBQUlVpbnQzMiBhUmVxdWVzdGVkQ291bnQsIG5zSUV2ZW50UXVldWUgKmFFdmVudFEpID0g MDsKCn07CiMgMTMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQXN5bmNPdXRwdXRT dHJlYW0uaCIKY2xhc3MgbnNJT3V0cHV0U3RyZWFtTm90aWZ5IDogcHVibGljIG5zSVN1cHBvcnRz IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweDYxNGRlZjExLCAweDFkNzcsIDB4NDA5YiwgeyAweDgxLCAweDUzLCAw eGVhLCAweDNhLCAweGU1LCAweGJhLCAweGJjLCAweDNjIH19OyByZXR1cm4gaWlkO30KCgogIHZp cnR1YWwgbnNyZXN1bHQgT25PdXRwdXRTdHJlYW1SZWFkeShuc0lBc3luY091dHB1dFN0cmVhbSAq YVN0cmVhbSkgPSAwOwoKfTsKIyAxNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVBp cGUuaCIgMgoKCgoKCgpjbGFzcyBuc0lNZW1vcnk7CiMgMzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNvbS9uc0lQaXBlLmgiCmNsYXNzIG5zSVBpcGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ SUQgaWlkID0gezB4ZjQyMTFhYmMsIDB4NjFiMywgMHgxMWQ0LCB7IDB4OTgsIDB4NzcsIDB4MDAs IDB4YzAsIDB4NGYsIDB4YTAsIDB4Y2YsIDB4NGEgfX07IHJldHVybiBpaWQ7fQoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBJbml0KFBSQm9vbCBub25CbG9ja2luZ0lucHV0LCBQUkJvb2wgbm9uQmxv Y2tpbmdPdXRwdXQsIFBSVWludDMyIHNlZ21lbnRTaXplLCBQUlVpbnQzMiBzZWdtZW50Q291bnQs IG5zSU1lbW9yeSAqc2VnbWVudEFsbG9jYXRvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRJbnB1dFN0cmVhbShuc0lBc3luY0lucHV0U3RyZWFtICogKmFJbnB1dFN0cmVhbSkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPdXRwdXRTdHJlYW0obnNJQXN5bmNPdXRwdXRTdHJlYW0g KiAqYU91dHB1dFN0cmVhbSkgPSAwOwoKfTsKIyAxMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNvbS9uc0lQaXBlLmgiCmNsYXNzIG5zSVNlYXJjaGFibGVJbnB1dFN0cmVhbSA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4YzM5ZWY2MiwgMHhmN2M5LCAweDExZDQsIHsgMHg5 OCwgMHhmNSwgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHgwZSwgMHg5YiB9fTsgcmV0dXJuIGlp ZDt9CiMgMTQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJUGlwZS5oIgogIHZpcnR1 YWwgbnNyZXN1bHQgU2VhcmNoKGNvbnN0IGNoYXIgKmZvclN0cmluZywgUFJCb29sIGlnbm9yZUNh c2UsIFBSQm9vbCAqZm91bmQsIFBSVWludDMyICpvZmZzZXRTZWFyY2hlZFRvKSA9IDA7Cgp9Owoj IDE5NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVBpcGUuaCIKZXh0ZXJuIG5zcmVz dWx0Ck5TX05ld1BpcGUyKG5zSUFzeW5jSW5wdXRTdHJlYW0gKipwaXBlSW4sCiAgICAgICAgICAg IG5zSUFzeW5jT3V0cHV0U3RyZWFtICoqcGlwZU91dCwKICAgICAgICAgICAgUFJCb29sIG5vbkJs b2NraW5nSW5wdXQgPSAwLAogICAgICAgICAgICBQUkJvb2wgbm9uQmxvY2tpbmdPdXRwdXQgPSAw LAogICAgICAgICAgICBQUlVpbnQzMiBzZWdtZW50U2l6ZSA9IDAsCiAgICAgICAgICAgIFBSVWlu dDMyIHNlZ21lbnRDb3VudCA9IDAsCiAgICAgICAgICAgIG5zSU1lbW9yeSAqc2VnbWVudEFsbG9j ID0gMCk7CmlubGluZSBuc3Jlc3VsdApOU19OZXdQaXBlKG5zSUlucHV0U3RyZWFtICoqcGlwZUlu LAogICAgICAgICAgIG5zSU91dHB1dFN0cmVhbSAqKnBpcGVPdXQsCiAgICAgICAgICAgUFJVaW50 MzIgc2VnbWVudFNpemUgPSAwLAogICAgICAgICAgIFBSVWludDMyIG1heFNpemUgPSAwLAogICAg ICAgICAgIFBSQm9vbCBub25CbG9ja2luZ0lucHV0ID0gMCwKICAgICAgICAgICBQUkJvb2wgbm9u QmxvY2tpbmdPdXRwdXQgPSAwLAogICAgICAgICAgIG5zSU1lbW9yeSAqc2VnbWVudEFsbG9jID0g MCkKewogICAgUFJVaW50MzIgc2VnbWVudENvdW50OwogICAgaWYgKHNlZ21lbnRTaXplID09IDAp CiAgICAgICAgc2VnbWVudENvdW50ID0gMDsKICAgIGVsc2UKICAgICAgICBzZWdtZW50Q291bnQg PSBtYXhTaXplIC8gc2VnbWVudFNpemU7CiAgICBuc0lBc3luY0lucHV0U3RyZWFtICppbjsKICAg IG5zSUFzeW5jT3V0cHV0U3RyZWFtICpvdXQ7CiAgICBuc3Jlc3VsdCBydiA9IE5TX05ld1BpcGUy KCZpbiwgJm91dCwgbm9uQmxvY2tpbmdJbnB1dCwgbm9uQmxvY2tpbmdPdXRwdXQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRTaXplLCBzZWdtZW50Q291bnQsIHNlZ21lbnRB bGxvYyk7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgKnBpcGVJ biA9IGluOwogICAgKnBpcGVPdXQgPSBvdXQ7CiAgICByZXR1cm4gMDsKfQojIDcwICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbmVja28vbnNJUHJvdG9jb2xIYW5kbGVyLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25lY2tvL25zSVByb3RvY29sSGFuZGxlci5oIgpjbGFzcyBuc0lVUkk7CgpjbGFzcyBu c0lDaGFubmVsOwojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUHJvdG9jb2xI YW5kbGVyLmgiCmNsYXNzIG5zSVByb3RvY29sSGFuZGxlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHgxNWZkNjk0MCwgMHg4ZWE3LCAweDExZDMsIHsgMHg5MywgMHhhZCwgMHgw MCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MCB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFNjaGVtZShuc0FDU3RyaW5nICYgYVNjaGVtZSkgPSAwOwoKCgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRQb3J0KFBSSW50MzIgKmFEZWZhdWx0UG9y dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm90b2NvbEZsYWdzKFBSVWludDMy ICphUHJvdG9jb2xGbGFncykgPSAwOwojIDg1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28v bnNJUHJvdG9jb2xIYW5kbGVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdVUkkoY29uc3QgbnNB Q1N0cmluZyAmIGFTcGVjLCBjb25zdCBjaGFyICphT3JpZ2luQ2hhcnNldCwgbnNJVVJJICphQmFz ZVVSSSwgbnNJVVJJICoqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdD aGFubmVsKG5zSVVSSSAqYVVSSSwgbnNJQ2hhbm5lbCAqKl9yZXR2YWwpID0gMDsKIyAxMDMgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lQcm90b2NvbEhhbmRsZXIuaCIKICB2aXJ0dWFs IG5zcmVzdWx0IEFsbG93UG9ydChQUkludDMyIHBvcnQsIGNvbnN0IGNoYXIgKnNjaGVtZSwgUFJC b29sICpfcmV0dmFsKSA9IDA7CiMgMTE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJ UHJvdG9jb2xIYW5kbGVyLmgiCiAgZW51bSB7IFVSSV9TVEQgPSAwVSB9OwoKCgoKICBlbnVtIHsg VVJJX05PUkVMQVRJVkUgPSAxVSB9OwoKCgoKICBlbnVtIHsgVVJJX05PQVVUSCA9IDJVIH07CiMg MTM4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUHJvdG9jb2xIYW5kbGVyLmgiCiAg ZW51bSB7IEFMTE9XU19QUk9YWSA9IDRVIH07CgoKCgoKCgogIGVudW0geyBBTExPV1NfUFJPWFlf SFRUUCA9IDhVIH07Cgp9OwojIDcxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRV dGlsLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJRmlsZVByb3RvY29s SGFuZGxlci5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lGaWxlUHJv dG9jb2xIYW5kbGVyLmgiCmNsYXNzIG5zSUZpbGU7CiMgMjcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9uZWNrby9uc0lGaWxlUHJvdG9jb2xIYW5kbGVyLmgiCmNsYXNzIG5zSUZpbGVQcm90b2NvbEhh bmRsZXIgOiBwdWJsaWMgbnNJUHJvdG9jb2xIYW5kbGVyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDk4N2ZiMDgz LCAweGQ3ZmYsIDB4NDZkYywgeyAweDllLCAweGUzLCAweGFiLCAweDZlLCAweDUyLCAweDUwLCAw eDFkLCAweDUzIH19OyByZXR1cm4gaWlkO30KIyAzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25l Y2tvL25zSUZpbGVQcm90b2NvbEhhbmRsZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld0ZpbGVV UkkobnNJRmlsZSAqYUZpbGUsIG5zSVVSSSAqKl9yZXR2YWwpID0gMDsKIyA1MCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25lY2tvL25zSUZpbGVQcm90b2NvbEhhbmRsZXIuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFVSTFNwZWNGcm9tRmlsZShuc0lGaWxlICpmaWxlLCBuc0FDU3RyaW5nICYgX3Jl dHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZUZyb21VUkxTcGVjKGNv bnN0IG5zQUNTdHJpbmcgJiB1cmwsIG5zSUZpbGUgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDcyICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL25zSUxvY2FsRmlsZS5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94cGNvbS9uc0lMb2NhbEZpbGUuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJRmlsZS5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lG aWxlLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1lcmF0b3I7CiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lGaWxlLmgiCmNsYXNzIG5zSUZpbGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4YzhjMGEwODAsIDB4MDg2OCwgMHgxMWQzLCB7IDB4OTEsIDB4NWYsIDB4 ZDksIDB4ZDgsIDB4ODksIDB4ZDQsIDB4OGUsIDB4M2MgfX07IHJldHVybiBpaWQ7fQoKCgoKCgoK ICBlbnVtIHsgTk9STUFMX0ZJTEVfVFlQRSA9IDBVIH07CgogIGVudW0geyBESVJFQ1RPUllfVFlQ RSA9IDFVIH07CiMgNjkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lGaWxlLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBBcHBlbmQoY29uc3QgbnNBU3RyaW5nICYgbm9kZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBBcHBlbmROYXRpdmUoY29uc3QgbnNBQ1N0cmluZyAmIG5vZGUpID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTm9ybWFsaXplKHZvaWQpID0gMDsKIyAxMDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBD cmVhdGUoUFJVaW50MzIgdHlwZSwgUFJVaW50MzIgcGVybWlzc2lvbnMpID0gMDsKCgoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRMZWFmTmFtZShuc0FTdHJpbmcgJiBhTGVhZk5hbWUpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldExlYWZOYW1lKGNvbnN0IG5zQVN0cmluZyAmIGFMZWFmTmFt ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYXRpdmVMZWFmTmFtZShuc0FDU3RyaW5n ICYgYU5hdGl2ZUxlYWZOYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROYXRpdmVMZWFm TmFtZShjb25zdCBuc0FDU3RyaW5nICYgYU5hdGl2ZUxlYWZOYW1lKSA9IDA7CiMgMTQ0ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29w eVRvKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgbnNBU3RyaW5nICYgbmV3TmFtZSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG9OYXRpdmUobnNJRmlsZSAqbmV3UGFyZW50RGly LCBjb25zdCBuc0FDU3RyaW5nICYgbmV3TmFtZSkgPSAwOwojIDE1OSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL3hwY29tL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvcHlUb0ZvbGxvd2lu Z0xpbmtzKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgbnNBU3RyaW5nICYgbmV3TmFtZSkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG9Gb2xsb3dpbmdMaW5rc05hdGl2ZShuc0lG aWxlICpuZXdQYXJlbnREaXIsIGNvbnN0IG5zQUNTdHJpbmcgJiBuZXdOYW1lKSA9IDA7CiMgMTk2 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgTW92ZVRvKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgbnNBU3RyaW5nICYgbmV3TmFt ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNb3ZlVG9OYXRpdmUobnNJRmlsZSAqbmV3UGFy ZW50RGlyLCBjb25zdCBuc0FDU3RyaW5nICYgbmV3TmFtZSkgPSAwOwojIDIwOCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY29tL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZShQ UkJvb2wgcmVjdXJzaXZlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlcm1pc3Np b25zKFBSVWludDMyICphUGVybWlzc2lvbnMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBl cm1pc3Npb25zKFBSVWludDMyIGFQZXJtaXNzaW9ucykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRQZXJtaXNzaW9uc09mTGluayhQUlVpbnQzMiAqYVBlcm1pc3Npb25zT2ZMaW5rKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQZXJtaXNzaW9uc09mTGluayhQUlVpbnQzMiBhUGVybWlz c2lvbnNPZkxpbmspID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXN0TW9kaWZp ZWRUaW1lKFBSSW50NjQgKmFMYXN0TW9kaWZpZWRUaW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRMYXN0TW9kaWZpZWRUaW1lKFBSSW50NjQgYUxhc3RNb2RpZmllZFRpbWUpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlmaWVkVGltZU9mTGluayhQUkludDY0ICphTGFz dE1vZGlmaWVkVGltZU9mTGluaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFzdE1vZGlm aWVkVGltZU9mTGluayhQUkludDY0IGFMYXN0TW9kaWZpZWRUaW1lT2ZMaW5rKSA9IDA7CiMgMjQx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0RmlsZVNpemUoUFJJbnQ2NCAqYUZpbGVTaXplKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRGaWxlU2l6ZShQUkludDY0IGFGaWxlU2l6ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRGaWxlU2l6ZU9mTGluayhQUkludDY0ICphRmlsZVNpemVPZkxpbmspID0gMDsKIyAyNzMg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRUYXJnZXQobnNBU3RyaW5nICYgYVRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXROYXRpdmVUYXJnZXQobnNBQ1N0cmluZyAmIGFOYXRpdmVUYXJnZXQpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0UGF0aChuc0FTdHJpbmcgJiBhUGF0aCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXROYXRpdmVQYXRoKG5zQUNTdHJpbmcgJiBhTmF0aXZlUGF0aCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBFeGlzdHMoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IElzV3JpdGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IElzUmVhZGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IElzRXhlY3V0YWJsZShQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgSXNIaWRkZW4oUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IElzRGlyZWN0b3J5KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ c0ZpbGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU3ltbGlu ayhQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTcGVjaWFs KFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDM0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t L25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVVuaXF1ZShQUlVpbnQzMiB0eXBl LCBQUlVpbnQzMiBwZXJtaXNzaW9ucykgPSAwOwojIDM1NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSUZpbGUgKipfcmV0 dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVxdWFscyhuc0lGaWxlICppbkZpbGUs IFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGFpbnMo bnNJRmlsZSAqaW5GaWxlLCBQUkJvb2wgcmVjdXIsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJRmlsZSAqICphUGFyZW50KSA9IDA7CiMg MzgzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0RGlyZWN0b3J5RW50cmllcyhuc0lTaW1wbGVFbnVtZXJhdG9yICogKmFEaXJlY3Rv cnlFbnRyaWVzKSA9IDA7Cgp9OwojIDgxOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SUZpbGUuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNEaXJlY3RvcnlTZXJ2 aWNlVXRpbHMuaCIgMQojIDI4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNEaXJlY3Rv cnlTZXJ2aWNlVXRpbHMuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJUHJv cGVydGllcy5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lQcm9wZXJ0 aWVzLmgiCmNsYXNzIG5zSVByb3BlcnRpZXMgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGlj OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0gezB4Nzg2NTA1ODIsIDB4NGU5MywgMHg0YjYwLCB7IDB4OGUsIDB4ODUsIDB4MjYsIDB4ZWIs IDB4ZDMsIDB4ZWIsIDB4MTQsIDB4Y2EgfX07IHJldHVybiBpaWQ7fQojIDM4ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUveHBjb20vbnNJUHJvcGVydGllcy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 KGNvbnN0IGNoYXIgKnByb3AsIGNvbnN0IG5zSUlEICYgaWlkLCB2b2lkICogKnJlc3VsdCkgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXQoY29uc3QgY2hhciAqcHJvcCwgbnNJU3VwcG9y dHMgKnZhbHVlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhcyhjb25zdCBjaGFyICpw cm9wLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVbmRl ZmluZShjb25zdCBjaGFyICpwcm9wKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEtl eXMoUFJVaW50MzIgKmNvdW50LCBjaGFyICoqKmtleXMpID0gMDsKCn07CiMgMjkgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0RpcmVjdG9yeVNlcnZpY2VVdGlscy5oIiAyCgoKCgppbmxp bmUgbnNyZXN1bHQKTlNfR2V0U3BlY2lhbERpcmVjdG9yeShjb25zdCBjaGFyKiBzcGVjaWFsRGly TmFtZSwgbnNJRmlsZSogKnJlc3VsdCkKewogICAgbnNyZXN1bHQgcnY7CiAgICBzdGF0aWMgY29u c3QgbnNDSUQga0RpcmVjdG9yeVNlcnZpY2VDSUQgPSB7MHhmMDAxNTJkMCwweGI0MGIsMHgxMWQz LHsweDhjLCAweDljLCAweDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAweDc0fX07CiAgICBu c0NPTVB0cjxuc0lQcm9wZXJ0aWVzPiBzZXJ2KGRvX0dldFNlcnZpY2Uoa0RpcmVjdG9yeVNlcnZp Y2VDSUQsICZydikpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAg ICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gZGlyOwogICAgcnYgPSBzZXJ2LT5HZXQoc3BlY2lhbERp ck5hbWUsIG5zQ09NVHlwZUluZm88bnNJRmlsZT46OkdldElJRCgpLCBnZXR0ZXJfQWRkUmVmcyhk aXIpKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAgKnJlc3Vs dCA9IHN0YXRpY19jYXN0PCBuc0lGaWxlKiA+KHN0YXRpY19jYXN0PCBuc0lTdXBwb3J0cyogPihk aXIpKTsKICAgIGlmICgqcmVzdWx0KQogICAgICAgICgqcmVzdWx0KS0+QWRkUmVmKCk7CiAgICBy ZXR1cm4gMDsKfQojIDgyMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUZpbGUuaCIg MgojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJTG9jYWxGaWxlLmgiIDIKCgoK CgoKCiMgMSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiIDEKIyA0MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxh LTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiAi QyIgewoKdHlwZWRlZiBzdHJ1Y3QgUFJMaWJyYXJ5IFBSTGlicmFyeTsKCnR5cGVkZWYgc3RydWN0 IFBSU3RhdGljTGlua1RhYmxlIHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICB2b2lkICgqZnAp KCk7Cn0gUFJTdGF0aWNMaW5rVGFibGU7CiMgNTkgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0x LjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpleHRlcm4gUFJT dGF0dXMgUFJfU2V0TGlicmFyeVBhdGgoY29uc3QgY2hhciAqcGF0aCk7CiMgNjkgIi92YXIvdG1w L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By bGluay5oIgpleHRlcm4gY2hhciogUFJfR2V0TGlicmFyeVBhdGgodm9pZCk7CiMgODIgIi92YXIv dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3BybGluay5oIgpleHRlcm4gY2hhciogUFJfR2V0TGlicmFyeU5hbWUoY29uc3QgY2hhciAqZGly LCBjb25zdCBjaGFyICpsaWIpOwoKCgoKCmV4dGVybiB2b2lkIFBSX0ZyZWVMaWJyYXJ5TmFtZShj aGFyICptZW0pOwojIDEwMiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiBQUkxpYnJhcnkqIFBSX0xv YWRMaWJyYXJ5KGNvbnN0IGNoYXIgKm5hbWUpOwojIDEyMyAiL3Zhci90bXAvcG9ydGFnZS9tb3pp bGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCnR5cGVk ZWYgZW51bSBQUkxpYlNwZWNUeXBlIHsKICAgIFBSX0xpYlNwZWNfUGF0aG5hbWUsCiAgICBQUl9M aWJTcGVjX01hY05hbWVkRnJhZ21lbnQsCiAgICBQUl9MaWJTcGVjX01hY0luZGV4ZWRGcmFnbWVu dAp9IFBSTGliU3BlY1R5cGU7CgpzdHJ1Y3QgRlNTcGVjOwoKdHlwZWRlZiBzdHJ1Y3QgUFJMaWJT cGVjIHsKICAgIFBSTGliU3BlY1R5cGUgdHlwZTsKICAgIHVuaW9uIHsKCiAgICAgICAgY29uc3Qg Y2hhciAqcGF0aG5hbWU7CgoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgICAg fSBtYWNfbmFtZWRfZnJhZ21lbnQ7CgoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBjb25z dCBzdHJ1Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAgICAgICAgIFBSVWludDMyIGluZGV4OwogICAg ICAgIH0gbWFjX2luZGV4ZWRfZnJhZ21lbnQ7CiAgICB9IHZhbHVlOwp9IFBSTGliU3BlYzsKIyAx NjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3BybGluay5oIgpleHRlcm4gUFJMaWJyYXJ5ICoKUFJfTG9hZExpYnJhcnlXaXRo RmxhZ3MoCiAgICBQUkxpYlNwZWMgbGliU3BlYywKICAgIFBSSW50biBmbGFncwopOwojIDE4MSAi L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJsaW5rLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9VbmxvYWRMaWJyYXJ5KFBSTGlicmFy eSAqbGliKTsKIyAxOTEgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpleHRlcm4gdm9pZCogUFJfRmluZFN5bWJv bChQUkxpYnJhcnkgKmxpYiwgY29uc3QgY2hhciAqbmFtZSk7CiMgMjAxICIvdmFyL3RtcC9wb3J0 YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsu aCIKdHlwZWRlZiB2b2lkICgqUFJGdW5jUHRyKSgpOwpleHRlcm4gUFJGdW5jUHRyIFBSX0ZpbmRG dW5jdGlvblN5bWJvbChQUkxpYnJhcnkgKmxpYiwgY29uc3QgY2hhciAqbmFtZSk7CiMgMjE0ICIv dmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcmxpbmsuaCIKZXh0ZXJuIHZvaWQqIFBSX0ZpbmRTeW1ib2xBbmRMaWJyYXJ5KGNvbnN0 IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBSTGlicmFyeSogKmxpYik7CiMgMjI1ICIvdmFyL3RtcC9wb3J0YWdlL21vemls bGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJu IFBSRnVuY1B0ciBQUl9GaW5kRnVuY3Rpb25TeW1ib2xBbmRMaWJyYXJ5KGNvbnN0IGNoYXIgKm5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBSTGlicmFyeSogKmxpYik7CiMgMjM5ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSTGlicmFy eSogUFJfTG9hZFN0YXRpY0xpYnJhcnkoCiAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBQUlN0 YXRpY0xpbmtUYWJsZSAqdGFibGUpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKiBQUl9HZXRMaWJyYXJ5 RmlsZVBhdGhuYW1lKGNvbnN0IGNoYXIgKm5hbWUsIFBSRnVuY1B0ciBhZGRyKTsKCn0KIyAxOSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUxvY2FsRmlsZS5oIiAyCiMgMzcgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lMb2NhbEZpbGUuaCIKY2xhc3MgbnNJTG9jYWxGaWxl IDogcHVibGljIG5zSUZpbGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YWE2MTBmMjAsIDB4YTg4OSwgMHgxMWQz LCB7IDB4OGMsIDB4ODEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQgfX07IHJl dHVybiBpaWQ7fQojIDYwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJTG9jYWxGaWxl LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0V2l0aFBhdGgoY29uc3QgbnNBU3RyaW5nICYgZmls ZVBhdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdFdpdGhOYXRpdmVQYXRoKGNvbnN0 IG5zQUNTdHJpbmcgJiBmaWxlUGF0aCkgPSAwOwojIDc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv eHBjb20vbnNJTG9jYWxGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0V2l0aEZpbGUobnNJ TG9jYWxGaWxlICphRmlsZSkgPSAwOwojIDkyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v bnNJTG9jYWxGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2xsb3dMaW5rcyhQUkJvb2wg KmFGb2xsb3dMaW5rcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Rm9sbG93TGlua3MoUFJC b29sIGFGb2xsb3dMaW5rcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuTlNQUkZpbGVE ZXNjKFBSSW50MzIgZmxhZ3MsIFBSSW50MzIgbW9kZSwgUFJGaWxlRGVzYyAqICpfcmV0dmFsKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW5BTlNJRmlsZURlc2MoY29uc3QgY2hhciAqbW9k ZSwgRklMRSAqICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvYWQoUFJMaWJy YXJ5ICogKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlza1NwYWNlQXZh aWxhYmxlKFBSSW50NjQgKmFEaXNrU3BhY2VBdmFpbGFibGUpID0gMDsKIyAxMTkgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lMb2NhbEZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFw cGVuZFJlbGF0aXZlUGF0aChjb25zdCBuc0FTdHJpbmcgJiByZWxhdGl2ZUZpbGVQYXRoKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZFJlbGF0aXZlTmF0aXZlUGF0aChjb25zdCBuc0FD U3RyaW5nICYgcmVsYXRpdmVGaWxlUGF0aCkgPSAwOwojIDEzMiAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3hwY29tL25zSUxvY2FsRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGVyc2lzdGVu dERlc2NyaXB0b3IobnNBQ1N0cmluZyAmIGFQZXJzaXN0ZW50RGVzY3JpcHRvcikgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0UGVyc2lzdGVudERlc2NyaXB0b3IoY29uc3QgbnNBQ1N0cmluZyAm IGFQZXJzaXN0ZW50RGVzY3JpcHRvcikgPSAwOwojIDE0MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L3hwY29tL25zSUxvY2FsRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmV2ZWFsKHZvaWQpID0g MDsKIyAxNTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lMb2NhbEZpbGUuaCIKICB2 aXJ0dWFsIG5zcmVzdWx0IExhdW5jaCh2b2lkKSA9IDA7CiMgMTY4ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUveHBjb20vbnNJTG9jYWxGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWxhdGl2 ZURlc2NyaXB0b3IobnNJTG9jYWxGaWxlICpmcm9tRmlsZSwgbnNBQ1N0cmluZyAmIF9yZXR2YWwp ID0gMDsKIyAxODIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lMb2NhbEZpbGUuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlbGF0aXZlRGVzY3JpcHRvcihuc0lMb2NhbEZpbGUgKmZy b21GaWxlLCBjb25zdCBuc0FDU3RyaW5nICYgcmVsYXRpdmVEZXNjKSA9IDA7Cgp9OwojIDc0ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbmVja28vbnNJRmlsZVN0cmVhbXMuaCIgMQojIDIxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJRmlsZVN0cmVhbXMuaCIKY2xhc3MgbnNJRmlsZTsKIyAzNCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUZpbGVTdHJlYW1zLmgiCmNsYXNzIG5zSUZpbGVJ bnB1dFN0cmVhbSA6IHB1YmxpYyBuc0lJbnB1dFN0cmVhbSB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhlM2Q1NmEy MCwgMHhjN2VjLCAweDExZDMsIHsgMHg4YywgMHhkYSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywg MHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CiMgNDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u ZWNrby9uc0lGaWxlU3RyZWFtcy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lGaWxlICpm aWxlLCBQUkludDMyIGlvRmxhZ3MsIFBSSW50MzIgcGVybSwgUFJJbnQzMiBiZWhhdmlvckZsYWdz KSA9IDA7CiMgNTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lGaWxlU3RyZWFtcy5o IgogIGVudW0geyBERUxFVEVfT05fQ0xPU0UgPSAyIH07CgoKCgoKICBlbnVtIHsgQ0xPU0VfT05f RU9GID0gNCB9OwoKCgoKCgogIGVudW0geyBSRU9QRU5fT05fUkVXSU5EID0gOCB9OwoKfTsKIyAx MzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lGaWxlU3RyZWFtcy5oIgpjbGFzcyBu c0lGaWxlT3V0cHV0U3RyZWFtIDogcHVibGljIG5zSU91dHB1dFN0cmVhbSB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHhlNmY2ODA0MCwgMHhjN2VjLCAweDExZDMsIHsgMHg4YywgMHhkYSwgMHgwMCwgMHg2MCwgMHhi MCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CiMgMTQ3ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJRmlsZVN0cmVhbXMuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQo bnNJRmlsZSAqZmlsZSwgUFJJbnQzMiBpb0ZsYWdzLCBQUkludDMyIHBlcm0sIFBSSW50MzIgYmVo YXZpb3JGbGFncykgPSAwOwoKfTsKIyA3NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25z TmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVByb3RvY29s UHJveHlTZXJ2aWNlLmgiIDEKIyAyMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVBy b3RvY29sUHJveHlTZXJ2aWNlLmgiCmNsYXNzIG5zSVByb3h5SW5mbzsKIyAzNCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL25lY2tvL25zSVByb3RvY29sUHJveHlTZXJ2aWNlLmgiCmNsYXNzIG5zSVBy b3RvY29sUHJveHlTZXJ2aWNlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3Rh dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDQ5 NWNjOTgwLCAweGUwZDQsIDB4MTFkMywgeyAweGExLCAweGE4LCAweDAwLCAweDUwLCAweDA0LCAw eDFjLCAweGFmLCAweDQ0IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 UHJveHlFbmFibGVkKFBSQm9vbCAqYVByb3h5RW5hYmxlZCkgPSAwOwoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgRXhhbWluZUZvclByb3h5KG5zSVVSSSAqYVVSSSwgbnNJUHJveHlJbmZvICoqX3JldHZh bCkgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3UHJveHlJbmZvKGNvbnN0IGNoYXIgKnR5 cGUsIGNvbnN0IGNoYXIgKmhvc3QsIFBSSW50MzIgcG9ydCwgbnNJUHJveHlJbmZvICoqX3JldHZh bCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkTm9Qcm94eUZvcihjb25zdCBjaGFy ICpob3N0LCBQUkludDMyIHBvcnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlTm9Q cm94eUZvcihjb25zdCBjaGFyICpob3N0LCBQUkludDMyIHBvcnQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgQ29uZmlndXJlRnJvbVBBQyhjb25zdCBjaGFyICp1cmwpID0gMDsKCn07CiMgNzYg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc05ldFV0aWwuaCIgMgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lQcm94eUluZm8uaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbmVja28vbnNJUHJveHlJbmZvLmgiCmNsYXNzIG5zSVByb3h5SW5mbyA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhiNjVkMjJiMCwgMHgxZGQxLCAweDExYjIsIHsg MHg4ZiwgMHg5NSwgMHg5MiwgMHgwZSwgMHg1YiwgMHg3YiwgMHg1NiwgMHhmMCB9fTsgcmV0dXJu IGlpZDt9CgoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEhvc3Qodm9pZCkgPSAwOwoKCiAgdmlydHVh bCBQUkludDMyIFBvcnQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBjb25zdCBjaGFyKiBUeXBlKHZv aWQpID0gMDsKCn07CiMgNzcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc05ldFV0aWwu aCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJQnVmZmVyZWRTdHJlYW1z LmgiIDEKIyAzMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUJ1ZmZlcmVkU3RyZWFt cy5oIgpjbGFzcyBuc0lCdWZmZXJlZElucHV0U3RyZWFtIDogcHVibGljIG5zSUlucHV0U3RyZWFt IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweDYxNmY1YjQ4LCAweGRhMDksIDB4MTFkMywgeyAweDhjLCAweGRhLCAw eDAwLCAweDYwLCAweGIwLCAweGZjLCAweDE0LCAweGEzIH19OyByZXR1cm4gaWlkO30KCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJSW5wdXRTdHJlYW0gKmZpbGxGcm9tU3RyZWFtLCBQ UlVpbnQzMiBidWZmZXJTaXplKSA9IDA7Cgp9OwojIDEwOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L25lY2tvL25zSUJ1ZmZlcmVkU3RyZWFtcy5oIgpjbGFzcyBuc0lCdWZmZXJlZE91dHB1dFN0cmVh bSA6IHB1YmxpYyBuc0lPdXRwdXRTdHJlYW0gewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NjQ3NjM3OGEsIDB4ZGEw OSwgMHgxMWQzLCB7IDB4OGMsIDB4ZGEsIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4 YTMgfX07IHJldHVybiBpaWQ7fQoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lPdXRw dXRTdHJlYW0gKnNpbmtUb1N0cmVhbSwgUFJVaW50MzIgYnVmZmVyU2l6ZSkgPSAwOwoKfTsKIyA3 OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUlucHV0U3RyZWFtUHVtcC5oIiAxCiMgMTcgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJbnB1dFN0cmVhbVB1bXAuaCIKY2xhc3MgbnNJSW5w dXRTdHJlYW07CgpjbGFzcyBuc0lTdHJlYW1MaXN0ZW5lcjsKIyAyOSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL25lY2tvL25zSUlucHV0U3RyZWFtUHVtcC5oIgpjbGFzcyBuc0lJbnB1dFN0cmVhbVB1 bXAgOiBwdWJsaWMgbnNJUmVxdWVzdCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmN2RkOGQ4NywgMHhlZmE3LCAw eDQ4Y2MsIHsgMHg5ZCwgMHg5NCwgMHhkZiwgMHg0OCwgMHg4ZCwgMHhmMCwgMHhiMywgMHhmOSB9 fTsgcmV0dXJuIGlpZDt9CiMgNjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lJbnB1 dFN0cmVhbVB1bXAuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJSW5wdXRTdHJlYW0gKmFT dHJlYW0sIFBSSW50MzIgYVN0cmVhbVBvcywgUFJJbnQzMiBhU3RyZWFtTGVuLCBQUlVpbnQzMiBh U2VnbWVudFNpemUsIFBSVWludDMyIGFTZWdtZW50Q291bnQsIFBSQm9vbCBhQ2xvc2VXaGVuRG9u ZSkgPSAwOwojIDc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJSW5wdXRTdHJlYW1Q dW1wLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBc3luY1JlYWQobnNJU3RyZWFtTGlzdGVuZXIgKmFM aXN0ZW5lciwgbnNJU3VwcG9ydHMgKmFMaXN0ZW5lckNvbnRleHQpID0gMDsKCn07CiMgODAgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc05ldFV0aWwuaCIgMgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9uZWNrby9uc0lBc3luY1N0cmVhbUNvcGllci5oIiAxCiMgMTcgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lBc3luY1N0cmVhbUNvcGllci5oIgpjbGFzcyBuc0lJbnB1 dFN0cmVhbTsKCmNsYXNzIG5zSU91dHB1dFN0cmVhbTsKCmNsYXNzIG5zSVJlcXVlc3RPYnNlcnZl cjsKIyAzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSUFzeW5jU3RyZWFtQ29waWVy LmgiCmNsYXNzIG5zSUFzeW5jU3RyZWFtQ29waWVyIDogcHVibGljIG5zSVJlcXVlc3QgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4ZWFhNDkxNDEsIDB4YzIxYywgMHg0ZmU4LCB7IDB4YTcsIDB4OWIsIDB4NzcsIDB4 ODYsIDB4MGEsIDB4MzksIDB4MTAsIDB4YWEgfX07IHJldHVybiBpaWQ7fQojIDUzICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbmVja28vbnNJQXN5bmNTdHJlYW1Db3BpZXIuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IEluaXQobnNJSW5wdXRTdHJlYW0gKmFTb3VyY2UsIG5zSU91dHB1dFN0cmVhbSAqYVNp bmssIFBSQm9vbCBhU291cmNlQnVmZmVyZWQsIFBSQm9vbCBhU2lua0J1ZmZlcmVkLCBQUlVpbnQz MiBhQ2h1bmtTaXplKSA9IDA7CiMgNjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lB c3luY1N0cmVhbUNvcGllci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQXN5bmNDb3B5KG5zSVJlcXVl c3RPYnNlcnZlciAqYU9ic2VydmVyLCBuc0lTdXBwb3J0cyAqYU9ic2VydmVyQ29udGV4dCkgPSAw OwoKfTsKIyA4MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0VXRpbC5oIiAyCgoK aW5saW5lIGNvbnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldElPU2VydmljZShuc3Jlc3VsdCog ZXJyb3IgPSAwKQp7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0lPU2VydmljZUNJRCA9IHsgMHg5 YWM5ZTc3MCwgMHgxOGJjLCAweDExZDMsIHsweDkzLCAweDM3LCAweDAwLCAweDEwLCAweDRiLCAw eGEwLCAweGZkLCAweDQwfSB9OwogICAgcmV0dXJuIG5zR2V0U2VydmljZUJ5Q0lEKGtJT1NlcnZp Y2VDSUQsIDAsIGVycm9yKTsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX05ld1VSSShuc0lVUkkgKipy ZXN1bHQsCiAgICAgICAgICBjb25zdCBuc0FDU3RyaW5nICZzcGVjLAogICAgICAgICAgY29uc3Qg Y2hhciAqY2hhcnNldCA9IDAsCiAgICAgICAgICBuc0lVUkkgKmJhc2VVUkkgPSAwLAogICAgICAg ICAgbnNJSU9TZXJ2aWNlICppb1NlcnZpY2UgPSAwKQp7CiAgICBuc3Jlc3VsdCBydjsKCiAgICBu c0NPTVB0cjxuc0lJT1NlcnZpY2U+IHNlcnY7CiAgICBpZiAoaW9TZXJ2aWNlID09IDApIHsKICAg ICAgICBzZXJ2ID0gZG9fR2V0SU9TZXJ2aWNlKCZydik7CiAgICAgICAgaWYgKCgocnYpICYgMHg4 MDAwMDAwMCkpIHJldHVybiBydjsKICAgICAgICBpb1NlcnZpY2UgPSBzZXJ2LmdldCgpOwogICAg fQoKICAgIHJldHVybiBpb1NlcnZpY2UtPk5ld1VSSShzcGVjLCBjaGFyc2V0LCBiYXNlVVJJLCBy ZXN1bHQpOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3VVJJKG5zSVVSSSogKnJlc3VsdCwKICAg ICAgICAgIGNvbnN0IG5zQVN0cmluZyYgc3BlYywKICAgICAgICAgIGNvbnN0IGNoYXIgKmNoYXJz ZXQgPSAwLAogICAgICAgICAgbnNJVVJJKiBiYXNlVVJJID0gMCwKICAgICAgICAgIG5zSUlPU2Vy dmljZSogaW9TZXJ2aWNlID0gMCkKewogICAgcmV0dXJuIE5TX05ld1VSSShyZXN1bHQsIE5TX0Nv bnZlcnRVQ1MydG9VVEY4KHNwZWMpLCBjaGFyc2V0LCBiYXNlVVJJLCBpb1NlcnZpY2UpOwp9Cgpp bmxpbmUgbnNyZXN1bHQKTlNfTmV3VVJJKG5zSVVSSSogKnJlc3VsdCwKICAgICAgICAgIGNvbnN0 IGNoYXIgKnNwZWMsCiAgICAgICAgICBuc0lVUkkqIGJhc2VVUkkgPSAwLAogICAgICAgICAgbnNJ SU9TZXJ2aWNlKiBpb1NlcnZpY2UgPSAwKQp7CiAgICByZXR1cm4gTlNfTmV3VVJJKHJlc3VsdCwg bnNEZXBlbmRlbnRDU3RyaW5nKHNwZWMpLCAwLCBiYXNlVVJJLCBpb1NlcnZpY2UpOwp9Cgppbmxp bmUgbnNyZXN1bHQKTlNfTmV3RmlsZVVSSShuc0lVUkkqICpyZXN1bHQsCiAgICAgICAgICAgICAg bnNJRmlsZSogc3BlYywKICAgICAgICAgICAgICBuc0lJT1NlcnZpY2UqIGlvU2VydmljZSA9IDAp CnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIG5zQ09NUHRyPG5zSUlPU2VydmljZT4gc2VydjsKICAg IGlmIChpb1NlcnZpY2UgPT0gMCkgewogICAgICAgIHNlcnYgPSBkb19HZXRJT1NlcnZpY2UoJnJ2 KTsKICAgICAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgICAgIGlv U2VydmljZSA9IHNlcnYuZ2V0KCk7CiAgICB9CgogICAgcmV0dXJuIGlvU2VydmljZS0+TmV3Rmls ZVVSSShzcGVjLCByZXN1bHQpOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3Q2hhbm5lbChuc0lD aGFubmVsKiAqcmVzdWx0LAogICAgICAgICAgICAgIG5zSVVSSSogdXJpLAogICAgICAgICAgICAg IG5zSUlPU2VydmljZSogaW9TZXJ2aWNlID0gMCwKICAgICAgICAgICAgICBuc0lMb2FkR3JvdXAq IGxvYWRHcm91cCA9IDAsCiAgICAgICAgICAgICAgbnNJSW50ZXJmYWNlUmVxdWVzdG9yKiBub3Rp ZmljYXRpb25DYWxsYmFja3MgPSAwLAogICAgICAgICAgICAgIG5zTG9hZEZsYWdzIGxvYWRBdHRy aWJ1dGVzID0gc3RhdGljX2Nhc3Q8IG5zTG9hZEZsYWdzID4obnNJUmVxdWVzdDo6TE9BRF9OT1JN QUwpKQp7CiAgICBuc3Jlc3VsdCBydjsKCiAgICBuc0NPTVB0cjxuc0lJT1NlcnZpY2U+IHNlcnY7 CiAgICBpZiAoaW9TZXJ2aWNlID09IDApIHsKICAgICAgICBzZXJ2ID0gZG9fR2V0SU9TZXJ2aWNl KCZydik7CiAgICAgICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKICAgICAg ICBpb1NlcnZpY2UgPSBzZXJ2LmdldCgpOwogICAgfQoKICAgIG5zSUNoYW5uZWwqIGNoYW5uZWwg PSAwOwogICAgcnYgPSBpb1NlcnZpY2UtPk5ld0NoYW5uZWxGcm9tVVJJKHVyaSwgJmNoYW5uZWwp OwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICBpZiAobG9hZEdy b3VwKSB7CiAgICAgICAgcnYgPSBjaGFubmVsLT5TZXRMb2FkR3JvdXAobG9hZEdyb3VwKTsKICAg ICAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgfQogICAgaWYgKG5v dGlmaWNhdGlvbkNhbGxiYWNrcykgewogICAgICAgIHJ2ID0gY2hhbm5lbC0+U2V0Tm90aWZpY2F0 aW9uQ2FsbGJhY2tzKG5vdGlmaWNhdGlvbkNhbGxiYWNrcyk7CiAgICAgICAgaWYgKCgocnYpICYg MHg4MDAwMDAwMCkpIHJldHVybiBydjsKICAgIH0KICAgIGlmIChsb2FkQXR0cmlidXRlcyAhPSBu c0lSZXF1ZXN0OjpMT0FEX05PUk1BTCkgewogICAgICAgIHJ2ID0gY2hhbm5lbC0+U2V0TG9hZEZs YWdzKGxvYWRBdHRyaWJ1dGVzKTsKICAgICAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0 dXJuIHJ2OwogICAgfQoKICAgICpyZXN1bHQgPSBjaGFubmVsOwogICAgcmV0dXJuIHJ2Owp9CgoK CgoKCgppbmxpbmUgbnNyZXN1bHQKTlNfT3BlblVSSShuc0lJbnB1dFN0cmVhbSogKnJlc3VsdCwK ICAgICAgICAgICBuc0lVUkkqIHVyaSwKICAgICAgICAgICBuc0lJT1NlcnZpY2UqIGlvU2Vydmlj ZSA9IDAsCiAgICAgICAgICAgbnNJTG9hZEdyb3VwKiBsb2FkR3JvdXAgPSAwLAogICAgICAgICAg IG5zSUludGVyZmFjZVJlcXVlc3Rvciogbm90aWZpY2F0aW9uQ2FsbGJhY2tzID0gMCwKICAgICAg ICAgICBuc0xvYWRGbGFncyBsb2FkQXR0cmlidXRlcyA9IHN0YXRpY19jYXN0PCBuc0xvYWRGbGFn cyA+KG5zSVJlcXVlc3Q6OkxPQURfTk9STUFMKSkKewogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NP TVB0cjxuc0lDaGFubmVsPiBjaGFubmVsOwoKICAgIHJ2ID0gTlNfTmV3Q2hhbm5lbChnZXR0ZXJf QWRkUmVmcyhjaGFubmVsKSwgdXJpLCBpb1NlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAg bG9hZEdyb3VwLCBub3RpZmljYXRpb25DYWxsYmFja3MsIGxvYWRBdHRyaWJ1dGVzKTsKICAgIGlm ICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAgbnNJSW5wdXRTdHJlYW0qIGlu U3RyOwogICAgcnYgPSBjaGFubmVsLT5PcGVuKCZpblN0cik7CiAgICBpZiAoKChydikgJiAweDgw MDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgICpyZXN1bHQgPSBpblN0cjsKICAgIHJldHVybiBydjsK fQoKaW5saW5lIG5zcmVzdWx0Ck5TX09wZW5VUkkobnNJU3RyZWFtTGlzdGVuZXIqIGFDb25zdW1l ciwKICAgICAgICAgICBuc0lTdXBwb3J0cyogY29udGV4dCwKICAgICAgICAgICBuc0lVUkkqIHVy aSwKICAgICAgICAgICBuc0lJT1NlcnZpY2UqIGlvU2VydmljZSA9IDAsCiAgICAgICAgICAgbnNJ TG9hZEdyb3VwKiBsb2FkR3JvdXAgPSAwLAogICAgICAgICAgIG5zSUludGVyZmFjZVJlcXVlc3Rv ciogbm90aWZpY2F0aW9uQ2FsbGJhY2tzID0gMCwKICAgICAgICAgICBuc0xvYWRGbGFncyBsb2Fk QXR0cmlidXRlcyA9IHN0YXRpY19jYXN0PCBuc0xvYWRGbGFncyA+KG5zSVJlcXVlc3Q6OkxPQURf Tk9STUFMKSkKewogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NPTVB0cjxuc0lDaGFubmVsPiBjaGFu bmVsOwoKICAgIHJ2ID0gTlNfTmV3Q2hhbm5lbChnZXR0ZXJfQWRkUmVmcyhjaGFubmVsKSwgdXJp LCBpb1NlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgbG9hZEdyb3VwLCBub3RpZmljYXRp b25DYWxsYmFja3MsIGxvYWRBdHRyaWJ1dGVzKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDAp KSByZXR1cm4gcnY7CgogICAgcnYgPSBjaGFubmVsLT5Bc3luY09wZW4oYUNvbnN1bWVyLCBjb250 ZXh0KTsKICAgIHJldHVybiBydjsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX01ha2VBYnNvbHV0ZVVS SShuc0FDU3RyaW5nICZyZXN1bHQsCiAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FDU3RyaW5n ICZzcGVjLAogICAgICAgICAgICAgICAgICAgbnNJVVJJICpiYXNlVVJJLAogICAgICAgICAgICAg ICAgICAgbnNJSU9TZXJ2aWNlICppb1NlcnZpY2UgPSAwKQp7CiAgICBpZiAoIWJhc2VVUkkpIHsK ICAgICAgICA7CiAgICAgICAgcmVzdWx0ID0gc3BlYzsKICAgICAgICByZXR1cm4gMDsKICAgIH0K CiAgICBpZiAoc3BlYy5Jc0VtcHR5KCkpCiAgICAgICAgcmV0dXJuIGJhc2VVUkktPkdldFNwZWMo cmVzdWx0KTsKCiAgICByZXR1cm4gYmFzZVVSSS0+UmVzb2x2ZShzcGVjLCByZXN1bHQpOwp9Cgpp bmxpbmUgbnNyZXN1bHQKTlNfTWFrZUFic29sdXRlVVJJKGNoYXIgKipyZXN1bHQsCiAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpzcGVjLAogICAgICAgICAgICAgICAgICAgbnNJVVJJICpi YXNlVVJJLAogICAgICAgICAgICAgICAgICAgbnNJSU9TZXJ2aWNlICppb1NlcnZpY2UgPSAwKQp7 CiAgICBuc0NBdXRvU3RyaW5nIHJlc3VsdEJ1ZjsKCiAgICBuc3Jlc3VsdCBydiA9IE5TX01ha2VB YnNvbHV0ZVVSSShyZXN1bHRCdWYsIG5zRGVwZW5kZW50Q1N0cmluZyhzcGVjKSwgYmFzZVVSSSwg aW9TZXJ2aWNlKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAg KnJlc3VsdCA9IFRvTmV3Q1N0cmluZyhyZXN1bHRCdWYpOwogICAgcmV0dXJuICpyZXN1bHQgPyAw IDogKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfTWFrZUFi c29sdXRlVVJJKG5zQVN0cmluZyAmcmVzdWx0LAogICAgICAgICAgICAgICAgICAgY29uc3QgbnNB U3RyaW5nICZzcGVjLAogICAgICAgICAgICAgICAgICAgbnNJVVJJICpiYXNlVVJJLAogICAgICAg ICAgICAgICAgICAgbnNJSU9TZXJ2aWNlICppb1NlcnZpY2UgPSAwKQp7CiAgICBpZiAoIWJhc2VV UkkpIHsKICAgICAgICA7CiAgICAgICAgcmVzdWx0ID0gc3BlYzsKICAgICAgICByZXR1cm4gMDsK ICAgIH0KCiAgICBuc0NBdXRvU3RyaW5nIHJlc3VsdEJ1ZjsKICAgIG5zcmVzdWx0IHJ2OwoKICAg IGlmIChzcGVjLklzRW1wdHkoKSkKICAgICAgICBydiA9IGJhc2VVUkktPkdldFNwZWMocmVzdWx0 QnVmKTsKICAgIGVsc2UKICAgICAgICBydiA9IGJhc2VVUkktPlJlc29sdmUoTlNfQ29udmVydFVD UzJ0b1VURjgoc3BlYyksIHJlc3VsdEJ1Zik7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkg cmV0dXJuIHJ2OwoKICAgIHJlc3VsdCA9IE5TX0NvbnZlcnRVVEY4dG9VQ1MyKHJlc3VsdEJ1Zik7 CiAgICByZXR1cm4gMDsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX05ld0lucHV0U3RyZWFtQ2hhbm5l bChuc0lDaGFubmVsICoqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJICp1 cmksCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lJbnB1dFN0cmVhbSAqc3RyZWFtLAogICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBQ1N0cmluZyAmY29udGVudFR5cGUgPSBuc0Rl cGVuZGVudENTdHJpbmcoIiIsIFBSVWludDMyKHNpemVvZigiIiktMSkpLAogICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgbnNBQ1N0cmluZyAmY29udGVudENoYXJzZXQgPSBuc0RlcGVuZGVu dENTdHJpbmcoIiIsIFBSVWludDMyKHNpemVvZigiIiktMSkpKQp7CiAgICBuc3Jlc3VsdCBydjsK CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0lucHV0U3RyZWFtQ2hhbm5lbENJRCA9IHsgMHg2ZGRi MDUwYywgMHgwZDA0LCAweDExZDQsIHsweDk4LCAweDZlLCAweDAwLCAweGMwLCAweDRmLCAweGEw LCAweGNmLCAweDRhfSB9OwogICAgbnNDT01QdHI8bnNJSW5wdXRTdHJlYW1DaGFubmVsPiBjaGFu bmVsID0KICAgICAgICBkb19DcmVhdGVJbnN0YW5jZShrSW5wdXRTdHJlYW1DaGFubmVsQ0lELCAm cnYpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICBydiA9IGNo YW5uZWwtPlNldFVSSSh1cmkpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBy djsKICAgIHJ2ID0gY2hhbm5lbC0+U2V0Q29udGVudFN0cmVhbShzdHJlYW0pOwogICAgaWYgKCgo cnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKICAgIHJ2ID0gY2hhbm5lbC0+U2V0Q29udGVu dFR5cGUoY29udGVudFR5cGUpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBy djsKICAgIHJ2ID0gY2hhbm5lbC0+U2V0Q29udGVudENoYXJzZXQoY29udGVudENoYXJzZXQpOwog ICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICAoKnJlc3VsdCA9IGNo YW5uZWwpLT5BZGRSZWYoKTsKICAgIHJldHVybiAwOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3 SW5wdXRTdHJlYW1QdW1wKG5zSUlucHV0U3RyZWFtUHVtcCAqKnJlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgIG5zSUlucHV0U3RyZWFtICpzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICBQ UkludDMyIHN0cmVhbVBvcyA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBzdHJl YW1MZW4gPSAtMSwKICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIHNlZ3NpemUgPSAwLAog ICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgc2VnY291bnQgPSAwLAogICAgICAgICAgICAg ICAgICAgICAgUFJCb29sIGNsb3NlV2hlbkRvbmUgPSAwKQp7CiAgICBuc3Jlc3VsdCBydjsKCiAg ICBzdGF0aWMgY29uc3QgbnNDSUQga0lucHV0U3RyZWFtUHVtcENJRCA9IHsgMHhjY2QwZTk2MCwg MHg3OTQ3LCAweDQ2MzUsIHsweGI3LCAweDBlLCAweDRjLCAweDY2LCAweDFiLCAweDYzLCAweGQ2 LCAweDc1fSB9OwogICAgbnNDT01QdHI8bnNJSW5wdXRTdHJlYW1QdW1wPiBwdW1wID0KICAgICAg ICBkb19DcmVhdGVJbnN0YW5jZShrSW5wdXRTdHJlYW1QdW1wQ0lELCAmcnYpOwogICAgaWYgKCgo cnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICBydiA9IHB1bXAtPkluaXQoc3RyZWFt LCBzdHJlYW1Qb3MsIHN0cmVhbUxlbiwKICAgICAgICAgICAgICAgICAgICBzZWdzaXplLCBzZWdj b3VudCwgY2xvc2VXaGVuRG9uZSk7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJu IHJ2OwoKICAgICgqcmVzdWx0ID0gcHVtcCktPkFkZFJlZigpOwogICAgcmV0dXJuIDA7Cn0KCgoK CgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3QXN5bmNTdHJlYW1Db3BpZXIobnNJQXN5bmNTdHJlYW1D b3BpZXIgKipyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSUlucHV0U3RyZWFtICpz b3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSU91dHB1dFN0cmVhbSAqc2luaywKICAg ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIHNvdXJjZUJ1ZmZlcmVkID0gMCwKICAgICAgICAg ICAgICAgICAgICAgICAgUFJCb29sIHNpbmtCdWZmZXJlZCA9IDAsCiAgICAgICAgICAgICAgICAg ICAgICAgIFBSVWludDMyIGNodW5rU2l6ZSA9IDApCnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIHN0 YXRpYyBjb25zdCBuc0NJRCBrQXN5bmNTdHJlYW1Db3BpZXJDSUQgPSB7IDB4ZTc0NmE4YjEsIDB4 Yzk3YSwgMHg0ZmM1LCB7MHhiYSwgMHhhNCwgMHg2NiwgMHg2MCwgMHg3NSwgMHgyMSwgMHhiZCwg MHgwOH0gfTsKICAgIG5zQ09NUHRyPG5zSUFzeW5jU3RyZWFtQ29waWVyPiBjb3BpZXIgPQogICAg ICAgIGRvX0NyZWF0ZUluc3RhbmNlKGtBc3luY1N0cmVhbUNvcGllckNJRCwgJnJ2KTsKICAgIGlm ICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAgcnYgPSBjb3BpZXItPkluaXQo c291cmNlLCBzaW5rLCBzb3VyY2VCdWZmZXJlZCwgc2lua0J1ZmZlcmVkLCBjaHVua1NpemUpOwog ICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICAoKnJlc3VsdCA9IGNv cGllciktPkFkZFJlZigpOwogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBuc3Jlc3VsdApOU19OZXdM b2FkR3JvdXAobnNJTG9hZEdyb3VwKiAqcmVzdWx0LCBuc0lSZXF1ZXN0T2JzZXJ2ZXIqIG9icykK ewogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NPTVB0cjxuc0lMb2FkR3JvdXA+IGdyb3VwOwogICAg c3RhdGljIGNvbnN0IG5zQ0lEIGtMb2FkR3JvdXBDSUQgPSB7IDB4ZTFjNjE1ODIsIDB4MmE4NCwg MHgxMWQzLCB7MHg4YywgMHhjZSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhM30g fTsKICAgIHJ2ID0gbnNDb21wb25lbnRNYW5hZ2VyOjpDcmVhdGVJbnN0YW5jZShrTG9hZEdyb3Vw Q0lELCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09N VHlwZUluZm88bnNJTG9hZEdyb3VwPjo6R2V0SUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMoZ3JvdXApKTsKICAgIGlmICgoKHJ2 KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CiAgICBydiA9IGdyb3VwLT5TZXRHcm91cE9ic2Vy dmVyKG9icyk7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgICpy ZXN1bHQgPSBncm91cDsKICAgICgqcmVzdWx0KS0+QWRkUmVmKCk7CiAgICByZXR1cm4gMDsKfQoK CmlubGluZSBuc3Jlc3VsdApOU19OZXdEb3dubG9hZGVyKG5zSURvd25sb2FkZXIqICpyZXN1bHQs CiAgICAgICAgICAgICAgICAgICBuc0lVUkkqIHVyaSwKICAgICAgICAgICAgICAgICAgIG5zSURv d25sb2FkT2JzZXJ2ZXIqIG9ic2VydmVyLAogICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMq IGNvbnRleHQgPSAwLAogICAgICAgICAgICAgICAgICAgUFJCb29sIHN5bmNocm9ub3VzID0gMCwK ICAgICAgICAgICAgICAgICAgIG5zSUxvYWRHcm91cCogbG9hZEdyb3VwID0gMCwKICAgICAgICAg ICAgICAgICAgIG5zSUludGVyZmFjZVJlcXVlc3Rvciogbm90aWZpY2F0aW9uQ2FsbGJhY2tzID0g MCwKICAgICAgICAgICAgICAgICAgIG5zTG9hZEZsYWdzIGxvYWRBdHRyaWJ1dGVzID0gc3RhdGlj X2Nhc3Q8IG5zTG9hZEZsYWdzID4obnNJUmVxdWVzdDo6TE9BRF9OT1JNQUwpKQp7CiAgICBuc3Jl c3VsdCBydjsKICAgIG5zQ09NUHRyPG5zSURvd25sb2FkZXI+IGRvd25sb2FkZXI7CiAgICBzdGF0 aWMgY29uc3QgbnNDSUQga0Rvd25sb2FkZXJDSUQgPSB7IDB4NTEwYTg2YmIsIDB4NjAxOSwgMHg0 ZWQxLCB7MHhiYiwgMHg0ZiwgMHg5NiwgMHg1YywgMHhmZiwgMHhkMiwgMHgzZSwgMHhjZX0gfTsK ICAgIHJ2ID0gbnNDb21wb25lbnRNYW5hZ2VyOjpDcmVhdGVJbnN0YW5jZShrRG93bmxvYWRlckNJ RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88bnNJRG93 bmxvYWRlcj46OkdldElJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdldHRlcl9BZGRSZWZzKGRvd25sb2FkZXIpKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAw MDAwMDApKSByZXR1cm4gcnY7CiAgICBydiA9IGRvd25sb2FkZXItPkluaXQodXJpLCBvYnNlcnZl ciwgY29udGV4dCwgc3luY2hyb25vdXMsIGxvYWRHcm91cCwKICAgICAgICAgICAgICAgICAgICAg ICAgICBub3RpZmljYXRpb25DYWxsYmFja3MsIGxvYWRBdHRyaWJ1dGVzKTsKICAgIGlmICgoKHJ2 KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CiAgICAqcmVzdWx0ID0gZG93bmxvYWRlcjsKICAg ICgqcmVzdWx0KS0+QWRkUmVmKCk7CiAgICByZXR1cm4gcnY7Cn0KCmlubGluZSBuc3Jlc3VsdApO U19OZXdTdHJlYW1Mb2FkZXIobnNJU3RyZWFtTG9hZGVyICoqYVJlc3VsdCwKICAgICAgICAgICAg ICAgICAgIG5zSUNoYW5uZWwgKmFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgbnNJU3RyZWFt TG9hZGVyT2JzZXJ2ZXIgKmFPYnNlcnZlciwKICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRz ICphQ29udGV4dCkKewogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NPTVB0cjxuc0lTdHJlYW1Mb2Fk ZXI+IGxvYWRlcjsKICAgIHN0YXRpYyBjb25zdCBuc0NJRCBrU3RyZWFtTG9hZGVyQ0lEID0geyAw eDViYTZkOTIwLCAweGQ0ZTksIDB4MTFkMywgeyAweGExLCAweGE1LCAweDAsIDB4NTAsIDB4NCwg MHgxYywgMHhhZiwgMHg0NCB9IH07CiAgICBydiA9IG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRl SW5zdGFuY2Uoa1N0cmVhbUxvYWRlckNJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zQ09NVHlwZUluZm88bnNJU3RyZWFtTG9hZGVyPjo6R2V0SUlEKCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobG9hZGVyKSk7 CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgIHJ2ID0gbG9hZGVy LT5Jbml0KGFDaGFubmVsLCBhT2JzZXJ2ZXIsIGFDb250ZXh0KTsKICAgIGlmICgoKHJ2KSAmIDB4 ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAgKmFSZXN1bHQgPSBsb2FkZXI7CiAgICAoKmFSZXN1 bHQpLT5BZGRSZWYoKTsKICAgIHJldHVybiBydjsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX05ld1N0 cmVhbUxvYWRlcihuc0lTdHJlYW1Mb2FkZXIqICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICBu c0lVUkkqIHVyaSwKICAgICAgICAgICAgICAgICAgIG5zSVN0cmVhbUxvYWRlck9ic2VydmVyKiBv YnNlcnZlciwKICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiBjb250ZXh0ID0gMCwKICAg ICAgICAgICAgICAgICAgIG5zSUxvYWRHcm91cCogbG9hZEdyb3VwID0gMCwKICAgICAgICAgICAg ICAgICAgIG5zSUludGVyZmFjZVJlcXVlc3Rvciogbm90aWZpY2F0aW9uQ2FsbGJhY2tzID0gMCwK ICAgICAgICAgICAgICAgICAgIG5zTG9hZEZsYWdzIGxvYWRBdHRyaWJ1dGVzID0gc3RhdGljX2Nh c3Q8IG5zTG9hZEZsYWdzID4obnNJUmVxdWVzdDo6TE9BRF9OT1JNQUwpLAogICAgICAgICAgICAg ICAgICAgbnNJVVJJKiByZWZlcnJlciA9IDApCnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIG5zQ09N UHRyPG5zSUNoYW5uZWw+IGNoYW5uZWw7CiAgICBydiA9IE5TX05ld0NoYW5uZWwoZ2V0dGVyX0Fk ZFJlZnMoY2hhbm5lbCksCiAgICAgICAgICAgICAgICAgICAgICAgdXJpLAogICAgICAgICAgICAg ICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgbG9hZEdyb3VwLAogICAgICAgICAg ICAgICAgICAgICAgIG5vdGlmaWNhdGlvbkNhbGxiYWNrcywKICAgICAgICAgICAgICAgICAgICAg ICBsb2FkQXR0cmlidXRlcyk7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2 OwoKICAgIG5zQ09NUHRyPG5zSUh0dHBDaGFubmVsPiBodHRwQ2hhbm5lbChkb19RdWVyeUludGVy ZmFjZShjaGFubmVsKSk7CiAgICBpZiAoaHR0cENoYW5uZWwpCiAgICAgICAgaHR0cENoYW5uZWwt PlNldFJlZmVycmVyKHJlZmVycmVyKTsKCiAgICByZXR1cm4gTlNfTmV3U3RyZWFtTG9hZGVyKHJl c3VsdCwgY2hhbm5lbCwgb2JzZXJ2ZXIsIGNvbnRleHQpOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNf TmV3VW5pY2hhclN0cmVhbUxvYWRlcihuc0lVbmljaGFyU3RyZWFtTG9hZGVyICoqYVJlc3VsdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsICphQ2hhbm5lbCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBuc0lVbmljaGFyU3RyZWFtTG9hZGVyT2JzZXJ2ZXIgKmFPYnNlcnZl ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYUNvbnRleHQgPSAwLAog ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFTZWdtZW50U2l6ZSA9IG5zSVVuaWNo YXJTdHJlYW1Mb2FkZXI6OkRFRkFVTFRfU0VHTUVOVF9TSVpFKQp7CiAgICBuc3Jlc3VsdCBydjsK ICAgIG5zQ09NUHRyPG5zSVVuaWNoYXJTdHJlYW1Mb2FkZXI+IGxvYWRlcjsKICAgIHN0YXRpYyBj b25zdCBuc0NJRCBrVW5pY2hhclN0cmVhbUxvYWRlckNJRCA9IHsgMHg5NDQ1NzkxZiwgMHhmYTRj LCAweDQ2NjksIHsgMHhiMSwgMHg3NCwgMHhkZiwgMHg1MCwgMHgzMiwgMHhiYiwgMHg2NywgMHhi MyB9IH07CiAgICBydiA9IG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRlSW5zdGFuY2Uoa1VuaWNo YXJTdHJlYW1Mb2FkZXJDSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NP TVR5cGVJbmZvPG5zSVVuaWNoYXJTdHJlYW1Mb2FkZXI+OjpHZXRJSUQoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhsb2FkZXIpKTsK ICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CiAgICBydiA9IGxvYWRlci0+ SW5pdChhQ2hhbm5lbCwgYU9ic2VydmVyLCBhQ29udGV4dCwgYVNlZ21lbnRTaXplKTsKCiAgICBp ZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgKmFSZXN1bHQgPSBsb2FkZXI7 CiAgICAoKmFSZXN1bHQpLT5BZGRSZWYoKTsKICAgIHJldHVybiBydjsKfQoKaW5saW5lIG5zcmVz dWx0Ck5TX05ld1JlcXVlc3RPYnNlcnZlclByb3h5KG5zSVJlcXVlc3RPYnNlcnZlciAqKmFSZXN1 bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlcXVlc3RPYnNlcnZlciAqYU9ic2Vy dmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lFdmVudFF1ZXVlICphRXZlbnRRPTAp CnsKICAgIGRvIHsgaWYgKCEoYVJlc3VsdCkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAw NDAwM0wpOyB9IH0gd2hpbGUgKDApOwoKICAgIG5zcmVzdWx0IHJ2OwogICAgbnNDT01QdHI8bnNJ UmVxdWVzdE9ic2VydmVyUHJveHk+IHByb3h5OwogICAgc3RhdGljIGNvbnN0IG5zQ0lEIGtSZXF1 ZXN0T2JzZXJ2ZXJQcm94eUNJRCA9IHsgMHg1MWZhMjhjNywgMHg3NGMwLCAweDRiODUsIHsweDlj LCAweDQ2LCAweGQwLCAweDNmLCAweGFhLCAweDdiLCAweDY5LCAweDZifSB9OwoKICAgIHJ2ID0g bnNDb21wb25lbnRNYW5hZ2VyOjpDcmVhdGVJbnN0YW5jZShrUmVxdWVzdE9ic2VydmVyUHJveHlD SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSVJl cXVlc3RPYnNlcnZlclByb3h5Pjo6R2V0SUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMocHJveHkpKTsKICAgIGlmICgoKHJ2KSAm IDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAgcnYgPSBwcm94eS0+SW5pdChhT2JzZXJ2ZXIs IGFFdmVudFEpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICBy ZXR1cm4gQ2FsbFF1ZXJ5SW50ZXJmYWNlKHByb3h5LCBhUmVzdWx0KTsKfQoKaW5saW5lIG5zcmVz dWx0Ck5TX05ld1NpbXBsZVN0cmVhbUxpc3RlbmVyKG5zSVN0cmVhbUxpc3RlbmVyICoqYVJlc3Vs dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJT3V0cHV0U3RyZWFtICphU2luaywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVxdWVzdE9ic2VydmVyICphT2JzZXJ2ZXI9MCkK ewogICAgZG8geyBpZiAoIShhUmVzdWx0KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDA0 MDAzTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NPTVB0cjxuc0lT aW1wbGVTdHJlYW1MaXN0ZW5lcj4gbGlzdGVuZXI7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga1Np bXBsZVN0cmVhbUxpc3RlbmVyQ0lEID0geyAweGZiOGNiZjRlLCAweDQ3MDEsIDB4NGJhMSwgezB4 YjEsIDB4ZDYsIDB4NTMsIDB4ODgsIDB4ZTAsIDB4NDEsIDB4ZmIsIDB4Njd9IH07CiAgICBydiA9 IG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRlSW5zdGFuY2Uoa1NpbXBsZVN0cmVhbUxpc3RlbmVy Q0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxuc0lT aW1wbGVTdHJlYW1MaXN0ZW5lcj46OkdldElJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKGxpc3RlbmVyKSk7CiAgICBpZiAoKChy dikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgIHJ2ID0gbGlzdGVuZXItPkluaXQoYVNp bmssIGFPYnNlcnZlcik7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoK ICAgICgqYVJlc3VsdCA9IGxpc3RlbmVyKS0+QWRkUmVmKCk7CiAgICByZXR1cm4gMDsKfQoKCmlu bGluZSBuc3Jlc3VsdApOU19OZXdBc3luY1N0cmVhbUxpc3RlbmVyKG5zSVN0cmVhbUxpc3RlbmVy ICoqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0cmVhbUxpc3RlbmVyICpy ZWNlaXZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lFdmVudFF1ZXVlICpldmVudFF1 ZXVlKQp7CiAgICBuc3Jlc3VsdCBydjsKICAgIG5zQ09NUHRyPG5zSUFzeW5jU3RyZWFtTGlzdGVu ZXI+IGxzbnI7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0FzeW5jU3RyZWFtTGlzdGVuZXJDSUQg PSB7IDB4NjAwNDdiYjIsIDB4OTFjMCwgMHgxMWQzLCB7MHg4YywgMHhkOSwgMHgwMCwgMHg2MCwg MHhiMCwgMHhmYywgMHgxNCwgMHhhM30gfTsKICAgIHJ2ID0gbnNDb21wb25lbnRNYW5hZ2VyOjpD cmVhdGVJbnN0YW5jZShrQXN5bmNTdHJlYW1MaXN0ZW5lckNJRCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88bnNJQXN5bmNTdHJlYW1MaXN0ZW5lcj46Okdl dElJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRl cl9BZGRSZWZzKGxzbnIpKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7 CiAgICBydiA9IGxzbnItPkluaXQocmVjZWl2ZXIsIGV2ZW50UXVldWUpOwogICAgaWYgKCgocnYp ICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICAoKnJlc3VsdCA9IGxzbnIpLT5BZGRSZWYo KTsKICAgIHJldHVybiAwOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfQ2hlY2tQb3J0U2FmZXR5KFBS SW50MzIgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBuc0lJT1NlcnZpY2UqIGlvU2VydmljZSA9 IDApCnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIG5zQ09NUHRyPG5zSUlPU2VydmljZT4gc2VydjsK ICAgIGlmIChpb1NlcnZpY2UgPT0gMCkgewogICAgICAgIHNlcnYgPSBkb19HZXRJT1NlcnZpY2Uo JnJ2KTsKICAgICAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgICAg IGlvU2VydmljZSA9IHNlcnYuZ2V0KCk7CiAgICB9CgogICAgUFJCb29sIGFsbG93OwoKICAgIHJ2 ID0gaW9TZXJ2aWNlLT5BbGxvd1BvcnQocG9ydCwgc2NoZW1lLCAmYWxsb3cpOwogICAgaWYgKCgo cnYpICYgMHg4MDAwMDAwMCkpIHsKICAgICAgICA7CiAgICAgICAgcmV0dXJuIHJ2OwogICAgfQoK ICAgIGlmICghYWxsb3cpCiAgICAgICAgcmV0dXJuICgobnNyZXN1bHQpICgoKFBSVWludDMyKSgx KTw8MzEpIHwgKChQUlVpbnQzMikoNiArMHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDE5KSkpICk7 CgogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBuc3Jlc3VsdApOU19OZXdQcm94eUluZm8oY29uc3Qg Y2hhciogdHlwZSwgY29uc3QgY2hhciogaG9zdCwgUFJJbnQzMiBwb3J0LCBuc0lQcm94eUluZm8q ICpyZXN1bHQpCnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIHN0YXRpYyBjb25zdCBuc0NJRCBrUFBT U2VydmljZUNJRCA9IHsgMHhlOWIzMDFjMCwgMHhlMGU0LCAweDExZDMsIHsgMHhhMSwgMHhhOCwg MHgwLCAweDUwLCAweDQsIDB4MWMsIDB4YWYsIDB4NDQgfSB9OwogICAgbnNDT01QdHI8bnNJUHJv dG9jb2xQcm94eVNlcnZpY2U+IHBwcyA9IGRvX0dldFNlcnZpY2Uoa1BQU1NlcnZpY2VDSUQsJnJ2 KTsKCiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgIHJldHVybiBw cHMtPk5ld1Byb3h5SW5mbyh0eXBlLCBob3N0LCBwb3J0LCByZXN1bHQpOwp9CgppbmxpbmUgbnNy ZXN1bHQKTlNfR2V0RmlsZVByb3RvY29sSGFuZGxlcihuc0lGaWxlUHJvdG9jb2xIYW5kbGVyICoq cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUlPU2VydmljZSAqaW9TZXJ2aWNl PTApCnsKICAgIG5zcmVzdWx0IHJ2OwoKICAgIG5zQ09NUHRyPG5zSUlPU2VydmljZT4gc2VydjsK ICAgIGlmIChpb1NlcnZpY2UgPT0gMCkgewogICAgICAgIHNlcnYgPSBkb19HZXRJT1NlcnZpY2Uo JnJ2KTsKICAgICAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgICAg IGlvU2VydmljZSA9IHNlcnYuZ2V0KCk7CiAgICB9CgogICAgbnNDT01QdHI8bnNJUHJvdG9jb2xI YW5kbGVyPiBoYW5kbGVyOwogICAgcnYgPSBpb1NlcnZpY2UtPkdldFByb3RvY29sSGFuZGxlcigi ZmlsZSIsIGdldHRlcl9BZGRSZWZzKGhhbmRsZXIpKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAw MDApKSByZXR1cm4gcnY7CgogICAgcmV0dXJuIENhbGxRdWVyeUludGVyZmFjZShoYW5kbGVyLCBy ZXN1bHQpOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfR2V0RmlsZUZyb21VUkxTcGVjKGNvbnN0IG5z QUNTdHJpbmcgJmluVVJMLCBuc0lGaWxlICoqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg bnNJSU9TZXJ2aWNlICppb1NlcnZpY2U9MCkKewogICAgbnNDT01QdHI8bnNJRmlsZVByb3RvY29s SGFuZGxlcj4gZmlsZUhhbmRsZXI7CiAgICBuc3Jlc3VsdCBydiA9IE5TX0dldEZpbGVQcm90b2Nv bEhhbmRsZXIoZ2V0dGVyX0FkZFJlZnMoZmlsZUhhbmRsZXIpLCBpb1NlcnZpY2UpOwogICAgaWYg KCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICByZXR1cm4gZmlsZUhhbmRsZXIt PkdldEZpbGVGcm9tVVJMU3BlYyhpblVSTCwgcmVzdWx0KTsKfQoKaW5saW5lIG5zcmVzdWx0Ck5T X0dldFVSTFNwZWNGcm9tRmlsZShuc0lGaWxlKiBhRmlsZSwgbnNBQ1N0cmluZyAmYVVybCwKICAg ICAgICAgICAgICAgICAgICAgIG5zSUlPU2VydmljZSAqaW9TZXJ2aWNlPTApCnsKICAgIG5zQ09N UHRyPG5zSUZpbGVQcm90b2NvbEhhbmRsZXI+IGZpbGVIYW5kbGVyOwogICAgbnNyZXN1bHQgcnYg PSBOU19HZXRGaWxlUHJvdG9jb2xIYW5kbGVyKGdldHRlcl9BZGRSZWZzKGZpbGVIYW5kbGVyKSwg aW9TZXJ2aWNlKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7CgogICAg cmV0dXJuIGZpbGVIYW5kbGVyLT5HZXRVUkxTcGVjRnJvbUZpbGUoYUZpbGUsIGFVcmwpOwp9Cgpp bmxpbmUgbnNyZXN1bHQKTlNfTmV3UmVzdW1hYmxlRW50aXR5SUQobnNJUmVzdW1hYmxlRW50aXR5 SUQqKiBhUmVzLAogICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBzaXplLAogICAgICAg ICAgICAgICAgICAgICAgICBQUlRpbWUgbGFzdE1vZGlmaWVkKQp7CiAgICBuc3Jlc3VsdCBydjsK ICAgIG5zQ09NUHRyPG5zSVJlc3VtYWJsZUVudGl0eUlEPiBlbnQgPQogICAgICAgIGRvX0NyZWF0 ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbmV0d29yay9yZXN1bWFibGUtZW50aXR5LWlkOzEiLCZy dik7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwoKICAgIGVudC0+U2V0 U2l6ZShzaXplKTsKICAgIGVudC0+U2V0TGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCk7CgogICAg KmFSZXMgPSBlbnQ7CiAgICAoKmFSZXMpLT5BZGRSZWYoKTsKICAgIHJldHVybiAwOwp9Cgppbmxp bmUgbnNyZXN1bHQKTlNfRXhhbWluZUZvclByb3h5KGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3Qg Y2hhciogaG9zdCwgUFJJbnQzMiBwb3J0LAogICAgICAgICAgICAgICAgICAgbnNJUHJveHlJbmZv KiAqcHJveHlJbmZvKQp7CiAgICBuc3Jlc3VsdCBydjsKCiAgICBzdGF0aWMgY29uc3QgbnNDSUQg a1BQU1NlcnZpY2VDSUQgPSB7IDB4ZTliMzAxYzAsIDB4ZTBlNCwgMHgxMWQzLCB7IDB4YTEsIDB4 YTgsIDB4MCwgMHg1MCwgMHg0LCAweDFjLCAweGFmLCAweDQ0IH0gfTsKICAgIG5zQ09NUHRyPG5z SVByb3RvY29sUHJveHlTZXJ2aWNlPiBwcHMgPSBkb19HZXRTZXJ2aWNlKGtQUFNTZXJ2aWNlQ0lE LCZydik7CgogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICBuc0NB dXRvU3RyaW5nIHNwZWMoc2NoZW1lKTsKICAgIHNwZWMuQXBwZW5kKCI6Ly8iKTsKICAgIHNwZWMu QXBwZW5kKGhvc3QpOwogICAgc3BlYy5BcHBlbmQoJzonKTsKICAgIHNwZWMuQXBwZW5kSW50KHBv cnQpOwoKCgoKCgoKICAgIHN0YXRpYyBjb25zdCBuc0NJRCBrU1REVVJMQ0lEID0geyAweGRlOTQ3 MmQwLCAweDgwMzQsIDB4MTFkMywgezB4OTMsIDB4OTksIDB4MDAsIDB4MTAsIDB4NGIsIDB4YTAs IDB4ZmQsIDB4NDB9IH07CiAgICBuc0NPTVB0cjxuc0lVUkk+IHVyaSA9IGRvX0NyZWF0ZUluc3Rh bmNlKGtTVERVUkxDSUQsICZydik7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJu IHJ2OwogICAgcnYgPSB1cmktPlNldFNwZWMoc3BlYyk7CiAgICBpZiAoKChydikgJiAweDgwMDAw MDAwKSkgcmV0dXJuIHJ2OwoKICAgIHJldHVybiBwcHMtPkV4YW1pbmVGb3JQcm94eSh1cmksIHBy b3h5SW5mbyk7Cn0KCmlubGluZSBuc3Jlc3VsdApOU19QYXJzZUNvbnRlbnRUeXBlKGNvbnN0IG5z QUNTdHJpbmcgJnJhd0NvbnRlbnRUeXBlLAogICAgICAgICAgICAgICAgICAgIG5zQ1N0cmluZyAm Y29udGVudFR5cGUsCiAgICAgICAgICAgICAgICAgICAgbnNDU3RyaW5nICZjb250ZW50Q2hhcnNl dCkKewoKICAgIG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luLCBpdCwgZW5kOwogICAg aXQgPSByYXdDb250ZW50VHlwZS5CZWdpblJlYWRpbmcoYmVnaW4pOwogICAgcmF3Q29udGVudFR5 cGUuRW5kUmVhZGluZyhlbmQpOwogICAgaWYgKEZpbmRDaGFySW5SZWFkYWJsZSgnOycsIGl0LCBl bmQpKSB7CiAgICAgICAgY29udGVudFR5cGUgPSBTdWJzdHJpbmcoYmVnaW4sIGl0KTsKCiAgICAg ICAgYmVnaW4gPSArK2l0OwogICAgICAgIGlmIChGaW5kSW5SZWFkYWJsZShuc0RlcGVuZGVudENT dHJpbmcoImNoYXJzZXQ9IiwgUFJVaW50MzIoc2l6ZW9mKCJjaGFyc2V0PSIpLTEpKSwgYmVnaW4s IGl0ID0gZW5kKSkgewogICAgICAgICAgICBjb250ZW50Q2hhcnNldCA9IFN1YnN0cmluZyhpdCwg ZW5kKTsKICAgICAgICAgICAgY29udGVudENoYXJzZXQuU3RyaXBXaGl0ZXNwYWNlKCk7CiAgICAg ICAgfQogICAgfQogICAgZWxzZQogICAgICAgIGNvbnRlbnRUeXBlID0gcmF3Q29udGVudFR5cGU7 CiAgICBUb0xvd2VyQ2FzZShjb250ZW50VHlwZSk7CiAgICBjb250ZW50VHlwZS5TdHJpcFdoaXRl c3BhY2UoKTsKICAgIHJldHVybiAwOwp9CgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3TG9jYWxGaWxl SW5wdXRTdHJlYW0obnNJSW5wdXRTdHJlYW0qKiBhUmVzdWx0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lGaWxlKiBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQz MiBhSU9GbGFncyA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFQZXJt ID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUJlaGF2aW9yRmxhZ3Mg PSAwKQp7CiAgICBuc3Jlc3VsdCBydjsKICAgIG5zQ09NUHRyPG5zSUZpbGVJbnB1dFN0cmVhbT4g aW47CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0xvY2FsRmlsZUlucHV0U3RyZWFtQ0lEID0geyAw eGJlOWE1M2FlLCAweGM3ZTksIDB4MTFkMywgezB4OGMsIDB4ZGEsIDB4MDAsIDB4NjAsIDB4YjAs IDB4ZmMsIDB4MTQsIDB4YTN9IH07CiAgICBydiA9IG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRl SW5zdGFuY2Uoa0xvY2FsRmlsZUlucHV0U3RyZWFtQ0lELAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxuc0lGaWxlSW5wdXRTdHJlYW0+OjpHZXRJSUQoKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVm cyhpbikpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKICAgIHJ2ID0g aW4tPkluaXQoYUZpbGUsIGFJT0ZsYWdzLCBhUGVybSwgYUJlaGF2aW9yRmxhZ3MpOwogICAgaWYg KCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICAqYVJlc3VsdCA9IGluOwogICAg KCphUmVzdWx0KS0+QWRkUmVmKCk7CiAgICByZXR1cm4gMDsKfQoKaW5saW5lIG5zcmVzdWx0Ck5T X05ld0xvY2FsRmlsZU91dHB1dFN0cmVhbShuc0lPdXRwdXRTdHJlYW0qKiBhUmVzdWx0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmlsZSogYUZpbGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQUkludDMyIGFJT0ZsYWdzID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUkludDMyIGFQZXJtID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu dDMyIGFCZWhhdmlvckZsYWdzID0gMCkKewogICAgbnNyZXN1bHQgcnY7CiAgICBuc0NPTVB0cjxu c0lGaWxlT3V0cHV0U3RyZWFtPiBvdXQ7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0xvY2FsRmls ZU91dHB1dFN0cmVhbUNJRCA9IHsgMHhjMjcyZmVlMCwgMHhjN2U5LCAweDExZDMsIHsweDhjLCAw eGRhLCAweDAwLCAweDYwLCAweGIwLCAweGZjLCAweDE0LCAweGEzfSB9OwogICAgcnYgPSBuc0Nv bXBvbmVudE1hbmFnZXI6OkNyZWF0ZUluc3RhbmNlKGtMb2NhbEZpbGVPdXRwdXRTdHJlYW1DSUQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSUZpbGVP dXRwdXRTdHJlYW0+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhvdXQpKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAw MDApKSByZXR1cm4gcnY7CiAgICBydiA9IG91dC0+SW5pdChhRmlsZSwgYUlPRmxhZ3MsIGFQZXJt LCBhQmVoYXZpb3JGbGFncyk7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2 OwoKICAgICphUmVzdWx0ID0gb3V0OwogICAgKCphUmVzdWx0KS0+QWRkUmVmKCk7CiAgICByZXR1 cm4gMDsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX05ld0J1ZmZlcmVkSW5wdXRTdHJlYW0obnNJSW5w dXRTdHJlYW0qKiBhUmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUlucHV0U3Ry ZWFtKiBhU3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFCdWZmZXJTaXpl KQp7CiAgICBuc3Jlc3VsdCBydjsKICAgIG5zQ09NUHRyPG5zSUJ1ZmZlcmVkSW5wdXRTdHJlYW0+ IGluOwogICAgc3RhdGljIGNvbnN0IG5zQ0lEIGtCdWZmZXJlZElucHV0U3RyZWFtQ0lEID0geyAw eDkyMjY4ODhlLCAweGRhMDgsIDB4MTFkMywgezB4OGMsIDB4ZGEsIDB4MDAsIDB4NjAsIDB4YjAs IDB4ZmMsIDB4MTQsIDB4YTN9IH07CiAgICBydiA9IG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRl SW5zdGFuY2Uoa0J1ZmZlcmVkSW5wdXRTdHJlYW1DSUQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSUJ1ZmZlcmVkSW5wdXRTdHJlYW0+OjpHZXRJSUQo KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRk UmVmcyhpbikpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKICAgIHJ2 ID0gaW4tPkluaXQoYVN0ciwgYUJ1ZmZlclNpemUpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAw MCkpIHJldHVybiBydjsKCiAgICAqYVJlc3VsdCA9IGluOwogICAgKCphUmVzdWx0KS0+QWRkUmVm KCk7CiAgICByZXR1cm4gMDsKfQoKaW5saW5lIG5zcmVzdWx0Ck5TX05ld0J1ZmZlcmVkT3V0cHV0 U3RyZWFtKG5zSU91dHB1dFN0cmVhbSoqIGFSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSU91dHB1dFN0cmVhbSogYVN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJV aW50MzIgYUJ1ZmZlclNpemUpCnsKICAgIG5zcmVzdWx0IHJ2OwogICAgbnNDT01QdHI8bnNJQnVm ZmVyZWRPdXRwdXRTdHJlYW0+IG91dDsKICAgIHN0YXRpYyBjb25zdCBuc0NJRCBrQnVmZmVyZWRP dXRwdXRTdHJlYW1DSUQgPSB7IDB4OTg2OGI0Y2UsIDB4ZGEwOCwgMHgxMWQzLCB7MHg4YywgMHhk YSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhM30gfTsKICAgIHJ2ID0gbnNDb21w b25lbnRNYW5hZ2VyOjpDcmVhdGVJbnN0YW5jZShrQnVmZmVyZWRPdXRwdXRTdHJlYW1DSUQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSUJ1ZmZlcmVk T3V0cHV0U3RyZWFtPjo6R2V0SUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMob3V0KSk7CiAgICBpZiAoKChydikgJiAweDgwMDAw MDAwKSkgcmV0dXJuIHJ2OwogICAgcnYgPSBvdXQtPkluaXQoYVN0ciwgYUJ1ZmZlclNpemUpOwog ICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHJldHVybiBydjsKCiAgICAqYVJlc3VsdCA9IG91 dDsKICAgICgqYVJlc3VsdCktPkFkZFJlZigpOwogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBuc3Jl c3VsdApOU19OZXdQb3N0RGF0YVN0cmVhbShuc0lJbnB1dFN0cmVhbSAqKnJlc3VsdCwKICAgICAg ICAgICAgICAgICAgICAgUFJCb29sIGlzRmlsZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qg bnNBQ1N0cmluZyAmZGF0YSwKICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgZW5jb2RlRmxh Z3MsCiAgICAgICAgICAgICAgICAgICAgIG5zSUlPU2VydmljZSogaW9TZXJ2aWNlID0gMCkKewog ICAgbnNyZXN1bHQgcnY7CgogICAgaWYgKGlzRmlsZSkgewogICAgICAgIG5zQ09NUHRyPG5zSUxv Y2FsRmlsZT4gZmlsZTsKICAgICAgICBuc0NPTVB0cjxuc0lJbnB1dFN0cmVhbT4gZmlsZVN0cmVh bTsKCiAgICAgICAgcnYgPSBOU19OZXdOYXRpdmVMb2NhbEZpbGUoZGF0YSwgMCwgZ2V0dGVyX0Fk ZFJlZnMoZmlsZSkpOwogICAgICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcnY7 CgogICAgICAgIHJ2ID0gTlNfTmV3TG9jYWxGaWxlSW5wdXRTdHJlYW0oZ2V0dGVyX0FkZFJlZnMo ZmlsZVN0cmVhbSksIGZpbGUpOwogICAgICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSByZXR1 cm4gcnY7CgoKICAgICAgICByZXR1cm4gTlNfTmV3QnVmZmVyZWRJbnB1dFN0cmVhbShyZXN1bHQs IGZpbGVTdHJlYW0sIDgxOTIpOwogICAgfQoKCiAgICByZXR1cm4gTlNfTmV3Q1N0cmluZ0lucHV0 U3RyZWFtKHJlc3VsdCwgZGF0YSk7Cn0KIyAzNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdp bi9uc0lQbHVnaW5Ib3N0LmgiIDIKCmNsYXNzIG5zSVBsdWdpbjsKCmNsYXNzIG5zSVVSSTsKCmNs YXNzIG5zSURPTVBsdWdpbjsKIyA1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQ bHVnaW5Ib3N0LmgiCmNsYXNzIG5zSVBsdWdpbkhvc3QgOiBwdWJsaWMgbnNJRmFjdG9yeSB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHgyNjRjMDY0MCwgMHgxYzMxLCAweDExZDIsIHsgMHhhOCwgMHgyZSwgMHgwMCwg MHg0MCwgMHg5NSwgMHg5YSwgMHgyOCwgMHhjOSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEluaXQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZXN0cm95KHZv aWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTG9hZFBsdWdpbnModm9pZCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRQbHVnaW5GYWN0b3J5KGNvbnN0IGNoYXIgKmFNaW1lVHlwZSwg bnNJUGx1Z2luICoqYVBsdWdpbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnN0YW50aWF0 ZUVtYmVkZWRQbHVnaW4oY29uc3QgY2hhciAqYU1pbWVUeXBlLCBuc0lVUkkgKmFVUkwsIG5zSVBs dWdpbkluc3RhbmNlT3duZXIgKmFPd25lcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnN0 YW50aWF0ZUZ1bGxQYWdlUGx1Z2luKGNvbnN0IGNoYXIgKmFNaW1lVHlwZSwgbnNTdHJpbmcgJiBh VVJMU3BlYywgbnNJU3RyZWFtTGlzdGVuZXIgKiAmIGFTdHJlYW1MaXN0ZW5lciwgbnNJUGx1Z2lu SW5zdGFuY2VPd25lciAqYU93bmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFVwUGx1 Z2luSW5zdGFuY2UoY29uc3QgY2hhciAqYU1pbWVUeXBlLCBuc0lVUkkgKmFVUkwsIG5zSVBsdWdp bkluc3RhbmNlT3duZXIgKmFPd25lcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1BsdWdp bkVuYWJsZWRGb3JUeXBlKGNvbnN0IGNoYXIgKmFNaW1lVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBJc1BsdWdpbkVuYWJsZWRGb3JFeHRlbnNpb24oY29uc3QgY2hhciAqYUV4dGVuc2lv biwgY29uc3QgY2hhciAqICYgYU1pbWVUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFBsdWdpbkNvdW50KFBSVWludDMyICphUGx1Z2luQ291bnQpID0gMDsKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRQbHVnaW5zKFBSVWludDMyIGFQbHVnaW5Db3VudCwgbnNJRE9NUGx1Z2luKiBhUGx1 Z2luQXJyYXlbXSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFN0b3BQbHVnaW5JbnN0YW5jZShu c0lQbHVnaW5JbnN0YW5jZSAqYUluc3RhbmNlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhh bmRsZUJhZFBsdWdpbihQUkxpYnJhcnkgKiBhTGlicmFyeSwgbnNJUGx1Z2luSW5zdGFuY2UgKmlu c3RhbmNlKSA9IDA7Cgp9OwojIDI1MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQ bHVnaW5Ib3N0LmgiCmlubGluZSBuc3Jlc3VsdApOU19OZXdQbHVnaW5Qb3N0RGF0YVN0cmVhbShu c0lJbnB1dFN0cmVhbSAqKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgY29udGVudExl bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGlzRmlsZSA9IDAsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBoZWFkZXJzID0gMCkKewogIG5zcmVzdWx0IHJ2 ID0gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogIGlmICghZGF0YSkKICAgIHJldHVybiBydjsK ICBpZiAoIWlzRmlsZSkgewogICAgaWYgKGNvbnRlbnRMZW5ndGggPCAxKQogICAgICByZXR1cm4g cnY7CgogICAgY2hhciAqYnVmID0gKGNoYXIqKSBkYXRhOwogICAgaWYgKGhlYWRlcnMpIHsKCiAg ICAgIGlmICghKGJ1ZiA9IChjaGFyKiluc01lbW9yeTo6QWxsb2MoY29udGVudExlbmd0aCkpKQog ICAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICAgIG1lbWNweShidWYs IGRhdGEsIGNvbnRlbnRMZW5ndGgpOwogICAgfQogICAgbnNDT01QdHI8bnNJU3RyaW5nSW5wdXRT dHJlYW0+IHNpcyA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvaW8vc3RyaW5nLWlu cHV0LXN0cmVhbTsxIiwmcnYpOwogICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkpIHsKICAg ICAgc2lzLT5BZG9wdERhdGEoYnVmLCBjb250ZW50TGVuZ3RoKTsKICAgICAgcnYgPSBDYWxsUXVl cnlJbnRlcmZhY2Uoc2lzLCByZXN1bHQpOwogICAgfQogIH0gZWxzZSB7CiAgICBuc0NPTVB0cjxu c0lMb2NhbEZpbGU+IGZpbGU7CiAgICBuc0NPTVB0cjxuc0lJbnB1dFN0cmVhbT4gZmlsZVN0cmVh bTsKICAgIGlmICgoISgocnYgPSBOU19OZXdOYXRpdmVMb2NhbEZpbGUobnNEZXBlbmRlbnRDU3Ry aW5nKGRhdGEpLCAwLCBnZXR0ZXJfQWRkUmVmcyhmaWxlKSkpICYgMHg4MDAwMDAwMCkpICYmCiAg ICAgICAgKCEoKHJ2ID0gTlNfTmV3TG9jYWxGaWxlSW5wdXRTdHJlYW0oZ2V0dGVyX0FkZFJlZnMo ZmlsZVN0cmVhbSksIGZpbGUsIDB4MDEsIDA2MDAsIG5zSUZpbGVJbnB1dFN0cmVhbTo6REVMRVRF X09OX0NMT1NFIHwgbnNJRmlsZUlucHV0U3RyZWFtOjpDTE9TRV9PTl9FT0YpKSAmIDB4ODAwMDAw MDApKQoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICB7Cgog ICAgICByZXR1cm4gTlNfTmV3QnVmZmVyZWRJbnB1dFN0cmVhbShyZXN1bHQsIGZpbGVTdHJlYW0s IDgxOTIpOwogICAgfQogIH0KICByZXR1cm4gcnY7Cn0KIyAxMjMgIm5zRE9NQ2xhc3NJbmZvLmNw cCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNQSVBsdWdpbkhvc3QuaCIg MQojIDIxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zUElQbHVnaW5Ib3N0LmgiCiMg MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc1BsdWdpbk5hdGl2ZVdpbmRvdy5oIiAx CiMgNTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNQbHVnaW5OYXRpdmVXaW5kb3cu aCIKY2xhc3MgbnNQbHVnaW5OYXRpdmVXaW5kb3cgOiBwdWJsaWMgbnNQbHVnaW5XaW5kb3cKewpw dWJsaWM6CiAgbnNQbHVnaW5OYXRpdmVXaW5kb3coKSA6IG5zUGx1Z2luV2luZG93KCkge30KICB2 aXJ0dWFsIH5uc1BsdWdpbk5hdGl2ZVdpbmRvdygpIHt9CiMgNjggIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9wbHVnaW4vbnNQbHVnaW5OYXRpdmVXaW5kb3cuaCIKcHVibGljOgogIG5zcmVzdWx0IEdl dFBsdWdpbkluc3RhbmNlKG5zQ09NUHRyPG5zSVBsdWdpbkluc3RhbmNlPiAmYVBsdWdpbkluc3Rh bmNlKSB7CiAgICBhUGx1Z2luSW5zdGFuY2UgPSBtUGx1Z2luSW5zdGFuY2U7CiAgICByZXR1cm4g MDsKICB9CiAgbnNyZXN1bHQgU2V0UGx1Z2luSW5zdGFuY2UobnNJUGx1Z2luSW5zdGFuY2UgKmFQ bHVnaW5JbnN0YW5jZSkgewogICAgaWYgKG1QbHVnaW5JbnN0YW5jZSAhPSBhUGx1Z2luSW5zdGFu Y2UpCiAgICAgIG1QbHVnaW5JbnN0YW5jZSA9IGFQbHVnaW5JbnN0YW5jZTsKICAgIHJldHVybiAw OwogIH0KCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbGxTZXRXaW5kb3cobnNDT01QdHI8 bnNJUGx1Z2luSW5zdGFuY2U+ICZhUGx1Z2luSW5zdGFuY2UpIHsKCiAgICBpZiAoYVBsdWdpbklu c3RhbmNlKQogICAgICBhUGx1Z2luSW5zdGFuY2UtPlNldFdpbmRvdyh0aGlzKTsKICAgIGVsc2Ug aWYgKG1QbHVnaW5JbnN0YW5jZSkKICAgICAgbVBsdWdpbkluc3RhbmNlLT5TZXRXaW5kb3coMCk7 CgogICAgU2V0UGx1Z2luSW5zdGFuY2UoYVBsdWdpbkluc3RhbmNlKTsKICAgIHJldHVybiAwOwog IH0KCnByb3RlY3RlZDoKICBuc0NPTVB0cjxuc0lQbHVnaW5JbnN0YW5jZT4gbVBsdWdpbkluc3Rh bmNlOwp9OwoKbnNyZXN1bHQgUExVR19OZXdQbHVnaW5OYXRpdmVXaW5kb3cobnNQbHVnaW5OYXRp dmVXaW5kb3cgKiogYVBsdWdpbk5hdGl2ZVdpbmRvdyk7Cm5zcmVzdWx0IFBMVUdfRGVsZXRlUGx1 Z2luTmF0aXZlV2luZG93KG5zUGx1Z2luTmF0aXZlV2luZG93ICogYVBsdWdpbk5hdGl2ZVdpbmRv dyk7CiMgMjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNQSVBsdWdpbkhvc3QuaCIg MgojIDMwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zUElQbHVnaW5Ib3N0LmgiCmNs YXNzIG5zUElQbHVnaW5Ib3N0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3Rh dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDhl M2Q3MWU2LCAweDIzMTksIDB4MTFkNSwgeyAweDljLCAweGY4LCAweDAwLCAweDYwLCAweGIwLCAw eGZiLCAweGQ4LCAweGFjIH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg U2V0SXNTY3JpcHRhYmxlSW5zdGFuY2UobnNJUGx1Z2luSW5zdGFuY2UgKmFJbnN0YW5jZSwgUFJC b29sIGFTY3JpcHRhYmxlKSA9IDA7CiMgNjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4v bnNQSVBsdWdpbkhvc3QuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFBhcnNlUG9zdEJ1ZmZlclRvRml4 SGVhZGVycyhjb25zdCBjaGFyICphSW5Qb3N0RGF0YSwgUFJVaW50MzIgYUluUG9zdERhdGFMZW4s IGNoYXIgKiphT3V0UG9zdERhdGEsIFBSVWludDMyICphT3V0UG9zdERhdGFMZW4pID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlVG1wRmlsZVRvUG9zdChjb25zdCBjaGFyICphUG9z dERhdGFVUkwsIGNoYXIgKiphVG1wRmlsZU5hbWUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgTmV3UGx1Z2luTmF0aXZlV2luZG93KG5zUGx1Z2luTmF0aXZlV2luZG93ICogKmFQbHVnaW5O YXRpdmVXaW5kb3cpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlUGx1Z2luTmF0 aXZlV2luZG93KG5zUGx1Z2luTmF0aXZlV2luZG93ICogYVBsdWdpbk5hdGl2ZVdpbmRvdykgPSAw OwoKfTsKIyAxMjQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL29qaS9uc0lKVk1NYW5hZ2VyLmgiIDEKIyAxOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L29qaS9uc0lKVk1NYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2phdmEvam5p LmgiIDEKIyAzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2phdmEvam5pLmgiCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMK IyAxMTAgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9z dGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgNDAgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9qYXZhL2puaS5oIiAyCgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9qYXZhL2puaV9tZC5oIiAxCiMgMTc4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qbmlf bWQuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qcmlfbWQuaCIgMQojIDQ1ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qcmlfbWQuaCIKIyAxICIvdXNyL2luY2x1ZGUvYXNz ZXJ0LmgiIDEgMwojIDQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qcmlfbWQuaCIgMgoK CgpleHRlcm4gIkMiIHsKIyAxODUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qYXZhL2pyaV9tZC5o Igp0eXBlZGVmIGNsYXNzIF9qb2JqZWN0ICpqcmVmOwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFy IGpib29sOwp0eXBlZGVmIGNoYXIgamJ5dGU7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcganVp bnQ7CnR5cGVkZWYgbG9uZyBqaW50OwojIDIzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2phdmEv anJpX21kLmgiCnR5cGVkZWYgbG9uZyBsb25nIGpsb25nOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg bG9uZyBqdWxvbmc7CiMgNTYyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qcmlfbWQuaCIK fQojIDE3OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2phdmEvam5pX21kLmgiIDIKIyA0NSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2phdmEvam5pLmgiIDIKCgpleHRlcm4gIkMiIHsKCgoKCgoKdHlw ZWRlZiB1bnNpZ25lZCBjaGFyIGpib29sZWFuOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGpjaGFy Owp0eXBlZGVmIHNob3J0IGpzaG9ydDsKdHlwZWRlZiBmbG9hdCBqZmxvYXQ7CnR5cGVkZWYgZG91 YmxlIGpkb3VibGU7Cgp0eXBlZGVmIGppbnQganNpemU7CgoKCmNsYXNzIF9qb2JqZWN0IHt9Owpj bGFzcyBfamNsYXNzIDogcHVibGljIF9qb2JqZWN0IHt9OwpjbGFzcyBfanRocm93YWJsZSA6IHB1 YmxpYyBfam9iamVjdCB7fTsKY2xhc3MgX2pzdHJpbmcgOiBwdWJsaWMgX2pvYmplY3Qge307CmNs YXNzIF9qYXJyYXkgOiBwdWJsaWMgX2pvYmplY3Qge307CmNsYXNzIF9qYm9vbGVhbkFycmF5IDog cHVibGljIF9qYXJyYXkge307CmNsYXNzIF9qYnl0ZUFycmF5IDogcHVibGljIF9qYXJyYXkge307 CmNsYXNzIF9qY2hhckFycmF5IDogcHVibGljIF9qYXJyYXkge307CmNsYXNzIF9qc2hvcnRBcnJh eSA6IHB1YmxpYyBfamFycmF5IHt9OwpjbGFzcyBfamludEFycmF5IDogcHVibGljIF9qYXJyYXkg e307CmNsYXNzIF9qbG9uZ0FycmF5IDogcHVibGljIF9qYXJyYXkge307CmNsYXNzIF9qZmxvYXRB cnJheSA6IHB1YmxpYyBfamFycmF5IHt9OwpjbGFzcyBfamRvdWJsZUFycmF5IDogcHVibGljIF9q YXJyYXkge307CmNsYXNzIF9qb2JqZWN0QXJyYXkgOiBwdWJsaWMgX2phcnJheSB7fTsKCnR5cGVk ZWYgX2pvYmplY3QgKmpvYmplY3Q7CnR5cGVkZWYgX2pjbGFzcyAqamNsYXNzOwp0eXBlZGVmIF9q dGhyb3dhYmxlICpqdGhyb3dhYmxlOwp0eXBlZGVmIF9qc3RyaW5nICpqc3RyaW5nOwp0eXBlZGVm IF9qYXJyYXkgKmphcnJheTsKdHlwZWRlZiBfamJvb2xlYW5BcnJheSAqamJvb2xlYW5BcnJheTsK dHlwZWRlZiBfamJ5dGVBcnJheSAqamJ5dGVBcnJheTsKdHlwZWRlZiBfamNoYXJBcnJheSAqamNo YXJBcnJheTsKdHlwZWRlZiBfanNob3J0QXJyYXkgKmpzaG9ydEFycmF5Owp0eXBlZGVmIF9qaW50 QXJyYXkgKmppbnRBcnJheTsKdHlwZWRlZiBfamxvbmdBcnJheSAqamxvbmdBcnJheTsKdHlwZWRl ZiBfamZsb2F0QXJyYXkgKmpmbG9hdEFycmF5Owp0eXBlZGVmIF9qZG91YmxlQXJyYXkgKmpkb3Vi bGVBcnJheTsKdHlwZWRlZiBfam9iamVjdEFycmF5ICpqb2JqZWN0QXJyYXk7CiMgMTIwICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvamF2YS9qbmkuaCIKdHlwZWRlZiB1bmlvbiBqdmFsdWUgewogICAg amJvb2xlYW4gejsKICAgIGpieXRlIGI7CiAgICBqY2hhciBjOwogICAganNob3J0IHM7CiAgICBq aW50IGk7CiAgICBqbG9uZyBqOwogICAgamZsb2F0IGY7CiAgICBqZG91YmxlIGQ7CiAgICBqb2Jq ZWN0IGw7Cn0ganZhbHVlOwoKc3RydWN0IF9qZmllbGRJRDsKdHlwZWRlZiBzdHJ1Y3QgX2pmaWVs ZElEICpqZmllbGRJRDsKCnN0cnVjdCBfam1ldGhvZElEOwp0eXBlZGVmIHN0cnVjdCBfam1ldGhv ZElEICpqbWV0aG9kSUQ7CiMgMTY0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qbmkuaCIK dHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqbmFtZTsKICAgIGNoYXIgKnNpZ25hdHVyZTsKICAg IHZvaWQgKmZuUHRyOwp9IEpOSU5hdGl2ZU1ldGhvZDsKCgoKCgpzdHJ1Y3QgSk5JTmF0aXZlSW50 ZXJmYWNlXzsKCnN0cnVjdCBKTklFbnZfOwoKCnR5cGVkZWYgSk5JRW52XyBKTklFbnY7CiMgMTg4 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvamF2YS9qbmkuaCIKc3RydWN0IEpOSUludm9rZUludGVy ZmFjZV87CgpzdHJ1Y3QgSmF2YVZNXzsKCgp0eXBlZGVmIEphdmFWTV8gSmF2YVZNOwoKCgoKc3Ry dWN0IEpOSU5hdGl2ZUludGVyZmFjZV8gewogICAgdm9pZCAqcmVzZXJ2ZWQwOwogICAgdm9pZCAq cmVzZXJ2ZWQxOwogICAgdm9pZCAqcmVzZXJ2ZWQyOwoKICAgIHZvaWQgKnJlc2VydmVkMzsKICAg IGppbnQgKCAqR2V0VmVyc2lvbikoSk5JRW52ICplbnYpOwoKICAgIGpjbGFzcyAoICpEZWZpbmVD bGFzcykKICAgICAgKEpOSUVudiAqZW52LCBjb25zdCBjaGFyICpuYW1lLCBqb2JqZWN0IGxvYWRl ciwgY29uc3QgamJ5dGUgKmJ1ZiwKICAgICAgIGpzaXplIGxlbik7CiAgICBqY2xhc3MgKCAqRmlu ZENsYXNzKQogICAgICAoSk5JRW52ICplbnYsIGNvbnN0IGNoYXIgKm5hbWUpOwoKICAgIHZvaWQg KnJlc2VydmVkNDsKICAgIHZvaWQgKnJlc2VydmVkNTsKICAgIHZvaWQgKnJlc2VydmVkNjsKCiAg ICBqY2xhc3MgKCAqR2V0U3VwZXJjbGFzcykKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3Mgc3Vi KTsKICAgIGpib29sZWFuICggKklzQXNzaWduYWJsZUZyb20pCiAgICAgIChKTklFbnYgKmVudiwg amNsYXNzIHN1YiwgamNsYXNzIHN1cCk7CiAgICB2b2lkICpyZXNlcnZlZDc7CgoKICAgIGppbnQg KCAqVGhyb3cpCiAgICAgIChKTklFbnYgKmVudiwganRocm93YWJsZSBvYmopOwogICAgamludCAo ICpUaHJvd05ldykKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGNvbnN0IGNoYXIg Km1zZyk7CiAgICBqdGhyb3dhYmxlICggKkV4Y2VwdGlvbk9jY3VycmVkKQogICAgICAoSk5JRW52 ICplbnYpOwogICAgdm9pZCAoICpFeGNlcHRpb25EZXNjcmliZSkKICAgICAgKEpOSUVudiAqZW52 KTsKICAgIHZvaWQgKCAqRXhjZXB0aW9uQ2xlYXIpCiAgICAgIChKTklFbnYgKmVudik7CiAgICB2 b2lkICggKkZhdGFsRXJyb3IpCiAgICAgIChKTklFbnYgKmVudiwgY29uc3QgY2hhciAqbXNnKTsK ICAgIHZvaWQgKnJlc2VydmVkODsKICAgIHZvaWQgKnJlc2VydmVkOTsKCiAgICBqb2JqZWN0ICgg Kk5ld0dsb2JhbFJlZikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IGxvYmopOwogICAgdm9p ZCAoICpEZWxldGVHbG9iYWxSZWYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBncmVmKTsK ICAgIHZvaWQgKCAqRGVsZXRlTG9jYWxSZWYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBv YmopOwogICAgamJvb2xlYW4gKCAqSXNTYW1lT2JqZWN0KQogICAgICAoSk5JRW52ICplbnYsIGpv YmplY3Qgb2JqMSwgam9iamVjdCBvYmoyKTsKICAgIHZvaWQgKnJlc2VydmVkMTA7CiAgICB2b2lk ICpyZXNlcnZlZDExOwoKICAgIGpvYmplY3QgKCAqQWxsb2NPYmplY3QpCiAgICAgIChKTklFbnYg KmVudiwgamNsYXNzIGNsYXp6KTsKICAgIGpvYmplY3QgKCAqTmV3T2JqZWN0KQogICAgICAoSk5J RW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgam9i amVjdCAoICpOZXdPYmplY3RWKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1l dGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAgam9iamVjdCAoICpOZXdPYmplY3RB KQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCBq dmFsdWUgKmFyZ3MpOwoKICAgIGpjbGFzcyAoICpHZXRPYmplY3RDbGFzcykKICAgICAgKEpOSUVu diAqZW52LCBqb2JqZWN0IG9iaik7CiAgICBqYm9vbGVhbiAoICpJc0luc3RhbmNlT2YpCiAgICAg IChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eik7CgogICAgam1ldGhvZElE ICggKkdldE1ldGhvZElEKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgY29uc3Qg Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnKTsKCiAgICBqb2JqZWN0ICggKkNhbGxPYmplY3RN ZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJ RCwgLi4uKTsKICAgIGpvYmplY3QgKCAqQ2FsbE9iamVjdE1ldGhvZFYpCiAgICAgIChKTklFbnYg KmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKTsKICAg IGpvYmplY3QgKCAqQ2FsbE9iamVjdE1ldGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVj dCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICogYXJncyk7CgogICAgamJvb2xlYW4g KCAqQ2FsbEJvb2xlYW5NZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpt ZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpib29sZWFuICggKkNhbGxCb29sZWFuTWV0aG9k VikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCB2 YV9saXN0IGFyZ3MpOwogICAgamJvb2xlYW4gKCAqQ2FsbEJvb2xlYW5NZXRob2RBKQogICAgICAo Sk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqIGFy Z3MpOwoKICAgIGpieXRlICggKkNhbGxCeXRlTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpv YmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqYnl0ZSAoICpDYWxsQnl0 ZU1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRo b2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpieXRlICggKkNhbGxCeXRlTWV0aG9kQSkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFy Z3MpOwoKICAgIGpjaGFyICggKkNhbGxDaGFyTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpv YmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqY2hhciAoICpDYWxsQ2hh ck1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRo b2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpjaGFyICggKkNhbGxDaGFyTWV0aG9kQSkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFy Z3MpOwoKICAgIGpzaG9ydCAoICpDYWxsU2hvcnRNZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwg am9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpzaG9ydCAoICpDYWxs U2hvcnRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQg bWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICBqc2hvcnQgKCAqQ2FsbFNob3J0TWV0aG9kQSkK ICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFs dWUgKmFyZ3MpOwoKICAgIGppbnQgKCAqQ2FsbEludE1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52 LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamludCAoICpDYWxs SW50TWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1l dGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAgamludCAoICpDYWxsSW50TWV0aG9kQSkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFy Z3MpOwoKICAgIGpsb25nICggKkNhbGxMb25nTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpv YmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqbG9uZyAoICpDYWxsTG9u Z01ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRo b2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpsb25nICggKkNhbGxMb25nTWV0aG9kQSkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFy Z3MpOwoKICAgIGpmbG9hdCAoICpDYWxsRmxvYXRNZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwg am9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpmbG9hdCAoICpDYWxs RmxvYXRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQg bWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICBqZmxvYXQgKCAqQ2FsbEZsb2F0TWV0aG9kQSkK ICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFs dWUgKmFyZ3MpOwoKICAgIGpkb3VibGUgKCAqQ2FsbERvdWJsZU1ldGhvZCkKICAgICAgKEpOSUVu diAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamRvdWJs ZSAoICpDYWxsRG91YmxlTWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwg am1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAgamRvdWJsZSAoICpDYWxsRG91 YmxlTWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1l dGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIHZvaWQgKCAqQ2FsbFZvaWRNZXRob2QpCiAgICAg IChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAg IHZvaWQgKCAqQ2FsbFZvaWRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2Jq LCBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICB2b2lkICggKkNhbGxWb2lk TWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhv ZElELCBqdmFsdWUgKiBhcmdzKTsKCiAgICBqb2JqZWN0ICggKkNhbGxOb252aXJ0dWFsT2JqZWN0 TWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGpt ZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpvYmplY3QgKCAqQ2FsbE5vbnZpcnR1YWxPYmpl Y3RNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenos IGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZhX2xpc3QgYXJncyk7CiAgICBqb2JqZWN0ICgg KkNhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0 IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICBqdmFsdWUgKiBh cmdzKTsKCiAgICBqYm9vbGVhbiAoICpDYWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2QpCiAgICAg IChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhv ZElELCAuLi4pOwogICAgamJvb2xlYW4gKCAqQ2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kVikK ICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQg bWV0aG9kSUQsCiAgICAgICB2YV9saXN0IGFyZ3MpOwogICAgamJvb2xlYW4gKCAqQ2FsbE5vbnZp cnR1YWxCb29sZWFuTWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNs YXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICBqdmFsdWUgKiBhcmdzKTsKCiAg ICBqYnl0ZSAoICpDYWxsTm9udmlydHVhbEJ5dGVNZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwg am9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAg amJ5dGUgKCAqQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBq b2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICB2YV9s aXN0IGFyZ3MpOwogICAgamJ5dGUgKCAqQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kQSkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9k SUQsCiAgICAgICBqdmFsdWUgKmFyZ3MpOwoKICAgIGpjaGFyICggKkNhbGxOb252aXJ0dWFsQ2hh ck1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBq bWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqY2hhciAoICpDYWxsTm9udmlydHVhbENoYXJN ZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGpt ZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZhX2xpc3QgYXJncyk7CiAgICBqY2hhciAoICpDYWxs Tm9udmlydHVhbENoYXJNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBq Y2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIGp2YWx1ZSAqYXJncyk7Cgog ICAganNob3J0ICggKkNhbGxOb252aXJ0dWFsU2hvcnRNZXRob2QpCiAgICAgIChKTklFbnYgKmVu diwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwog ICAganNob3J0ICggKkNhbGxOb252aXJ0dWFsU2hvcnRNZXRob2RWKQogICAgICAoSk5JRW52ICpl bnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAg IHZhX2xpc3QgYXJncyk7CiAgICBqc2hvcnQgKCAqQ2FsbE5vbnZpcnR1YWxTaG9ydE1ldGhvZEEp CiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElE IG1ldGhvZElELAogICAgICAganZhbHVlICphcmdzKTsKCiAgICBqaW50ICggKkNhbGxOb252aXJ0 dWFsSW50TWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xh enosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGppbnQgKCAqQ2FsbE5vbnZpcnR1YWxJ bnRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenos IGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZhX2xpc3QgYXJncyk7CiAgICBqaW50ICggKkNh bGxOb252aXJ0dWFsSW50TWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwg amNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICBqdmFsdWUgKmFyZ3MpOwoK ICAgIGpsb25nICggKkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZCkKICAgICAgKEpOSUVudiAqZW52 LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAg ICBqbG9uZyAoICpDYWxsTm9udmlydHVhbExvbmdNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYs IGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZh X2xpc3QgYXJncyk7CiAgICBqbG9uZyAoICpDYWxsTm9udmlydHVhbExvbmdNZXRob2RBKQogICAg ICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRo b2RJRCwKICAgICAgIGp2YWx1ZSAqYXJncyk7CgogICAgamZsb2F0ICggKkNhbGxOb252aXJ0dWFs RmxvYXRNZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6 eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamZsb2F0ICggKkNhbGxOb252aXJ0dWFs RmxvYXRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xh enosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZhX2xpc3QgYXJncyk7CiAgICBqZmxvYXQg KCAqQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVj dCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAganZhbHVlICph cmdzKTsKCiAgICBqZG91YmxlICggKkNhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kKQogICAgICAo Sk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJ RCwgLi4uKTsKICAgIGpkb3VibGUgKCAqQ2FsbE5vbnZpcnR1YWxEb3VibGVNZXRob2RWKQogICAg ICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRo b2RJRCwKICAgICAgIHZhX2xpc3QgYXJncyk7CiAgICBqZG91YmxlICggKkNhbGxOb252aXJ0dWFs RG91YmxlTWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNs YXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICBqdmFsdWUgKmFyZ3MpOwoKICAgIHZvaWQg KCAqQ2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qg b2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIHZvaWQgKCAq Q2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9i aiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICB2YV9saXN0IGFyZ3Mp OwogICAgdm9pZCAoICpDYWxsTm9udmlydHVhbFZvaWRNZXRob2RBKQogICAgICAoSk5JRW52ICpl bnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAg IGp2YWx1ZSAqIGFyZ3MpOwoKICAgIGpmaWVsZElEICggKkdldEZpZWxkSUQpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNsYXp6LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcp OwoKICAgIGpvYmplY3QgKCAqR2V0T2JqZWN0RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgam9i amVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpOwogICAgamJvb2xlYW4gKCAqR2V0Qm9vbGVhbkZp ZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElEKTsK ICAgIGpieXRlICggKkdldEJ5dGVGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9i aiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqY2hhciAoICpHZXRDaGFyRmllbGQpCiAgICAgIChK TklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpOwogICAganNob3J0ICgg KkdldFNob3J0RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElE IGZpZWxkSUQpOwogICAgamludCAoICpHZXRJbnRGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBq b2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqbG9uZyAoICpHZXRMb25nRmllbGQp CiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpOwogICAg amZsb2F0ICggKkdldEZsb2F0RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmos IGpmaWVsZElEIGZpZWxkSUQpOwogICAgamRvdWJsZSAoICpHZXREb3VibGVGaWVsZCkKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCk7CgogICAgdm9pZCAo ICpTZXRPYmplY3RGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamZpZWxk SUQgZmllbGRJRCwgam9iamVjdCB2YWwpOwogICAgdm9pZCAoICpTZXRCb29sZWFuRmllbGQpCiAg ICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsIGpib29sZWFu IHZhbCk7CiAgICB2b2lkICggKlNldEJ5dGVGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2Jq ZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCwgamJ5dGUgdmFsKTsKICAgIHZvaWQgKCAqU2V0Q2hh ckZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElE LCBqY2hhciB2YWwpOwogICAgdm9pZCAoICpTZXRTaG9ydEZpZWxkKQogICAgICAoSk5JRW52ICpl bnYsIGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElELCBqc2hvcnQgdmFsKTsKICAgIHZvaWQg KCAqU2V0SW50RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElE IGZpZWxkSUQsIGppbnQgdmFsKTsKICAgIHZvaWQgKCAqU2V0TG9uZ0ZpZWxkKQogICAgICAoSk5J RW52ICplbnYsIGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElELCBqbG9uZyB2YWwpOwogICAg dm9pZCAoICpTZXRGbG9hdEZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBq ZmllbGRJRCBmaWVsZElELCBqZmxvYXQgdmFsKTsKICAgIHZvaWQgKCAqU2V0RG91YmxlRmllbGQp CiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsIGpkb3Vi bGUgdmFsKTsKCiAgICBqbWV0aG9kSUQgKCAqR2V0U3RhdGljTWV0aG9kSUQpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNsYXp6LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcp OwoKICAgIGpvYmplY3QgKCAqQ2FsbFN0YXRpY09iamVjdE1ldGhvZCkKICAgICAgKEpOSUVudiAq ZW52LCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpvYmplY3Qg KCAqQ2FsbFN0YXRpY09iamVjdE1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNs YXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICBqb2JqZWN0ICggKkNh bGxTdGF0aWNPYmplY3RNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwg am1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpib29sZWFuICggKkNhbGxT dGF0aWNCb29sZWFuTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1l dGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamJvb2xlYW4gKCAqQ2FsbFN0YXRpY0Jvb2xlYW5N ZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhv ZElELCB2YV9saXN0IGFyZ3MpOwogICAgamJvb2xlYW4gKCAqQ2FsbFN0YXRpY0Jvb2xlYW5NZXRo b2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElE LCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpieXRlICggKkNhbGxTdGF0aWNCeXRlTWV0aG9kKQogICAg ICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwog ICAgamJ5dGUgKCAqQ2FsbFN0YXRpY0J5dGVNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpj bGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAgamJ5dGUg KCAqQ2FsbFN0YXRpY0J5dGVNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6 eiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpjaGFyICggKkNhbGxT dGF0aWNDaGFyTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhv ZElEIG1ldGhvZElELCAuLi4pOwogICAgamNoYXIgKCAqQ2FsbFN0YXRpY0NoYXJNZXRob2RWKQog ICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCB2YV9s aXN0IGFyZ3MpOwogICAgamNoYXIgKCAqQ2FsbFN0YXRpY0NoYXJNZXRob2RBKQogICAgICAoSk5J RW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3Mp OwoKICAgIGpzaG9ydCAoICpDYWxsU3RhdGljU2hvcnRNZXRob2QpCiAgICAgIChKTklFbnYgKmVu diwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqc2hvcnQgKCAq Q2FsbFN0YXRpY1Nob3J0TWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenos IGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpzaG9ydCAoICpDYWxsU3Rh dGljU2hvcnRNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhv ZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIGppbnQgKCAqQ2FsbFN0YXRpY0ludE1l dGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJ RCwgLi4uKTsKICAgIGppbnQgKCAqQ2FsbFN0YXRpY0ludE1ldGhvZFYpCiAgICAgIChKTklFbnYg KmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAg ICBqaW50ICggKkNhbGxTdGF0aWNJbnRNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFz cyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpsb25nICgg KkNhbGxTdGF0aWNMb25nTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwg am1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamxvbmcgKCAqQ2FsbFN0YXRpY0xvbmdNZXRo b2RWKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElE LCB2YV9saXN0IGFyZ3MpOwogICAgamxvbmcgKCAqQ2FsbFN0YXRpY0xvbmdNZXRob2RBKQogICAg ICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUg KmFyZ3MpOwoKICAgIGpmbG9hdCAoICpDYWxsU3RhdGljRmxvYXRNZXRob2QpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqZmxv YXQgKCAqQ2FsbFN0YXRpY0Zsb2F0TWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3Mg Y2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpmbG9hdCAoICpD YWxsU3RhdGljRmxvYXRNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwg am1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpkb3VibGUgKCAqQ2FsbFN0 YXRpY0RvdWJsZU1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGptZXRo b2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpkb3VibGUgKCAqQ2FsbFN0YXRpY0RvdWJsZU1ldGhv ZFYpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQs IHZhX2xpc3QgYXJncyk7CiAgICBqZG91YmxlICggKkNhbGxTdGF0aWNEb3VibGVNZXRob2RBKQog ICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFs dWUgKmFyZ3MpOwoKICAgIHZvaWQgKCAqQ2FsbFN0YXRpY1ZvaWRNZXRob2QpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNscywgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgdm9pZCAo ICpDYWxsU3RhdGljVm9pZE1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNscywg am1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAgdm9pZCAoICpDYWxsU3RhdGlj Vm9pZE1ldGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNscywgam1ldGhvZElEIG1l dGhvZElELCBqdmFsdWUgKiBhcmdzKTsKCiAgICBqZmllbGRJRCAoICpHZXRTdGF0aWNGaWVsZElE KQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgY29uc3QgY2hhciAqbmFtZSwgY29u c3QgY2hhciAqc2lnKTsKICAgIGpvYmplY3QgKCAqR2V0U3RhdGljT2JqZWN0RmllbGQpCiAgICAg IChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElEKTsKICAgIGpib29s ZWFuICggKkdldFN0YXRpY0Jvb2xlYW5GaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3Mg Y2xhenosIGpmaWVsZElEIGZpZWxkSUQpOwogICAgamJ5dGUgKCAqR2V0U3RhdGljQnl0ZUZpZWxk KQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7CiAg ICBqY2hhciAoICpHZXRTdGF0aWNDaGFyRmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNz IGNsYXp6LCBqZmllbGRJRCBmaWVsZElEKTsKICAgIGpzaG9ydCAoICpHZXRTdGF0aWNTaG9ydEZp ZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7 CiAgICBqaW50ICggKkdldFN0YXRpY0ludEZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFz cyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqbG9uZyAoICpHZXRTdGF0aWNMb25nRmll bGQpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElEKTsK ICAgIGpmbG9hdCAoICpHZXRTdGF0aWNGbG9hdEZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpj bGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqZG91YmxlICggKkdldFN0YXRpY0Rv dWJsZUZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmll bGRJRCk7CgogICAgdm9pZCAoICpTZXRTdGF0aWNPYmplY3RGaWVsZCkKICAgICAgKEpOSUVudiAq ZW52LCBqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsIGpvYmplY3QgdmFsdWUpOwogICAg dm9pZCAoICpTZXRTdGF0aWNCb29sZWFuRmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNz IGNsYXp6LCBqZmllbGRJRCBmaWVsZElELCBqYm9vbGVhbiB2YWx1ZSk7CiAgICB2b2lkICggKlNl dFN0YXRpY0J5dGVGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGpmaWVs ZElEIGZpZWxkSUQsIGpieXRlIHZhbHVlKTsKICAgIHZvaWQgKCAqU2V0U3RhdGljQ2hhckZpZWxk KQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwgamNo YXIgdmFsdWUpOwogICAgdm9pZCAoICpTZXRTdGF0aWNTaG9ydEZpZWxkKQogICAgICAoSk5JRW52 ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwganNob3J0IHZhbHVlKTsKICAg IHZvaWQgKCAqU2V0U3RhdGljSW50RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNs YXp6LCBqZmllbGRJRCBmaWVsZElELCBqaW50IHZhbHVlKTsKICAgIHZvaWQgKCAqU2V0U3RhdGlj TG9uZ0ZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmll bGRJRCwgamxvbmcgdmFsdWUpOwogICAgdm9pZCAoICpTZXRTdGF0aWNGbG9hdEZpZWxkKQogICAg ICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwgamZsb2F0IHZh bHVlKTsKICAgIHZvaWQgKCAqU2V0U3RhdGljRG91YmxlRmllbGQpCiAgICAgIChKTklFbnYgKmVu diwgamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELCBqZG91YmxlIHZhbHVlKTsKCiAgICBq c3RyaW5nICggKk5ld1N0cmluZykKICAgICAgKEpOSUVudiAqZW52LCBjb25zdCBqY2hhciAqdW5p Y29kZSwganNpemUgbGVuKTsKICAgIGpzaXplICggKkdldFN0cmluZ0xlbmd0aCkKICAgICAgKEpO SUVudiAqZW52LCBqc3RyaW5nIHN0cik7CiAgICBjb25zdCBqY2hhciAqKCAqR2V0U3RyaW5nQ2hh cnMpCiAgICAgIChKTklFbnYgKmVudiwganN0cmluZyBzdHIsIGpib29sZWFuICppc0NvcHkpOwog ICAgdm9pZCAoICpSZWxlYXNlU3RyaW5nQ2hhcnMpCiAgICAgIChKTklFbnYgKmVudiwganN0cmlu ZyBzdHIsIGNvbnN0IGpjaGFyICpjaGFycyk7CgogICAganN0cmluZyAoICpOZXdTdHJpbmdVVEYp CiAgICAgIChKTklFbnYgKmVudiwgY29uc3QgY2hhciAqdXRmKTsKICAgIGpzaXplICggKkdldFN0 cmluZ1VURkxlbmd0aCkKICAgICAgKEpOSUVudiAqZW52LCBqc3RyaW5nIHN0cik7CiAgICBjb25z dCBjaGFyKiAoICpHZXRTdHJpbmdVVEZDaGFycykKICAgICAgKEpOSUVudiAqZW52LCBqc3RyaW5n IHN0ciwgamJvb2xlYW4gKmlzQ29weSk7CiAgICB2b2lkICggKlJlbGVhc2VTdHJpbmdVVEZDaGFy cykKICAgICAgKEpOSUVudiAqZW52LCBqc3RyaW5nIHN0ciwgY29uc3QgY2hhciogY2hhcnMpOwoK CiAgICBqc2l6ZSAoICpHZXRBcnJheUxlbmd0aCkKICAgICAgKEpOSUVudiAqZW52LCBqYXJyYXkg YXJyYXkpOwoKICAgIGpvYmplY3RBcnJheSAoICpOZXdPYmplY3RBcnJheSkKICAgICAgKEpOSUVu diAqZW52LCBqc2l6ZSBsZW4sIGpjbGFzcyBjbGF6eiwgam9iamVjdCBpbml0KTsKICAgIGpvYmpl Y3QgKCAqR2V0T2JqZWN0QXJyYXlFbGVtZW50KQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3RB cnJheSBhcnJheSwganNpemUgaW5kZXgpOwogICAgdm9pZCAoICpTZXRPYmplY3RBcnJheUVsZW1l bnQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdEFycmF5IGFycmF5LCBqc2l6ZSBpbmRleCwg am9iamVjdCB2YWwpOwoKICAgIGpib29sZWFuQXJyYXkgKCAqTmV3Qm9vbGVhbkFycmF5KQogICAg ICAoSk5JRW52ICplbnYsIGpzaXplIGxlbik7CiAgICBqYnl0ZUFycmF5ICggKk5ld0J5dGVBcnJh eSkKICAgICAgKEpOSUVudiAqZW52LCBqc2l6ZSBsZW4pOwogICAgamNoYXJBcnJheSAoICpOZXdD aGFyQXJyYXkpCiAgICAgIChKTklFbnYgKmVudiwganNpemUgbGVuKTsKICAgIGpzaG9ydEFycmF5 ICggKk5ld1Nob3J0QXJyYXkpCiAgICAgIChKTklFbnYgKmVudiwganNpemUgbGVuKTsKICAgIGpp bnRBcnJheSAoICpOZXdJbnRBcnJheSkKICAgICAgKEpOSUVudiAqZW52LCBqc2l6ZSBsZW4pOwog ICAgamxvbmdBcnJheSAoICpOZXdMb25nQXJyYXkpCiAgICAgIChKTklFbnYgKmVudiwganNpemUg bGVuKTsKICAgIGpmbG9hdEFycmF5ICggKk5ld0Zsb2F0QXJyYXkpCiAgICAgIChKTklFbnYgKmVu diwganNpemUgbGVuKTsKICAgIGpkb3VibGVBcnJheSAoICpOZXdEb3VibGVBcnJheSkKICAgICAg KEpOSUVudiAqZW52LCBqc2l6ZSBsZW4pOwoKICAgIGpib29sZWFuICogKCAqR2V0Qm9vbGVhbkFy cmF5RWxlbWVudHMpCiAgICAgIChKTklFbnYgKmVudiwgamJvb2xlYW5BcnJheSBhcnJheSwgamJv b2xlYW4gKmlzQ29weSk7CiAgICBqYnl0ZSAqICggKkdldEJ5dGVBcnJheUVsZW1lbnRzKQogICAg ICAoSk5JRW52ICplbnYsIGpieXRlQXJyYXkgYXJyYXksIGpib29sZWFuICppc0NvcHkpOwogICAg amNoYXIgKiAoICpHZXRDaGFyQXJyYXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqY2hh ckFycmF5IGFycmF5LCBqYm9vbGVhbiAqaXNDb3B5KTsKICAgIGpzaG9ydCAqICggKkdldFNob3J0 QXJyYXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqc2hvcnRBcnJheSBhcnJheSwgamJv b2xlYW4gKmlzQ29weSk7CiAgICBqaW50ICogKCAqR2V0SW50QXJyYXlFbGVtZW50cykKICAgICAg KEpOSUVudiAqZW52LCBqaW50QXJyYXkgYXJyYXksIGpib29sZWFuICppc0NvcHkpOwogICAgamxv bmcgKiAoICpHZXRMb25nQXJyYXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqbG9uZ0Fy cmF5IGFycmF5LCBqYm9vbGVhbiAqaXNDb3B5KTsKICAgIGpmbG9hdCAqICggKkdldEZsb2F0QXJy YXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqZmxvYXRBcnJheSBhcnJheSwgamJvb2xl YW4gKmlzQ29weSk7CiAgICBqZG91YmxlICogKCAqR2V0RG91YmxlQXJyYXlFbGVtZW50cykKICAg ICAgKEpOSUVudiAqZW52LCBqZG91YmxlQXJyYXkgYXJyYXksIGpib29sZWFuICppc0NvcHkpOwoK ICAgIHZvaWQgKCAqUmVsZWFzZUJvb2xlYW5BcnJheUVsZW1lbnRzKQogICAgICAoSk5JRW52ICpl bnYsIGpib29sZWFuQXJyYXkgYXJyYXksIGpib29sZWFuICplbGVtcywgamludCBtb2RlKTsKICAg IHZvaWQgKCAqUmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKQogICAgICAoSk5JRW52ICplbnYsIGpi eXRlQXJyYXkgYXJyYXksIGpieXRlICplbGVtcywgamludCBtb2RlKTsKICAgIHZvaWQgKCAqUmVs ZWFzZUNoYXJBcnJheUVsZW1lbnRzKQogICAgICAoSk5JRW52ICplbnYsIGpjaGFyQXJyYXkgYXJy YXksIGpjaGFyICplbGVtcywgamludCBtb2RlKTsKICAgIHZvaWQgKCAqUmVsZWFzZVNob3J0QXJy YXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqc2hvcnRBcnJheSBhcnJheSwganNob3J0 ICplbGVtcywgamludCBtb2RlKTsKICAgIHZvaWQgKCAqUmVsZWFzZUludEFycmF5RWxlbWVudHMp CiAgICAgIChKTklFbnYgKmVudiwgamludEFycmF5IGFycmF5LCBqaW50ICplbGVtcywgamludCBt b2RlKTsKICAgIHZvaWQgKCAqUmVsZWFzZUxvbmdBcnJheUVsZW1lbnRzKQogICAgICAoSk5JRW52 ICplbnYsIGpsb25nQXJyYXkgYXJyYXksIGpsb25nICplbGVtcywgamludCBtb2RlKTsKICAgIHZv aWQgKCAqUmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqZmxv YXRBcnJheSBhcnJheSwgamZsb2F0ICplbGVtcywgamludCBtb2RlKTsKICAgIHZvaWQgKCAqUmVs ZWFzZURvdWJsZUFycmF5RWxlbWVudHMpCiAgICAgIChKTklFbnYgKmVudiwgamRvdWJsZUFycmF5 IGFycmF5LCBqZG91YmxlICplbGVtcywgamludCBtb2RlKTsKCiAgICB2b2lkICggKkdldEJvb2xl YW5BcnJheVJlZ2lvbikKICAgICAgKEpOSUVudiAqZW52LCBqYm9vbGVhbkFycmF5IGFycmF5LCBq c2l6ZSBzdGFydCwganNpemUgbCwgamJvb2xlYW4gKmJ1Zik7CiAgICB2b2lkICggKkdldEJ5dGVB cnJheVJlZ2lvbikKICAgICAgKEpOSUVudiAqZW52LCBqYnl0ZUFycmF5IGFycmF5LCBqc2l6ZSBz dGFydCwganNpemUgbGVuLCBqYnl0ZSAqYnVmKTsKICAgIHZvaWQgKCAqR2V0Q2hhckFycmF5UmVn aW9uKQogICAgICAoSk5JRW52ICplbnYsIGpjaGFyQXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0LCBq c2l6ZSBsZW4sIGpjaGFyICpidWYpOwogICAgdm9pZCAoICpHZXRTaG9ydEFycmF5UmVnaW9uKQog ICAgICAoSk5JRW52ICplbnYsIGpzaG9ydEFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUg bGVuLCBqc2hvcnQgKmJ1Zik7CiAgICB2b2lkICggKkdldEludEFycmF5UmVnaW9uKQogICAgICAo Sk5JRW52ICplbnYsIGppbnRBcnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxlbiwgamlu dCAqYnVmKTsKICAgIHZvaWQgKCAqR2V0TG9uZ0FycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICpl bnYsIGpsb25nQXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpsb25nICpidWYp OwogICAgdm9pZCAoICpHZXRGbG9hdEFycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGpm bG9hdEFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLCBqZmxvYXQgKmJ1Zik7CiAg ICB2b2lkICggKkdldERvdWJsZUFycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGpkb3Vi bGVBcnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxlbiwgamRvdWJsZSAqYnVmKTsKCiAg ICB2b2lkICggKlNldEJvb2xlYW5BcnJheVJlZ2lvbikKICAgICAgKEpOSUVudiAqZW52LCBqYm9v bGVhbkFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbCwgamJvb2xlYW4gKmJ1Zik7CiAg ICB2b2lkICggKlNldEJ5dGVBcnJheVJlZ2lvbikKICAgICAgKEpOSUVudiAqZW52LCBqYnl0ZUFy cmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLCBqYnl0ZSAqYnVmKTsKICAgIHZvaWQg KCAqU2V0Q2hhckFycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGpjaGFyQXJyYXkgYXJy YXksIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpjaGFyICpidWYpOwogICAgdm9pZCAoICpTZXRT aG9ydEFycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGpzaG9ydEFycmF5IGFycmF5LCBq c2l6ZSBzdGFydCwganNpemUgbGVuLCBqc2hvcnQgKmJ1Zik7CiAgICB2b2lkICggKlNldEludEFy cmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGppbnRBcnJheSBhcnJheSwganNpemUgc3Rh cnQsIGpzaXplIGxlbiwgamludCAqYnVmKTsKICAgIHZvaWQgKCAqU2V0TG9uZ0FycmF5UmVnaW9u KQogICAgICAoSk5JRW52ICplbnYsIGpsb25nQXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0LCBqc2l6 ZSBsZW4sIGpsb25nICpidWYpOwogICAgdm9pZCAoICpTZXRGbG9hdEFycmF5UmVnaW9uKQogICAg ICAoSk5JRW52ICplbnYsIGpmbG9hdEFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVu LCBqZmxvYXQgKmJ1Zik7CiAgICB2b2lkICggKlNldERvdWJsZUFycmF5UmVnaW9uKQogICAgICAo Sk5JRW52ICplbnYsIGpkb3VibGVBcnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxlbiwg amRvdWJsZSAqYnVmKTsKCiAgICBqaW50ICggKlJlZ2lzdGVyTmF0aXZlcykKICAgICAgKEpOSUVu diAqZW52LCBqY2xhc3MgY2xhenosIGNvbnN0IEpOSU5hdGl2ZU1ldGhvZCAqbWV0aG9kcywKICAg ICAgIGppbnQgbk1ldGhvZHMpOwogICAgamludCAoICpVbnJlZ2lzdGVyTmF0aXZlcykKICAgICAg KEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenopOwoKICAgIGppbnQgKCAqTW9uaXRvckVudGVyKQog ICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqKTsKICAgIGppbnQgKCAqTW9uaXRvckV4aXQp CiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmopOwoKICAgIGppbnQgKCAqR2V0SmF2YVZN KQogICAgICAoSk5JRW52ICplbnYsIEphdmFWTSAqKnZtKTsKfTsKIyA3MjEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9qYXZhL2puaS5oIgpzdHJ1Y3QgSk5JRW52XyB7CiAgICBjb25zdCBzdHJ1Y3Qg Sk5JTmF0aXZlSW50ZXJmYWNlXyAqZnVuY3Rpb25zOwogICAgdm9pZCAqcmVzZXJ2ZWQwOwogICAg dm9pZCAqcmVzZXJ2ZWQxWzZdOwoKCiAgICBqaW50IEdldFZlcnNpb24oKSB7CiAgICAgICAgcmV0 dXJuIGZ1bmN0aW9ucy0+R2V0VmVyc2lvbih0aGlzKTsKICAgIH0KICAgIGpjbGFzcyBEZWZpbmVD bGFzcyhjb25zdCBjaGFyICpuYW1lLCBqb2JqZWN0IGxvYWRlciwgY29uc3QgamJ5dGUgKmJ1ZiwK ICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSBsZW4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rp b25zLT5EZWZpbmVDbGFzcyh0aGlzLCBuYW1lLCBsb2FkZXIsIGJ1ZiwgbGVuKTsKICAgIH0KICAg IGpjbGFzcyBGaW5kQ2xhc3MoY29uc3QgY2hhciAqbmFtZSkgewogICAgICAgIHJldHVybiBmdW5j dGlvbnMtPkZpbmRDbGFzcyh0aGlzLCBuYW1lKTsKICAgIH0KICAgIGpjbGFzcyBHZXRTdXBlcmNs YXNzKGpjbGFzcyBzdWIpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTdXBlcmNsYXNz KHRoaXMsIHN1Yik7CiAgICB9CiAgICBqYm9vbGVhbiBJc0Fzc2lnbmFibGVGcm9tKGpjbGFzcyBz dWIsIGpjbGFzcyBzdXApIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5Jc0Fzc2lnbmFibGVG cm9tKHRoaXMsIHN1Yiwgc3VwKTsKICAgIH0KCiAgICBqaW50IFRocm93KGp0aHJvd2FibGUgb2Jq KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+VGhyb3codGhpcywgb2JqKTsKICAgIH0KICAg IGppbnQgVGhyb3dOZXcoamNsYXNzIGNsYXp6LCBjb25zdCBjaGFyICptc2cpIHsKICAgICAgICBy ZXR1cm4gZnVuY3Rpb25zLT5UaHJvd05ldyh0aGlzLCBjbGF6eiwgbXNnKTsKICAgIH0KICAgIGp0 aHJvd2FibGUgRXhjZXB0aW9uT2NjdXJyZWQoKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+ RXhjZXB0aW9uT2NjdXJyZWQodGhpcyk7CiAgICB9CiAgICB2b2lkIEV4Y2VwdGlvbkRlc2NyaWJl KCkgewogICAgICAgIGZ1bmN0aW9ucy0+RXhjZXB0aW9uRGVzY3JpYmUodGhpcyk7CiAgICB9CiAg ICB2b2lkIEV4Y2VwdGlvbkNsZWFyKCkgewogICAgICAgIGZ1bmN0aW9ucy0+RXhjZXB0aW9uQ2xl YXIodGhpcyk7CiAgICB9CiAgICB2b2lkIEZhdGFsRXJyb3IoY29uc3QgY2hhciAqbXNnKSB7CiAg ICAgICAgZnVuY3Rpb25zLT5GYXRhbEVycm9yKHRoaXMsIG1zZyk7CiAgICB9CgogICAgam9iamVj dCBOZXdHbG9iYWxSZWYoam9iamVjdCBsb2JqKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+ TmV3R2xvYmFsUmVmKHRoaXMsbG9iaik7CiAgICB9CiAgICB2b2lkIERlbGV0ZUdsb2JhbFJlZihq b2JqZWN0IGdyZWYpIHsKICAgICAgICBmdW5jdGlvbnMtPkRlbGV0ZUdsb2JhbFJlZih0aGlzLGdy ZWYpOwogICAgfQogICAgdm9pZCBEZWxldGVMb2NhbFJlZihqb2JqZWN0IG9iaikgewogICAgICAg IGZ1bmN0aW9ucy0+RGVsZXRlTG9jYWxSZWYodGhpcywgb2JqKTsKICAgIH0KCiAgICBqYm9vbGVh biBJc1NhbWVPYmplY3Qoam9iamVjdCBvYmoxLCBqb2JqZWN0IG9iajIpIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5Jc1NhbWVPYmplY3QodGhpcyxvYmoxLG9iajIpOwogICAgfQoKICAgIGpv YmplY3QgQWxsb2NPYmplY3QoamNsYXNzIGNsYXp6KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9u cy0+QWxsb2NPYmplY3QodGhpcyxjbGF6eik7CiAgICB9CiAgICBqb2JqZWN0IE5ld09iamVjdChq Y2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBh cmdzOwogICAgICAgIGpvYmplY3QgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3Rh cnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPk5ld09iamVj dFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFy Z3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqb2JqZWN0IE5ld09iamVjdFYo amNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAg dmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TmV3T2JqZWN0Vih0aGlz LGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgam9iamVjdCBOZXdPYmplY3RBKGpjbGFz cyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgIGp2YWx1 ZSAqYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPk5ld09iamVjdEEodGhpcyxjbGF6 eixtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqY2xhc3MgR2V0T2JqZWN0Q2xhc3Moam9iamVj dCBvYmopIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRPYmplY3RDbGFzcyh0aGlzLG9i aik7CiAgICB9CiAgICBqYm9vbGVhbiBJc0luc3RhbmNlT2Yoam9iamVjdCBvYmosIGpjbGFzcyBj bGF6eikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPklzSW5zdGFuY2VPZih0aGlzLG9iaixj bGF6eik7CiAgICB9CgogICAgam1ldGhvZElEIEdldE1ldGhvZElEKGpjbGFzcyBjbGF6eiwgY29u c3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzaWcp IHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRNZXRob2RJRCh0aGlzLGNsYXp6LG5hbWUs c2lnKTsKICAgIH0KCiAgICBqb2JqZWN0IENhbGxPYmplY3RNZXRob2Qoam9iamVjdCBvYmosIGpt ZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpv YmplY3QgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhv ZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxPYmplY3RNZXRob2RWKHRoaXMs b2JqLG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7CiAgICAg ICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpvYmplY3QgQ2FsbE9iamVjdE1ldGhvZFYoam9i amVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgdmFf bGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE9iamVjdE1ldGhvZFYo dGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqb2JqZWN0IENhbGxPYmplY3RNZXRo b2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAg ICAgIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsT2JqZWN0 TWV0aG9kQSh0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqYm9vbGVhbiBDYWxs Qm9vbGVhbk1ldGhvZChqb2JqZWN0IG9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAg IGpib29sZWFuIHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxt ZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsQm9vbGVhbk1ldGhvZFYo dGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChhcmdzKTsK ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgamJvb2xlYW4gQ2FsbEJvb2xlYW5NZXRo b2RWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2Fs bEJvb2xlYW5NZXRob2RWKHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamJvb2xl YW4gQ2FsbEJvb2xlYW5NZXRob2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICogYXJncykgewogICAgICAgIHJl dHVybiBmdW5jdGlvbnMtPkNhbGxCb29sZWFuTWV0aG9kQSh0aGlzLG9iaixtZXRob2RJRCwgYXJn cyk7CiAgICB9CgogICAgamJ5dGUgQ2FsbEJ5dGVNZXRob2Qoam9iamVjdCBvYmosIGptZXRob2RJ RCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpieXRlIHJl c3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAg ICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsQnl0ZU1ldGhvZFYodGhpcyxvYmosbWV0aG9k SUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChhcmdzKTsKICAgICAgICByZXR1cm4g cmVzdWx0OwogICAgfQogICAgamJ5dGUgQ2FsbEJ5dGVNZXRob2RWKGpvYmplY3Qgb2JqLCBqbWV0 aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7 CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbEJ5dGVNZXRob2RWKHRoaXMsb2JqLG1ldGhv ZElELGFyZ3MpOwogICAgfQogICAgamJ5dGUgQ2FsbEJ5dGVNZXRob2RBKGpvYmplY3Qgb2JqLCBq bWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICogYXJn cykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxCeXRlTWV0aG9kQSh0aGlzLG9iaixt ZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqY2hhciBDYWxsQ2hhck1ldGhvZChqb2JqZWN0IG9i aiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAg ICAgamNoYXIgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1l dGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxDaGFyTWV0aG9kVih0aGlz LG9iaixtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAg ICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqY2hhciBDYWxsQ2hhck1ldGhvZFYoam9iamVj dCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9s aXN0IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsQ2hhck1ldGhvZFYodGhp cyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqY2hhciBDYWxsQ2hhck1ldGhvZEEoam9i amVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICBq dmFsdWUgKiBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbENoYXJNZXRob2RB KHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAgfQoKICAgIGpzaG9ydCBDYWxsU2hvcnRNZXRo b2Qoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlz dCBhcmdzOwogICAgICAgIGpzaG9ydCByZXN1bHQ7CiAgICAgICAgX19idWlsdGluX3N0ZGFyZ19z dGFydCgoYXJncyksbWV0aG9kSUQpOwogICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbFNo b3J0TWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFf ZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqc2hvcnQgQ2FsbFNo b3J0TWV0aG9kVihqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+ Q2FsbFNob3J0TWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpzaG9y dCBDYWxsU2hvcnRNZXRob2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKiBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1 bmN0aW9ucy0+Q2FsbFNob3J0TWV0aG9kQSh0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0K CiAgICBqaW50IENhbGxJbnRNZXRob2Qoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwg Li4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGppbnQgcmVzdWx0OwogICAgICAg IF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQg PSBmdW5jdGlvbnMtPkNhbGxJbnRNZXRob2RWKHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAg ICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0K ICAgIGppbnQgQ2FsbEludE1ldGhvZFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwK ICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1 bmN0aW9ucy0+Q2FsbEludE1ldGhvZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAg ICBqaW50IENhbGxJbnRNZXRob2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAg ICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVu Y3Rpb25zLT5DYWxsSW50TWV0aG9kQSh0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAg ICBqbG9uZyBDYWxsTG9uZ01ldGhvZChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCAu Li4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAgamxvbmcgcmVzdWx0OwogICAgICAg IF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQg PSBmdW5jdGlvbnMtPkNhbGxMb25nTWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAg ICAgICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9 CiAgICBqbG9uZyBDYWxsTG9uZ01ldGhvZFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJ RCwKICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5DYWxsTG9uZ01ldGhvZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAg ICB9CiAgICBqbG9uZyBDYWxsTG9uZ01ldGhvZEEoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRo b2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKiBhcmdzKSB7CiAgICAgICAg cmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbExvbmdNZXRob2RBKHRoaXMsb2JqLG1ldGhvZElELGFyZ3Mp OwogICAgfQoKICAgIGpmbG9hdCBDYWxsRmxvYXRNZXRob2Qoam9iamVjdCBvYmosIGptZXRob2RJ RCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpmbG9hdCBy ZXN1bHQ7CiAgICAgICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aG9kSUQpOwog ICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbEZsb2F0TWV0aG9kVih0aGlzLG9iaixtZXRo b2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVy biByZXN1bHQ7CiAgICB9CiAgICBqZmxvYXQgQ2FsbEZsb2F0TWV0aG9kVihqb2JqZWN0IG9iaiwg am1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBh cmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbEZsb2F0TWV0aG9kVih0aGlzLG9i aixtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpmbG9hdCBDYWxsRmxvYXRNZXRob2RBKGpvYmpl Y3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBq dmFsdWUgKiBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbEZsb2F0TWV0aG9k QSh0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqZG91YmxlIENhbGxEb3VibGVN ZXRob2Qoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFf bGlzdCBhcmdzOwogICAgICAgIGpkb3VibGUgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRh cmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNh bGxEb3VibGVNZXRob2RWKHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRp bl92YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpkb3VibGUg Q2FsbERvdWJsZU1ldGhvZFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAg ICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9u cy0+Q2FsbERvdWJsZU1ldGhvZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBq ZG91YmxlIENhbGxEb3VibGVNZXRob2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQs CiAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4g ZnVuY3Rpb25zLT5DYWxsRG91YmxlTWV0aG9kQSh0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAg IH0KCiAgICB2b2lkIENhbGxWb2lkTWV0aG9kKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9k SUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJn X3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgZnVuY3Rpb25zLT5DYWxsVm9pZE1ldGhv ZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChhcmdz KTsKICAgIH0KICAgIHZvaWQgQ2FsbFZvaWRNZXRob2RWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQg bWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAg ICBmdW5jdGlvbnMtPkNhbGxWb2lkTWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAg IH0KICAgIHZvaWQgQ2FsbFZvaWRNZXRob2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9k SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKiBhcmdzKSB7CiAgICAgICAgZnVu Y3Rpb25zLT5DYWxsVm9pZE1ldGhvZEEodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9Cgog ICAgam9iamVjdCBDYWxsTm9udmlydHVhbE9iamVjdE1ldGhvZChqb2JqZWN0IG9iaiwgamNsYXNz IGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQg bWV0aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqb2JqZWN0IHJl c3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAg ICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbE9iamVjdE1ldGhvZFYodGhp cyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChhcmdz KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgam9iamVjdCBDYWxsTm9udmlydHVh bE9iamVjdE1ldGhvZFYoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdz KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxPYmplY3RNZXRob2RW KHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpvYmplY3QgQ2FsbE5vbnZp cnR1YWxPYmplY3RNZXRob2RBKGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAq IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbE9iamVjdE1l dGhvZEEodGhpcyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgfQoKICAgIGpib29sZWFuIENh bGxOb252aXJ0dWFsQm9vbGVhbk1ldGhvZChqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwg Li4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpib29sZWFuIHJlc3VsdDsKICAg ICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgcmVz dWx0ID0gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2RWKHRoaXMsb2JqLGNs YXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAg ICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqYm9vbGVhbiBDYWxsTm9udmlydHVhbEJvb2xl YW5NZXRob2RWKGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7 CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kVih0 aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamJvb2xlYW4gQ2FsbE5vbnZp cnR1YWxCb29sZWFuTWV0aG9kQShqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1 ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEJvb2xl YW5NZXRob2RBKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsIGFyZ3MpOwogICAgfQoKICAgIGpieXRl IENhbGxOb252aXJ0dWFsQnl0ZU1ldGhvZChqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7 CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpieXRlIHJlc3VsdDsKICAgICAgICBfX2J1 aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVu Y3Rpb25zLT5DYWxsTm9udmlydHVhbEJ5dGVNZXRob2RWKHRoaXMsb2JqLGNsYXp6LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RJRCxh cmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1 bHQ7CiAgICB9CiAgICBqYnl0ZSBDYWxsTm9udmlydHVhbEJ5dGVNZXRob2RWKGpvYmplY3Qgb2Jq LCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRo b2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+ Q2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kVih0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAg fQogICAgamJ5dGUgQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kQShqb2JqZWN0IG9iaiwgamNsYXNz IGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0 aG9kSUQsIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9u dmlydHVhbEJ5dGVNZXRob2RBKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAg amNoYXIgQ2FsbE5vbnZpcnR1YWxDaGFyTWV0aG9kKGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCAu Li4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAgamNoYXIgcmVzdWx0OwogICAgICAg IF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQg PSBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsQ2hhck1ldGhvZFYodGhpcyxvYmosY2xhenosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhv ZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJu IHJlc3VsdDsKICAgIH0KICAgIGpjaGFyIENhbGxOb252aXJ0dWFsQ2hhck1ldGhvZFYoam9iamVj dCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg am1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rp b25zLT5DYWxsTm9udmlydHVhbENoYXJNZXRob2RWKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7 CiAgICB9CiAgICBqY2hhciBDYWxsTm9udmlydHVhbENoYXJNZXRob2RBKGpvYmplY3Qgb2JqLCBq Y2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJ RCBtZXRob2RJRCwganZhbHVlICogYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNh bGxOb252aXJ0dWFsQ2hhck1ldGhvZEEodGhpcyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RJRCxhcmdzKTsKICAgIH0K CiAgICBqc2hvcnQgQ2FsbE5vbnZpcnR1YWxTaG9ydE1ldGhvZChqb2JqZWN0IG9iaiwgamNsYXNz IGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1l dGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAganNob3J0IHJlc3Vs dDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAg ICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbFNob3J0TWV0aG9kVih0aGlzLG9i aixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7CiAg ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpzaG9ydCBDYWxsTm9udmlydHVhbFNob3J0 TWV0aG9kVihqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAg ICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxTaG9ydE1ldGhvZFYodGhpcyxvYmos Y2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqc2hvcnQgQ2FsbE5vbnZpcnR1YWxTaG9ydE1l dGhvZEEoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAg ICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbFNob3J0TWV0aG9kQSh0aGlzLG9iaixj bGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqaW50IENhbGxOb252aXJ0dWFsSW50TWV0aG9k KGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAg ICAgIGppbnQgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1l dGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsSW50TWV0 aG9kVih0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5fdmFfZW5k KGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqaW50IENhbGxOb252aXJ0 dWFsSW50TWV0aG9kVihqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsKICAg ICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEludE1ldGhvZFYodGhpcyxvYmos Y2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamludCBDYWxsTm9udmlydHVhbEludE1ldGhvZEEo am9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICogYXJncykgewogICAgICAgIHJldHVybiBm dW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsSW50TWV0aG9kQSh0aGlzLG9iaixjbGF6eiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJn cyk7CiAgICB9CgogICAgamxvbmcgQ2FsbE5vbnZpcnR1YWxMb25nTWV0aG9kKGpvYmplY3Qgb2Jq LCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhv ZElEIG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAgamxvbmcg cmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsK ICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZFYodGhp cyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7 CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpsb25nIENhbGxOb252aXJ0dWFsTG9u Z01ldGhvZFYoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsKICAgICAg ICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbExvbmdNZXRob2RWKHRoaXMsb2JqLGNs YXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqbG9uZyBDYWxsTm9udmlydHVhbExvbmdNZXRob2RB KGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICogYXJncykgewogICAgICAgIHJldHVy biBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZEEodGhpcyxvYmosY2xhenosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RJ RCxhcmdzKTsKICAgIH0KCiAgICBqZmxvYXQgQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZChqb2Jq ZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgam1ldGhvZElEIG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAg ICAgamZsb2F0IHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxt ZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEZsb2F0 TWV0aG9kVih0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92 YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpmbG9hdCBDYWxs Tm9udmlydHVhbEZsb2F0TWV0aG9kVihqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICBy ZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEZsb2F0TWV0aG9kVih0aGlzLG9iaixjbGF6 eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt ZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpmbG9hdCBDYWxsTm9udmlydHVhbEZsb2F0TWV0aG9k QShqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqdmFsdWUgKiBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2Fs bE5vbnZpcnR1YWxGbG9hdE1ldGhvZEEodGhpcyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICB9 CgogICAgamRvdWJsZSBDYWxsTm9udmlydHVhbERvdWJsZU1ldGhvZChqb2JqZWN0IG9iaiwgamNs YXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9k SUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqZG91Ymxl IHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7 CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbERvdWJsZU1ldGhvZFYo dGhpcyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChh cmdzKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgamRvdWJsZSBDYWxsTm9udmly dHVhbERvdWJsZU1ldGhvZFYoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncykgewogICAgICAgIHJl dHVybiBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kVih0aGlzLG9iaixjbGF6 eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqZG91YmxlIENhbGxOb252aXJ0dWFsRG91YmxlTWV0 aG9kQShqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAganZhbHVlICogYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlv bnMtPkNhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kQSh0aGlzLG9iaixjbGF6eiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJn cyk7CiAgICB9CgogICAgdm9pZCBDYWxsTm9udmlydHVhbFZvaWRNZXRob2Qoam9iamVjdCBvYmos IGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJ RCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIF9fYnVpbHRp bl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICBmdW5jdGlvbnMtPkNhbGxO b252aXJ0dWFsVm9pZE1ldGhvZFYodGhpcyxvYmosY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICAg ICAgX19idWlsdGluX3ZhX2VuZChhcmdzKTsKICAgIH0KICAgIHZvaWQgQ2FsbE5vbnZpcnR1YWxW b2lkTWV0aG9kVihqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICBmdW5jdGlvbnMtPkNhbGxOb252 aXJ0dWFsVm9pZE1ldGhvZFYodGhpcyxvYmosY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAg ICB2b2lkIENhbGxOb252aXJ0dWFsVm9pZE1ldGhvZEEoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6 eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICogYXJncykgewogICAg ICAgIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kQSh0aGlzLG9iaixjbGF6eixt ZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqZmllbGRJRCBHZXRGaWVsZElEKGpjbGFzcyBjbGF6 eiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq c2lnKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0RmllbGRJRCh0aGlzLGNsYXp6LG5h bWUsc2lnKTsKICAgIH0KCiAgICBqb2JqZWN0IEdldE9iamVjdEZpZWxkKGpvYmplY3Qgb2JqLCBq ZmllbGRJRCBmaWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0T2JqZWN0Rmll bGQodGhpcyxvYmosZmllbGRJRCk7CiAgICB9CiAgICBqYm9vbGVhbiBHZXRCb29sZWFuRmllbGQo am9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25z LT5HZXRCb29sZWFuRmllbGQodGhpcyxvYmosZmllbGRJRCk7CiAgICB9CiAgICBqYnl0ZSBHZXRC eXRlRmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4g ZnVuY3Rpb25zLT5HZXRCeXRlRmllbGQodGhpcyxvYmosZmllbGRJRCk7CiAgICB9CiAgICBqY2hh ciBHZXRDaGFyRmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICBy ZXR1cm4gZnVuY3Rpb25zLT5HZXRDaGFyRmllbGQodGhpcyxvYmosZmllbGRJRCk7CiAgICB9CiAg ICBqc2hvcnQgR2V0U2hvcnRGaWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCkgewog ICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFNob3J0RmllbGQodGhpcyxvYmosZmllbGRJRCk7 CiAgICB9CiAgICBqaW50IEdldEludEZpZWxkKGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElE KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0SW50RmllbGQodGhpcyxvYmosZmllbGRJ RCk7CiAgICB9CiAgICBqbG9uZyBHZXRMb25nRmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZp ZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRMb25nRmllbGQodGhpcyxvYmos ZmllbGRJRCk7CiAgICB9CiAgICBqZmxvYXQgR2V0RmxvYXRGaWVsZChqb2JqZWN0IG9iaiwgamZp ZWxkSUQgZmllbGRJRCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldEZsb2F0RmllbGQo dGhpcyxvYmosZmllbGRJRCk7CiAgICB9CiAgICBqZG91YmxlIEdldERvdWJsZUZpZWxkKGpvYmpl Y3Qgb2JqLCBqZmllbGRJRCBmaWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0 RG91YmxlRmllbGQodGhpcyxvYmosZmllbGRJRCk7CiAgICB9CgogICAgdm9pZCBTZXRPYmplY3RG aWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCwgam9iamVjdCB2YWwpIHsKICAgICAg ICBmdW5jdGlvbnMtPlNldE9iamVjdEZpZWxkKHRoaXMsb2JqLGZpZWxkSUQsdmFsKTsKICAgIH0K ICAgIHZvaWQgU2V0Qm9vbGVhbkZpZWxkKGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElELAog ICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gdmFsKSB7CiAgICAgICAgZnVuY3Rpb25z LT5TZXRCb29sZWFuRmllbGQodGhpcyxvYmosZmllbGRJRCx2YWwpOwogICAgfQogICAgdm9pZCBT ZXRCeXRlRmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAg ICAgICAgICBqYnl0ZSB2YWwpIHsKICAgICAgICBmdW5jdGlvbnMtPlNldEJ5dGVGaWVsZCh0aGlz LG9iaixmaWVsZElELHZhbCk7CiAgICB9CiAgICB2b2lkIFNldENoYXJGaWVsZChqb2JqZWN0IG9i aiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAgICAgICAgICAgICAgIGpjaGFyIHZhbCkgewog ICAgICAgIGZ1bmN0aW9ucy0+U2V0Q2hhckZpZWxkKHRoaXMsb2JqLGZpZWxkSUQsdmFsKTsKICAg IH0KICAgIHZvaWQgU2V0U2hvcnRGaWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCwK ICAgICAgICAgICAgICAgICAgICAgICBqc2hvcnQgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5T ZXRTaG9ydEZpZWxkKHRoaXMsb2JqLGZpZWxkSUQsdmFsKTsKICAgIH0KICAgIHZvaWQgU2V0SW50 RmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAgICAgICAg IGppbnQgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXRJbnRGaWVsZCh0aGlzLG9iaixmaWVs ZElELHZhbCk7CiAgICB9CiAgICB2b2lkIFNldExvbmdGaWVsZChqb2JqZWN0IG9iaiwgamZpZWxk SUQgZmllbGRJRCwKICAgICAgICAgICAgICAgICAgICAgIGpsb25nIHZhbCkgewogICAgICAgIGZ1 bmN0aW9ucy0+U2V0TG9uZ0ZpZWxkKHRoaXMsb2JqLGZpZWxkSUQsdmFsKTsKICAgIH0KICAgIHZv aWQgU2V0RmxvYXRGaWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAg ICAgICAgICAgICAgICBqZmxvYXQgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXRGbG9hdEZp ZWxkKHRoaXMsb2JqLGZpZWxkSUQsdmFsKTsKICAgIH0KICAgIHZvaWQgU2V0RG91YmxlRmllbGQo am9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIGpk b3VibGUgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXREb3VibGVGaWVsZCh0aGlzLG9iaixm aWVsZElELHZhbCk7CiAgICB9CgogICAgam1ldGhvZElEIEdldFN0YXRpY01ldGhvZElEKGpjbGFz cyBjbGF6eiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpzaWcpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTdGF0aWNN ZXRob2RJRCh0aGlzLGNsYXp6LG5hbWUsc2lnKTsKICAgIH0KCiAgICBqb2JqZWN0IENhbGxTdGF0 aWNPYmplY3RNZXRob2QoamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAg IGpvYmplY3QgcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1l dGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxTdGF0aWNPYmplY3RNZXRo b2RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICAgICAgX19idWlsdGluX3ZhX2VuZChh cmdzKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgam9iamVjdCBDYWxsU3RhdGlj T2JqZWN0TWV0aG9kVihqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0 aW9ucy0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsK ICAgIH0KICAgIGpvYmplY3QgQ2FsbFN0YXRpY09iamVjdE1ldGhvZEEoamNsYXNzIGNsYXp6LCBq bWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAq YXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxTdGF0aWNPYmplY3RNZXRob2RB KHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamJvb2xlYW4gQ2FsbFN0YXRp Y0Jvb2xlYW5NZXRob2QoamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7 CiAgICAgICAgamJvb2xlYW4gcmVzdWx0OwogICAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQo KGFyZ3MpLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxTdGF0aWNC b29sZWFuTWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRp bl92YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpib29sZWFu IENhbGxTdGF0aWNCb29sZWFuTWV0aG9kVihqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsK ICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZFYodGhpcyxj bGF6eixtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpib29sZWFuIENhbGxTdGF0aWNCb29sZWFu TWV0aG9kQShqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVu Y3Rpb25zLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZEEodGhpcyxjbGF6eixtZXRob2RJRCxhcmdz KTsKICAgIH0KCiAgICBqYnl0ZSBDYWxsU3RhdGljQnl0ZU1ldGhvZChqY2xhc3MgY2xhenosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewog ICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqYnl0ZSByZXN1bHQ7CiAgICAgICAgX19idWls dGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aG9kSUQpOwogICAgICAgIHJlc3VsdCA9IGZ1bmN0 aW9ucy0+Q2FsbFN0YXRpY0J5dGVNZXRob2RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAg ICAgICAgX19idWlsdGluX3ZhX2VuZChhcmdzKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg fQogICAgamJ5dGUgQ2FsbFN0YXRpY0J5dGVNZXRob2RWKGpjbGFzcyBjbGF6eiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncykg ewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxTdGF0aWNCeXRlTWV0aG9kVih0aGlzLGNs YXp6LG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamJ5dGUgQ2FsbFN0YXRpY0J5dGVNZXRob2RB KGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQg bWV0aG9kSUQsIGp2YWx1ZSAqYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxT dGF0aWNCeXRlTWV0aG9kQSh0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgfQoKICAgIGpj aGFyIENhbGxTdGF0aWNDaGFyTWV0aG9kKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBh cmdzOwogICAgICAgIGpjaGFyIHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0 KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsU3RhdGlj Q2hhck1ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgICAgICBfX2J1aWx0aW5f dmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqY2hhciBDYWxs U3RhdGljQ2hhck1ldGhvZFYoamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0NoYXJNZXRob2RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJn cyk7CiAgICB9CiAgICBqY2hhciBDYWxsU3RhdGljQ2hhck1ldGhvZEEoamNsYXNzIGNsYXp6LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVl ICphcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0NoYXJNZXRob2RB KHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAganNob3J0IENhbGxTdGF0aWNT aG9ydE1ldGhvZChqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAg IGpzaG9ydCByZXN1bHQ7CiAgICAgICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0 aG9kSUQpOwogICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY1Nob3J0TWV0aG9k Vih0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJn cyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpzaG9ydCBDYWxsU3RhdGljU2hv cnRNZXRob2RWKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0 aW9ucy0+Q2FsbFN0YXRpY1Nob3J0TWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwog ICAgfQogICAganNob3J0IENhbGxTdGF0aWNTaG9ydE1ldGhvZEEoamNsYXNzIGNsYXp6LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUg KmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljU2hvcnRNZXRob2RB KHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamludCBDYWxsU3RhdGljSW50 TWV0aG9kKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9k SUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqaW50IHJl c3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAg ICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsU3RhdGljSW50TWV0aG9kVih0aGlzLGNsYXp6 LG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXJncyk7CiAgICAgICAg cmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGppbnQgQ2FsbFN0YXRpY0ludE1ldGhvZFYoamNsYXNz IGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQs IHZhX2xpc3QgYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxTdGF0aWNJbnRN ZXRob2RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqaW50IENhbGxTdGF0 aWNJbnRNZXRob2RBKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg am1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rp b25zLT5DYWxsU3RhdGljSW50TWV0aG9kQSh0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAg fQoKICAgIGpsb25nIENhbGxTdGF0aWNMb25nTWV0aG9kKGpjbGFzcyBjbGF6eiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAg dmFfbGlzdCBhcmdzOwogICAgICAgIGpsb25nIHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3Rk YXJnX3N0YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5D YWxsU3RhdGljTG9uZ01ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgICAgICBf X2J1aWx0aW5fdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBq bG9uZyBDYWxsU3RhdGljTG9uZ01ldGhvZFYoamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAg ICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0xvbmdNZXRob2RWKHRoaXMsY2xhenosbWV0 aG9kSUQsYXJncyk7CiAgICB9CiAgICBqbG9uZyBDYWxsU3RhdGljTG9uZ01ldGhvZEEoamNsYXNz IGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJ RCwganZhbHVlICphcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0xv bmdNZXRob2RBKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamZsb2F0IENh bGxTdGF0aWNGbG9hdE1ldGhvZChqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdz OwogICAgICAgIGpmbG9hdCByZXN1bHQ7CiAgICAgICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgo YXJncyksbWV0aG9kSUQpOwogICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0Zs b2F0TWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92 YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpmbG9hdCBDYWxs U3RhdGljRmxvYXRNZXRob2RWKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgcmV0 dXJuIGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0Zsb2F0TWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElE LGFyZ3MpOwogICAgfQogICAgamZsb2F0IENhbGxTdGF0aWNGbG9hdE1ldGhvZEEoamNsYXNzIGNs YXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElE LCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljRmxv YXRNZXRob2RBKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamRvdWJsZSBD YWxsU3RhdGljRG91YmxlTWV0aG9kKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3Qg YXJnczsKICAgICAgICBqZG91YmxlIHJlc3VsdDsKICAgICAgICBfX2J1aWx0aW5fc3RkYXJnX3N0 YXJ0KChhcmdzKSxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsU3Rh dGljRG91YmxlTWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVp bHRpbl92YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpkb3Vi bGUgQ2FsbFN0YXRpY0RvdWJsZU1ldGhvZFYoamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncykgewog ICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxTdGF0aWNEb3VibGVNZXRob2RWKHRoaXMsY2xh enosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqZG91YmxlIENhbGxTdGF0aWNEb3VibGVNZXRo b2RBKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1l dGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25z LT5DYWxsU3RhdGljRG91YmxlTWV0aG9kQSh0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAg fQoKICAgIHZvaWQgQ2FsbFN0YXRpY1ZvaWRNZXRob2QoamNsYXNzIGNscywgam1ldGhvZElEIG1l dGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAgX19idWlsdGluX3N0 ZGFyZ19zdGFydCgoYXJncyksbWV0aG9kSUQpOwogICAgICAgIGZ1bmN0aW9ucy0+Q2FsbFN0YXRp Y1ZvaWRNZXRob2RWKHRoaXMsY2xzLG1ldGhvZElELGFyZ3MpOwogICAgICAgIF9fYnVpbHRpbl92 YV9lbmQoYXJncyk7CiAgICB9CiAgICB2b2lkIENhbGxTdGF0aWNWb2lkTWV0aG9kVihqY2xhc3Mg Y2xzLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 YV9saXN0IGFyZ3MpIHsKICAgICAgICBmdW5jdGlvbnMtPkNhbGxTdGF0aWNWb2lkTWV0aG9kVih0 aGlzLGNscyxtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIHZvaWQgQ2FsbFN0YXRpY1ZvaWRNZXRo b2RBKGpjbGFzcyBjbHMsIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICBmdW5jdGlvbnMtPkNhbGxTdGF0aWNW b2lkTWV0aG9kQSh0aGlzLGNscyxtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqZmllbGRJRCBH ZXRTdGF0aWNGaWVsZElEKGpjbGFzcyBjbGF6eiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2lnKSB7CiAgICAgICAgcmV0dXJuIGZ1 bmN0aW9ucy0+R2V0U3RhdGljRmllbGRJRCh0aGlzLGNsYXp6LG5hbWUsc2lnKTsKICAgIH0KICAg IGpvYmplY3QgR2V0U3RhdGljT2JqZWN0RmllbGQoamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVs ZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0U3RhdGljT2JqZWN0RmllbGQodGhp cyxjbGF6eixmaWVsZElEKTsKICAgIH0KICAgIGpib29sZWFuIEdldFN0YXRpY0Jvb2xlYW5GaWVs ZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rp b25zLT5HZXRTdGF0aWNCb29sZWFuRmllbGQodGhpcyxjbGF6eixmaWVsZElEKTsKICAgIH0KICAg IGpieXRlIEdldFN0YXRpY0J5dGVGaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQp IHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTdGF0aWNCeXRlRmllbGQodGhpcyxjbGF6 eixmaWVsZElEKTsKICAgIH0KICAgIGpjaGFyIEdldFN0YXRpY0NoYXJGaWVsZChqY2xhc3MgY2xh enosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTdGF0 aWNDaGFyRmllbGQodGhpcyxjbGF6eixmaWVsZElEKTsKICAgIH0KICAgIGpzaG9ydCBHZXRTdGF0 aWNTaG9ydEZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCkgewogICAgICAgIHJl dHVybiBmdW5jdGlvbnMtPkdldFN0YXRpY1Nob3J0RmllbGQodGhpcyxjbGF6eixmaWVsZElEKTsK ICAgIH0KICAgIGppbnQgR2V0U3RhdGljSW50RmllbGQoamNsYXNzIGNsYXp6LCBqZmllbGRJRCBm aWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0U3RhdGljSW50RmllbGQodGhp cyxjbGF6eixmaWVsZElEKTsKICAgIH0KICAgIGpsb25nIEdldFN0YXRpY0xvbmdGaWVsZChqY2xh c3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5H ZXRTdGF0aWNMb25nRmllbGQodGhpcyxjbGF6eixmaWVsZElEKTsKICAgIH0KICAgIGpmbG9hdCBH ZXRTdGF0aWNGbG9hdEZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCkgewogICAg ICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFN0YXRpY0Zsb2F0RmllbGQodGhpcyxjbGF6eixmaWVs ZElEKTsKICAgIH0KICAgIGpkb3VibGUgR2V0U3RhdGljRG91YmxlRmllbGQoamNsYXNzIGNsYXp6 LCBqZmllbGRJRCBmaWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0U3RhdGlj RG91YmxlRmllbGQodGhpcyxjbGF6eixmaWVsZElEKTsKICAgIH0KCiAgICB2b2lkIFNldFN0YXRp Y09iamVjdEZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAgICAg ICAgICAgICAgICAgam9iamVjdCB2YWx1ZSkgewogICAgICBmdW5jdGlvbnMtPlNldFN0YXRpY09i amVjdEZpZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0 YXRpY0Jvb2xlYW5GaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAg ICAgICAgICAgICAgICAgIGpib29sZWFuIHZhbHVlKSB7CiAgICAgIGZ1bmN0aW9ucy0+U2V0U3Rh dGljQm9vbGVhbkZpZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lk IFNldFN0YXRpY0J5dGVGaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAg ICAgICAgICAgICAgICAgICAgIGpieXRlIHZhbHVlKSB7CiAgICAgIGZ1bmN0aW9ucy0+U2V0U3Rh dGljQnl0ZUZpZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNl dFN0YXRpY0NoYXJGaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAg ICAgICAgICAgICAgICAgIGpjaGFyIHZhbHVlKSB7CiAgICAgIGZ1bmN0aW9ucy0+U2V0U3RhdGlj Q2hhckZpZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0 YXRpY1Nob3J0RmllbGQoamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELAogICAgICAgICAg ICAgICAgICAgICAgICBqc2hvcnQgdmFsdWUpIHsKICAgICAgZnVuY3Rpb25zLT5TZXRTdGF0aWNT aG9ydEZpZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0 YXRpY0ludEZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAgICAg ICAgICAgICAgICAgamludCB2YWx1ZSkgewogICAgICBmdW5jdGlvbnMtPlNldFN0YXRpY0ludEZp ZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0YXRpY0xv bmdGaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAgICAg ICAgICAgIGpsb25nIHZhbHVlKSB7CiAgICAgIGZ1bmN0aW9ucy0+U2V0U3RhdGljTG9uZ0ZpZWxk KHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0YXRpY0Zsb2F0 RmllbGQoamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELAogICAgICAgICAgICAgICAgICAg ICAgICBqZmxvYXQgdmFsdWUpIHsKICAgICAgZnVuY3Rpb25zLT5TZXRTdGF0aWNGbG9hdEZpZWxk KHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CiAgICB2b2lkIFNldFN0YXRpY0RvdWJs ZUZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAgICAgICAgICAg ICAgICAgamRvdWJsZSB2YWx1ZSkgewogICAgICBmdW5jdGlvbnMtPlNldFN0YXRpY0RvdWJsZUZp ZWxkKHRoaXMsY2xhenosZmllbGRJRCx2YWx1ZSk7CiAgICB9CgogICAganN0cmluZyBOZXdTdHJp bmcoY29uc3QgamNoYXIgKnVuaWNvZGUsIGpzaXplIGxlbikgewogICAgICAgIHJldHVybiBmdW5j dGlvbnMtPk5ld1N0cmluZyh0aGlzLHVuaWNvZGUsbGVuKTsKICAgIH0KICAgIGpzaXplIEdldFN0 cmluZ0xlbmd0aChqc3RyaW5nIHN0cikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFN0 cmluZ0xlbmd0aCh0aGlzLHN0cik7CiAgICB9CiAgICBjb25zdCBqY2hhciAqR2V0U3RyaW5nQ2hh cnMoanN0cmluZyBzdHIsIGpib29sZWFuICppc0NvcHkpIHsKICAgICAgICByZXR1cm4gZnVuY3Rp b25zLT5HZXRTdHJpbmdDaGFycyh0aGlzLHN0cixpc0NvcHkpOwogICAgfQogICAgdm9pZCBSZWxl YXNlU3RyaW5nQ2hhcnMoanN0cmluZyBzdHIsIGNvbnN0IGpjaGFyICpjaGFycykgewogICAgICAg IGZ1bmN0aW9ucy0+UmVsZWFzZVN0cmluZ0NoYXJzKHRoaXMsc3RyLGNoYXJzKTsKICAgIH0KCiAg ICBqc3RyaW5nIE5ld1N0cmluZ1VURihjb25zdCBjaGFyICp1dGYpIHsKICAgICAgICByZXR1cm4g ZnVuY3Rpb25zLT5OZXdTdHJpbmdVVEYodGhpcyx1dGYpOwogICAgfQogICAganNpemUgR2V0U3Ry aW5nVVRGTGVuZ3RoKGpzdHJpbmcgc3RyKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0 U3RyaW5nVVRGTGVuZ3RoKHRoaXMsc3RyKTsKICAgIH0KICAgIGNvbnN0IGNoYXIqIEdldFN0cmlu Z1VURkNoYXJzKGpzdHJpbmcgc3RyLCBqYm9vbGVhbiAqaXNDb3B5KSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+R2V0U3RyaW5nVVRGQ2hhcnModGhpcyxzdHIsaXNDb3B5KTsKICAgIH0KICAg IHZvaWQgUmVsZWFzZVN0cmluZ1VURkNoYXJzKGpzdHJpbmcgc3RyLCBjb25zdCBjaGFyKiBjaGFy cykgewogICAgICAgIGZ1bmN0aW9ucy0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKHRoaXMsc3RyLGNo YXJzKTsKICAgIH0KCiAgICBqc2l6ZSBHZXRBcnJheUxlbmd0aChqYXJyYXkgYXJyYXkpIHsKICAg ICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRBcnJheUxlbmd0aCh0aGlzLGFycmF5KTsKICAgIH0K CiAgICBqb2JqZWN0QXJyYXkgTmV3T2JqZWN0QXJyYXkoanNpemUgbGVuLCBqY2xhc3MgY2xhenos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBpbml0KSB7CiAgICAgICAg cmV0dXJuIGZ1bmN0aW9ucy0+TmV3T2JqZWN0QXJyYXkodGhpcyxsZW4sY2xhenosaW5pdCk7CiAg ICB9CiAgICBqb2JqZWN0IEdldE9iamVjdEFycmF5RWxlbWVudChqb2JqZWN0QXJyYXkgYXJyYXks IGpzaXplIGluZGV4KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0T2JqZWN0QXJyYXlF bGVtZW50KHRoaXMsYXJyYXksaW5kZXgpOwogICAgfQogICAgdm9pZCBTZXRPYmplY3RBcnJheUVs ZW1lbnQoam9iamVjdEFycmF5IGFycmF5LCBqc2l6ZSBpbmRleCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpvYmplY3QgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXRPYmplY3RB cnJheUVsZW1lbnQodGhpcyxhcnJheSxpbmRleCx2YWwpOwogICAgfQoKICAgIGpib29sZWFuQXJy YXkgTmV3Qm9vbGVhbkFycmF5KGpzaXplIGxlbikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt Pk5ld0Jvb2xlYW5BcnJheSh0aGlzLGxlbik7CiAgICB9CiAgICBqYnl0ZUFycmF5IE5ld0J5dGVB cnJheShqc2l6ZSBsZW4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5OZXdCeXRlQXJyYXko dGhpcyxsZW4pOwogICAgfQogICAgamNoYXJBcnJheSBOZXdDaGFyQXJyYXkoanNpemUgbGVuKSB7 CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TmV3Q2hhckFycmF5KHRoaXMsbGVuKTsKICAgIH0K ICAgIGpzaG9ydEFycmF5IE5ld1Nob3J0QXJyYXkoanNpemUgbGVuKSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+TmV3U2hvcnRBcnJheSh0aGlzLGxlbik7CiAgICB9CiAgICBqaW50QXJyYXkg TmV3SW50QXJyYXkoanNpemUgbGVuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TmV3SW50 QXJyYXkodGhpcyxsZW4pOwogICAgfQogICAgamxvbmdBcnJheSBOZXdMb25nQXJyYXkoanNpemUg bGVuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TmV3TG9uZ0FycmF5KHRoaXMsbGVuKTsK ICAgIH0KICAgIGpmbG9hdEFycmF5IE5ld0Zsb2F0QXJyYXkoanNpemUgbGVuKSB7CiAgICAgICAg cmV0dXJuIGZ1bmN0aW9ucy0+TmV3RmxvYXRBcnJheSh0aGlzLGxlbik7CiAgICB9CiAgICBqZG91 YmxlQXJyYXkgTmV3RG91YmxlQXJyYXkoanNpemUgbGVuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0 aW9ucy0+TmV3RG91YmxlQXJyYXkodGhpcyxsZW4pOwogICAgfQoKICAgIGpib29sZWFuICogR2V0 Qm9vbGVhbkFycmF5RWxlbWVudHMoamJvb2xlYW5BcnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29w eSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldEJvb2xlYW5BcnJheUVsZW1lbnRzKHRo aXMsYXJyYXksaXNDb3B5KTsKICAgIH0KICAgIGpieXRlICogR2V0Qnl0ZUFycmF5RWxlbWVudHMo amJ5dGVBcnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29weSkgewogICAgICAgIHJldHVybiBmdW5j dGlvbnMtPkdldEJ5dGVBcnJheUVsZW1lbnRzKHRoaXMsYXJyYXksaXNDb3B5KTsKICAgIH0KICAg IGpjaGFyICogR2V0Q2hhckFycmF5RWxlbWVudHMoamNoYXJBcnJheSBhcnJheSwgamJvb2xlYW4g KmlzQ29weSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldENoYXJBcnJheUVsZW1lbnRz KHRoaXMsYXJyYXksaXNDb3B5KTsKICAgIH0KICAgIGpzaG9ydCAqIEdldFNob3J0QXJyYXlFbGVt ZW50cyhqc2hvcnRBcnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29weSkgewogICAgICAgIHJldHVy biBmdW5jdGlvbnMtPkdldFNob3J0QXJyYXlFbGVtZW50cyh0aGlzLGFycmF5LGlzQ29weSk7CiAg ICB9CiAgICBqaW50ICogR2V0SW50QXJyYXlFbGVtZW50cyhqaW50QXJyYXkgYXJyYXksIGpib29s ZWFuICppc0NvcHkpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRJbnRBcnJheUVsZW1l bnRzKHRoaXMsYXJyYXksaXNDb3B5KTsKICAgIH0KICAgIGpsb25nICogR2V0TG9uZ0FycmF5RWxl bWVudHMoamxvbmdBcnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29weSkgewogICAgICAgIHJldHVy biBmdW5jdGlvbnMtPkdldExvbmdBcnJheUVsZW1lbnRzKHRoaXMsYXJyYXksaXNDb3B5KTsKICAg IH0KICAgIGpmbG9hdCAqIEdldEZsb2F0QXJyYXlFbGVtZW50cyhqZmxvYXRBcnJheSBhcnJheSwg amJvb2xlYW4gKmlzQ29weSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldEZsb2F0QXJy YXlFbGVtZW50cyh0aGlzLGFycmF5LGlzQ29weSk7CiAgICB9CiAgICBqZG91YmxlICogR2V0RG91 YmxlQXJyYXlFbGVtZW50cyhqZG91YmxlQXJyYXkgYXJyYXksIGpib29sZWFuICppc0NvcHkpIHsK ICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXREb3VibGVBcnJheUVsZW1lbnRzKHRoaXMsYXJy YXksaXNDb3B5KTsKICAgIH0KCiAgICB2b2lkIFJlbGVhc2VCb29sZWFuQXJyYXlFbGVtZW50cyhq Ym9vbGVhbkFycmF5IGFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg amJvb2xlYW4gKmVsZW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlu dCBtb2RlKSB7CiAgICAgICAgZnVuY3Rpb25zLT5SZWxlYXNlQm9vbGVhbkFycmF5RWxlbWVudHMo dGhpcyxhcnJheSxlbGVtcyxtb2RlKTsKICAgIH0KICAgIHZvaWQgUmVsZWFzZUJ5dGVBcnJheUVs ZW1lbnRzKGpieXRlQXJyYXkgYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqYnl0ZSAqZWxlbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IG1v ZGUpIHsKICAgICAgICBmdW5jdGlvbnMtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyh0aGlzLGFy cmF5LGVsZW1zLG1vZGUpOwogICAgfQogICAgdm9pZCBSZWxlYXNlQ2hhckFycmF5RWxlbWVudHMo amNoYXJBcnJheSBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpjaGFy ICplbGVtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgbW9kZSkgewog ICAgICAgIGZ1bmN0aW9ucy0+UmVsZWFzZUNoYXJBcnJheUVsZW1lbnRzKHRoaXMsYXJyYXksZWxl bXMsbW9kZSk7CiAgICB9CiAgICB2b2lkIFJlbGVhc2VTaG9ydEFycmF5RWxlbWVudHMoanNob3J0 QXJyYXkgYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNob3J0ICpl bGVtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IG1vZGUpIHsKICAg ICAgICBmdW5jdGlvbnMtPlJlbGVhc2VTaG9ydEFycmF5RWxlbWVudHModGhpcyxhcnJheSxlbGVt cyxtb2RlKTsKICAgIH0KICAgIHZvaWQgUmVsZWFzZUludEFycmF5RWxlbWVudHMoamludEFycmF5 IGFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50ICplbGVtcywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBtb2RlKSB7CiAgICAgICAgZnVuY3Rp b25zLT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyh0aGlzLGFycmF5LGVsZW1zLG1vZGUpOwogICAg fQogICAgdm9pZCBSZWxlYXNlTG9uZ0FycmF5RWxlbWVudHMoamxvbmdBcnJheSBhcnJheSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nICplbGVtcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGppbnQgbW9kZSkgewogICAgICAgIGZ1bmN0aW9ucy0+UmVs ZWFzZUxvbmdBcnJheUVsZW1lbnRzKHRoaXMsYXJyYXksZWxlbXMsbW9kZSk7CiAgICB9CiAgICB2 b2lkIFJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMoamZsb2F0QXJyYXkgYXJyYXksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgamZsb2F0ICplbGVtcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqaW50IG1vZGUpIHsKICAgICAgICBmdW5jdGlvbnMtPlJlbGVh c2VGbG9hdEFycmF5RWxlbWVudHModGhpcyxhcnJheSxlbGVtcyxtb2RlKTsKICAgIH0KICAgIHZv aWQgUmVsZWFzZURvdWJsZUFycmF5RWxlbWVudHMoamRvdWJsZUFycmF5IGFycmF5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZG91YmxlICplbGVtcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgamludCBtb2RlKSB7CiAgICAgICAgZnVuY3Rpb25zLT5S ZWxlYXNlRG91YmxlQXJyYXlFbGVtZW50cyh0aGlzLGFycmF5LGVsZW1zLG1vZGUpOwogICAgfQoK ICAgIHZvaWQgR2V0Qm9vbGVhbkFycmF5UmVnaW9uKGpib29sZWFuQXJyYXkgYXJyYXksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSBzdGFydCwganNpemUgbGVuLCBqYm9vbGVh biAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5HZXRCb29sZWFuQXJyYXlSZWdpb24odGhpcyxh cnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgR2V0Qnl0ZUFycmF5UmVnaW9uKGpi eXRlQXJyYXkgYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSBzdGFydCwg anNpemUgbGVuLCBqYnl0ZSAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5HZXRCeXRlQXJyYXlS ZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgR2V0Q2hhckFy cmF5UmVnaW9uKGpjaGFyQXJyYXkgYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBq c2l6ZSBzdGFydCwganNpemUgbGVuLCBqY2hhciAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5H ZXRDaGFyQXJyYXlSZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZv aWQgR2V0U2hvcnRBcnJheVJlZ2lvbihqc2hvcnRBcnJheSBhcnJheSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBqc2l6ZSBzdGFydCwganNpemUgbGVuLCBqc2hvcnQgKmJ1ZikgewogICAg ICAgIGZ1bmN0aW9ucy0+R2V0U2hvcnRBcnJheVJlZ2lvbih0aGlzLGFycmF5LHN0YXJ0LGxlbixi dWYpOwogICAgfQogICAgdm9pZCBHZXRJbnRBcnJheVJlZ2lvbihqaW50QXJyYXkgYXJyYXksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGppbnQgKmJ1 ZikgewogICAgICAgIGZ1bmN0aW9ucy0+R2V0SW50QXJyYXlSZWdpb24odGhpcyxhcnJheSxzdGFy dCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgR2V0TG9uZ0FycmF5UmVnaW9uKGpsb25nQXJyYXkg YXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSBzdGFydCwganNpemUgbGVu LCBqbG9uZyAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5HZXRMb25nQXJyYXlSZWdpb24odGhp cyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgR2V0RmxvYXRBcnJheVJlZ2lv bihqZmxvYXRBcnJheSBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSBz dGFydCwganNpemUgbGVuLCBqZmxvYXQgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+R2V0Rmxv YXRBcnJheVJlZ2lvbih0aGlzLGFycmF5LHN0YXJ0LGxlbixidWYpOwogICAgfQogICAgdm9pZCBH ZXREb3VibGVBcnJheVJlZ2lvbihqZG91YmxlQXJyYXkgYXJyYXksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpkb3VibGUgKmJ1ZikgewogICAg ICAgIGZ1bmN0aW9ucy0+R2V0RG91YmxlQXJyYXlSZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4s YnVmKTsKICAgIH0KCiAgICB2b2lkIFNldEJvb2xlYW5BcnJheVJlZ2lvbihqYm9vbGVhbkFycmF5 IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgamJvb2xlYW4gKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+U2V0Qm9vbGVhbkFycmF5 UmVnaW9uKHRoaXMsYXJyYXksc3RhcnQsbGVuLGJ1Zik7CiAgICB9CiAgICB2b2lkIFNldEJ5dGVB cnJheVJlZ2lvbihqYnl0ZUFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgamJ5dGUgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+ U2V0Qnl0ZUFycmF5UmVnaW9uKHRoaXMsYXJyYXksc3RhcnQsbGVuLGJ1Zik7CiAgICB9CiAgICB2 b2lkIFNldENoYXJBcnJheVJlZ2lvbihqY2hhckFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNp emUgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgamNoYXIgKmJ1ZikgewogICAgICAg IGZ1bmN0aW9ucy0+U2V0Q2hhckFycmF5UmVnaW9uKHRoaXMsYXJyYXksc3RhcnQsbGVuLGJ1Zik7 CiAgICB9CiAgICB2b2lkIFNldFNob3J0QXJyYXlSZWdpb24oanNob3J0QXJyYXkgYXJyYXksIGpz aXplIHN0YXJ0LCBqc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNob3J0 ICpidWYpIHsKICAgICAgICBmdW5jdGlvbnMtPlNldFNob3J0QXJyYXlSZWdpb24odGhpcyxhcnJh eSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgU2V0SW50QXJyYXlSZWdpb24oamludEFy cmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBqaW50ICpidWYpIHsKICAgICAgICBmdW5jdGlvbnMtPlNldEludEFycmF5UmVnaW9uKHRo aXMsYXJyYXksc3RhcnQsbGVuLGJ1Zik7CiAgICB9CiAgICB2b2lkIFNldExvbmdBcnJheVJlZ2lv bihqbG9uZ0FycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgamxvbmcgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+U2V0TG9uZ0Fy cmF5UmVnaW9uKHRoaXMsYXJyYXksc3RhcnQsbGVuLGJ1Zik7CiAgICB9CiAgICB2b2lkIFNldEZs b2F0QXJyYXlSZWdpb24oamZsb2F0QXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZsb2F0ICpidWYpIHsKICAgICAgICBmdW5j dGlvbnMtPlNldEZsb2F0QXJyYXlSZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAg IH0KICAgIHZvaWQgU2V0RG91YmxlQXJyYXlSZWdpb24oamRvdWJsZUFycmF5IGFycmF5LCBqc2l6 ZSBzdGFydCwganNpemUgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZG91Ymxl ICpidWYpIHsKICAgICAgICBmdW5jdGlvbnMtPlNldERvdWJsZUFycmF5UmVnaW9uKHRoaXMsYXJy YXksc3RhcnQsbGVuLGJ1Zik7CiAgICB9CgogICAgamludCBSZWdpc3Rlck5hdGl2ZXMoamNsYXNz IGNsYXp6LCBjb25zdCBKTklOYXRpdmVNZXRob2QgKm1ldGhvZHMsCiAgICAgICAgICAgICAgICAg ICAgICAgICBqaW50IG5NZXRob2RzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+UmVnaXN0 ZXJOYXRpdmVzKHRoaXMsY2xhenosbWV0aG9kcyxuTWV0aG9kcyk7CiAgICB9CiAgICBqaW50IFVu cmVnaXN0ZXJOYXRpdmVzKGpjbGFzcyBjbGF6eikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt PlVucmVnaXN0ZXJOYXRpdmVzKHRoaXMsY2xhenopOwogICAgfQoKICAgIGppbnQgTW9uaXRvckVu dGVyKGpvYmplY3Qgb2JqKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TW9uaXRvckVudGVy KHRoaXMsb2JqKTsKICAgIH0KICAgIGppbnQgTW9uaXRvckV4aXQoam9iamVjdCBvYmopIHsKICAg ICAgICByZXR1cm4gZnVuY3Rpb25zLT5Nb25pdG9yRXhpdCh0aGlzLG9iaik7CiAgICB9CgogICAg amludCBHZXRKYXZhVk0oSmF2YVZNICoqdm0pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5H ZXRKYXZhVk0odGhpcyx2bSk7CiAgICB9CgoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgSkRLMV8xSW5p dEFyZ3MgewogICAgamludCB2ZXJzaW9uOwoKICAgIGNoYXIgKipwcm9wZXJ0aWVzOwogICAgamlu dCBjaGVja1NvdXJjZTsKICAgIGppbnQgbmF0aXZlU3RhY2tTaXplOwogICAgamludCBqYXZhU3Rh Y2tTaXplOwogICAgamludCBtaW5IZWFwU2l6ZTsKICAgIGppbnQgbWF4SGVhcFNpemU7CiAgICBq aW50IHZlcmlmeU1vZGU7CiAgICBjaGFyICpjbGFzc3BhdGg7CgogICAgamludCAoICp2ZnByaW50 ZikoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKICAgIHZvaWQg KCAqZXhpdCkoamludCBjb2RlKTsKICAgIHZvaWQgKCAqYWJvcnQpKCk7CgogICAgamludCBlbmFi bGVDbGFzc0dDOwogICAgamludCBlbmFibGVWZXJib3NlR0M7CiAgICBqaW50IGRpc2FibGVBc3lu Y0dDOwogICAgamludCB2ZXJib3NlOwogICAgamJvb2xlYW4gZGVidWdnaW5nOwogICAgamludCBk ZWJ1Z1BvcnQ7Cn0gSkRLMV8xSW5pdEFyZ3M7Cgp0eXBlZGVmIHN0cnVjdCBKREsxXzFBdHRhY2hB cmdzIHsKICAgIHZvaWQgKiBfX3BhZGRpbmc7Cn0gSkRLMV8xQXR0YWNoQXJnczsKCgoKc3RydWN0 IEpOSUludm9rZUludGVyZmFjZV8gewogICAgdm9pZCAqcmVzZXJ2ZWQwOwogICAgdm9pZCAqcmVz ZXJ2ZWQxOwogICAgdm9pZCAqcmVzZXJ2ZWQyOwoKICAgIGppbnQgKCAqRGVzdHJveUphdmFWTSko SmF2YVZNICp2bSk7CgogICAgamludCAoICpBdHRhY2hDdXJyZW50VGhyZWFkKQogICAgICAoSmF2 YVZNICp2bSwgSk5JRW52ICoqcGVudiwgdm9pZCAqYXJncyk7CgogICAgamludCAoICpEZXRhY2hD dXJyZW50VGhyZWFkKShKYXZhVk0gKnZtKTsKfTsKCnN0cnVjdCBKYXZhVk1fIHsKICAgIGNvbnN0 IHN0cnVjdCBKTklJbnZva2VJbnRlcmZhY2VfICpmdW5jdGlvbnM7CiAgICB2b2lkICpyZXNlcnZl ZDA7CiAgICB2b2lkICpyZXNlcnZlZDE7CiAgICB2b2lkICpyZXNlcnZlZDI7CgoKICAgIGppbnQg RGVzdHJveUphdmFWTSgpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5EZXN0cm95SmF2YVZN KHRoaXMpOwogICAgfQogICAgamludCBBdHRhY2hDdXJyZW50VGhyZWFkKEpOSUVudiAqKnBlbnYs IHZvaWQgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5BdHRhY2hDdXJyZW50VGhy ZWFkKHRoaXMsIHBlbnYsIGFyZ3MpOwogICAgfQogICAgamludCBEZXRhY2hDdXJyZW50VGhyZWFk KCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkRldGFjaEN1cnJlbnRUaHJlYWQodGhpcyk7 CiAgICB9CgoKfTsKCnZvaWQgSk5JX0dldERlZmF1bHRKYXZhVk1Jbml0QXJncyh2b2lkICopOwoK amludCBKTklfQ3JlYXRlSmF2YVZNKEphdmFWTSAqKiwgSk5JRW52ICoqLCB2b2lkICopOwoKamlu dCBKTklfR2V0Q3JlYXRlZEphdmFWTXMoSmF2YVZNICoqLCBqc2l6ZSwganNpemUgKik7CmpyZWYg Sk5JX01ha2VMb2NhbFJlZihKTklFbnYgKnBKTklFbnYsIHZvaWQgKnBIT2JqZWN0KTsKCgp9CiMg MTkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9vamkvbnNJSlZNTWFuYWdlci5oIiAyCiMgNDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9vamkvbnNJSlZNTWFuYWdlci5oIgpjbGFzcyBuc0lKVk1QbHVn aW47CgpjbGFzcyBuc0lTZWN1cmVFbnY7CgpjbGFzcyBuc0lQcmluY2lwYWw7CiMgNTUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9vamkvbnNJSlZNTWFuYWdlci5oIgpjbGFzcyBuc0lKVk1NYW5hZ2Vy IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGExZTVlZDUwLCAweGFhNGEsIDB4 MTFkMSwgeyAweDg1LCAweGIyLCAweDAwLCAweDgwLCAweDVmLCAweDBlLCAweDRkLCAweGZlIH19 OyByZXR1cm4gaWlkO30KCgogICAgICAgIHN0YXRpYyBjb25zdCBuc0lEJiBHZXRDSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUQgY2lkID0geyAweDM4ZTdlZjEwLCAweDU4ZGYsIDB4MTFkMiwgezB4ODEs IDB4NjQsIDB4MDAsIDB4NjAsIDB4MDgsIDB4MTEsIDB4OWQsIDB4N2F9IH07IHJldHVybiBjaWQ7 fQoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVByb3h5Sk5JKG5zSVNlY3VyZUVudiAq c2VjdXJlRW52LCBKTklFbnYgKiAqb3V0UHJveHlFbnYpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFByb3h5Sk5JKEpOSUVudiAqICpvdXRQcm94eUVudikgPSAwOwoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBTaG93SmF2YUNvbnNvbGUodm9pZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBJc0FsbFBlcm1pc3Npb25HcmFudGVkKGNvbnN0IGNoYXIgKmxhc3RGaW5nZXJwcmlu dCwgY29uc3QgY2hhciAqbGFzdENvbW1vbk5hbWUsIGNvbnN0IGNoYXIgKnJvb3RGaW5nZXJwcmlu dCwgY29uc3QgY2hhciAqcm9vdENvbW1vbk5hbWUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJc0FwcGxldFRydXN0ZWQoY29uc3QgY2hhciAqYVJTQUJ1Ziwg UFJVaW50MzIgYVJTQUJ1ZkxlbiwgY29uc3QgY2hhciAqYVBsYWludGV4dCwgUFJVaW50MzIgYVBs YWludGV4dExlbiwgUFJCb29sICppc1RydXN0ZWQsIG5zSVByaW5jaXBhbCAqKl9yZXR2YWwpID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SmF2YUVuYWJsZWQoUFJCb29sICphSmF2YUVu YWJsZWQpID0gMDsKCn07CiMgMTI3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgoKCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL29qaS9uc0lMaXZlQ29ubmVjdE1hbmFnZXIuaCIgMQojIDYxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvb2ppL25zSUxpdmVDb25uZWN0TWFuYWdlci5oIgpzdHJ1Y3Qg SlNSdW50aW1lOwpzdHJ1Y3QgSlNDb250ZXh0OwpzdHJ1Y3QgSlNPYmplY3Q7CgpjbGFzcyBuc0lM aXZlQ29ubmVjdE1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgICAgICAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsg MHhkMjBjODA4MSwgMHhjYmNiLCAweDExZDIsIHsgMHhhNSwgMHhhMCwgMHhlOCwgMHg4NCwgMHhh ZSwgMHhkOSwgMHhjOSwgMHhmYyB9IH07IHJldHVybiBpaWQ7fQoKCgoKICAgICAgICB2aXJ0dWFs IG5zcmVzdWx0CiAgICBTdGFydHVwTGl2ZUNvbm5lY3QoSlNSdW50aW1lKiBydW50aW1lLCBQUkJv b2wmIG91dFN0YXJ0ZWQpID0gMDsKCgoKCiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdAogICAgU2h1 dGRvd25MaXZlQ29ubmVjdChKU1J1bnRpbWUqIHJ1bnRpbWUsIFBSQm9vbCYgb3V0U2h1dGRvd24p ID0gMDsKCgoKCiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdAogICAgSXNMaXZlQ29ubmVjdEVuYWJs ZWQoUFJCb29sJiBvdXRFbmFibGVkKSA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQK ICAgIEluaXRMaXZlQ29ubmVjdENsYXNzZXMoSlNDb250ZXh0KiBjb250ZXh0LCBKU09iamVjdCog Z2xvYmFsT2JqZWN0KSA9IDA7CgoKCgogICAgIHZpcnR1YWwgbnNyZXN1bHQKICAgICBXcmFwSmF2 YU9iamVjdChKU0NvbnRleHQqIGNvbnRleHQsIGpvYmplY3QgamF2YU9iamVjdCwgSlNPYmplY3Qq ICpvdXRKU09iamVjdCkgPSAwOwp9OwojIDEzMiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL29qaS9uc0lKVk1QbHVnaW5JbnN0YW5jZS5oIiAxCiMgMjYg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9vamkvbnNJSlZNUGx1Z2luSW5zdGFuY2UuaCIKY2xhc3Mg bnNJSlZNUGx1Z2luSW5zdGFuY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTBjMDU3ZDAsIDB4MDFjMSwgMHgxMWQyLCB7IDB4ODEsIDB4NWIsIDB4MDAsIDB4NjAsIDB4MDgs IDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRKYXZhT2JqZWN0KGpvYmplY3QgKnJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRUZXh0KGNvbnN0IGNoYXIgKiogcmVzdWx0KSA9IDA7Cgp9OwojIDEzMyAibnNET01DbGFzc0lu Zm8uY3BwIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxPcHRp b25FbGVtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1M T3B0aW9uRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MT3B0aW9uRWxlbWVudCA6IHB1YmxpYyBu c0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA5MiwgMHgxNWIzLCAweDExZDIs IHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0 dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvcm0obnNJRE9NSFRNTEZvcm1FbGVt ZW50ICogKmFGb3JtKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRTZWxlY3Rl ZChQUkJvb2wgKmFEZWZhdWx0U2VsZWN0ZWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERl ZmF1bHRTZWxlY3RlZChQUkJvb2wgYURlZmF1bHRTZWxlY3RlZCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRUZXh0KG5zQVN0cmluZyAmIGFUZXh0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGFUZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldEluZGV4KFBSSW50MzIgKmFJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXREaXNhYmxlZChQUkJvb2wgKmFEaXNhYmxlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 RGlzYWJsZWQoUFJCb29sIGFEaXNhYmxlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRM YWJlbChuc0FTdHJpbmcgJiBhTGFiZWwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExhYmVs KGNvbnN0IG5zQVN0cmluZyAmIGFMYWJlbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT ZWxlY3RlZChQUkJvb2wgKmFTZWxlY3RlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2Vs ZWN0ZWQoUFJCb29sIGFTZWxlY3RlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1 ZShuc0FTdHJpbmcgJiBhVmFsdWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZhbHVlKGNv bnN0IG5zQVN0cmluZyAmIGFWYWx1ZSkgPSAwOwoKfTsKIyAxMzYgIm5zRE9NQ2xhc3NJbmZvLmNw cCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNIVE1MT3B0aW9uQ29s bGVjdG4uaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTE9w dGlvbkNvbGxlY3RuLmgiCmNsYXNzIG5zSURPTUhUTUxPcHRpb25FbGVtZW50OwojIDI3ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTE9wdGlvbkNvbGxlY3RuLmgiCmNsYXNz IG5zSURPTU5TSFRNTE9wdGlvbkNvbGxlY3Rpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4NDA5YmJmMTQsIDB4MWRkMiwgMHgxMWIyLCB7IDB4OTEsIDB4ZGUsIDB4OGQsIDB4 NjcsIDB4MmQsIDB4NDAsIDB4NjIsIDB4NzYgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRMZW5ndGgoUFJVaW50MzIgKmFMZW5ndGgpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldExlbmd0aChQUlVpbnQzMiBhTGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFNlbGVjdGVkSW5kZXgoUFJJbnQzMiAqYVNlbGVjdGVkSW5kZXgpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFNlbGVjdGVkSW5kZXgoUFJJbnQzMiBhU2VsZWN0ZWRJbmRleCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPcHRpb24oUFJJbnQzMiBpbmRleCwgbnNJRE9NSFRNTE9w dGlvbkVsZW1lbnQgKm9wdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGQobnNJRE9N SFRNTE9wdGlvbkVsZW1lbnQgKm9wdGlvbikgPSAwOwoKfTsKIyAxMzcgIm5zRE9NQ2xhc3NJbmZv LmNwcCIgMgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudExp c3QuaCIgMQojIDU0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50TGlz dC5oIgpjbGFzcyBuc0lDb250ZW50TGlzdCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoK CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9 IHsgMHhkNzJjYjQwMCwgMHg0YjMzLCAweDExZDUsIHsgMHhhMCwgMHg0MSwgMHgwLCAweDEwLCAw eGE0LCAweGVmLCAweDQ4LCAweGM5IH0gfTsgcmV0dXJuIGlpZDt9CgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0UGFyZW50T2JqZWN0KG5zSVN1cHBvcnRzKiogYVBhcmVudE9iamVjdCkgPSAwOwoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJVaW50MzIqIGFMZW5ndGgsIFBSQm9v bCBhRG9GbHVzaCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgYUluZGV4 LCBuc0lET01Ob2RlKiogYVJldHVybiwKICAgICAgICAgICAgICAgICAgUFJCb29sIGFEb0ZsdXNo KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgTmFtZWRJdGVtKGNvbnN0IG5zQVN0cmluZyYgYU5h bWUsIG5zSURPTU5vZGUqKiBhUmV0dXJuLAogICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBh RG9GbHVzaCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEluZGV4T2YobnNJQ29udGVudCAqYUNv bnRlbnQsIFBSSW50MzImIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEb0Zs dXNoKSA9IDA7Cn07CiMgMTQwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUV2ZW50TGlzdGVuZXJNYW5hZ2VyLmgiIDEKIyA0NiAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRXZlbnRMaXN0ZW5lck1hbmFnZXIuaCIK Y2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CmNsYXNzIG5z SVNjcmlwdENvbnRleHQ7CmNsYXNzIG5zSURPTUV2ZW50VGFyZ2V0OwpjbGFzcyBuc0lET01FdmVu dEdyb3VwOwojIDYwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lFdmVudExpc3Rl bmVyTWFuYWdlci5oIgpjbGFzcyBuc0lFdmVudExpc3RlbmVyTWFuYWdlciA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CgpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhjZDkxYmNmMCwgMHhkZWQ5LCAweDExZDEsIHsweGJkLCAw eDg1LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGUzLCAweGY0fSB9OyByZXR1cm4gaWlkO30K CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkRXZlbnRMaXN0ZW5lckJ5SUlEKG5zSURPTUV2ZW50 TGlzdGVuZXIgKmFMaXN0ZW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBuc0lJRCYgYUlJRCwgUFJJbnQzMiBmbGFncykgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBSZW1vdmVFdmVudExpc3RlbmVyQnlJSUQobnNJRE9NRXZlbnRMaXN0ZW5lciAqYUxpc3Rl bmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSUlEJiBh SUlELCBQUkludDMyIGZsYWdzKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZEV2ZW50 TGlzdGVuZXJCeVR5cGUobnNJRE9NRXZlbnRMaXN0ZW5lciAqYUxpc3RlbmVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIHR5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgZmxhZ3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSURPTUV2ZW50R3JvdXAqIGFFdnRHcnApID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlRXZlbnRMaXN0ZW5lckJ5VHlwZShuc0lET01FdmVu dExpc3RlbmVyICphTGlzdGVuZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IG5zQVN0cmluZyYgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJJbnQzMiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJRE9NRXZlbnRHcm91cCogYUV2dEdycCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgQWRkU2NyaXB0RXZlbnRMaXN0ZW5lcihuc0lTY3JpcHRDb250ZXh0KmFDb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYU9iamVjdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSAqYU5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYUZ1bmMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRGVmZXJDb21waWxhdGlv bikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVTY3JpcHRFdmVudExpc3RlbmVyKG5z SUF0b20gKmFOYW1lKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlclNjcmlw dEV2ZW50TGlzdGVuZXIobnNJU2NyaXB0Q29udGV4dCAqYUNvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKmFPYmplY3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYU5hbWUpID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGlsZVNjcmlwdEV2ZW50TGlzdGVuZXIobnNJU2NyaXB0 Q29udGV4dCAqYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lTdXBwb3J0cyAqYU9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUF0b20qIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJCb29sICphRGlkQ29tcGlsZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg SGFuZGxlRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgIG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURP TUV2ZW50KiogYURPTUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NRXZlbnRU YXJnZXQqIGFDdXJyZW50VGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIg YUZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3Rh dHVzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVFdmVudChuc0lQcmVzQ29u dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudCogYUV2 ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhRXZlbnRUeXBl LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NRXZlbnQqKiBhRE9NRXZlbnQpID0gMDsK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FwdHVyZUV2ZW50KFBSSW50MzIgYUV2ZW50VHlwZXMp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVsZWFzZUV2ZW50KFBSSW50MzIgYUV2ZW50 VHlwZXMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQWxsTGlzdGVuZXJzKFBS Qm9vbCBhU2NyaXB0T25seSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaXN0ZW5l clRhcmdldChuc0lTdXBwb3J0cyogYVRhcmdldCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEhhc011dGF0aW9uTGlzdGVuZXJzKFBSQm9vbCogYUxpc3RlbmVyKSA9IDA7CgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTeXN0ZW1FdmVudEdyb3VwTE0obnNJRE9NRXZlbnRHcm91cCoqIGFH cm91cCkgPSAwOwp9OwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0V2ZW50TGlzdGVuZXJNYW5hZ2Vy KG5zSUV2ZW50TGlzdGVuZXJNYW5hZ2VyKiogYUluc3RhbmNlUHRyUmVzdWx0KTsKIyAxNDMgIm5z RE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RXZlbnRSZWNlaXZlci5oIiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RXZlbnRSZWNlaXZlci5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZl bnRUYXJnZXQuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50 VGFyZ2V0LmgiCmNsYXNzIG5zSURPTUV2ZW50VGFyZ2V0IDogcHVibGljIG5zSVN1cHBvcnRzIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweDFjNzczYjMwLCAweGQxY2YsIDB4MTFkMiwgeyAweGJkLCAweDk1LCAweDAw LCAweDgwLCAweDVmLCAweDhhLCAweGUzLCAweGY0IH19OyByZXR1cm4gaWlkO30KIyA2NSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FdmVudFRhcmdldC5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgQWRkRXZlbnRMaXN0ZW5lcihjb25zdCBuc0FTdHJpbmcgJiB0eXBlLCBuc0lET01FdmVu dExpc3RlbmVyICpsaXN0ZW5lciwgUFJCb29sIHVzZUNhcHR1cmUpID0gMDsKIyA4OCAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FdmVudFRhcmdldC5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgUmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBuc0FTdHJpbmcgJiB0eXBlLCBuc0lET01FdmVu dExpc3RlbmVyICpsaXN0ZW5lciwgUFJCb29sIHVzZUNhcHR1cmUpID0gMDsKIyAxMDkgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZlbnRUYXJnZXQuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IERpc3BhdGNoRXZlbnQobnNJRE9NRXZlbnQgKmV2dCwgUFJCb29sICpfcmV0dmFsKSA9IDA7 Cgp9OwojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50UmVjZWl2ZXIu aCIgMgoKY2xhc3MgbnNJRE9NRXZlbnRMaXN0ZW5lcjsKY2xhc3MgbnNJRE9NTW91c2VMaXN0ZW5l cjsKY2xhc3MgbnNJRE9NTW91c2VNb3Rpb25MaXN0ZW5lcjsKY2xhc3MgbnNJRE9NS2V5TGlzdGVu ZXI7CmNsYXNzIG5zSURPTUZvY3VzTGlzdGVuZXI7CmNsYXNzIG5zSURPTUxvYWRMaXN0ZW5lcjsK Y2xhc3MgbnNJRE9NRHJhZ0xpc3RlbmVyOwpjbGFzcyBuc0lFdmVudExpc3RlbmVyTWFuYWdlcjsK Y2xhc3MgbnNJRE9NRXZlbnQ7CmNsYXNzIG5zSURPTUV2ZW50R3JvdXA7CiMgNjUgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZlbnRSZWNlaXZlci5oIgpjbGFzcyBuc0lET01FdmVu dFJlY2VpdmVyIDogcHVibGljIG5zSURPTUV2ZW50VGFyZ2V0CnsKcHVibGljOgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4ZTFkYmNi YTAsIDB4ZmIzOCwgMHgxMWQxLCB7MHhiZCwgMHg4NywgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhlMywgMHhmNH0gfTsgcmV0dXJuIGlpZDt9CgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkRXZlbnRM aXN0ZW5lckJ5SUlEKG5zSURPTUV2ZW50TGlzdGVuZXIgKmFMaXN0ZW5lciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCYgYUlJRCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgUmVtb3ZlRXZlbnRMaXN0ZW5lckJ5SUlEKG5zSURPTUV2ZW50TGlzdGVuZXIgKmFM aXN0ZW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJ RCYgYUlJRCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlzdGVuZXJNYW5hZ2VyKG5zSUV2 ZW50TGlzdGVuZXJNYW5hZ2VyKiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgSGFu ZGxlRXZlbnQobnNJRE9NRXZlbnQgKmFFdmVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 U3lzdGVtRXZlbnRHcm91cChuc0lET01FdmVudEdyb3VwKiogYUdyb3VwKSA9IDA7Cn07CiMgMTQ0 ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NU3R5bGVTaGVldC5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NU3R5bGVTaGVldC5oIgpjbGFzcyBuc0lET01TdHlsZVNoZWV0IDogcHVibGljIG5zSVN1cHBv cnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDgwLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJl LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0 MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TdHlsZVNoZWV0LmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRUeXBlKG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldERpc2FibGVkKFBSQm9vbCAqYURpc2FibGVkKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXREaXNhYmxlZChQUkJvb2wgYURpc2FibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE93bmVyTm9kZShuc0lET01Ob2RlICogKmFPd25lck5vZGUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UGFyZW50U3R5bGVTaGVldChuc0lET01TdHlsZVNoZWV0ICogKmFQYXJl bnRTdHlsZVNoZWV0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhyZWYobnNBU3RyaW5n ICYgYUhyZWYpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGl0bGUobnNBU3RyaW5nICYg YVRpdGxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lZGlhKG5zSURPTU1lZGlhTGlz dCAqICphTWVkaWEpID0gMDsKCn07CiMgMTQ3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVN0eWxlU2hlZXRMaXN0LmgiIDEKIyAyNSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TdHlsZVNoZWV0TGlzdC5oIgpjbGFzcyBu c0lET01TdHlsZVNoZWV0TGlzdCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhh NmNmOTA4MSwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1Ziwg MHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJRE9NU3R5bGVTaGVldExpc3QuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExl bmd0aChQUlVpbnQzMiAqYUxlbmd0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVtKFBS VWludDMyIGluZGV4LCBuc0lET01TdHlsZVNoZWV0ICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxNDgg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgpjbGFzcyBuc0lET01DU1NTdHlsZURlY2xh cmF0aW9uIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGJlLCAweDE1 YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAw eDMyIH19OyByZXR1cm4gaWlkO30KIyA0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01DU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDc3NUZXh0KG5z QVN0cmluZyAmIGFDc3NUZXh0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDc3NUZXh0KGNv bnN0IG5zQVN0cmluZyAmIGFDc3NUZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBy b3BlcnR5VmFsdWUoY29uc3QgbnNBU3RyaW5nICYgcHJvcGVydHlOYW1lLCBuc0FTdHJpbmcgJiBf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5Q1NTVmFsdWUoY29u c3QgbnNBU3RyaW5nICYgcHJvcGVydHlOYW1lLCBuc0lET01DU1NWYWx1ZSAqKl9yZXR2YWwpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlUHJvcGVydHkoY29uc3QgbnNBU3RyaW5nICYg cHJvcGVydHlOYW1lLCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgbnNBU3RyaW5nICYgcHJvcGVydHlOYW1lLCBu c0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5 KGNvbnN0IG5zQVN0cmluZyAmIHByb3BlcnR5TmFtZSwgY29uc3QgbnNBU3RyaW5nICYgdmFsdWUs IGNvbnN0IG5zQVN0cmluZyAmIHByaW9yaXR5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dExlbmd0aChQUlVpbnQzMiAqYUxlbmd0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVt KFBSVWludDMyIGluZGV4LCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFBhcmVudFJ1bGUobnNJRE9NQ1NTUnVsZSAqICphUGFyZW50UnVsZSkgPSAwOwoK fTsKIyAxNDkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NQ1NTUnVsZS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NQ1NTUnVsZS5oIgpjbGFzcyBuc0lET01DU1NSdWxlIDogcHVibGljIG5zSVN1cHBvcnRz IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGMxLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAw eDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyAzOSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NSdWxlLmgiCiAgZW51bSB7IFVOS05P V05fUlVMRSA9IDBVIH07CgogIGVudW0geyBTVFlMRV9SVUxFID0gMVUgfTsKCiAgZW51bSB7IENI QVJTRVRfUlVMRSA9IDJVIH07CgogIGVudW0geyBJTVBPUlRfUlVMRSA9IDNVIH07CgogIGVudW0g eyBNRURJQV9SVUxFID0gNFUgfTsKCiAgZW51bSB7IEZPTlRfRkFDRV9SVUxFID0gNVUgfTsKCiAg ZW51bSB7IFBBR0VfUlVMRSA9IDZVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUoUFJV aW50MTYgKmFUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENzc1RleHQobnNBU3Ry aW5nICYgYUNzc1RleHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENzc1RleHQoY29uc3Qg bnNBU3RyaW5nICYgYUNzc1RleHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50 U3R5bGVTaGVldChuc0lET01DU1NTdHlsZVNoZWV0ICogKmFQYXJlbnRTdHlsZVNoZWV0KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudFJ1bGUobnNJRE9NQ1NTUnVsZSAqICphUGFy ZW50UnVsZSkgPSAwOwoKfTsKIyAxNTAgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTUnVsZUxpc3QuaCIgMQojIDI1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1J1bGVMaXN0LmgiCmNsYXNzIG5zSURPTUNTU1J1 bGVMaXN0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGMwLCAweDE1 YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAw eDMyIH19OyByZXR1cm4gaWlkO30KIyA0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01DU1NSdWxlTGlzdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICph TGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5kZXgsIG5z SURPTUNTU1J1bGUgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDE1MSAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01SZWN0LmgiIDEKIyAyNSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01SZWN0LmgiCmNsYXNzIG5zSURPTVJlY3Qg OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NzE3MzVmNjIsIDB4YWM1YywgMHg0 MjM2LCB7IDB4OWEsIDB4MWYsIDB4NWYsIDB4ZmIsIDB4MjgsIDB4MGQsIDB4NTMsIDB4MWMgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUb3AobnNJRE9NQ1NTUHJpbWl0 aXZlVmFsdWUgKiAqYVRvcCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSaWdodChuc0lE T01DU1NQcmltaXRpdmVWYWx1ZSAqICphUmlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Qm90dG9tKG5zSURPTUNTU1ByaW1pdGl2ZVZhbHVlICogKmFCb3R0b20pID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0TGVmdChuc0lET01DU1NQcmltaXRpdmVWYWx1ZSAqICphTGVmdCkg PSAwOwoKfTsKIyAxNTIgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NUkdCQ29sb3IuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTVJHQkNvbG9yLmgiCmNsYXNzIG5zSURPTVJHQkNvbG9yIDogcHVibGljIG5z SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDZhZmYzMTAyLCAweDMyMGQsIDB4NDk4NiwgeyAweDk3 LCAweDkwLCAweDEyLCAweDMxLCAweDZiLCAweGI4LCAweDdjLCAweGY5IH19OyByZXR1cm4gaWlk O30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVkKG5zSURPTUNTU1ByaW1pdGl2ZVZhbHVlICog KmFSZWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0R3JlZW4obnNJRE9NQ1NTUHJpbWl0 aXZlVmFsdWUgKiAqYUdyZWVuKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJsdWUobnNJ RE9NQ1NTUHJpbWl0aXZlVmFsdWUgKiAqYUJsdWUpID0gMDsKCn07CiMgMTUzICJuc0RPTUNsYXNz SW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSVhCTFNl cnZpY2UuaCIgMQojIDUyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lYQkxTZXJ2 aWNlLmgiCmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lET01F dmVudFJlY2VpdmVyOwpjbGFzcyBuc0lET01Ob2RlTGlzdDsKY2xhc3MgbnNJWEJMQmluZGluZzsK Y2xhc3MgbnNJWEJMRG9jdW1lbnRJbmZvOwpjbGFzcyBuc0lVUkk7CmNsYXNzIG5zSUF0b207CgoK CgoKY2xhc3MgbnNJWEJMU2VydmljZSA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAw eGU3OTAzZTEsIDB4YzdiYiwgMHgxMWQzLCB7IDB4OTcsIDB4ZmIsIDB4MCwgMHg0MCwgMHg1LCAw eDUzLCAweGVlLCAweGYwIH0gfTsgcmV0dXJuIGlpZDt9CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBM b2FkQmluZGluZ3MobnNJQ29udGVudCogYUNvbnRlbnQsIGNvbnN0IG5zQVN0cmluZyYgYVVSTCwg UFJCb29sIGFBdWdtZW50RmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYQkxCaW5k aW5nKiogYUJpbmRpbmcsIFBSQm9vbCogYVJlc29sdmVTdHlsZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBGbHVzaFN0eWxlQmluZGluZ3MobnNJQ29udGVudCogYUNvbnRlbnQpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0QmluZGluZyhuc0lDb250ZW50KiBhQm91bmRFbGVtZW50LCBj b25zdCBuc0NTdHJpbmcmIGFVUkxTdHIsIG5zSVhCTEJpbmRpbmcqKiBhUmVzdWx0KSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEJpbmRpbmdSZWFkeShuc0lDb250ZW50KiBhQm91bmRFbGVtZW50 LCBjb25zdCBuc0NTdHJpbmcmIGFVUkxTdHIsIFBSQm9vbCogYUlzUmVhZHkpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgUmVzb2x2ZVRhZyhuc0lDb250ZW50KiBhQ29udGVudCwgUFJJbnQzMiog YU5hbWVTcGFjZUlELCBuc0lBdG9tKiogYVJlc3VsdCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFhCTERvY3VtZW50SW5mbyhjb25zdCBuc0NTdHJpbmcmIGFVUkxTdHIsIG5zSUNvbnRlbnQq IGFCb3VuZEVsZW1lbnQsIG5zSVhCTERvY3VtZW50SW5mbyoqIGFSZXN1bHQpPTA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IExvYWRCaW5kaW5nRG9jdW1lbnRJbmZvKG5zSUNvbnRlbnQqIGFCb3VuZEVs ZW1lbnQsIG5zSURvY3VtZW50KiBhQm91bmREb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IG5zQ1N0cmluZyYgYVVSSSwgY29uc3QgbnNDU3RyaW5nJiBh UmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFGb3JjZVN5 bmNMb2FkLCBuc0lYQkxEb2N1bWVudEluZm8qKiBhUmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEF0dGFjaEdsb2JhbEtleUhhbmRsZXIobnNJRE9NRXZlbnRSZWNlaXZlciogYUVsZW1l bnQpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRhY2hHbG9iYWxEcmFnSGFuZGxlcihuc0lET01F dmVudFJlY2VpdmVyKiBhRWxlbWVudCk9MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRmV0Y2hTeW5j WE1MRG9jdW1lbnQobnNJVVJJKiBhVVJJLCBuc0lEb2N1bWVudCoqIGFSZXN1bHQpID0gMDsKfTsK IyAxNTYgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9j b250ZW50L25zSVhCTEJpbmRpbmcuaCIgMQojIDUxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29u dGVudC9uc0lYQkxCaW5kaW5nLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z SVN1cHBvcnRzQXJyYXkuaCIgMQojIDE0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ U3VwcG9ydHNBcnJheS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb2xs ZWN0aW9uLmgiIDEKIyAyOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbGxlY3Rp b24uaCIKY2xhc3MgbnNJQ29sbGVjdGlvbiA6IHB1YmxpYyBuc0lTZXJpYWxpemFibGUgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4ODNiNjAxOWMsIDB4Y2JjNCwgMHgxMWQyLCB7IDB4OGMsIDB4Y2EsIDB4MDAsIDB4 NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBu c3Jlc3VsdCBDb3VudChQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRFbGVtZW50QXQoUFJVaW50MzIgaW5kZXgsIG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBRdWVyeUVsZW1lbnRBdChQUlVpbnQzMiBpbmRleCwgY29u c3QgbnNJSUQgJiB1dWlkLCB2b2lkICogKnJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRFbGVtZW50QXQoUFJVaW50MzIgaW5kZXgsIG5zSVN1cHBvcnRzICppdGVtKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZEVsZW1lbnQobnNJU3VwcG9ydHMgKml0ZW0pID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlRWxlbWVudChuc0lTdXBwb3J0cyAqaXRlbSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJhdGUobnNJRW51bWVyYXRvciAqKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXIodm9pZCkgPSAwOwoKfTsKIyAxNzUgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb2xsZWN0aW9uLmgiCmNsYXNzIG5zUXVlcnlF bGVtZW50QXQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAgICBu c1F1ZXJ5RWxlbWVudEF0KCBuc0lDb2xsZWN0aW9uKiBhQ29sbGVjdGlvbiwgUFJVaW50MzIgYUlu ZGV4LCBuc3Jlc3VsdCogYUVycm9yUHRyICkKICAgICAgICAgIDogbUNvbGxlY3Rpb24oYUNvbGxl Y3Rpb24pLAogICAgICAgICAgICBtSW5kZXgoYUluZGV4KSwKICAgICAgICAgICAgbUVycm9yUHRy KGFFcnJvclB0cikKICAgICAgICB7CgogICAgICAgIH0KICAgICAgdmlydHVhbCBuc3Jlc3VsdCBv cGVyYXRvcigpKCBjb25zdCBuc0lJRCYgYUlJRCwgdm9pZCoqICkgY29uc3Q7CiAgICBwcml2YXRl OgogICAgICBuc0lDb2xsZWN0aW9uKiBtQ29sbGVjdGlvbjsKICAgICAgUFJVaW50MzIgbUluZGV4 OwogICAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwogIH07CmlubGluZQpjb25zdCBuc1F1ZXJ5RWxl bWVudEF0CmRvX1F1ZXJ5RWxlbWVudEF0KCBuc0lDb2xsZWN0aW9uKiBhQ29sbGVjdGlvbiwgUFJV aW50MzIgYUluZGV4LCBuc3Jlc3VsdCogYUVycm9yUHRyID0gMCApCiAgewogICAgcmV0dXJuIG5z UXVlcnlFbGVtZW50QXQoYUNvbGxlY3Rpb24sIGFJbmRleCwgYUVycm9yUHRyKTsKICB9CiMgMTUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c0FycmF5LmgiIDIKCgoKCgoK Y2xhc3MgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3I7CiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94cGNvbS9uc0lTdXBwb3J0c0FycmF5LmgiCnR5cGVkZWYgUFJCb29sICgqbnNJU3VwcG9y dHNBcnJheUVudW1GdW5jKShuc0lTdXBwb3J0cyogYUVsZW1lbnQsIHZvaWQgKmFEYXRhKTsKIyA0 NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzQXJyYXkuaCIKY2xhc3Mg bnNJU3VwcG9ydHNBcnJheSA6IHB1YmxpYyBuc0lDb2xsZWN0aW9uIHsKIHB1YmxpYzoKCiAgc3Rh dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDc5 MWVhZmEwLCAweGI5ZTYsIDB4MTFkMSwgeyAweDgwLCAweDMxLCAweDAwLCAweDYwLCAweDA4LCAw eDE1LCAweDliLCAweDVhIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgUFJCb29sIEVxdWFs cyhjb25zdCBuc0lTdXBwb3J0c0FycmF5ICpvdGhlcikgPSAwOwoKCiAgdmlydHVhbCBuc0lTdXBw b3J0cyAqIEVsZW1lbnRBdChQUlVpbnQzMiBhSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJJbnQz MiBJbmRleE9mKGNvbnN0IG5zSVN1cHBvcnRzICphUG9zc2libGVFbGVtZW50KSA9IDA7CgoKICB2 aXJ0dWFsIFBSSW50MzIgSW5kZXhPZlN0YXJ0aW5nQXQoY29uc3QgbnNJU3VwcG9ydHMgKmFQb3Nz aWJsZUVsZW1lbnQsIFBSVWludDMyIGFTdGFydEluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIFBSSW50 MzIgTGFzdEluZGV4T2YoY29uc3QgbnNJU3VwcG9ydHMgKmFQb3NzaWJsZUVsZW1lbnQpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5kZXhPZihuc0lTdXBwb3J0cyAqYVBvc3NpYmxlRWxl bWVudCwgUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbmRl eE9mU3RhcnRpbmdBdChuc0lTdXBwb3J0cyAqYVBvc3NpYmxlRWxlbWVudCwgUFJVaW50MzIgYVN0 YXJ0SW5kZXgsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TGFzdEluZGV4T2YobnNJU3VwcG9ydHMgKmFQb3NzaWJsZUVsZW1lbnQsIFBSSW50MzIgKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIEluc2VydEVsZW1lbnRBdChuc0lTdXBwb3J0cyAq YUVsZW1lbnQsIFBSVWludDMyIGFJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgUmVwbGFj ZUVsZW1lbnRBdChuc0lTdXBwb3J0cyAqYUVsZW1lbnQsIFBSVWludDMyIGFJbmRleCkgPSAwOwoK CiAgdmlydHVhbCBQUkJvb2wgUmVtb3ZlRWxlbWVudEF0KFBSVWludDMyIGFJbmRleCkgPSAwOwoK CiAgdmlydHVhbCBQUkJvb2wgUmVtb3ZlTGFzdEVsZW1lbnQoY29uc3QgbnNJU3VwcG9ydHMgKmFF bGVtZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZUxhc3RFbGVtZW50KG5zSVN1 cHBvcnRzICphRWxlbWVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWxldGVFbGVtZW50 QXQoUFJVaW50MzIgYUluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9vbCBBcHBlbmRFbGVtZW50 cyhuc0lTdXBwb3J0c0FycmF5ICphRWxlbWVudHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg Q29tcGFjdCh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9vbCBFbnVtZXJhdGVGb3J3YXJkcyhu c0lTdXBwb3J0c0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQgKiBhRGF0YSkgPSAwOwoKCiAgdmly dHVhbCBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRzKG5zSVN1cHBvcnRzQXJyYXlFbnVtRnVuYyBh RnVuYywgdm9pZCAqIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSVN1 cHBvcnRzQXJyYXkgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9vbCBNb3ZlRWxlbWVu dChQUkludDMyIGFGcm9tLCBQUkludDMyIGFUbykgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgSW5z ZXJ0RWxlbWVudHNBdChuc0lTdXBwb3J0c0FycmF5ICphT3RoZXIsIFBSVWludDMyIGFJbmRleCkg PSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgUmVtb3ZlRWxlbWVudHNBdChQUlVpbnQzMiBhSW5kZXgs IFBSVWludDMyIGFDb3VudCkgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgU2l6ZVRvKFBSSW50MzIg YVNpemUpID0gMDsKCn07CiMgMzY4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3Vw cG9ydHNBcnJheS5oIgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SVN1cHBvcnRzQXJyYXkobnNJU3Vw cG9ydHNBcnJheSoqIGFJbnN0YW5jZVB0clJlc3VsdCk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3 SVN1cHBvcnRzQXJyYXlFbnVtZXJhdG9yKG5zSVN1cHBvcnRzQXJyYXkqIGFycmF5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IqICphSW5z dGFuY2VQdHJSZXN1bHQpOwojIDUyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lY QkxCaW5kaW5nLmgiIDIKCmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFz cyBuc0lET01Ob2RlTGlzdDsKY2xhc3MgbnNJU2NyaXB0Q29udGV4dDsKY2xhc3MgbnNJWEJMUHJv dG90eXBlQmluZGluZzsKCgoKCgpjbGFzcyBuc0lYQkxCaW5kaW5nIDogcHVibGljIG5zSVN1cHBv cnRzCnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z dCBuc0lJRCBpaWQgPSB7IDB4ZGRkYmFkMjAsIDB4YzhkZiwgMHgxMWQzLCB7IDB4OTcsIDB4ZmIs IDB4MCwgMHg0MCwgMHg1LCAweDUzLCAweGVlLCAweGYwIH0gfTsgcmV0dXJuIGlpZDt9CgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0UHJvdG90eXBlQmluZGluZyhuc0lYQkxQcm90b3R5cGVCaW5kaW5n KiogYVJlc3VsdCk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb3RvdHlwZUJpbmRpbmcobnNJ WEJMUHJvdG90eXBlQmluZGluZyogYVByb3RvQmluZGluZyk9MDsKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRCYXNlQmluZGluZyhuc0lYQkxCaW5kaW5nKiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0QmFzZUJpbmRpbmcobnNJWEJMQmluZGluZyogYUJpbmRpbmcpID0gMDsKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRBbm9ueW1vdXNDb250ZW50KG5zSUNvbnRlbnQqKiBhUGFyZW50 KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbm9ueW1vdXNDb250ZW50KG5zSUNvbnRlbnQq IGFQYXJlbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCaW5kaW5nRWxlbWVudChuc0lD b250ZW50KiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmluZGluZ0VsZW1l bnQobnNJQ29udGVudCogYUVsZW1lbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3Vu ZEVsZW1lbnQobnNJQ29udGVudCoqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dEJvdW5kRWxlbWVudChuc0lDb250ZW50KiBhRWxlbWVudCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVz dWx0IEdlbmVyYXRlQW5vbnltb3VzQ29udGVudCgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IElu c3RhbGxFdmVudEhhbmRsZXJzKCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgSW5zdGFsbEltcGxl bWVudGF0aW9uKCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc1N0eWxlU2hlZXRzKFBSQm9v bCogYVJlc29sdmVTdHlsZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpcnN0QmluZGlu Z1dpdGhDb25zdHJ1Y3Rvcihuc0lYQkxCaW5kaW5nKiogYVJlc3VsdCk9MDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRCYXNlVGFnKFBSSW50MzIqIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSoqIGFSZXN1 bHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlQ2hhbmdlZChuc0lBdG9tKiBh QXR0cmlidXRlLCBQUkludDMyIGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFJCb29sIGFSZW1vdmVGbGFnLCBQUkJvb2wgYU5vdGlmeSkgPSAwOwoKICB2aXJ0dWFs IG5zcmVzdWx0IEV4ZWN1dGVBdHRhY2hlZEhhbmRsZXIoKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQg RXhlY3V0ZURldGFjaGVkSGFuZGxlcigpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBVbmhvb2tFdmVu dEhhbmRsZXJzKCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2hhbmdlRG9jdW1lbnQobnNJRG9j dW1lbnQqIGFPbGREb2N1bWVudCwgbnNJRG9jdW1lbnQqIGFOZXdEb2N1bWVudCkgPSAwOwoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEJpbmRpbmdVUkkobnNDU3RyaW5nJiBhUmVzdWx0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBHZXREb2NVUkkobnNDU3RyaW5nJiBhUmVzdWx0KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRJRChuc0NTdHJpbmcmIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRJbnNlcnRpb25Qb2ludHNGb3IobnNJQ29udGVudCogYVBhcmVudCwgbnNJU3Vw cG9ydHNBcnJheSoqIGFSZXN1bHQpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5zZXJ0aW9u UG9pbnQobnNJQ29udGVudCogYUNoaWxkLCBuc0lDb250ZW50KiogYVJlc3VsdCwgUFJVaW50MzIq IGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqKiBhRGVm YXVsdENvbnRlbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpbmdsZUluc2VydGlvblBv aW50KG5zSUNvbnRlbnQqKiBhUmVzdWx0LCBQUlVpbnQzMiogYUluZGV4LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhTXVsdGlwbGVJbnNlcnRpb25Qb2ludHMs IG5zSUNvbnRlbnQqKiBhRGVmYXVsdENvbnRlbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ c1N0eWxlQmluZGluZyhQUkJvb2wqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dElzU3R5bGVCaW5kaW5nKFBSQm9vbCBhSXNTdHlsZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFJvb3RCaW5kaW5nKG5zSVhCTEJpbmRpbmcqKiBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRGaXJzdFN0eWxlQmluZGluZyhuc0lYQkxCaW5kaW5nKiogYVJlc3VsdCkgPSAw OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaGVyaXRzU3R5bGUoUFJCb29sKiBhUmVzdWx0KT0wOwog IHZpcnR1YWwgbnNyZXN1bHQgV2Fsa1J1bGVzKG5zSVN1cHBvcnRzQXJyYXlFbnVtRnVuYyBhRnVu Yywgdm9pZCogYURhdGEpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVBZmZlY3RzU3R5 bGUobnNJU3VwcG9ydHNBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSwgUFJCb29sKiBh QWZmZWN0cyk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBNYXJrRm9yRGVhdGgoKT0wOwogIHZpcnR1 YWwgbnNyZXN1bHQgTWFya2VkRm9yRGVhdGgoUFJCb29sKiBhUmVzdWx0KT0wOwoKICB2aXJ0dWFs IG5zcmVzdWx0IEltcGxlbWVudHNJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIFBSQm9vbCog YVJlc3VsdCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbm9ueW1vdXNOb2Rlcyhuc0lET01O b2RlTGlzdCoqIGFSZXN1bHQpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2hvdWxkQnVpbGRDaGls ZEZyYW1lcyhQUkJvb2wqIGFSZXN1bHQpPTA7Cn07CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3WEJM QmluZGluZyhuc0lYQkxQcm90b3R5cGVCaW5kaW5nKiBhUHJvdG9CaW5kaW5nLCBuc0lYQkxCaW5k aW5nKiogYVJlc3VsdCk7CiMgMTU3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lCaW5kaW5nTWFuYWdlci5oIiAxCiMgNTMgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUJpbmRpbmdNYW5hZ2VyLmgiCmNsYXNzIG5zSUNv bnRlbnQ7CmNsYXNzIG5zSVhCTEJpbmRpbmc7CmNsYXNzIG5zSVhCTEJpbmRpbmdBdHRhY2hlZEhh bmRsZXI7CmNsYXNzIG5zSVhCTERvY3VtZW50SW5mbzsKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJ U3RyZWFtTGlzdGVuZXI7CmNsYXNzIG5zSVhQQ29ubmVjdFdyYXBwZWRKUzsKY2xhc3MgbnNJRE9N Tm9kZUxpc3Q7CgoKCgoKY2xhc3MgbnNJQmluZGluZ01hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9y dHMKewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0 IG5zSUlEIGlpZCA9IHsgMHg1NWQ3MGZlMCwgMHhjOGU1LCAweDExZDMsIHsgMHg5NywgMHhmYiwg MHgwLCAweDQwLCAweDUsIDB4NTMsIDB4ZWUsIDB4ZjAgfSB9OyByZXR1cm4gaWlkO30KCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRCaW5kaW5nKG5zSUNvbnRlbnQqIGFDb250ZW50LCBuc0lYQkxCaW5k aW5nKiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmluZGluZyhuc0lDb250 ZW50KiBhQ29udGVudCwgbnNJWEJMQmluZGluZyogYUJpbmRpbmcpID0gMDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRJbnNlcnRpb25QYXJlbnQobnNJQ29udGVudCogYUNvbnRlbnQsIG5zSUNvbnRl bnQqKiBhUmVzdWx0KT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SW5zZXJ0aW9uUGFyZW50KG5z SUNvbnRlbnQqIGFDb250ZW50LCBuc0lDb250ZW50KiBhUmVzdWx0KT0wOwoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFdyYXBwZWRKUyhuc0lDb250ZW50KiBhQ29udGVudCwgbnNJWFBDb25uZWN0V3Jh cHBlZEpTKiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0V3JhcHBlZEpTKG5z SUNvbnRlbnQqIGFDb250ZW50LCBuc0lYUENvbm5lY3RXcmFwcGVkSlMqIGFSZXN1bHQpID0gMDsK IyA5NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQmluZGluZ01hbmFnZXIuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IENoYW5nZURvY3VtZW50Rm9yKG5zSUNvbnRlbnQqIGFDb250ZW50 LCBuc0lEb2N1bWVudCogYU9sZERvY3VtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJRG9jdW1lbnQqIGFOZXdEb2N1bWVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBS ZXNvbHZlVGFnKG5zSUNvbnRlbnQqIGFDb250ZW50LCBQUkludDMyKiBhTmFtZVNwYWNlSUQsIG5z SUF0b20qKiBhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRM aXN0Rm9yKG5zSUNvbnRlbnQqIGFDb250ZW50LCBuc0lET01Ob2RlTGlzdCoqIGFSZXN1bHQpID0g MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb250ZW50TGlzdEZvcihuc0lDb250ZW50KiBh Q29udGVudCwgbnNJU3VwcG9ydHNBcnJheSogYUxpc3QpPTA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IEhhc0NvbnRlbnRMaXN0Rm9yKG5zSUNvbnRlbnQqIGFDb250ZW50LCBQUkJvb2wqIGFSZXN1 bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbm9ueW1vdXNOb2Rlc0Zvcihuc0lD b250ZW50KiBhQ29udGVudCwgbnNJRE9NTm9kZUxpc3QqKiBhUmVzdWx0KSA9IDA7CgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgU2V0QW5vbnltb3VzTm9kZXNGb3IobnNJQ29udGVudCogYUNvbnRlbnQs IG5zSVN1cHBvcnRzQXJyYXkqIGFMaXN0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0WEJMQ2hpbGROb2Rlc0Zvcihuc0lDb250ZW50KiBhQ29udGVudCwgbnNJRE9NTm9kZUxpc3Qq KiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5zZXJ0aW9uUG9p bnQobnNJQ29udGVudCogYVBhcmVudCwgbnNJQ29udGVudCogYUNoaWxkLCBuc0lDb250ZW50Kiog YVJlc3VsdCwgUFJVaW50MzIqIGFJbmRleCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0U2luZ2xlSW5zZXJ0aW9uUG9pbnQobnNJQ29udGVudCogYVBhcmVudCwgbnNJQ29udGVudCoq IGFSZXN1bHQsIFBSVWludDMyKiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQUkJvb2wqIGFNdWx0aXBsZUluc2VydGlvblBvaW50cykgPSAwOwoKICB2aXJ0dWFs IG5zcmVzdWx0IEFkZExheWVyZWRCaW5kaW5nKG5zSUNvbnRlbnQqIGFDb250ZW50LCBjb25zdCBu c0FTdHJpbmcmIGFVUkwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUxheWVyZWRCaW5k aW5nKG5zSUNvbnRlbnQqIGFDb250ZW50LCBjb25zdCBuc0FTdHJpbmcmIGFVUkwpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IExvYWRCaW5kaW5nRG9jdW1lbnQobnNJRG9jdW1lbnQqIGFEb2N1bWVu dCwgY29uc3QgbnNBU3RyaW5nJiBhVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lEb2N1bWVudCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRUb0F0 dGFjaGVkUXVldWUobnNJWEJMQmluZGluZyogYUJpbmRpbmcpPTA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBBZGRIYW5kbGVyVG9BdHRhY2hlZFF1ZXVlKG5zSVhCTEJpbmRpbmdBdHRhY2hlZEhhbmRsZXIq IGFIYW5kbGVyKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJBdHRhY2hlZFF1ZXVlKCk9MDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFByb2Nlc3NBdHRhY2hlZFF1ZXVlKCk9MDsKCiAgdmlydHVhbCBu c3Jlc3VsdCBFeGVjdXRlRGV0YWNoZWRIYW5kbGVycygpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQg UHV0WEJMRG9jdW1lbnRJbmZvKG5zSVhCTERvY3VtZW50SW5mbyogYURvY3VtZW50SW5mbyk9MDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZVhCTERvY3VtZW50SW5mbyhuc0lYQkxEb2N1bWVudElu Zm8qIGFEb2N1bWVudEluZm8pPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRYQkxEb2N1bWVudElu Zm8oY29uc3QgbnNDU3RyaW5nJiBhVVJMLCBuc0lYQkxEb2N1bWVudEluZm8qKiBhUmVzdWx0KT0w OwoKICB2aXJ0dWFsIG5zcmVzdWx0IFB1dExvYWRpbmdEb2NMaXN0ZW5lcihjb25zdCBuc0NTdHJp bmcmIGFVUkwsIG5zSVN0cmVhbUxpc3RlbmVyKiBhTGlzdGVuZXIpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IEdldExvYWRpbmdEb2NMaXN0ZW5lcihjb25zdCBuc0NTdHJpbmcmIGFVUkwsIG5zSVN0 cmVhbUxpc3RlbmVyKiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlTG9h ZGluZ0RvY0xpc3RlbmVyKGNvbnN0IG5zQ1N0cmluZyYgYVVSTCk9MDsKCiAgdmlydHVhbCBuc3Jl c3VsdCBJbmhlcml0c1N0eWxlKG5zSUNvbnRlbnQqIGFDb250ZW50LCBQUkJvb2wqIGFSZXN1bHQp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoU2tpbkJpbmRpbmdzKCkgPSAwOwoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEJpbmRpbmdJbXBsZW1lbnRhdGlvbihuc0lDb250ZW50KiBhQ29udGVu dCwgY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhUmVzdWx0KT0wOwoKICB2aXJ0dWFsIG5zcmVz dWx0IFNob3VsZEJ1aWxkQ2hpbGRGcmFtZXMobnNJQ29udGVudCogYUNvbnRlbnQsIFBSQm9vbCog YVJlc3VsdCkgPSAwOwp9OwojIDE1OCAibnNET01DbGFzc0luZm8uY3BwIiAyCgoKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVZpZXdDU1MuaCIgMQojIDEwICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTVZpZXdDU1MuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUFic3RyYWN0Vmlldy5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NQWJzdHJhY3RWaWV3LmgiCmNsYXNzIG5zSURPTUFic3RyYWN0VmlldyA6IHB1 YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmNTFlYmFkZSwgMHg4YjFhLCAweDExZDMs IHsgMHhhYSwgMHhlNywgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHgyMywgMHhiNCB9fTsgcmV0 dXJuIGlpZDt9CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQWJzdHJhY3RW aWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudChuc0lET01Eb2N1bWVudFZpZXcg KiAqYURvY3VtZW50KSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTVZpZXdDU1MuaCIgMgojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVZp ZXdDU1MuaCIKY2xhc3MgbnNJRE9NVmlld0NTUyA6IHB1YmxpYyBuc0lET01BYnN0cmFjdFZpZXcg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4MGI5MzQxZjMsIDB4OTVkNCwgMHg0ZmE0LCB7IDB4YWQsIDB4Y2QsIDB4 ZTEsIDB4MTksIDB4ZTAsIDB4ZGIsIDB4MjgsIDB4ODkgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRDb21wdXRlZFN0eWxlKG5zSURPTUVsZW1lbnQgKmVsdCwgY29uc3Qg bnNBU3RyaW5nICYgcHNldWRvRWx0LCBuc0lET01DU1NTdHlsZURlY2xhcmF0aW9uICoqX3JldHZh bCkgPSAwOwoKfTsKIyAxNjEgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgoKCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRHbG9iYWxPYmplY3QuaCIgMQojIDQ1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdEdsb2JhbE9iamVjdC5oIgpjbGFzcyBuc0lTY3Jp cHRDb250ZXh0OwpjbGFzcyBuc0lET01Eb2N1bWVudDsKY2xhc3MgbnNJRE9NRXZlbnQ7CmNsYXNz IG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lEb2NTaGVsbDsKY2xhc3MgbnNJRE9NV2luZG93SW50 ZXJuYWw7CmNsYXNzIG5zSVNjcmlwdEdsb2JhbE9iamVjdE93bmVyOwpzdHJ1Y3QgSlNPYmplY3Q7 CiMgNjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0R2xvYmFsT2JqZWN0Lmgi CmNsYXNzIG5zSVNjcmlwdEdsb2JhbE9iamVjdCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1Ymxp YzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0geyAweDJiMTZmYzgwLCAweGZhNDEsIDB4MTFkMSwgeyAweDliLCAweGMzLCAweDAwLCAweDYw LCAweDA4LCAweDhjLCAweGE2LCAweGIzfSB9OyByZXR1cm4gaWlkO30KCiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRDb250ZXh0KG5zSVNjcmlwdENvbnRleHQgKmFDb250ZXh0KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRDb250ZXh0KG5zSVNjcmlwdENvbnRleHQgKiphQ29udGV4dCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0TmV3RG9jdW1lbnQobnNJRE9NRG9jdW1lbnQgKmFEb2N1bWVu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUmVtb3ZlRXZlbnRM aXN0ZW5lcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUNsZWFy U2NvcGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERvY1NoZWxsKG5zSURvY1NoZWxsICph RG9jU2hlbGwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERvY1NoZWxsKG5zSURvY1NoZWxs ICoqYURvY1NoZWxsKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPcGVuZXJXaW5kb3cobnNJ RE9NV2luZG93SW50ZXJuYWwgKmFPcGVuZXIpPTA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg U2V0R2xvYmFsT2JqZWN0T3duZXIobnNJU2NyaXB0R2xvYmFsT2JqZWN0T3duZXIqIGFPd25lcikg PSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEdsb2JhbE9iamVjdE93bmVyKG5zSVNj cmlwdEdsb2JhbE9iamVjdE93bmVyKiogYU93bmVyKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQg SGFuZGxlRE9NRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zSURPTUV2ZW50KiogYURPTUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg UFJVaW50MzIgYUZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1 cyogYUV2ZW50U3RhdHVzKT0wOwoKICB2aXJ0dWFsIEpTT2JqZWN0ICogR2V0R2xvYmFsSlNPYmpl Y3QoKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9uRmluYWxpemUoSlNPYmplY3QgKmFK U09iamVjdCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcmlwdHNFbmFibGVkKFBS Qm9vbCBhRW5hYmxlZCwgUFJCb29sIGFGaXJlVGltZW91dHMpID0gMDsKfTsKIyAxNjQgIm5zRE9N Q2xhc3NJbmZvLmNwcCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N TmF2aWdhdG9yLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OYXZp Z2F0b3IuaCIKY2xhc3MgbnNJRE9NTmF2aWdhdG9yIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1 YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE IGlpZCA9IHsweGE2Y2Y5MDZlLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAw eDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0QXBwQ29kZU5hbWUobnNBU3RyaW5nICYgYUFwcENvZGVOYW1lKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFwcE5hbWUobnNBU3RyaW5nICYgYUFwcE5hbWUpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXBwVmVyc2lvbihuc0FTdHJpbmcgJiBhQXBwVmVyc2lv bikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5ndWFnZShuc0FTdHJpbmcgJiBhTGFu Z3VhZ2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWltZVR5cGVzKG5zSURPTU1pbWVU eXBlQXJyYXkgKiAqYU1pbWVUeXBlcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQbGF0 Zm9ybShuc0FTdHJpbmcgJiBhUGxhdGZvcm0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 T3NjcHUobnNBU3RyaW5nICYgYU9zY3B1KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZl bmRvcihuc0FTdHJpbmcgJiBhVmVuZG9yKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZl bmRvclN1Yihuc0FTdHJpbmcgJiBhVmVuZG9yU3ViKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFByb2R1Y3QobnNBU3RyaW5nICYgYVByb2R1Y3QpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0UHJvZHVjdFN1Yihuc0FTdHJpbmcgJiBhUHJvZHVjdFN1YikgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRQbHVnaW5zKG5zSURPTVBsdWdpbkFycmF5ICogKmFQbHVnaW5zKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlY3VyaXR5UG9saWN5KG5zQVN0cmluZyAmIGFTZWN1 cml0eVBvbGljeSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVc2VyQWdlbnQobnNBU3Ry aW5nICYgYVVzZXJBZ2VudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb29raWVFbmFi bGVkKFBSQm9vbCAqYUNvb2tpZUVuYWJsZWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSmF2 YUVuYWJsZWQoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRhaW50 RW5hYmxlZChQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMgMjg0ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvZG9tL25zSURPTU5hdmlnYXRvci5oIgpjbGFzcyBuc0lET01KU05hdmlnYXRvciA6IHB1 YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg0YjRmODMxNiwgMHgxZGQyLCAweDExYjIs IHsgMHhiMiwgMHg2NSwgMHg5YSwgMHg4NSwgMHg3MywgMHg3NiwgMHhkMSwgMHg1OSB9fTsgcmV0 dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByZWZlcmVuY2Uodm9pZCkgPSAwOwoKfTsK IyAxNjggIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NQmFyUHJvcC5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NQmFyUHJvcC5oIgpjbGFzcyBuc0lET01CYXJQcm9wIDogcHVibGljIG5zSVN1cHBvcnRzIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweDllYjJjMTUwLCAweDFkNTYsIDB4MTFkMywgeyAweDgyLCAweDIxLCAweDAw LCAweDYwLCAweDA4LCAweDNhLCAweDBiLCAweGNmIH19OyByZXR1cm4gaWlkO30KIyAzOCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01CYXJQcm9wLmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRWaXNpYmxlKFBSQm9vbCAqYVZpc2libGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dFZpc2libGUoUFJCb29sIGFWaXNpYmxlKSA9IDA7Cgp9OwojIDE2OSAibnNET01DbGFzc0luZm8u Y3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TY3JlZW4uaCIgMQoj IDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVNjcmVlbi5oIgpjbGFzcyBuc0lE T01TY3JlZW4gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4Nzc5NDc5NjAsIDB4 YjRhZiwgMHgxMWQyLCB7IDB4YmQsIDB4OTMsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZTMs IDB4ZjQgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUb3AoUFJJbnQz MiAqYVRvcCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZWZ0KFBSSW50MzIgKmFMZWZ0 KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZHRoKFBSSW50MzIgKmFXaWR0aCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQoUFJJbnQzMiAqYUhlaWdodCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQaXhlbERlcHRoKFBSSW50MzIgKmFQaXhlbERlcHRoKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbG9yRGVwdGgoUFJJbnQzMiAqYUNvbG9yRGVw dGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXZhaWxXaWR0aChQUkludDMyICphQXZh aWxXaWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdmFpbEhlaWdodChQUkludDMy ICphQXZhaWxIZWlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXZhaWxMZWZ0KFBS SW50MzIgKmFBdmFpbExlZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXZhaWxUb3Ao UFJJbnQzMiAqYUF2YWlsVG9wKSA9IDA7Cgp9OwojIDE3MCAibnNET01DbGFzc0luZm8uY3BwIiAy CiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Eb2N1bWVudFR5cGUuaCIgMQoj IDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50VHlwZS5oIgpjbGFz cyBuc0lET01Eb2N1bWVudFR5cGUgOiBwdWJsaWMgbnNJRE9NTm9kZSB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhh NmNmOTA3NywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1Ziwg MHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJRE9NRG9jdW1lbnRUeXBlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1l KG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVudGl0aWVz KG5zSURPTU5hbWVkTm9kZU1hcCAqICphRW50aXRpZXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Tm90YXRpb25zKG5zSURPTU5hbWVkTm9kZU1hcCAqICphTm90YXRpb25zKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFB1YmxpY0lkKG5zQVN0cmluZyAmIGFQdWJsaWNJZCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTeXN0ZW1JZChuc0FTdHJpbmcgJiBhU3lzdGVtSWQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJuYWxTdWJzZXQobnNBU3RyaW5nICYg YUludGVybmFsU3Vic2V0KSA9IDA7Cgp9OwojIDE3MSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMg MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01ET01JbXBsZW1lbnRhdGlvbi5oIiAx CiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRE9NSW1wbGVtZW50YXRpb24u aCIKY2xhc3MgbnNJRE9NRE9NSW1wbGVtZW50YXRpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ SUQgaWlkID0gezB4YTZjZjkwNzQsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAs IDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTURPTUltcGxlbWVudGF0aW9uLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBIYXNGZWF0dXJlKGNvbnN0IG5zQVN0cmluZyAmIGZlYXR1cmUsIGNvbnN0IG5z QVN0cmluZyAmIHZlcnNpb24sIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBDcmVhdGVEb2N1bWVudFR5cGUoY29uc3QgbnNBU3RyaW5nICYgcXVhbGlmaWVkTmFtZSwg Y29uc3QgbnNBU3RyaW5nICYgcHVibGljSWQsIGNvbnN0IG5zQVN0cmluZyAmIHN5c3RlbUlkLCBu c0lET01Eb2N1bWVudFR5cGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENy ZWF0ZURvY3VtZW50KGNvbnN0IG5zQVN0cmluZyAmIG5hbWVzcGFjZVVSSSwgY29uc3QgbnNBU3Ry aW5nICYgcXVhbGlmaWVkTmFtZSwgbnNJRE9NRG9jdW1lbnRUeXBlICpkb2N0eXBlLCBuc0lET01E b2N1bWVudCAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTcyICJuc0RPTUNsYXNzSW5mby5jcHAiIDIK IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50RnJhZ21lbnQuaCIg MQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50RnJhZ21lbnQu aCIKY2xhc3MgbnNJRE9NRG9jdW1lbnRGcmFnbWVudCA6IHB1YmxpYyBuc0lET01Ob2RlIHsKIHB1 YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE IGlpZCA9IHsweGE2Y2Y5MDc2LCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAw eDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCn07CiMgMTczICJu c0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TURvY3VtZW50RXZlbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TURvY3VtZW50RXZlbnQuaCIKY2xhc3MgbnNJRE9NRG9jdW1lbnRFdmVudCA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg0NmI5MWQ2NiwgMHgyOGUyLCAweDExZDQsIHsgMHhhYiwg MHgxZSwgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHgyMywgMHhiNCB9fTsgcmV0dXJuIGlpZDt9 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUV2ZW50KGNvbnN0IG5zQVN0cmluZyAmIGV2ZW50 VHlwZSwgbnNJRE9NRXZlbnQgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDE3NCAibnNET01DbGFzc0lu Zm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01BdHRyLmgiIDEK IyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01BdHRyLmgiCmNsYXNzIG5zSURP TUF0dHIgOiBwdWJsaWMgbnNJRE9NTm9kZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA3MCwgMHgxNWIz LCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgz MiB9fTsgcmV0dXJuIGlpZDt9CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N QXR0ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShuc0FTdHJpbmcgJiBhTmFtZSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTcGVjaWZpZWQoUFJCb29sICphU3BlY2lmaWVkKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZhbHVlKG5zQVN0cmluZyAmIGFWYWx1ZSkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmFsdWUoY29uc3QgbnNBU3RyaW5nICYgYVZhbHVlKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE93bmVyRWxlbWVudChuc0lET01FbGVtZW50ICog KmFPd25lckVsZW1lbnQpID0gMDsKCn07CiMgMTc1ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRleHQuaCIgMQojIDEwICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRleHQuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUNoYXJhY3RlckRhdGEuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUNoYXJhY3RlckRhdGEuaCIKY2xhc3MgbnNJRE9NQ2hhcmFjdGVyRGF0YSA6 IHB1YmxpYyBuc0lET01Ob2RlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDcyLCAweDE1YjMsIDB4MTFk MiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyBy ZXR1cm4gaWlkO30KIyA0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DaGFyYWN0 ZXJEYXRhLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREYXRhKG5zQVN0cmluZyAmIGFEYXRhKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREYXRhKGNvbnN0IG5zQVN0cmluZyAmIGFEYXRhKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlbmd0aChQUlVpbnQzMiAqYUxlbmd0aCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdWJzdHJpbmdEYXRhKFBSVWludDMyIG9mZnNldCwgUFJV aW50MzIgY291bnQsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgQXBwZW5kRGF0YShjb25zdCBuc0FTdHJpbmcgJiBhcmcpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgSW5zZXJ0RGF0YShQUlVpbnQzMiBvZmZzZXQsIGNvbnN0IG5zQVN0cmluZyAmIGFyZykg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWxldGVEYXRhKFBSVWludDMyIG9mZnNldCwgUFJV aW50MzIgY291bnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFjZURhdGEoUFJVaW50 MzIgb2Zmc2V0LCBQUlVpbnQzMiBjb3VudCwgY29uc3QgbnNBU3RyaW5nICYgYXJnKSA9IDA7Cgp9 OwojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRleHQuaCIgMgojIDI1ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRleHQuaCIKY2xhc3MgbnNJRE9NVGV4dCA6 IHB1YmxpYyBuc0lET01DaGFyYWN0ZXJEYXRhIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDgyLCAweDE1 YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAw eDMyIH19OyByZXR1cm4gaWlkO30KIyA0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01UZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTcGxpdFRleHQoUFJVaW50MzIgb2Zmc2V0LCBu c0lET01UZXh0ICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxNzYgIm5zRE9NQ2xhc3NJbmZvLmNwcCIg MgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ29tbWVudC5oIiAxCiMgMjUg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ29tbWVudC5oIgpjbGFzcyBuc0lET01D b21tZW50IDogcHVibGljIG5zSURPTUNoYXJhY3RlckRhdGEgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw NzMsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEs IDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKfTsKIyAxNzcgIm5zRE9NQ2xhc3NJbmZvLmNw cCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ0RBVEFTZWN0aW9uLmgi IDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DREFUQVNlY3Rpb24uaCIK Y2xhc3MgbnNJRE9NQ0RBVEFTZWN0aW9uIDogcHVibGljIG5zSURPTVRleHQgewogcHVibGljOgoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g ezB4YTZjZjkwNzEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4 NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKfTsKIyAxNzggIm5zRE9NQ2xh c3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NUHJvY2Vz c2luZ0luc3RydWN0aW9uLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKY2xhc3MgbnNJRE9NUHJvY2Vzc2luZ0luc3RydWN0 aW9uIDogcHVibGljIG5zSURPTU5vZGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwN2YsIDB4MTViMywg MHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIg fX07IHJldHVybiBpaWQ7fQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVBy b2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFyZ2V0KG5zQVN0 cmluZyAmIGFUYXJnZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShuc0FTdHJp bmcgJiBhRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YShjb25zdCBuc0FTdHJp bmcgJiBhRGF0YSkgPSAwOwoKfTsKIyAxNzkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRW50aXR5LmgiIDEKIyAyNSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FbnRpdHkuaCIKY2xhc3MgbnNJRE9NRW50aXR5IDogcHVi bGljIG5zSURPTU5vZGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNzksIDB4MTViMywgMHgxMWQyLCB7 IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVy biBpaWQ7fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUVudGl0eS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0UHVibGljSWQobnNBU3RyaW5nICYgYVB1YmxpY0lkKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN5c3RlbUlkKG5zQVN0cmluZyAmIGFTeXN0ZW1JZCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb3RhdGlvbk5hbWUobnNBU3RyaW5nICYgYU5v dGF0aW9uTmFtZSkgPSAwOwoKfTsKIyAxODAgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRW50aXR5UmVmZXJlbmNlLmgiIDEKIyAyNSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FbnRpdHlSZWZlcmVuY2UuaCIKY2xhc3Mg bnNJRE9NRW50aXR5UmVmZXJlbmNlIDogcHVibGljIG5zSURPTU5vZGUgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTZjZjkwN2EsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKfTsKIyAxODEgIm5zRE9NQ2xhc3NJ bmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTm90YXRpb24u aCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5vdGF0aW9uLmgiCmNs YXNzIG5zSURPTU5vdGF0aW9uIDogcHVibGljIG5zSURPTU5vZGUgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZj ZjkwN2UsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4 OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTU5vdGF0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQdWJsaWNJZChu c0FTdHJpbmcgJiBhUHVibGljSWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3lzdGVt SWQobnNBU3RyaW5nICYgYVN5c3RlbUlkKSA9IDA7Cgp9OwojIDE4MiAibnNET01DbGFzc0luZm8u Y3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Nb3VzZUV2ZW50Lmgi IDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Nb3VzZUV2ZW50LmgiCmNs YXNzIG5zSURPTU1vdXNlRXZlbnQgOiBwdWJsaWMgbnNJRE9NVUlFdmVudCB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHhmZjc1MWVkYywgMHg4YjAyLCAweGFhZTcsIHsgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHg4 MywgMHg4YSwgMHgzMSwgMHgyMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFNjcmVlblgoUFJJbnQzMiAqYVNjcmVlblgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0U2NyZWVuWShQUkludDMyICphU2NyZWVuWSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDbGllbnRYKFBSSW50MzIgKmFDbGllbnRYKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dENsaWVudFkoUFJJbnQzMiAqYUNsaWVudFkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 Q3RybEtleShQUkJvb2wgKmFDdHJsS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNo aWZ0S2V5KFBSQm9vbCAqYVNoaWZ0S2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFs dEtleShQUkJvb2wgKmFBbHRLZXkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWV0YUtl eShQUkJvb2wgKmFNZXRhS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJ1dHRvbihQ UlVpbnQxNiAqYUJ1dHRvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWxhdGVkVGFy Z2V0KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFSZWxhdGVkVGFyZ2V0KSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEluaXRNb3VzZUV2ZW50KGNvbnN0IG5zQVN0cmluZyAmIHR5cGVBcmcsIFBSQm9v bCBjYW5CdWJibGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnLCBuc0lET01BYnN0cmFjdFZpZXcg KnZpZXdBcmcsIFBSSW50MzIgZGV0YWlsQXJnLCBQUkludDMyIHNjcmVlblhBcmcsIFBSSW50MzIg c2NyZWVuWUFyZywgUFJJbnQzMiBjbGllbnRYQXJnLCBQUkludDMyIGNsaWVudFlBcmcsIFBSQm9v bCBjdHJsS2V5QXJnLCBQUkJvb2wgYWx0S2V5QXJnLCBQUkJvb2wgc2hpZnRLZXlBcmcsIFBSQm9v bCBtZXRhS2V5QXJnLCBQUlVpbnQxNiBidXR0b25BcmcsIG5zSURPTUV2ZW50VGFyZ2V0ICpyZWxh dGVkVGFyZ2V0QXJnKSA9IDA7Cgp9OwojIDE4MyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01NdXRhdGlvbkV2ZW50LmgiIDEKIyAyNSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01NdXRhdGlvbkV2ZW50LmgiCmNsYXNzIG5z SURPTU11dGF0aW9uRXZlbnQgOiBwdWJsaWMgbnNJRE9NRXZlbnQgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OGU0 NDBkODYsIDB4ODg2YSwgMHg0ZTc2LCB7IDB4OWUsIDB4NTksIDB4YzEsIDB4M2IsIDB4OTMsIDB4 OWMsIDB4OWEsIDB4NGIgfX07IHJldHVybiBpaWQ7fQoKICBlbnVtIHsgTU9ESUZJQ0FUSU9OID0g MVUgfTsKCiAgZW51bSB7IEFERElUSU9OID0gMlUgfTsKCiAgZW51bSB7IFJFTU9WQUwgPSAzVSB9 OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWxhdGVkTm9kZShuc0lET01Ob2RlICogKmFSZWxh dGVkTm9kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2VmFsdWUobnNBU3RyaW5n ICYgYVByZXZWYWx1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXdWYWx1ZShuc0FT dHJpbmcgJiBhTmV3VmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0ck5hbWUo bnNBU3RyaW5nICYgYUF0dHJOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJD aGFuZ2UoUFJVaW50MTYgKmFBdHRyQ2hhbmdlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElu aXRNdXRhdGlvbkV2ZW50KGNvbnN0IG5zQVN0cmluZyAmIHR5cGVBcmcsIFBSQm9vbCBjYW5CdWJi bGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnLCBuc0lET01Ob2RlICpyZWxhdGVkTm9kZUFyZywg Y29uc3QgbnNBU3RyaW5nICYgcHJldlZhbHVlQXJnLCBjb25zdCBuc0FTdHJpbmcgJiBuZXdWYWx1 ZUFyZywgY29uc3QgbnNBU3RyaW5nICYgYXR0ck5hbWVBcmcsIFBSVWludDE2IGF0dHJDaGFuZ2VB cmcpID0gMDsKCn07CiMgMTg0ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50U3R5bGUuaCIgMQojIDM0ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50U3R5bGUuaCIKY2xhc3MgbnNJRE9NRG9jdW1l bnRTdHlsZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzZDlmNDk3MywgMHhk ZDJlLCAweDQ4ZjUsIHsgMHhiNSwgMHhmNywgMHgyNiwgMHgzNCwgMHhlMCwgMHg5ZSwgMHhhZCwg MHhkOSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0eWxlU2hlZXRz KG5zSURPTVN0eWxlU2hlZXRMaXN0ICogKmFTdHlsZVNoZWV0cykgPSAwOwoKfTsKIyAxODUgIm5z RE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RG9jdW1lbnRSYW5nZS5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RG9jdW1lbnRSYW5nZS5oIgpjbGFzcyBuc0lET01Eb2N1bWVudFJhbmdlIDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweDdiOWJhZGM2LCAweGM5YmMsIDB4NDQ3YSwgeyAweDg2LCAw eDcwLCAweGRiLCAweGQxLCAweDk1LCAweGFlLCAweGQyLCAweDRiIH19OyByZXR1cm4gaWlkO30K CgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlUmFuZ2UobnNJRE9NUmFuZ2UgKipfcmV0dmFsKSA9 IDA7Cgp9OwojIDE4NiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01Eb2N1bWVudFRyYXZlcnNhbC5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NRG9jdW1lbnRUcmF2ZXJzYWwuaCIKY2xhc3MgbnNJRE9NTm9k ZUl0ZXJhdG9yOwoKY2xhc3MgbnNJRE9NTm9kZUZpbHRlcjsKCmNsYXNzIG5zSURPTVRyZWVXYWxr ZXI7CiMgMzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRG9jdW1lbnRUcmF2ZXJz YWwuaCIKY2xhc3MgbnNJRE9NRG9jdW1lbnRUcmF2ZXJzYWwgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4MTNmMjM2YzAsIDB4NDdmOCwgMHgxMWQ1LCB7IDB4YjYsIDB4YTMsIDB4 MDAsIDB4OTAsIDB4MjcsIDB4NDQsIDB4NmUsIDB4ODQgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBDcmVhdGVOb2RlSXRlcmF0b3IobnNJRE9NTm9kZSAqcm9vdCwgUFJVaW50 MzIgd2hhdFRvU2hvdywgbnNJRE9NTm9kZUZpbHRlciAqZmlsdGVyLCBQUkJvb2wgZW50aXR5UmVm ZXJlbmNlRXhwYW5zaW9uLCBuc0lET01Ob2RlSXRlcmF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVRyZWVXYWxrZXIobnNJRE9NTm9kZSAqcm9vdCwgUFJVaW50 MzIgd2hhdFRvU2hvdywgbnNJRE9NTm9kZUZpbHRlciAqZmlsdGVyLCBQUkJvb2wgZW50aXR5UmVm ZXJlbmNlRXhwYW5zaW9uLCBuc0lET01UcmVlV2Fsa2VyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAx ODcgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NRG9jdW1lbnRYQkwuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTURvY3VtZW50WEJMLmgiCmNsYXNzIG5zSURPTURvY3VtZW50WEJMIDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweGM3YzBhZTliLCAweGEwYmEsIDB4NGY0ZSwgeyAweDlmLCAw eDJjLCAweGMxLCAweDhkLCAweGViLCAweDYyLCAweGVlLCAweDhiIH19OyByZXR1cm4gaWlkO30K CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QW5vbnltb3VzTm9kZXMobnNJRE9NRWxlbWVudCAqZWx0 LCBuc0lET01Ob2RlTGlzdCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 QW5vbnltb3VzRWxlbWVudEJ5QXR0cmlidXRlKG5zSURPTUVsZW1lbnQgKmVsdCwgY29uc3QgbnNB U3RyaW5nICYgYXR0ck5hbWUsIGNvbnN0IG5zQVN0cmluZyAmIGF0dHJWYWx1ZSwgbnNJRE9NRWxl bWVudCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkQmluZGluZyhuc0lE T01FbGVtZW50ICplbHQsIGNvbnN0IG5zQVN0cmluZyAmIGJpbmRpbmdVUkwpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgUmVtb3ZlQmluZGluZyhuc0lET01FbGVtZW50ICplbHQsIGNvbnN0IG5z QVN0cmluZyAmIGJpbmRpbmdVUkwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmluZGlu Z1BhcmVudChuc0lET01Ob2RlICpub2RlLCBuc0lET01FbGVtZW50ICoqX3JldHZhbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBMb2FkQmluZGluZ0RvY3VtZW50KGNvbnN0IG5zQVN0cmluZyAm IGRvY3VtZW50VVJMLCBuc0lET01Eb2N1bWVudCAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTg4ICJu c0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TURvY3VtZW50Vmlldy5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N RG9jdW1lbnRWaWV3LmgiCmNsYXNzIG5zSURPTURvY3VtZW50VmlldyA6IHB1YmxpYyBuc0lTdXBw b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHgxYWNkYjJiYSwgMHgxZGQyLCAweDExYjIsIHsgMHg5NSwgMHhi YywgMHg5NSwgMHg0MiwgMHg0OSwgMHg1ZCwgMHgyNSwgMHg2OSB9fTsgcmV0dXJuIGlpZDt9CiMg NDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRG9jdW1lbnRWaWV3LmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0Vmlldyhuc0lET01BYnN0cmFjdFZpZXcgKiAqYURlZmF1 bHRWaWV3KSA9IDA7Cgp9OwojIDE4OSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGUuaCIgMQojIDI1 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZS5o IgpjbGFzcyBuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4OTk3MTU4NDUsIDB4OTVmYywgMHg0YTU2LCB7IDB4YWEsIDB4NTMsIDB4 MjEsIDB4NGIsIDB4NjUsIDB4YzIsIDB4NmUsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTdHlsZShuc0lET01DU1NTdHlsZURlY2xhcmF0aW9uICogKmFTdHls ZSkgPSAwOwoKfTsKIyAxOTAgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NTGlua1N0eWxlLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01MaW5rU3R5bGUuaCIKY2xhc3MgbnNJRE9NTGlua1N0eWxlIDogcHVi bGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDI0ZDg5YTY1LCAweGY1OTgsIDB4NDgxZSwg eyAweGEyLCAweDk3LCAweDIzLCAweGNjLCAweDAyLCAweDU5LCAweDliLCAweGJkIH19OyByZXR1 cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2hlZXQobnNJRE9NU3R5bGVTaGVldCAq ICphU2hlZXQpID0gMDsKCn07CiMgMTkxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxEb2N1bWVudC5oIiAxCiMgMzQgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTERvY3VtZW50LmgiCmNsYXNzIG5zSURPTUhU TUxEb2N1bWVudCA6IHB1YmxpYyBuc0lET01Eb2N1bWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA4 NCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRpdGxl KG5zQVN0cmluZyAmIGFUaXRsZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGl0bGUoY29u c3QgbnNBU3RyaW5nICYgYVRpdGxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlZmVy cmVyKG5zQVN0cmluZyAmIGFSZWZlcnJlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE b21haW4obnNBU3RyaW5nICYgYURvbWFpbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRV UkwobnNBU3RyaW5nICYgYVVSTCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb2R5KG5z SURPTUhUTUxFbGVtZW50ICogKmFCb2R5KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb2R5 KG5zSURPTUhUTUxFbGVtZW50ICogYUJvZHkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 SW1hZ2VzKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFJbWFnZXMpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0QXBwbGV0cyhuc0lET01IVE1MQ29sbGVjdGlvbiAqICphQXBwbGV0cykgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaW5rcyhuc0lET01IVE1MQ29sbGVjdGlvbiAqICph TGlua3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybXMobnNJRE9NSFRNTENvbGxl Y3Rpb24gKiAqYUZvcm1zKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFuY2hvcnMobnNJ RE9NSFRNTENvbGxlY3Rpb24gKiAqYUFuY2hvcnMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q29va2llKG5zQVN0cmluZyAmIGFDb29raWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dENvb2tpZShjb25zdCBuc0FTdHJpbmcgJiBhQ29va2llKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IE9wZW4odm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9zZSh2b2lkKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFdyaXRlKGNvbnN0IG5zQVN0cmluZyAmIHRleHQpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgV3JpdGVsbihjb25zdCBuc0FTdHJpbmcgJiB0ZXh0KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IG5zQVN0cmluZyAm IGVsZW1lbnROYW1lLCBuc0lET01Ob2RlTGlzdCAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTkyICJu c0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TU5TSFRNTERvY3VtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01OU0hUTUxEb2N1bWVudC5oIgpjbGFzcyBuc0lET01OU0hUTUxEb2N1bWVudCA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBjNSwgMHgxNWIzLCAweDExZDIsIHsgMHg5 MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlp ZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZHRoKFBSSW50MzIgKmFXaWR0aCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQoUFJJbnQzMiAqYUhlaWdodCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlua0NvbG9yKG5zQVN0cmluZyAmIGFBbGlua0NvbG9yKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbGlua0NvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFB bGlua0NvbG9yKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpbmtDb2xvcihuc0FTdHJp bmcgJiBhTGlua0NvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaW5rQ29sb3IoY29u c3QgbnNBU3RyaW5nICYgYUxpbmtDb2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRW bGlua0NvbG9yKG5zQVN0cmluZyAmIGFWbGlua0NvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRWbGlua0NvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFWbGlua0NvbG9yKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEJnQ29sb3IobnNBU3RyaW5nICYgYUJnQ29sb3IpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldEJnQ29sb3IoY29uc3QgbnNBU3RyaW5nICYgYUJnQ29sb3IpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmdDb2xvcihuc0FTdHJpbmcgJiBhRmdDb2xvcikg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmdDb2xvcihjb25zdCBuc0FTdHJpbmcgJiBhRmdD b2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXN0TW9kaWZpZWQobnNBU3RyaW5n ICYgYUxhc3RNb2RpZmllZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb21haW4obnNB U3RyaW5nICYgYURvbWFpbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RG9tYWluKGNvbnN0 IG5zQVN0cmluZyAmIGFEb21haW4pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW1iZWRz KG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFFbWJlZHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0U2VsZWN0aW9uKG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgT3Blbihuc0lET01Eb2N1bWVudCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgV3JpdGUodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXcml0ZWxuKHZvaWQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXIodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBDYXB0dXJlRXZlbnRzKFBSSW50MzIgZXZlbnRGbGFncykgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBSZWxlYXNlRXZlbnRzKFBSSW50MzIgZXZlbnRGbGFncykgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBSb3V0ZUV2ZW50KG5zSURPTUV2ZW50ICpldnQpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0Q29tcGF0TW9kZShuc0FTdHJpbmcgJiBhQ29tcGF0TW9kZSkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQbHVnaW5zKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFQ bHVnaW5zKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlc2lnbk1vZGUobnNBU3Ry aW5nICYgYURlc2lnbk1vZGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlc2lnbk1vZGUo Y29uc3QgbnNBU3RyaW5nICYgYURlc2lnbk1vZGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg RXhlY0NvbW1hbmQoY29uc3QgbnNBU3RyaW5nICYgY29tbWFuZElELCBQUkJvb2wgZG9TaG93VUks IGNvbnN0IG5zQVN0cmluZyAmIHZhbHVlLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgRXhlY0NvbW1hbmRTaG93SGVscChjb25zdCBuc0FTdHJpbmcgJiBjb21tYW5k SUQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBRdWVyeUNvbW1h bmRFbmFibGVkKGNvbnN0IG5zQVN0cmluZyAmIGNvbW1hbmRJRCwgUFJCb29sICpfcmV0dmFsKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFF1ZXJ5Q29tbWFuZEluZGV0ZXJtKGNvbnN0IG5zQVN0 cmluZyAmIGNvbW1hbmRJRCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IFF1ZXJ5Q29tbWFuZFN0YXRlKGNvbnN0IG5zQVN0cmluZyAmIGNvbW1hbmRJRCwgUFJCb29s ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFF1ZXJ5Q29tbWFuZFN1cHBvcnRl ZChjb25zdCBuc0FTdHJpbmcgJiBjb21tYW5kSUQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBRdWVyeUNvbW1hbmRUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGNvbW1h bmRJRCwgbnNBU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBRdWVy eUNvbW1hbmRWYWx1ZShjb25zdCBuc0FTdHJpbmcgJiBjb21tYW5kSUQsIG5zQVN0cmluZyAmIF9y ZXR2YWwpID0gMDsKCn07CiMgMTkzICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTEVsZW1lbnQuaCIgMQojIDI1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTEVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NTlNI VE1MRWxlbWVudCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkYTgzYjJlYywg MHg4MjY0LCAweDQ0MTAsIHsgMHg4NCwgMHg5NiwgMHhhZCwgMHhhMywgMHhhYywgMHhkMiwgMHhh ZSwgMHg0MiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNldFRv cChQUkludDMyICphT2Zmc2V0VG9wKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNl dExlZnQoUFJJbnQzMiAqYU9mZnNldExlZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 T2Zmc2V0V2lkdGgoUFJJbnQzMiAqYU9mZnNldFdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE9mZnNldEhlaWdodChQUkludDMyICphT2Zmc2V0SGVpZ2h0KSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE9mZnNldFBhcmVudChuc0lET01FbGVtZW50ICogKmFPZmZzZXRQYXJl bnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5uZXJIVE1MKG5zQVN0cmluZyAmIGFJ bm5lckhUTUwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldElubmVySFRNTChjb25zdCBuc0FT dHJpbmcgJiBhSW5uZXJIVE1MKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjcm9sbFRv cChQUkludDMyICphU2Nyb2xsVG9wKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JvbGxU b3AoUFJJbnQzMiBhU2Nyb2xsVG9wKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjcm9s bExlZnQoUFJJbnQzMiAqYVNjcm9sbExlZnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNj cm9sbExlZnQoUFJJbnQzMiBhU2Nyb2xsTGVmdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRTY3JvbGxIZWlnaHQoUFJJbnQzMiAqYVNjcm9sbEhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRTY3JvbGxXaWR0aChQUkludDMyICphU2Nyb2xsV2lkdGgpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0Q2xpZW50SGVpZ2h0KFBSSW50MzIgKmFDbGllbnRIZWlnaHQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xpZW50V2lkdGgoUFJJbnQzMiAqYUNsaWVudFdp ZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbEludG9WaWV3KFBSQm9vbCB0b3Ap ID0gMDsKCn07CiMgMTk0ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUhUTUxBbmNob3JFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MQW5jaG9yRWxlbWVudC5oIgpjbGFzcyBuc0lET01I VE1MQW5jaG9yRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHhhNmNmOTBhYSwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1 ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldEFjY2Vzc0tleShuc0FTdHJpbmcgJiBhQWNjZXNzS2V5KSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRBY2Nlc3NLZXkoY29uc3QgbnNBU3RyaW5nICYgYUFjY2Vzc0tleSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDaGFyc2V0KG5zQVN0cmluZyAmIGFDaGFyc2V0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRDaGFyc2V0KGNvbnN0IG5zQVN0cmluZyAmIGFDaGFyc2V0KSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvb3Jkcyhuc0FTdHJpbmcgJiBhQ29vcmRzKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb29yZHMoY29uc3QgbnNBU3RyaW5nICYgYUNvb3Jk cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIcmVmKG5zQVN0cmluZyAmIGFIcmVmKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIcmVmKGNvbnN0IG5zQVN0cmluZyAmIGFIcmVmKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhyZWZsYW5nKG5zQVN0cmluZyAmIGFIcmVmbGFu ZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SHJlZmxhbmcoY29uc3QgbnNBU3RyaW5nICYg YUhyZWZsYW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYg YU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYg YU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVsKG5zQVN0cmluZyAmIGFSZWwp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlbChjb25zdCBuc0FTdHJpbmcgJiBhUmVsKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJldihuc0FTdHJpbmcgJiBhUmV2KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRSZXYoY29uc3QgbnNBU3RyaW5nICYgYVJldikgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRTaGFwZShuc0FTdHJpbmcgJiBhU2hhcGUpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFNoYXBlKGNvbnN0IG5zQVN0cmluZyAmIGFTaGFwZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRUYWJJbmRleChQUkludDMyICphVGFiSW5kZXgpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldFRhYkluZGV4KFBSSW50MzIgYVRhYkluZGV4KSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFRhcmdldChuc0FTdHJpbmcgJiBhVGFyZ2V0KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRUYXJnZXQoY29uc3QgbnNBU3RyaW5nICYgYVRhcmdldCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUeXBlKG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRUeXBlKGNvbnN0IG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEJsdXIodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGb2N1 cyh2b2lkKSA9IDA7Cgp9OwojIDE5NSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxBbmNob3JFbGVtZW50LmgiIDEKIyAyNSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxBbmNob3JFbGVtZW50LmgiCmNs YXNzIG5zSURPTU5TSFRNTEFuY2hvckVsZW1lbnQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4YTZjZjkxMWMsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4 ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRQcm90b2NvbChuc0FTdHJpbmcgJiBhUHJvdG9jb2wpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFByb3RvY29sKGNvbnN0IG5zQVN0cmluZyAmIGFQcm90b2NvbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIb3N0KG5zQVN0cmluZyAmIGFIb3N0KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRIb3N0KGNvbnN0IG5zQVN0cmluZyAmIGFIb3N0KSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEhvc3RuYW1lKG5zQVN0cmluZyAmIGFIb3N0bmFtZSkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0SG9zdG5hbWUoY29uc3QgbnNBU3RyaW5nICYgYUhvc3RuYW1l KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhdGhuYW1lKG5zQVN0cmluZyAmIGFQYXRo bmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGF0aG5hbWUoY29uc3QgbnNBU3RyaW5n ICYgYVBhdGhuYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlYXJjaChuc0FTdHJp bmcgJiBhU2VhcmNoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTZWFyY2goY29uc3QgbnNB U3RyaW5nICYgYVNlYXJjaCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQb3J0KG5zQVN0 cmluZyAmIGFQb3J0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQb3J0KGNvbnN0IG5zQVN0 cmluZyAmIGFQb3J0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhhc2gobnNBU3RyaW5n ICYgYUhhc2gpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhhc2goY29uc3QgbnNBU3RyaW5n ICYgYUhhc2gpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4dChuc0FTdHJpbmcgJiBh VGV4dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhuc0FTdHJpbmcgJiBfcmV0 dmFsKSA9IDA7Cgp9OwojIDE5NiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MQXBwbGV0RWxlbWVudC5oIiAxCiMgMzQgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEFwcGxldEVsZW1lbnQuaCIKY2xhc3MgbnNJ RE9NSFRNTEFwcGxldEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGlj OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0gezB4YTZjZjkwYWUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAs IDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRBbGlnbihuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldEFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRBbHQobnNBU3RyaW5nICYgYUFsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 QWx0KGNvbnN0IG5zQVN0cmluZyAmIGFBbHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 QXJjaGl2ZShuc0FTdHJpbmcgJiBhQXJjaGl2ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 QXJjaGl2ZShjb25zdCBuc0FTdHJpbmcgJiBhQXJjaGl2ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDb2RlKG5zQVN0cmluZyAmIGFDb2RlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRDb2RlKGNvbnN0IG5zQVN0cmluZyAmIGFDb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldENvZGVCYXNlKG5zQVN0cmluZyAmIGFDb2RlQmFzZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0Q29kZUJhc2UoY29uc3QgbnNBU3RyaW5nICYgYUNvZGVCYXNlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEhlaWdodChuc0FTdHJpbmcgJiBhSGVpZ2h0KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRIZWlnaHQoY29uc3QgbnNBU3RyaW5nICYgYUhlaWdodCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRIc3BhY2UoUFJJbnQzMiAqYUhzcGFjZSkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0SHNwYWNlKFBSSW50MzIgYUhzcGFjZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXROYW1lKG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXROYW1lKGNvbnN0IG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE9iamVjdChuc0FTdHJpbmcgJiBhT2JqZWN0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRPYmplY3QoY29uc3QgbnNBU3RyaW5nICYgYU9iamVjdCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRWc3BhY2UoUFJJbnQzMiAqYVZzcGFjZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0VnNwYWNlKFBSSW50MzIgYVZzcGFjZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRXaWR0aChuc0FTdHJpbmcgJiBhV2lkdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdp ZHRoKGNvbnN0IG5zQVN0cmluZyAmIGFXaWR0aCkgPSAwOwoKfTsKIyAxOTcgIm5zRE9NQ2xhc3NJ bmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEFyZWFF bGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MQXJl YUVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTEFyZWFFbGVtZW50IDogcHVibGljIG5zSURPTUhU TUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGIwLCAweDE1YjMsIDB4MTFkMiwgeyAweDkz LCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlk O30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWNjZXNzS2V5KG5zQVN0cmluZyAmIGFBY2Nlc3NL ZXkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2Vzc0tleShjb25zdCBuc0FTdHJpbmcg JiBhQWNjZXNzS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsdChuc0FTdHJpbmcg JiBhQWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbHQoY29uc3QgbnNBU3RyaW5nICYg YUFsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb29yZHMobnNBU3RyaW5nICYgYUNv b3JkcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29vcmRzKGNvbnN0IG5zQVN0cmluZyAm IGFDb29yZHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SHJlZihuc0FTdHJpbmcgJiBh SHJlZikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SHJlZihjb25zdCBuc0FTdHJpbmcgJiBh SHJlZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb0hyZWYoUFJCb29sICphTm9IcmVm KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROb0hyZWYoUFJCb29sIGFOb0hyZWYpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2hhcGUobnNBU3RyaW5nICYgYVNoYXBlKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRTaGFwZShjb25zdCBuc0FTdHJpbmcgJiBhU2hhcGUpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFiSW5kZXgoUFJJbnQzMiAqYVRhYkluZGV4KSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUYWJJbmRleChQUkludDMyIGFUYWJJbmRleCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUYXJnZXQobnNBU3RyaW5nICYgYVRhcmdldCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0VGFyZ2V0KGNvbnN0IG5zQVN0cmluZyAmIGFUYXJnZXQpID0g MDsKCn07CiMgMTk4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvZG9tL25zSURPTU5TSFRNTEFyZWFFbGVtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxBcmVhRWxlbWVudC5oIgpjbGFzcyBuc0lET01OU0hU TUxBcmVhRWxlbWVudCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTEx YiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3Rv Y29sKG5zQVN0cmluZyAmIGFQcm90b2NvbCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJv dG9jb2woY29uc3QgbnNBU3RyaW5nICYgYVByb3RvY29sKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldEhvc3QobnNBU3RyaW5nICYgYUhvc3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dEhvc3QoY29uc3QgbnNBU3RyaW5nICYgYUhvc3QpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0SG9zdG5hbWUobnNBU3RyaW5nICYgYUhvc3RuYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRIb3N0bmFtZShjb25zdCBuc0FTdHJpbmcgJiBhSG9zdG5hbWUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UGF0aG5hbWUobnNBU3RyaW5nICYgYVBhdGhuYW1lKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRQYXRobmFtZShjb25zdCBuc0FTdHJpbmcgJiBhUGF0aG5hbWUpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VhcmNoKG5zQVN0cmluZyAmIGFTZWFyY2gpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNlYXJjaChjb25zdCBuc0FTdHJpbmcgJiBhU2VhcmNo KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBvcnQobnNBU3RyaW5nICYgYVBvcnQpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBvcnQoY29uc3QgbnNBU3RyaW5nICYgYVBvcnQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGFzaChuc0FTdHJpbmcgJiBhSGFzaCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0SGFzaChjb25zdCBuc0FTdHJpbmcgJiBhSGFzaCkgPSAwOwoK fTsKIyAxOTkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NSFRNTEJSRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NSFRNTEJSRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MQlJFbGVtZW50IDog cHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGE1LCAweDE1YjMs IDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMy IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xlYXIobnNBU3RyaW5n ICYgYUNsZWFyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDbGVhcihjb25zdCBuc0FTdHJp bmcgJiBhQ2xlYXIpID0gMDsKCn07CiMgMjAwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxCYXNlRWxlbWVudC5oIiAxCiMgMzQg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEJhc2VFbGVtZW50LmgiCmNsYXNz IG5zSURPTUhUTUxCYXNlRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJs aWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp aWQgPSB7MHhhNmNmOTA4YiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4 MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEhyZWYobnNBU3RyaW5nICYgYUhyZWYpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldEhyZWYoY29uc3QgbnNBU3RyaW5nICYgYUhyZWYpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0VGFyZ2V0KG5zQVN0cmluZyAmIGFUYXJnZXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldFRhcmdldChjb25zdCBuc0FTdHJpbmcgJiBhVGFyZ2V0KSA9IDA7Cgp9OwojIDIwMSAibnNE T01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01I VE1MQmFzZUZvbnRFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lET01IVE1MQmFzZUZvbnRFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxCYXNlRm9udEVsZW1l bnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYTYsIDB4 MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQs IDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2xvcihuc0FT dHJpbmcgJiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbG9yKGNvbnN0IG5z QVN0cmluZyAmIGFDb2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGYWNlKG5zQVN0 cmluZyAmIGFGYWNlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGYWNlKGNvbnN0IG5zQVN0 cmluZyAmIGFGYWNlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUoUFJJbnQzMiAq YVNpemUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNpemUoUFJJbnQzMiBhU2l6ZSkgPSAw OwoKfTsKIyAyMDIgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS9kb20vbnNJRE9NSFRNTEJvZHlFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01IVE1MQm9keUVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTEJvZHlF bGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDhl LCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAw eGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QUxpbmso bnNBU3RyaW5nICYgYUFMaW5rKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBTGluayhjb25z dCBuc0FTdHJpbmcgJiBhQUxpbmspID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFja2dy b3VuZChuc0FTdHJpbmcgJiBhQmFja2dyb3VuZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 QmFja2dyb3VuZChjb25zdCBuc0FTdHJpbmcgJiBhQmFja2dyb3VuZCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRCZ0NvbG9yKG5zQVN0cmluZyAmIGFCZ0NvbG9yKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRCZ0NvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFCZ0NvbG9yKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpbmsobnNBU3RyaW5nICYgYUxpbmspID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldExpbmsoY29uc3QgbnNBU3RyaW5nICYgYUxpbmspID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0VGV4dChuc0FTdHJpbmcgJiBhVGV4dCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0VGV4dChjb25zdCBuc0FTdHJpbmcgJiBhVGV4dCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRWTGluayhuc0FTdHJpbmcgJiBhVkxpbmspID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldFZMaW5rKGNvbnN0IG5zQVN0cmluZyAmIGFWTGluaykgPSAwOwoKfTsKIyAyMDMg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTEJ1dHRvbkVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t L25zSURPTUhUTUxCdXR0b25FbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxCdXR0b25FbGVtZW50 IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDk1LCAweDE1 YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAw eDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybShuc0lET01I VE1MRm9ybUVsZW1lbnQgKiAqYUZvcm0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWNj ZXNzS2V5KG5zQVN0cmluZyAmIGFBY2Nlc3NLZXkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dEFjY2Vzc0tleShjb25zdCBuc0FTdHJpbmcgJiBhQWNjZXNzS2V5KSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldERpc2FibGVkKFBSQm9vbCAqYURpc2FibGVkKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXREaXNhYmxlZChQUkJvb2wgYURpc2FibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0VGFiSW5kZXgoUFJJbnQzMiAqYVRhYkluZGV4KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRUYWJJbmRleChQUkludDMyIGFUYWJJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRUeXBlKG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFZhbHVlKG5zQVN0cmluZyAmIGFWYWx1ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmFs dWUoY29uc3QgbnNBU3RyaW5nICYgYVZhbHVlKSA9IDA7Cgp9OwojIDIwNCAibnNET01DbGFzc0lu Zm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxCdXR0 b25FbGVtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hU TUxCdXR0b25FbGVtZW50LmgiCmNsYXNzIG5zSURPTU5TSFRNTEJ1dHRvbkVsZW1lbnQgOiBwdWJs aWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NmZkMzQ0ZDAsIDB4N2U1ZiwgMHgxMWQyLCB7 IDB4YmQsIDB4OTEsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZTMsIDB4ZjQgfX07IHJldHVy biBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBCbHVyKHZvaWQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgRm9jdXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbGljayh2b2lk KSA9IDA7Cgp9OwojIDIwNSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRExpc3RFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRExpc3RFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhU TUxETGlzdEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTZjZjkwOWIsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDb21wYWN0KFBSQm9vbCAqYUNvbXBhY3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENv bXBhY3QoUFJCb29sIGFDb21wYWN0KSA9IDA7Cgp9OwojIDIwNiAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRGlyZWN0b3J5RWxl bWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTERpcmVj dG9yeUVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTERpcmVjdG9yeUVsZW1lbnQgOiBwdWJsaWMg bnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwOWMsIDB4MTViMywgMHgxMWQy LCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJl dHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb21wYWN0KFBSQm9vbCAqYUNvbXBh Y3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbXBhY3QoUFJCb29sIGFDb21wYWN0KSA9 IDA7Cgp9OwojIDIwNyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01IVE1MRGl2RWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NSFRNTERpdkVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTERpdkVs ZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYTAs IDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4 ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlnbihu c0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsaWduKGNvbnN0 IG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwoKfTsKIyAyMDggIm5zRE9NQ2xhc3NJbmZvLmNwcCIg MgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEVtYmVkRWxlbWVudC5o IiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEVtYmVkRWxlbWVu dC5oIgpjbGFzcyBuc0lET01IVE1MRW1iZWRFbGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVt ZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweDEyM2Y5MGFiLCAweDE1YjMsIDB4MTFkMiwgeyAweDQ1LCAweDZl LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0QWxpZ24obnNBU3RyaW5nICYgYUFsaWduKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRBbGlnbihjb25zdCBuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVpZ2h0KG5zQVN0cmluZyAmIGFIZWlnaHQpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldEhlaWdodChjb25zdCBuc0FTdHJpbmcgJiBhSGVpZ2h0KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0U3JjKG5zQVN0cmluZyAmIGFTcmMpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFNyYyhjb25zdCBuc0FTdHJpbmcgJiBhU3JjKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFR5cGUobnNBU3RyaW5nICYgYVR5cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldFR5cGUoY29uc3QgbnNBU3RyaW5nICYgYVR5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0V2lkdGgobnNBU3RyaW5nICYgYVdpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRXaWR0aChjb25zdCBuc0FTdHJpbmcgJiBhV2lkdGgpID0gMDsKCn07CiMgMjA5ICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhU TUxGaWVsZFNldEVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUhUTUxGaWVsZFNldEVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTEZpZWxkU2V0RWxlbWVu dCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA5NywgMHgx NWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwg MHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvcm0obnNJRE9N SFRNTEZvcm1FbGVtZW50ICogKmFGb3JtKSA9IDA7Cgp9OwojIDIxMCAibnNET01DbGFzc0luZm8u Y3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRm9udEVsZW1l bnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxGb250RWxl bWVudC5oIgpjbGFzcyBuc0lET01IVE1MRm9udEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVs ZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYTcsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4 MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2xvcihuc0FTdHJpbmcgJiBhQ29sb3IpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldENvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFDb2xvcikgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGYWNlKG5zQVN0cmluZyAmIGFGYWNlKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRGYWNlKGNvbnN0IG5zQVN0cmluZyAmIGFGYWNlKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUobnNBU3RyaW5nICYgYVNpemUpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFNpemUoY29uc3QgbnNBU3RyaW5nICYgYVNpemUpID0gMDsKCn07CiMgMjEx ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTU5TSFRNTEZvcm1FbGVtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lET01OU0hUTUxGb3JtRWxlbWVudC5oIgpjbGFzcyBuc0lET01OU0hUTUxGb3JtRWxlbWVu dCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBjNiwgMHgxNWIzLCAw eDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9 fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVuY29kaW5nKG5zQVN0cmlu ZyAmIGFFbmNvZGluZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RW5jb2RpbmcoY29uc3Qg bnNBU3RyaW5nICYgYUVuY29kaW5nKSA9IDA7Cgp9OwojIDIxMiAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRnJhbWVFbGVtZW50 LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRnJhbWVFbGVt ZW50LmgiCmNsYXNzIG5zSURPTUhUTUxGcmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVs ZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYjksIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4 MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUJvcmRlcihuc0FTdHJpbmcgJiBhRnJhbWVCb3Jk ZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZyYW1lQm9yZGVyKGNvbnN0IG5zQVN0cmlu ZyAmIGFGcmFtZUJvcmRlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb25nRGVzYyhu c0FTdHJpbmcgJiBhTG9uZ0Rlc2MpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExvbmdEZXNj KGNvbnN0IG5zQVN0cmluZyAmIGFMb25nRGVzYykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRNYXJnaW5IZWlnaHQobnNBU3RyaW5nICYgYU1hcmdpbkhlaWdodCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0TWFyZ2luSGVpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFNYXJnaW5IZWlnaHQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFyZ2luV2lkdGgobnNBU3RyaW5nICYgYU1h cmdpbldpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNYXJnaW5XaWR0aChjb25zdCBu c0FTdHJpbmcgJiBhTWFyZ2luV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFt ZShuc0FTdHJpbmcgJiBhTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TmFtZShjb25z dCBuc0FTdHJpbmcgJiBhTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb1Jlc2l6 ZShQUkJvb2wgKmFOb1Jlc2l6ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Tm9SZXNpemUo UFJCb29sIGFOb1Jlc2l6ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JvbGxpbmco bnNBU3RyaW5nICYgYVNjcm9sbGluZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2Nyb2xs aW5nKGNvbnN0IG5zQVN0cmluZyAmIGFTY3JvbGxpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0U3JjKG5zQVN0cmluZyAmIGFTcmMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNy Yyhjb25zdCBuc0FTdHJpbmcgJiBhU3JjKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENv bnRlbnREb2N1bWVudChuc0lET01Eb2N1bWVudCAqICphQ29udGVudERvY3VtZW50KSA9IDA7Cgp9 OwojIDIxMyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2RvbS9uc0lET01IVE1MRnJhbWVTZXRFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2RvbS9uc0lET01IVE1MRnJhbWVTZXRFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxG cmFtZVNldEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTZjZjkwYjgsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDb2xzKG5zQVN0cmluZyAmIGFDb2xzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb2xz KGNvbnN0IG5zQVN0cmluZyAmIGFDb2xzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJv d3MobnNBU3RyaW5nICYgYVJvd3MpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJvd3MoY29u c3QgbnNBU3RyaW5nICYgYVJvd3MpID0gMDsKCn07CiMgMjE0ICJuc0RPTUNsYXNzSW5mby5jcHAi IDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTEZyYW1lRWxlbWVu dC5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNIVE1MRnJhbWVF bGVtZW50LmgiCmNsYXNzIG5zSURPTU5TSFRNTEZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0lTdXBw b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHhkNjdiZDI2NywgMHhmOTg0LCAweDQ5OTMsIHsgMHhiMywgMHg3 OCwgMHg5NSwgMHg4NSwgMHgxYiwgMHg3MSwgMHhmMCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRXaW5kb3cobnNJRE9NV2luZG93ICogKmFDb250 ZW50V2luZG93KSA9IDA7Cgp9OwojIDIxNSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MSFJFbGVtZW50LmgiIDEKIyAzNCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MSFJFbGVtZW50LmgiCmNsYXNzIG5zSURP TUhUTUxIUkVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 YTZjZjkwYTgsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRBbGlnbihuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFs aWduKGNvbnN0IG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXROb1NoYWRlKFBSQm9vbCAqYU5vU2hhZGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5v U2hhZGUoUFJCb29sIGFOb1NoYWRlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUo bnNBU3RyaW5nICYgYVNpemUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNpemUoY29uc3Qg bnNBU3RyaW5nICYgYVNpemUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgobnNB U3RyaW5nICYgYVdpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRXaWR0aChjb25zdCBu c0FTdHJpbmcgJiBhV2lkdGgpID0gMDsKCn07CiMgMjE2ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIK IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxIZWFkRWxlbWVudC5oIiAx CiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEhlYWRFbGVtZW50Lmgi CmNsYXNzIG5zSURPTUhUTUxIZWFkRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHhhNmNmOTA4NywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgw MCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFByb2ZpbGUobnNBU3RyaW5nICYgYVByb2ZpbGUpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFByb2ZpbGUoY29uc3QgbnNBU3RyaW5nICYgYVByb2ZpbGUpID0gMDsK Cn07CiMgMjE3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUhUTUxIZWFkaW5nRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NSFRNTEhlYWRpbmdFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxI ZWFkaW5nRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhh NmNmOTBhMiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1Ziwg MHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEFsaWduKG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxp Z24oY29uc3QgbnNBU3RyaW5nICYgYUFsaWduKSA9IDA7Cgp9OwojIDIxOCAibnNET01DbGFzc0lu Zm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MSHRtbEVs ZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxIdG1s RWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MSHRtbEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRN TEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwODYsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMs IDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7 fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWZXJzaW9uKG5zQVN0cmluZyAmIGFWZXJzaW9uKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWZXJzaW9uKGNvbnN0IG5zQVN0cmluZyAmIGFWZXJz aW9uKSA9IDA7Cgp9OwojIDIxOSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKY2xhc3MgbnNJ RE9NSFRNTElGcmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGlj OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0gezB4YTZjZjkwYmEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAs IDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRBbGlnbihuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldEFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRGcmFtZUJvcmRlcihuc0FTdHJpbmcgJiBhRnJhbWVCb3JkZXIpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldEZyYW1lQm9yZGVyKGNvbnN0IG5zQVN0cmluZyAmIGFGcmFtZUJvcmRl cikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQobnNBU3RyaW5nICYgYUhlaWdo dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SGVpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFI ZWlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9uZ0Rlc2MobnNBU3RyaW5nICYg YUxvbmdEZXNjKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMb25nRGVzYyhjb25zdCBuc0FT dHJpbmcgJiBhTG9uZ0Rlc2MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFyZ2luSGVp Z2h0KG5zQVN0cmluZyAmIGFNYXJnaW5IZWlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dE1hcmdpbkhlaWdodChjb25zdCBuc0FTdHJpbmcgJiBhTWFyZ2luSGVpZ2h0KSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldE1hcmdpbldpZHRoKG5zQVN0cmluZyAmIGFNYXJnaW5XaWR0aCkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWFyZ2luV2lkdGgoY29uc3QgbnNBU3RyaW5nICYg YU1hcmdpbldpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5n ICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5n ICYgYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2Nyb2xsaW5nKG5zQVN0cmlu ZyAmIGFTY3JvbGxpbmcpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcm9sbGluZyhjb25z dCBuc0FTdHJpbmcgJiBhU2Nyb2xsaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNy Yyhuc0FTdHJpbmcgJiBhU3JjKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTcmMoY29uc3Qg bnNBU3RyaW5nICYgYVNyYykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaWR0aChuc0FT dHJpbmcgJiBhV2lkdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpZHRoKGNvbnN0IG5z QVN0cmluZyAmIGFXaWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50RG9j dW1lbnQobnNJRE9NRG9jdW1lbnQgKiAqYUNvbnRlbnREb2N1bWVudCkgPSAwOwoKfTsKIyAyMjAg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTEltYWdlRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NSFRNTEltYWdlRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MSW1hZ2VFbGVtZW50IDog cHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGFiLCAweDE1YjMs IDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMy IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShuc0FTdHJpbmcg JiBhTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TmFtZShjb25zdCBuc0FTdHJpbmcg JiBhTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlnbihuc0FTdHJpbmcgJiBh QWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsaWduKGNvbnN0IG5zQVN0cmluZyAm IGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbHQobnNBU3RyaW5nICYgYUFs dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWx0KGNvbnN0IG5zQVN0cmluZyAmIGFBbHQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyKG5zQVN0cmluZyAmIGFCb3JkZXIp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlcihjb25zdCBuc0FTdHJpbmcgJiBhQm9y ZGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhlaWdodChQUkludDMyICphSGVpZ2h0 KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIZWlnaHQoUFJJbnQzMiBhSGVpZ2h0KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhzcGFjZShQUkludDMyICphSHNwYWNlKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRIc3BhY2UoUFJJbnQzMiBhSHNwYWNlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldElzTWFwKFBSQm9vbCAqYUlzTWFwKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRJc01hcChQUkJvb2wgYUlzTWFwKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dExvbmdEZXNjKG5zQVN0cmluZyAmIGFMb25nRGVzYykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0TG9uZ0Rlc2MoY29uc3QgbnNBU3RyaW5nICYgYUxvbmdEZXNjKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFNyYyhuc0FTdHJpbmcgJiBhU3JjKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRTcmMoY29uc3QgbnNBU3RyaW5nICYgYVNyYykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRVc2VNYXAobnNBU3RyaW5nICYgYVVzZU1hcCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0VXNlTWFwKGNvbnN0IG5zQVN0cmluZyAmIGFVc2VNYXApID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0VnNwYWNlKFBSSW50MzIgKmFWc3BhY2UpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldFZzcGFjZShQUkludDMyIGFWc3BhY2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 V2lkdGgoUFJJbnQzMiAqYVdpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRXaWR0aChQ UkludDMyIGFXaWR0aCkgPSAwOwoKfTsKIyAyMjEgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNIVE1MSW1hZ2VFbGVtZW50LmgiIDEK IyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxJbWFnZUVsZW1lbnQu aCIKY2xhc3MgbnNJRE9NTlNIVE1MSW1hZ2VFbGVtZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGE2Y2Y5MGM3LCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAw LCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0Q29tcGxldGUoUFJCb29sICphQ29tcGxldGUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TmF0dXJhbEhlaWdodChQUkludDMyICphTmF0dXJhbEhlaWdodCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYXR1cmFsV2lkdGgoUFJJbnQzMiAqYU5hdHVyYWxX aWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRYKFBSSW50MzIgKmFYKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFkoUFJJbnQzMiAqYVkpID0gMDsKCn07CiMgMjIyICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhU TUxJbnB1dEVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TUhUTUxJbnB1dEVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTElucHV0RWxlbWVudCA6IHB1Ymxp YyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA5MywgMHgxNWIzLCAweDEx ZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRWYWx1ZShuc0FTdHJp bmcgJiBhRGVmYXVsdFZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0VmFs dWUoY29uc3QgbnNBU3RyaW5nICYgYURlZmF1bHRWYWx1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXREZWZhdWx0Q2hlY2tlZChQUkJvb2wgKmFEZWZhdWx0Q2hlY2tlZCkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdENoZWNrZWQoUFJCb29sIGFEZWZhdWx0Q2hlY2tlZCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb3JtKG5zSURPTUhUTUxGb3JtRWxlbWVudCAq ICphRm9ybSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBY2NlcHQobnNBU3RyaW5nICYg YUFjY2VwdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWNjZXB0KGNvbnN0IG5zQVN0cmlu ZyAmIGFBY2NlcHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWNjZXNzS2V5KG5zQVN0 cmluZyAmIGFBY2Nlc3NLZXkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2Vzc0tleShj b25zdCBuc0FTdHJpbmcgJiBhQWNjZXNzS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEFsaWduKG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxp Z24oY29uc3QgbnNBU3RyaW5nICYgYUFsaWduKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEFsdChuc0FTdHJpbmcgJiBhQWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbHQoY29u c3QgbnNBU3RyaW5nICYgYUFsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGVja2Vk KFBSQm9vbCAqYUNoZWNrZWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoZWNrZWQoUFJC b29sIGFDaGVja2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpc2FibGVkKFBSQm9v bCAqYURpc2FibGVkKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXNhYmxlZChQUkJvb2wg YURpc2FibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1heExlbmd0aChQUkludDMy ICphTWF4TGVuZ3RoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNYXhMZW5ndGgoUFJJbnQz MiBhTWF4TGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5n ICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5n ICYgYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVhZE9ubHkoUFJCb29sICph UmVhZE9ubHkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlYWRPbmx5KFBSQm9vbCBhUmVh ZE9ubHkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2l6ZShQUlVpbnQzMiAqYVNpemUp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNpemUoUFJVaW50MzIgYVNpemUpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0U3JjKG5zQVN0cmluZyAmIGFTcmMpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFNyYyhjb25zdCBuc0FTdHJpbmcgJiBhU3JjKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFRhYkluZGV4KFBSSW50MzIgKmFUYWJJbmRleCkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0VGFiSW5kZXgoUFJJbnQzMiBhVGFiSW5kZXgpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0VHlwZShuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0VHlwZShjb25zdCBuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRVc2VNYXAobnNBU3RyaW5nICYgYVVzZU1hcCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0VXNlTWFwKGNvbnN0IG5zQVN0cmluZyAmIGFVc2VNYXApID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0VmFsdWUobnNBU3RyaW5nICYgYVZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRWYWx1ZShjb25zdCBuc0FTdHJpbmcgJiBhVmFsdWUpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgQmx1cih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZvY3VzKHZvaWQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0KHZvaWQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgQ2xpY2sodm9pZCkgPSAwOwoKfTsKIyAyMjMgIm5zRE9NQ2xhc3NJbmZvLmNwcCIg MgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNIVE1MSW5wdXRFbGVtZW50 LmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxJbnB1dEVs ZW1lbnQuaCIKY2xhc3MgbnNJQ29udHJvbGxlcnM7CiMgMjcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NTlNIVE1MSW5wdXRFbGVtZW50LmgiCmNsYXNzIG5zSURPTU5TSFRNTElucHV0 RWxlbWVudCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5OTNkMmVmYywgMHhh NzY4LCAweDExZDMsIHsgMHhiYywgMHhjZCwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHg3Niwg MHhiZCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRyb2xsZXJz KG5zSUNvbnRyb2xsZXJzICogKmFDb250cm9sbGVycykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRUZXh0TGVuZ3RoKFBSSW50MzIgKmFUZXh0TGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFNlbGVjdGlvblN0YXJ0KFBSSW50MzIgKmFTZWxlY3Rpb25TdGFydCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0aW9uU3RhcnQoUFJJbnQzMiBhU2VsZWN0aW9uU3Rh cnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9uRW5kKFBSSW50MzIgKmFT ZWxlY3Rpb25FbmQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNlbGVjdGlvbkVuZChQUklu dDMyIGFTZWxlY3Rpb25FbmQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0aW9u UmFuZ2UoUFJJbnQzMiBzZWxlY3Rpb25TdGFydCwgUFJJbnQzMiBzZWxlY3Rpb25FbmQpID0gMDsK Cn07CiMgMjI0ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUhUTUxJc0luZGV4RWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NSFRNTElzSW5kZXhFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxJ c0luZGV4RWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhh NmNmOTA4YywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1Ziwg MHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEZvcm0obnNJRE9NSFRNTEZvcm1FbGVtZW50ICogKmFGb3JtKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFByb21wdChuc0FTdHJpbmcgJiBhUHJvbXB0KSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRQcm9tcHQoY29uc3QgbnNBU3RyaW5nICYgYVByb21wdCkgPSAwOwoKfTsKIyAyMjUg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTExJRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTExJRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MTElFbGVtZW50IDogcHVibGljIG5z SURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDllLCAweDE1YjMsIDB4MTFkMiwg eyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1 cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShuc0FTdHJpbmcgJiBhVHlwZSkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VHlwZShjb25zdCBuc0FTdHJpbmcgJiBhVHlwZSkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShQUkludDMyICphVmFsdWUpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZhbHVlKFBSSW50MzIgYVZhbHVlKSA9IDA7Cgp9OwojIDIy NiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lET01IVE1MTGFiZWxFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lET01IVE1MTGFiZWxFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxMYWJlbEVsZW1lbnQg OiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwOTYsIDB4MTVi MywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4 MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb3JtKG5zSURPTUhU TUxGb3JtRWxlbWVudCAqICphRm9ybSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBY2Nl c3NLZXkobnNBU3RyaW5nICYgYUFjY2Vzc0tleSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 QWNjZXNzS2V5KGNvbnN0IG5zQVN0cmluZyAmIGFBY2Nlc3NLZXkpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0SHRtbEZvcihuc0FTdHJpbmcgJiBhSHRtbEZvcikgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0SHRtbEZvcihjb25zdCBuc0FTdHJpbmcgJiBhSHRtbEZvcikgPSAwOwoKfTsK IyAyMjcgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NSFRNTExlZ2VuZEVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1 ZGUvZG9tL25zSURPTUhUTUxMZWdlbmRFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxMZWdlbmRF bGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDk4 LCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAw eGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybShu c0lET01IVE1MRm9ybUVsZW1lbnQgKiAqYUZvcm0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0QWNjZXNzS2V5KG5zQVN0cmluZyAmIGFBY2Nlc3NLZXkpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldEFjY2Vzc0tleShjb25zdCBuc0FTdHJpbmcgJiBhQWNjZXNzS2V5KSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWduKG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29uc3QgbnNBU3RyaW5nICYgYUFsaWduKSA9IDA7Cgp9Owoj IDIyOCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv bS9uc0lET01IVE1MTGlua0VsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTUhUTUxMaW5rRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MTGlua0VsZW1lbnQg OiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwODgsIDB4MTVi MywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4 MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNhYmxlZChQUkJv b2wgKmFEaXNhYmxlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlzYWJsZWQoUFJCb29s IGFEaXNhYmxlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGFyc2V0KG5zQVN0cmlu ZyAmIGFDaGFyc2V0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDaGFyc2V0KGNvbnN0IG5z QVN0cmluZyAmIGFDaGFyc2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhyZWYobnNB U3RyaW5nICYgYUhyZWYpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhyZWYoY29uc3QgbnNB U3RyaW5nICYgYUhyZWYpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SHJlZmxhbmcobnNB U3RyaW5nICYgYUhyZWZsYW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIcmVmbGFuZyhj b25zdCBuc0FTdHJpbmcgJiBhSHJlZmxhbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TWVkaWEobnNBU3RyaW5nICYgYU1lZGlhKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNZWRp YShjb25zdCBuc0FTdHJpbmcgJiBhTWVkaWEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 UmVsKG5zQVN0cmluZyAmIGFSZWwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlbChjb25z dCBuc0FTdHJpbmcgJiBhUmVsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJldihuc0FT dHJpbmcgJiBhUmV2KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSZXYoY29uc3QgbnNBU3Ry aW5nICYgYVJldikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUYXJnZXQobnNBU3RyaW5n ICYgYVRhcmdldCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGFyZ2V0KGNvbnN0IG5zQVN0 cmluZyAmIGFUYXJnZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShuc0FTdHJp bmcgJiBhVHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VHlwZShjb25zdCBuc0FTdHJp bmcgJiBhVHlwZSkgPSAwOwoKfTsKIyAyMjkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4u Ly4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTE1hcEVsZW1lbnQuaCIgMQojIDM0ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxNYXBFbGVtZW50LmgiCmNsYXNzIG5z SURPTUhUTUxNYXBFbGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoK CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9 IHsweGE2Y2Y5MGFmLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAw eDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0QXJlYXMobnNJRE9NSFRNTENvbGxlY3Rpb24gKiAqYUFyZWFzKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCn07CiMgMjMwICJu c0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TUhUTUxNZW51RWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTE1lbnVFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxNZW51RWxlbWVudCA6IHB1Ymxp YyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA5ZCwgMHgxNWIzLCAweDEx ZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbXBhY3QoUFJCb29sICphQ29t cGFjdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29tcGFjdChQUkJvb2wgYUNvbXBhY3Qp ID0gMDsKCn07CiMgMjMxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUhUTUxNZXRhRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTE1ldGFFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxN ZXRhRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNm OTA4YSwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4 YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENv bnRlbnQobnNBU3RyaW5nICYgYUNvbnRlbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENv bnRlbnQoY29uc3QgbnNBU3RyaW5nICYgYUNvbnRlbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0SHR0cEVxdWl2KG5zQVN0cmluZyAmIGFIdHRwRXF1aXYpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldEh0dHBFcXVpdihjb25zdCBuc0FTdHJpbmcgJiBhSHR0cEVxdWl2KSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0U2NoZW1lKG5zQVN0cmluZyAmIGFTY2hlbWUpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFNjaGVtZShjb25zdCBuc0FTdHJpbmcgJiBhU2NoZW1lKSA9IDA7Cgp9 OwojIDIzMiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2RvbS9uc0lET01IVE1MTW9kRWxlbWVudC5oIiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NSFRNTE1vZEVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTE1vZEVsZW1lbnQg OiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYTksIDB4MTVi MywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4 MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaXRlKG5zQVN0cmlu ZyAmIGFDaXRlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDaXRlKGNvbnN0IG5zQVN0cmlu ZyAmIGFDaXRlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGVUaW1lKG5zQVN0cmlu ZyAmIGFEYXRlVGltZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0ZVRpbWUoY29uc3Qg bnNBU3RyaW5nICYgYURhdGVUaW1lKSA9IDA7Cgp9OwojIDIzMyAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MT0xpc3RFbGVtZW50 LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MT0xpc3RFbGVt ZW50LmgiCmNsYXNzIG5zSURPTUhUTUxPTGlzdEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVs ZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwOWEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4 MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb21wYWN0KFBSQm9vbCAqYUNvbXBhY3QpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldENvbXBhY3QoUFJCb29sIGFDb21wYWN0KSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFN0YXJ0KFBSSW50MzIgKmFTdGFydCkgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0U3RhcnQoUFJJbnQzMiBhU3RhcnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0VHlwZShuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VHlw ZShjb25zdCBuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKfTsKIyAyMzQgIm5zRE9NQ2xhc3NJbmZv LmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTE9iamVjdEVs ZW1lbnQuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxPYmpl Y3RFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxPYmplY3RFbGVtZW50IDogcHVibGljIG5zSURP TUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7 c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGFjLCAweDE1YjMsIDB4MTFkMiwgeyAw eDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4g aWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybShuc0lET01IVE1MRm9ybUVsZW1lbnQg KiAqYUZvcm0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29kZShuc0FTdHJpbmcgJiBh Q29kZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29kZShjb25zdCBuc0FTdHJpbmcgJiBh Q29kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlnbihuc0FTdHJpbmcgJiBhQWxp Z24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFB bGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmNoaXZlKG5zQVN0cmluZyAmIGFB cmNoaXZlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBcmNoaXZlKGNvbnN0IG5zQVN0cmlu ZyAmIGFBcmNoaXZlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJvcmRlcihuc0FTdHJp bmcgJiBhQm9yZGVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXIoY29uc3QgbnNB U3RyaW5nICYgYUJvcmRlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2RlQmFzZShu c0FTdHJpbmcgJiBhQ29kZUJhc2UpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvZGVCYXNl KGNvbnN0IG5zQVN0cmluZyAmIGFDb2RlQmFzZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRDb2RlVHlwZShuc0FTdHJpbmcgJiBhQ29kZVR5cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldENvZGVUeXBlKGNvbnN0IG5zQVN0cmluZyAmIGFDb2RlVHlwZSkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXREYXRhKG5zQVN0cmluZyAmIGFEYXRhKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXREYXRhKGNvbnN0IG5zQVN0cmluZyAmIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldERlY2xhcmUoUFJCb29sICphRGVjbGFyZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0RGVjbGFyZShQUkJvb2wgYURlY2xhcmUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0SGVpZ2h0KG5zQVN0cmluZyAmIGFIZWlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dEhlaWdodChjb25zdCBuc0FTdHJpbmcgJiBhSGVpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldEhzcGFjZShQUkludDMyICphSHNwYWNlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRIc3BhY2UoUFJJbnQzMiBhSHNwYWNlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5h bWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29u c3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhbmRi eShuc0FTdHJpbmcgJiBhU3RhbmRieSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3RhbmRi eShjb25zdCBuc0FTdHJpbmcgJiBhU3RhbmRieSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRUYWJJbmRleChQUkludDMyICphVGFiSW5kZXgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dFRhYkluZGV4KFBSSW50MzIgYVRhYkluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFR5cGUobnNBU3RyaW5nICYgYVR5cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFR5cGUo Y29uc3QgbnNBU3RyaW5nICYgYVR5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VXNl TWFwKG5zQVN0cmluZyAmIGFVc2VNYXApID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFVzZU1h cChjb25zdCBuc0FTdHJpbmcgJiBhVXNlTWFwKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFZzcGFjZShQUkludDMyICphVnNwYWNlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWc3Bh Y2UoUFJJbnQzMiBhVnNwYWNlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZHRoKG5z QVN0cmluZyAmIGFXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0V2lkdGgoY29uc3Qg bnNBU3RyaW5nICYgYVdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRE b2N1bWVudChuc0lET01Eb2N1bWVudCAqICphQ29udGVudERvY3VtZW50KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRDb250ZW50RG9jdW1lbnQobnNJRE9NRG9jdW1lbnQgKiBhQ29udGVudERv Y3VtZW50KSA9IDA7Cgp9OwojIDIzNSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MT3B0R3JvdXBFbGVtZW50LmgiIDEKIyAzNCAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MT3B0R3JvdXBFbGVtZW50LmgiCmNs YXNzIG5zSURPTUhUTUxPcHRHcm91cEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4YTZjZjkwOTEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4 MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXREaXNhYmxlZChQUkJvb2wgKmFEaXNhYmxlZCkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0RGlzYWJsZWQoUFJCb29sIGFEaXNhYmxlZCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRMYWJlbChuc0FTdHJpbmcgJiBhTGFiZWwpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldExhYmVsKGNvbnN0IG5zQVN0cmluZyAmIGFMYWJlbCkgPSAwOwoKfTsKIyAyMzYg Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTUhUTUxQYXJhZ3JhcGhFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxQYXJhZ3Jh cGhFbGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5 MGExLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhh LCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWxp Z24obnNBU3RyaW5nICYgYUFsaWduKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbGlnbihj b25zdCBuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKCn07CiMgMjM3ICJuc0RPTUNsYXNzSW5mby5j cHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxQYXJhbUVsZW1l bnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxQYXJhbUVs ZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTFBhcmFtRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1M RWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBhZCwgMHgxNWIzLCAweDExZDIsIHsgMHg5Mywg MHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0VHlwZShjb25zdCBuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShuc0FTdHJpbmcgJiBhVmFsdWUpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFZhbHVlKGNvbnN0IG5zQVN0cmluZyAmIGFWYWx1ZSkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZVR5cGUobnNBU3RyaW5nICYgYVZhbHVlVHlwZSkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0VmFsdWVUeXBlKGNvbnN0IG5zQVN0cmluZyAmIGFWYWx1ZVR5 cGUpID0gMDsKCn07CiMgMjM4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxQcmVFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MUHJlRWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1M UHJlRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNm OTBhNCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4 YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdp ZHRoKFBSSW50MzIgKmFXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0V2lkdGgoUFJJ bnQzMiBhV2lkdGgpID0gMDsKCn07CiMgMjM5ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxRdW90ZUVsZW1lbnQuaCIgMQojIDM0 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxRdW90ZUVsZW1lbnQuaCIKY2xh c3MgbnNJRE9NSFRNTFF1b3RlRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHhhNmNmOTBhMywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwg MHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldENpdGUobnNBU3RyaW5nICYgYUNpdGUpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldENpdGUoY29uc3QgbnNBU3RyaW5nICYgYUNpdGUpID0gMDsKCn07CiMgMjQwICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhU TUxTY3JpcHRFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01IVE1MU2NyaXB0RWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MU2NyaXB0RWxlbWVudCA6IHB1 YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBiMSwgMHgxNWIzLCAw eDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9 fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRleHQobnNBU3RyaW5nICYg YVRleHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRleHQoY29uc3QgbnNBU3RyaW5nICYg YVRleHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SHRtbEZvcihuc0FTdHJpbmcgJiBh SHRtbEZvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SHRtbEZvcihjb25zdCBuc0FTdHJp bmcgJiBhSHRtbEZvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudChuc0FTdHJp bmcgJiBhRXZlbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEV2ZW50KGNvbnN0IG5zQVN0 cmluZyAmIGFFdmVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGFyc2V0KG5zQVN0 cmluZyAmIGFDaGFyc2V0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDaGFyc2V0KGNvbnN0 IG5zQVN0cmluZyAmIGFDaGFyc2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmVy KFBSQm9vbCAqYURlZmVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZlcihQUkJvb2wg YURlZmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNyYyhuc0FTdHJpbmcgJiBhU3Jj KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTcmMoY29uc3QgbnNBU3RyaW5nICYgYVNyYykg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUeXBlKG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUeXBlKGNvbnN0IG5zQVN0cmluZyAmIGFUeXBlKSA9IDA7 Cgp9OwojIDI0MSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01OU0hUTUxTZWxlY3RFbGVtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlz dC9pbmNsdWRlL2RvbS9uc0lET01OU0hUTUxTZWxlY3RFbGVtZW50LmgiCmNsYXNzIG5zSURPTU5T SFRNTFNlbGVjdEVsZW1lbnQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZj ZjkxMDUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4 OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVt KFBSVWludDMyIGluZGV4LCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBOYW1lZEl0ZW0oY29uc3QgbnNBU3RyaW5nICYgbmFtZSwgbnNJRE9NTm9kZSAqKl9y ZXR2YWwpID0gMDsKCn07CiMgMjQyICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxTdHlsZUVsZW1lbnQuaCIgMQojIDM0ICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxTdHlsZUVsZW1lbnQuaCIKY2xhc3MgbnNJ RE9NSFRNTFN0eWxlRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHhhNmNmOTA4ZCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwg MHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldERpc2FibGVkKFBSQm9vbCAqYURpc2FibGVkKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXREaXNhYmxlZChQUkJvb2wgYURpc2FibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldE1lZGlhKG5zQVN0cmluZyAmIGFNZWRpYSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 TWVkaWEoY29uc3QgbnNBU3RyaW5nICYgYU1lZGlhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFR5cGUobnNBU3RyaW5nICYgYVR5cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFR5 cGUoY29uc3QgbnNBU3RyaW5nICYgYVR5cGUpID0gMDsKCn07CiMgMjQzICJuc0RPTUNsYXNzSW5m by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxUYWJsZUNh cHRpb25FbGVtLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1M VGFibGVDYXB0aW9uRWxlbS5oIgpjbGFzcyBuc0lET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCA6 IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBiMywgMHgxNWIz LCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgz MiB9fTsgcmV0dXJuIGlpZDt9CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N SFRNTFRhYmxlQ2FwdGlvbkVsZW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWduKG5zQVN0 cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29uc3QgbnNB U3RyaW5nICYgYUFsaWduKSA9IDA7Cgp9OwojIDI0NCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMg MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MVGFibGVDZWxsRWxlbWVudC5o IiAxCiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTFRhYmxlQ2VsbEVs ZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9N SFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtz dGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYjcsIDB4MTViMywgMHgxMWQyLCB7IDB4 OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBp aWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDZWxsSW5kZXgoUFJJbnQzMiAqYUNlbGxJbmRl eCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBYmJyKG5zQVN0cmluZyAmIGFBYmJyKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBYmJyKGNvbnN0IG5zQVN0cmluZyAmIGFBYmJyKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWduKG5zQVN0cmluZyAmIGFBbGlnbikgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29uc3QgbnNBU3RyaW5nICYgYUFsaWduKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF4aXMobnNBU3RyaW5nICYgYUF4aXMpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEF4aXMoY29uc3QgbnNBU3RyaW5nICYgYUF4aXMpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmdDb2xvcihuc0FTdHJpbmcgJiBhQmdDb2xvcikgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmdDb2xvcihjb25zdCBuc0FTdHJpbmcgJiBhQmdDb2xv cikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaChuc0FTdHJpbmcgJiBhQ2gpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoKGNvbnN0IG5zQVN0cmluZyAmIGFDaCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDaE9mZihuc0FTdHJpbmcgJiBhQ2hPZmYpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldENoT2ZmKGNvbnN0IG5zQVN0cmluZyAmIGFDaE9mZikgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDb2xTcGFuKFBSSW50MzIgKmFDb2xTcGFuKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRDb2xTcGFuKFBSSW50MzIgYUNvbFNwYW4pID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0SGVhZGVycyhuc0FTdHJpbmcgJiBhSGVhZGVycykgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0SGVhZGVycyhjb25zdCBuc0FTdHJpbmcgJiBhSGVhZGVycykgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQobnNBU3RyaW5nICYgYUhlaWdodCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0SGVpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFIZWlnaHQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Tm9XcmFwKFBSQm9vbCAqYU5vV3JhcCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0Tm9XcmFwKFBSQm9vbCBhTm9XcmFwKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFJvd1NwYW4oUFJJbnQzMiAqYVJvd1NwYW4pID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFJvd1NwYW4oUFJJbnQzMiBhUm93U3BhbikgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRTY29wZShuc0FTdHJpbmcgJiBhU2NvcGUpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldFNjb3BlKGNvbnN0IG5zQVN0cmluZyAmIGFTY29wZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRWQWxpZ24obnNBU3RyaW5nICYgYVZBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0VkFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFWQWxpZ24pID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0V2lkdGgobnNBU3RyaW5nICYgYVdpZHRoKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRXaWR0aChjb25zdCBuc0FTdHJpbmcgJiBhV2lkdGgpID0gMDsKCn07CiMgMjQ1 ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTUhUTUxUYWJsZUNvbEVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTUhUTUxUYWJsZUNvbEVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTFRhYmxlQ29s RWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBi NCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWdu KG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29u c3QgbnNBU3RyaW5nICYgYUFsaWduKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoKG5z QVN0cmluZyAmIGFDaCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2goY29uc3QgbnNBU3Ry aW5nICYgYUNoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoT2ZmKG5zQVN0cmluZyAm IGFDaE9mZikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2hPZmYoY29uc3QgbnNBU3RyaW5n ICYgYUNoT2ZmKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNwYW4oUFJJbnQzMiAqYVNw YW4pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNwYW4oUFJJbnQzMiBhU3BhbikgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWQWxpZ24obnNBU3RyaW5nICYgYVZBbGlnbikgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0VkFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFWQWxpZ24pID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgobnNBU3RyaW5nICYgYVdpZHRoKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRXaWR0aChjb25zdCBuc0FTdHJpbmcgJiBhV2lkdGgpID0g MDsKCn07CiMgMjQ2ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvZG9tL25zSURPTUhUTUxUYWJsZUVsZW1lbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUhUTUxUYWJsZUVsZW1lbnQuaCIKY2xhc3MgbnNJRE9NSFRNTFRh YmxlRWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNm OTBiMiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4 YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENh cHRpb24obnNJRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgKiAqYUNhcHRpb24pID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldENhcHRpb24obnNJRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQg KiBhQ2FwdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUSGVhZChuc0lET01IVE1M VGFibGVTZWN0aW9uRWxlbWVudCAqICphVEhlYWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dFRIZWFkKG5zSURPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50ICogYVRIZWFkKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFRGb290KG5zSURPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50ICog KmFURm9vdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VEZvb3QobnNJRE9NSFRNTFRhYmxl U2VjdGlvbkVsZW1lbnQgKiBhVEZvb3QpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um93 cyhuc0lET01IVE1MQ29sbGVjdGlvbiAqICphUm93cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRUQm9kaWVzKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFUQm9kaWVzKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWduKG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0QWxpZ24oY29uc3QgbnNBU3RyaW5nICYgYUFsaWduKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldEJnQ29sb3IobnNBU3RyaW5nICYgYUJnQ29sb3IpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldEJnQ29sb3IoY29uc3QgbnNBU3RyaW5nICYgYUJnQ29sb3IpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyKG5zQVN0cmluZyAmIGFCb3JkZXIpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlcihjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVy KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENlbGxQYWRkaW5nKG5zQVN0cmluZyAmIGFD ZWxsUGFkZGluZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2VsbFBhZGRpbmcoY29uc3Qg bnNBU3RyaW5nICYgYUNlbGxQYWRkaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENl bGxTcGFjaW5nKG5zQVN0cmluZyAmIGFDZWxsU3BhY2luZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0Q2VsbFNwYWNpbmcoY29uc3QgbnNBU3RyaW5nICYgYUNlbGxTcGFjaW5nKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lKG5zQVN0cmluZyAmIGFGcmFtZSkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0RnJhbWUoY29uc3QgbnNBU3RyaW5nICYgYUZyYW1lKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJ1bGVzKG5zQVN0cmluZyAmIGFSdWxlcykgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0UnVsZXMoY29uc3QgbnNBU3RyaW5nICYgYVJ1bGVzKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN1bW1hcnkobnNBU3RyaW5nICYgYVN1bW1hcnkpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN1bW1hcnkoY29uc3QgbnNBU3RyaW5nICYgYVN1bW1hcnkp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgobnNBU3RyaW5nICYgYVdpZHRoKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRXaWR0aChjb25zdCBuc0FTdHJpbmcgJiBhV2lkdGgp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlVEhlYWQobnNJRE9NSFRNTEVsZW1lbnQg KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZVRIZWFkKHZvaWQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlVEZvb3QobnNJRE9NSFRNTEVsZW1lbnQgKipf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZVRGb290KHZvaWQpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlQ2FwdGlvbihuc0lET01IVE1MRWxlbWVudCAqKl9y ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlQ2FwdGlvbih2b2lkKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydFJvdyhQUkludDMyIGluZGV4LCBuc0lET01IVE1M RWxlbWVudCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlUm93KFBS SW50MzIgaW5kZXgpID0gMDsKCn07CiMgMjQ3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxUYWJsZVJvd0VsZW1lbnQuaCIgMQoj IDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxUYWJsZVJvd0VsZW1lbnQu aCIKY2xhc3MgbnNJRE9NSFRNTFRhYmxlUm93RWxlbWVudCA6IHB1YmxpYyBuc0lET01IVE1MRWxl bWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBiNiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgy ZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJvd0luZGV4KFBSSW50MzIgKmFSb3dJbmRleCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWN0aW9uUm93SW5kZXgoUFJJbnQzMiAqYVNlY3Rpb25S b3dJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDZWxscyhuc0lET01IVE1MQ29s bGVjdGlvbiAqICphQ2VsbHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWxpZ24obnNB U3RyaW5nICYgYUFsaWduKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbGlnbihjb25zdCBu c0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmdDb2xvcihu c0FTdHJpbmcgJiBhQmdDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmdDb2xvcihj b25zdCBuc0FTdHJpbmcgJiBhQmdDb2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD aChuc0FTdHJpbmcgJiBhQ2gpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoKGNvbnN0IG5z QVN0cmluZyAmIGFDaCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaE9mZihuc0FTdHJp bmcgJiBhQ2hPZmYpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoT2ZmKGNvbnN0IG5zQVN0 cmluZyAmIGFDaE9mZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWQWxpZ24obnNBU3Ry aW5nICYgYVZBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VkFsaWduKGNvbnN0IG5z QVN0cmluZyAmIGFWQWxpZ24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0Q2VsbChQ UkludDMyIGluZGV4LCBuc0lET01IVE1MRWxlbWVudCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgRGVsZXRlQ2VsbChQUkludDMyIGluZGV4KSA9IDA7Cgp9OwojIDI0OCAibnNE T01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01I VE1MVGFibGVTZWN0aW9uRWxlbS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NSFRNTFRhYmxlU2VjdGlvbkVsZW0uaCIKY2xhc3MgbnNJRE9NSFRNTFRhYmxlU2VjdGlv bkVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw YjUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEs IDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv ZG9tL25zSURPTUhUTUxUYWJsZVNlY3Rpb25FbGVtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRB bGlnbihuc0FTdHJpbmcgJiBhQWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsaWdu KGNvbnN0IG5zQVN0cmluZyAmIGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD aChuc0FTdHJpbmcgJiBhQ2gpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoKGNvbnN0IG5z QVN0cmluZyAmIGFDaCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaE9mZihuc0FTdHJp bmcgJiBhQ2hPZmYpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoT2ZmKGNvbnN0IG5zQVN0 cmluZyAmIGFDaE9mZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWQWxpZ24obnNBU3Ry aW5nICYgYVZBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VkFsaWduKGNvbnN0IG5z QVN0cmluZyAmIGFWQWxpZ24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um93cyhuc0lE T01IVE1MQ29sbGVjdGlvbiAqICphUm93cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNl cnRSb3coUFJJbnQzMiBpbmRleCwgbnNJRE9NSFRNTEVsZW1lbnQgKipfcmV0dmFsKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZVJvdyhQUkludDMyIGluZGV4KSA9IDA7Cgp9OwojIDI0 OSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lET01IVE1MVGV4dEFyZWFFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl L2RvbS9uc0lET01IVE1MVGV4dEFyZWFFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxUZXh0QXJl YUVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw OTQsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEs IDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZh dWx0VmFsdWUobnNBU3RyaW5nICYgYURlZmF1bHRWYWx1ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0RGVmYXVsdFZhbHVlKGNvbnN0IG5zQVN0cmluZyAmIGFEZWZhdWx0VmFsdWUpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybShuc0lET01IVE1MRm9ybUVsZW1lbnQgKiAqYUZv cm0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWNjZXNzS2V5KG5zQVN0cmluZyAmIGFB Y2Nlc3NLZXkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2Vzc0tleShjb25zdCBuc0FT dHJpbmcgJiBhQWNjZXNzS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbHMoUFJJ bnQzMiAqYUNvbHMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbHMoUFJJbnQzMiBhQ29s cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNhYmxlZChQUkJvb2wgKmFEaXNhYmxl ZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlzYWJsZWQoUFJCb29sIGFEaXNhYmxlZCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lKG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROYW1lKGNvbnN0IG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlYWRPbmx5KFBSQm9vbCAqYVJlYWRPbmx5KSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSZWFkT25seShQUkJvb2wgYVJlYWRPbmx5KSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJvd3MoUFJJbnQzMiAqYVJvd3MpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFJvd3MoUFJJbnQzMiBhUm93cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRUYWJJbmRleChQUkludDMyICphVGFiSW5kZXgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldFRhYkluZGV4KFBSSW50MzIgYVRhYkluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFR5cGUobnNBU3RyaW5nICYgYVR5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 VmFsdWUobnNBU3RyaW5nICYgYVZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWYWx1 ZShjb25zdCBuc0FTdHJpbmcgJiBhVmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQmx1 cih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZvY3VzKHZvaWQpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgU2VsZWN0KHZvaWQpID0gMDsKCn07CiMgMjUwICJuc0RPTUNsYXNzSW5m by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTFRleHRB cmVhRWxlbWVudC5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNI VE1MVGV4dEFyZWFFbGVtZW50LmgiCmNsYXNzIG5zSUNvbnRyb2xsZXJzOwojIDI3ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTFRleHRBcmVhRWxlbWVudC5oIgpjbGFzcyBu c0lET01OU0hUTUxUZXh0QXJlYUVsZW1lbnQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGlj OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0gezB4Y2EwNjZiNDQsIDB4OWRkZiwgMHgxMWQzLCB7IDB4YmMsIDB4Y2MsIDB4MDAsIDB4NjAs IDB4YjAsIDB4ZmMsIDB4NzYsIDB4YmQgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDb250cm9sbGVycyhuc0lDb250cm9sbGVycyAqICphQ29udHJvbGxlcnMpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4dExlbmd0aChQUkludDMyICphVGV4dExlbmd0aCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb25TdGFydChQUkludDMyICphU2Vs ZWN0aW9uU3RhcnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNlbGVjdGlvblN0YXJ0KFBS SW50MzIgYVNlbGVjdGlvblN0YXJ0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVj dGlvbkVuZChQUkludDMyICphU2VsZWN0aW9uRW5kKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRTZWxlY3Rpb25FbmQoUFJJbnQzMiBhU2VsZWN0aW9uRW5kKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IFNldFNlbGVjdGlvblJhbmdlKFBSSW50MzIgc2VsZWN0aW9uU3RhcnQsIFBSSW50MzIg c2VsZWN0aW9uRW5kKSA9IDA7Cgp9OwojIDI1MSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MVGl0bGVFbGVtZW50LmgiIDEKIyAz NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MVGl0bGVFbGVtZW50LmgiCmNs YXNzIG5zSURPTUhUTUxUaXRsZUVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewog cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ SUQgaWlkID0gezB4YTZjZjkwODksIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAs IDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRUZXh0KG5zQVN0cmluZyAmIGFUZXh0KSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGFUZXh0KSA9IDA7Cgp9OwojIDI1MiAibnNE T01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01I VE1MVUxpc3RFbGVtZW50LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01IVE1MVUxpc3RFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxVTGlzdEVsZW1lbnQgOiBwdWJs aWMgbnNJRE9NSFRNTEVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwOTksIDB4MTViMywgMHgx MWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb21wYWN0KFBSQm9vbCAqYUNv bXBhY3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbXBhY3QoUFJCb29sIGFDb21wYWN0 KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUobnNBU3RyaW5nICYgYVR5cGUpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFR5cGUoY29uc3QgbnNBU3RyaW5nICYgYVR5cGUpID0g MDsKCn07CiMgMjUzICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvZG9tL25zSURPTU5TVUlFdmVudC5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk ZS9kb20vbnNJRE9NTlNVSUV2ZW50LmgiCmNsYXNzIG5zSURPTU5TVUlFdmVudCA6IHB1YmxpYyBu c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0 YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBjNCwgMHgxNWIzLCAweDExZDIsIHsgMHg5 MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlp ZDt9CgogIGVudW0geyBTQ1JPTExfUEFHRV9VUCA9IC0zMjc2OCB9OwoKICBlbnVtIHsgU0NST0xM X1BBR0VfRE9XTiA9IDMyNzY4IH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXZlbnREZWZh dWx0KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXllclgo UFJJbnQzMiAqYUxheWVyWCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXllclkoUFJJ bnQzMiAqYUxheWVyWSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWdlWChQUkludDMy ICphUGFnZVgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFnZVkoUFJJbnQzMiAqYVBh Z2VZKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdoaWNoKFBSVWludDMyICphV2hpY2gp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmFuZ2VQYXJlbnQobnNJRE9NTm9kZSAqICph UmFuZ2VQYXJlbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmFuZ2VPZmZzZXQoUFJJ bnQzMiAqYVJhbmdlT2Zmc2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbmNlbEJ1 YmJsZShQUkJvb2wgKmFDYW5jZWxCdWJibGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENh bmNlbEJ1YmJsZShQUkJvb2wgYUNhbmNlbEJ1YmJsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRJc0NoYXIoUFJCb29sICphSXNDaGFyKSA9IDA7Cgp9OwojIDI1NCAibnNET01DbGFzc0lu Zm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1MyUHJvcGVy dGllcy5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTMlByb3Bl cnRpZXMuaCIKY2xhc3MgbnNJRE9NQ1NTMlByb3BlcnRpZXMgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4YTZjZjkwZDEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4 MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRBemltdXRoKG5zQVN0cmluZyAmIGFBemltdXRoKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRBemltdXRoKGNvbnN0IG5zQVN0cmluZyAmIGFBemltdXRoKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhY2tncm91bmQobnNBU3RyaW5nICYgYUJhY2tncm91 bmQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJhY2tncm91bmQoY29uc3QgbnNBU3RyaW5n ICYgYUJhY2tncm91bmQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFja2dyb3VuZEF0 dGFjaG1lbnQobnNBU3RyaW5nICYgYUJhY2tncm91bmRBdHRhY2htZW50KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRCYWNrZ3JvdW5kQXR0YWNobWVudChjb25zdCBuc0FTdHJpbmcgJiBhQmFj a2dyb3VuZEF0dGFjaG1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFja2dyb3Vu ZENvbG9yKG5zQVN0cmluZyAmIGFCYWNrZ3JvdW5kQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldEJhY2tncm91bmRDb2xvcihjb25zdCBuc0FTdHJpbmcgJiBhQmFja2dyb3VuZENvbG9y KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhY2tncm91bmRJbWFnZShuc0FTdHJpbmcg JiBhQmFja2dyb3VuZEltYWdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCYWNrZ3JvdW5k SW1hZ2UoY29uc3QgbnNBU3RyaW5nICYgYUJhY2tncm91bmRJbWFnZSkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRCYWNrZ3JvdW5kUG9zaXRpb24obnNBU3RyaW5nICYgYUJhY2tncm91bmRQ b3NpdGlvbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmFja2dyb3VuZFBvc2l0aW9uKGNv bnN0IG5zQVN0cmluZyAmIGFCYWNrZ3JvdW5kUG9zaXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0QmFja2dyb3VuZFJlcGVhdChuc0FTdHJpbmcgJiBhQmFja2dyb3VuZFJlcGVhdCkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmFja2dyb3VuZFJlcGVhdChjb25zdCBuc0FTdHJp bmcgJiBhQmFja2dyb3VuZFJlcGVhdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3Jk ZXIobnNBU3RyaW5nICYgYUJvcmRlcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm9yZGVy KGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 Qm9yZGVyQ29sbGFwc2UobnNBU3RyaW5nICYgYUJvcmRlckNvbGxhcHNlKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRCb3JkZXJDb2xsYXBzZShjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyQ29s bGFwc2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyQ29sb3IobnNBU3RyaW5n ICYgYUJvcmRlckNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJDb2xvcihj b25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyQ29sb3IpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Qm9yZGVyU3BhY2luZyhuc0FTdHJpbmcgJiBhQm9yZGVyU3BhY2luZykgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0Qm9yZGVyU3BhY2luZyhjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyU3Bh Y2luZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3JkZXJTdHlsZShuc0FTdHJpbmcg JiBhQm9yZGVyU3R5bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlclN0eWxlKGNv bnN0IG5zQVN0cmluZyAmIGFCb3JkZXJTdHlsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRCb3JkZXJUb3AobnNBU3RyaW5nICYgYUJvcmRlclRvcCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0Qm9yZGVyVG9wKGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXJUb3ApID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyUmlnaHQobnNBU3RyaW5nICYgYUJvcmRlclJpZ2h0KSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJSaWdodChjb25zdCBuc0FTdHJpbmcgJiBh Qm9yZGVyUmlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyQm90dG9tKG5z QVN0cmluZyAmIGFCb3JkZXJCb3R0b20pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRl ckJvdHRvbShjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyQm90dG9tKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldEJvcmRlckxlZnQobnNBU3RyaW5nICYgYUJvcmRlckxlZnQpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlckxlZnQoY29uc3QgbnNBU3RyaW5nICYgYUJvcmRlckxl ZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyVG9wQ29sb3IobnNBU3RyaW5n ICYgYUJvcmRlclRvcENvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJUb3BD b2xvcihjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyVG9wQ29sb3IpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0Qm9yZGVyUmlnaHRDb2xvcihuc0FTdHJpbmcgJiBhQm9yZGVyUmlnaHRDb2xv cikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm9yZGVyUmlnaHRDb2xvcihjb25zdCBuc0FT dHJpbmcgJiBhQm9yZGVyUmlnaHRDb2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRC b3JkZXJCb3R0b21Db2xvcihuc0FTdHJpbmcgJiBhQm9yZGVyQm90dG9tQ29sb3IpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlckJvdHRvbUNvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFC b3JkZXJCb3R0b21Db2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3JkZXJMZWZ0 Q29sb3IobnNBU3RyaW5nICYgYUJvcmRlckxlZnRDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0Qm9yZGVyTGVmdENvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXJMZWZ0Q29sb3Ip ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyVG9wU3R5bGUobnNBU3RyaW5nICYg YUJvcmRlclRvcFN0eWxlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJUb3BTdHls ZShjb25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyVG9wU3R5bGUpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0Qm9yZGVyUmlnaHRTdHlsZShuc0FTdHJpbmcgJiBhQm9yZGVyUmlnaHRTdHlsZSkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm9yZGVyUmlnaHRTdHlsZShjb25zdCBuc0FTdHJp bmcgJiBhQm9yZGVyUmlnaHRTdHlsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3Jk ZXJCb3R0b21TdHlsZShuc0FTdHJpbmcgJiBhQm9yZGVyQm90dG9tU3R5bGUpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldEJvcmRlckJvdHRvbVN0eWxlKGNvbnN0IG5zQVN0cmluZyAmIGFCb3Jk ZXJCb3R0b21TdHlsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3JkZXJMZWZ0U3R5 bGUobnNBU3RyaW5nICYgYUJvcmRlckxlZnRTdHlsZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0Qm9yZGVyTGVmdFN0eWxlKGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXJMZWZ0U3R5bGUpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyVG9wV2lkdGgobnNBU3RyaW5nICYgYUJv cmRlclRvcFdpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJUb3BXaWR0aChj b25zdCBuc0FTdHJpbmcgJiBhQm9yZGVyVG9wV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Qm9yZGVyUmlnaHRXaWR0aChuc0FTdHJpbmcgJiBhQm9yZGVyUmlnaHRXaWR0aCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm9yZGVyUmlnaHRXaWR0aChjb25zdCBuc0FTdHJpbmcg JiBhQm9yZGVyUmlnaHRXaWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3JkZXJC b3R0b21XaWR0aChuc0FTdHJpbmcgJiBhQm9yZGVyQm90dG9tV2lkdGgpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldEJvcmRlckJvdHRvbVdpZHRoKGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXJC b3R0b21XaWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCb3JkZXJMZWZ0V2lkdGgo bnNBU3RyaW5nICYgYUJvcmRlckxlZnRXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 Qm9yZGVyTGVmdFdpZHRoKGNvbnN0IG5zQVN0cmluZyAmIGFCb3JkZXJMZWZ0V2lkdGgpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyV2lkdGgobnNBU3RyaW5nICYgYUJvcmRlcldp ZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCb3JkZXJXaWR0aChjb25zdCBuc0FTdHJp bmcgJiBhQm9yZGVyV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm90dG9tKG5z QVN0cmluZyAmIGFCb3R0b20pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvdHRvbShjb25z dCBuc0FTdHJpbmcgJiBhQm90dG9tKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhcHRp b25TaWRlKG5zQVN0cmluZyAmIGFDYXB0aW9uU2lkZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0Q2FwdGlvblNpZGUoY29uc3QgbnNBU3RyaW5nICYgYUNhcHRpb25TaWRlKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldENsZWFyKG5zQVN0cmluZyAmIGFDbGVhcikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0Q2xlYXIoY29uc3QgbnNBU3RyaW5nICYgYUNsZWFyKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldENsaXAobnNBU3RyaW5nICYgYUNsaXApID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldENsaXAoY29uc3QgbnNBU3RyaW5nICYgYUNsaXApID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0Q29sb3IobnNBU3RyaW5nICYgYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRDb2xvcihjb25zdCBuc0FTdHJpbmcgJiBhQ29sb3IpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0Q29udGVudChuc0FTdHJpbmcgJiBhQ29udGVudCkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0Q29udGVudChjb25zdCBuc0FTdHJpbmcgJiBhQ29udGVudCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb3VudGVySW5jcmVtZW50KG5zQVN0cmluZyAmIGFDb3Vu dGVySW5jcmVtZW50KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb3VudGVySW5jcmVtZW50 KGNvbnN0IG5zQVN0cmluZyAmIGFDb3VudGVySW5jcmVtZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldENvdW50ZXJSZXNldChuc0FTdHJpbmcgJiBhQ291bnRlclJlc2V0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRDb3VudGVyUmVzZXQoY29uc3QgbnNBU3RyaW5nICYgYUNvdW50 ZXJSZXNldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdWUobnNBU3RyaW5nICYgYUN1 ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q3VlKGNvbnN0IG5zQVN0cmluZyAmIGFDdWUp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3VlQWZ0ZXIobnNBU3RyaW5nICYgYUN1ZUFm dGVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDdWVBZnRlcihjb25zdCBuc0FTdHJpbmcg JiBhQ3VlQWZ0ZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3VlQmVmb3JlKG5zQVN0 cmluZyAmIGFDdWVCZWZvcmUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEN1ZUJlZm9yZShj b25zdCBuc0FTdHJpbmcgJiBhQ3VlQmVmb3JlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEN1cnNvcihuc0FTdHJpbmcgJiBhQ3Vyc29yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRD dXJzb3IoY29uc3QgbnNBU3RyaW5nICYgYUN1cnNvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXREaXJlY3Rpb24obnNBU3RyaW5nICYgYURpcmVjdGlvbikgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0RGlyZWN0aW9uKGNvbnN0IG5zQVN0cmluZyAmIGFEaXJlY3Rpb24pID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlzcGxheShuc0FTdHJpbmcgJiBhRGlzcGxheSkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlzcGxheShjb25zdCBuc0FTdHJpbmcgJiBhRGlzcGxheSkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbGV2YXRpb24obnNBU3RyaW5nICYgYUVsZXZh dGlvbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RWxldmF0aW9uKGNvbnN0IG5zQVN0cmlu ZyAmIGFFbGV2YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW1wdHlDZWxscyhu c0FTdHJpbmcgJiBhRW1wdHlDZWxscykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RW1wdHlD ZWxscyhjb25zdCBuc0FTdHJpbmcgJiBhRW1wdHlDZWxscykgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDc3NGbG9hdChuc0FTdHJpbmcgJiBhQ3NzRmxvYXQpID0gMDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldENzc0Zsb2F0KGNvbnN0IG5zQVN0cmluZyAmIGFDc3NGbG9hdCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRGb250KG5zQVN0cmluZyAmIGFGb250KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRGb250KGNvbnN0IG5zQVN0cmluZyAmIGFGb250KSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEZvbnRGYW1pbHkobnNBU3RyaW5nICYgYUZvbnRGYW1pbHkpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbnRGYW1pbHkoY29uc3QgbnNBU3RyaW5nICYgYUZvbnRG YW1pbHkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udFNpemUobnNBU3RyaW5nICYg YUZvbnRTaXplKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb250U2l6ZShjb25zdCBuc0FT dHJpbmcgJiBhRm9udFNpemUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udFNpemVB ZGp1c3QobnNBU3RyaW5nICYgYUZvbnRTaXplQWRqdXN0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRGb250U2l6ZUFkanVzdChjb25zdCBuc0FTdHJpbmcgJiBhRm9udFNpemVBZGp1c3QpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udFN0cmV0Y2gobnNBU3RyaW5nICYgYUZvbnRT dHJldGNoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb250U3RyZXRjaChjb25zdCBuc0FT dHJpbmcgJiBhRm9udFN0cmV0Y2gpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udFN0 eWxlKG5zQVN0cmluZyAmIGFGb250U3R5bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZv bnRTdHlsZShjb25zdCBuc0FTdHJpbmcgJiBhRm9udFN0eWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEZvbnRWYXJpYW50KG5zQVN0cmluZyAmIGFGb250VmFyaWFudCkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0Rm9udFZhcmlhbnQoY29uc3QgbnNBU3RyaW5nICYgYUZvbnRWYXJp YW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvbnRXZWlnaHQobnNBU3RyaW5nICYg YUZvbnRXZWlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbnRXZWlnaHQoY29uc3Qg bnNBU3RyaW5nICYgYUZvbnRXZWlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVp Z2h0KG5zQVN0cmluZyAmIGFIZWlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhlaWdo dChjb25zdCBuc0FTdHJpbmcgJiBhSGVpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dExlZnQobnNBU3RyaW5nICYgYUxlZnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExlZnQo Y29uc3QgbnNBU3RyaW5nICYgYUxlZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGV0 dGVyU3BhY2luZyhuc0FTdHJpbmcgJiBhTGV0dGVyU3BhY2luZykgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0TGV0dGVyU3BhY2luZyhjb25zdCBuc0FTdHJpbmcgJiBhTGV0dGVyU3BhY2luZykg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaW5lSGVpZ2h0KG5zQVN0cmluZyAmIGFMaW5l SGVpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaW5lSGVpZ2h0KGNvbnN0IG5zQVN0 cmluZyAmIGFMaW5lSGVpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpc3RTdHls ZShuc0FTdHJpbmcgJiBhTGlzdFN0eWxlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaXN0 U3R5bGUoY29uc3QgbnNBU3RyaW5nICYgYUxpc3RTdHlsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRMaXN0U3R5bGVJbWFnZShuc0FTdHJpbmcgJiBhTGlzdFN0eWxlSW1hZ2UpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldExpc3RTdHlsZUltYWdlKGNvbnN0IG5zQVN0cmluZyAmIGFM aXN0U3R5bGVJbWFnZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaXN0U3R5bGVQb3Np dGlvbihuc0FTdHJpbmcgJiBhTGlzdFN0eWxlUG9zaXRpb24pID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldExpc3RTdHlsZVBvc2l0aW9uKGNvbnN0IG5zQVN0cmluZyAmIGFMaXN0U3R5bGVQb3Np dGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaXN0U3R5bGVUeXBlKG5zQVN0cmlu ZyAmIGFMaXN0U3R5bGVUeXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaXN0U3R5bGVU eXBlKGNvbnN0IG5zQVN0cmluZyAmIGFMaXN0U3R5bGVUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldE1hcmdpbihuc0FTdHJpbmcgJiBhTWFyZ2luKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRNYXJnaW4oY29uc3QgbnNBU3RyaW5nICYgYU1hcmdpbikgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRNYXJnaW5Ub3AobnNBU3RyaW5nICYgYU1hcmdpblRvcCkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0TWFyZ2luVG9wKGNvbnN0IG5zQVN0cmluZyAmIGFNYXJnaW5Ub3Ap ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFyZ2luUmlnaHQobnNBU3RyaW5nICYgYU1h cmdpblJpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNYXJnaW5SaWdodChjb25zdCBu c0FTdHJpbmcgJiBhTWFyZ2luUmlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFy Z2luQm90dG9tKG5zQVN0cmluZyAmIGFNYXJnaW5Cb3R0b20pID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldE1hcmdpbkJvdHRvbShjb25zdCBuc0FTdHJpbmcgJiBhTWFyZ2luQm90dG9tKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1hcmdpbkxlZnQobnNBU3RyaW5nICYgYU1hcmdpbkxl ZnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1hcmdpbkxlZnQoY29uc3QgbnNBU3RyaW5n ICYgYU1hcmdpbkxlZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFya2VyT2Zmc2V0 KG5zQVN0cmluZyAmIGFNYXJrZXJPZmZzZXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1h cmtlck9mZnNldChjb25zdCBuc0FTdHJpbmcgJiBhTWFya2VyT2Zmc2V0KSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE1hcmtzKG5zQVN0cmluZyAmIGFNYXJrcykgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0TWFya3MoY29uc3QgbnNBU3RyaW5nICYgYU1hcmtzKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE1heEhlaWdodChuc0FTdHJpbmcgJiBhTWF4SGVpZ2h0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRNYXhIZWlnaHQoY29uc3QgbnNBU3RyaW5nICYgYU1heEhlaWdo dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNYXhXaWR0aChuc0FTdHJpbmcgJiBhTWF4 V2lkdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1heFdpZHRoKGNvbnN0IG5zQVN0cmlu ZyAmIGFNYXhXaWR0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNaW5IZWlnaHQobnNB U3RyaW5nICYgYU1pbkhlaWdodCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWluSGVpZ2h0 KGNvbnN0IG5zQVN0cmluZyAmIGFNaW5IZWlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0TWluV2lkdGgobnNBU3RyaW5nICYgYU1pbldpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRNaW5XaWR0aChjb25zdCBuc0FTdHJpbmcgJiBhTWluV2lkdGgpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0T3JwaGFucyhuc0FTdHJpbmcgJiBhT3JwaGFucykgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0T3JwaGFucyhjb25zdCBuc0FTdHJpbmcgJiBhT3JwaGFucykgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPdXRsaW5lKG5zQVN0cmluZyAmIGFPdXRsaW5lKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPdXRsaW5lKGNvbnN0IG5zQVN0cmluZyAmIGFPdXRsaW5l KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE91dGxpbmVDb2xvcihuc0FTdHJpbmcgJiBh T3V0bGluZUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPdXRsaW5lQ29sb3IoY29u c3QgbnNBU3RyaW5nICYgYU91dGxpbmVDb2xvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRPdXRsaW5lU3R5bGUobnNBU3RyaW5nICYgYU91dGxpbmVTdHlsZSkgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0T3V0bGluZVN0eWxlKGNvbnN0IG5zQVN0cmluZyAmIGFPdXRsaW5lU3R5bGUp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3V0bGluZVdpZHRoKG5zQVN0cmluZyAmIGFP dXRsaW5lV2lkdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE91dGxpbmVXaWR0aChjb25z dCBuc0FTdHJpbmcgJiBhT3V0bGluZVdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dE92ZXJmbG93KG5zQVN0cmluZyAmIGFPdmVyZmxvdykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0T3ZlcmZsb3coY29uc3QgbnNBU3RyaW5nICYgYU92ZXJmbG93KSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFBhZGRpbmcobnNBU3RyaW5nICYgYVBhZGRpbmcpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFBhZGRpbmcoY29uc3QgbnNBU3RyaW5nICYgYVBhZGRpbmcpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFkZGluZ1RvcChuc0FTdHJpbmcgJiBhUGFkZGluZ1RvcCkg PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFkZGluZ1RvcChjb25zdCBuc0FTdHJpbmcgJiBh UGFkZGluZ1RvcCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWRkaW5nUmlnaHQobnNB U3RyaW5nICYgYVBhZGRpbmdSaWdodCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFkZGlu Z1JpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFQYWRkaW5nUmlnaHQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0UGFkZGluZ0JvdHRvbShuc0FTdHJpbmcgJiBhUGFkZGluZ0JvdHRvbSkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFkZGluZ0JvdHRvbShjb25zdCBuc0FTdHJpbmcgJiBh UGFkZGluZ0JvdHRvbSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWRkaW5nTGVmdChu c0FTdHJpbmcgJiBhUGFkZGluZ0xlZnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhZGRp bmdMZWZ0KGNvbnN0IG5zQVN0cmluZyAmIGFQYWRkaW5nTGVmdCkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRQYWdlKG5zQVN0cmluZyAmIGFQYWdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRQYWdlKGNvbnN0IG5zQVN0cmluZyAmIGFQYWdlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFBhZ2VCcmVha0FmdGVyKG5zQVN0cmluZyAmIGFQYWdlQnJlYWtBZnRlcikgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFnZUJyZWFrQWZ0ZXIoY29uc3QgbnNBU3RyaW5nICYgYVBh Z2VCcmVha0FmdGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhZ2VCcmVha0JlZm9y ZShuc0FTdHJpbmcgJiBhUGFnZUJyZWFrQmVmb3JlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRQYWdlQnJlYWtCZWZvcmUoY29uc3QgbnNBU3RyaW5nICYgYVBhZ2VCcmVha0JlZm9yZSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWdlQnJlYWtJbnNpZGUobnNBU3RyaW5nICYgYVBh Z2VCcmVha0luc2lkZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFnZUJyZWFrSW5zaWRl KGNvbnN0IG5zQVN0cmluZyAmIGFQYWdlQnJlYWtJbnNpZGUpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0UGF1c2UobnNBU3RyaW5nICYgYVBhdXNlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRQYXVzZShjb25zdCBuc0FTdHJpbmcgJiBhUGF1c2UpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0UGF1c2VBZnRlcihuc0FTdHJpbmcgJiBhUGF1c2VBZnRlcikgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0UGF1c2VBZnRlcihjb25zdCBuc0FTdHJpbmcgJiBhUGF1c2VBZnRlcikg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXVzZUJlZm9yZShuc0FTdHJpbmcgJiBhUGF1 c2VCZWZvcmUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhdXNlQmVmb3JlKGNvbnN0IG5z QVN0cmluZyAmIGFQYXVzZUJlZm9yZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQaXRj aChuc0FTdHJpbmcgJiBhUGl0Y2gpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBpdGNoKGNv bnN0IG5zQVN0cmluZyAmIGFQaXRjaCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQaXRj aFJhbmdlKG5zQVN0cmluZyAmIGFQaXRjaFJhbmdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRQaXRjaFJhbmdlKGNvbnN0IG5zQVN0cmluZyAmIGFQaXRjaFJhbmdlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFBsYXlEdXJpbmcobnNBU3RyaW5nICYgYVBsYXlEdXJpbmcpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBsYXlEdXJpbmcoY29uc3QgbnNBU3RyaW5nICYgYVBsYXlE dXJpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UG9zaXRpb24obnNBU3RyaW5nICYg YVBvc2l0aW9uKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQb3NpdGlvbihjb25zdCBuc0FT dHJpbmcgJiBhUG9zaXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UXVvdGVzKG5z QVN0cmluZyAmIGFRdW90ZXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFF1b3Rlcyhjb25z dCBuc0FTdHJpbmcgJiBhUXVvdGVzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJpY2hu ZXNzKG5zQVN0cmluZyAmIGFSaWNobmVzcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Umlj aG5lc3MoY29uc3QgbnNBU3RyaW5nICYgYVJpY2huZXNzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFJpZ2h0KG5zQVN0cmluZyAmIGFSaWdodCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0UmlnaHQoY29uc3QgbnNBU3RyaW5nICYgYVJpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldFNpemUobnNBU3RyaW5nICYgYVNpemUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dFNpemUoY29uc3QgbnNBU3RyaW5nICYgYVNpemUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0U3BlYWsobnNBU3RyaW5nICYgYVNwZWFrKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRT cGVhayhjb25zdCBuc0FTdHJpbmcgJiBhU3BlYWspID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0U3BlYWtIZWFkZXIobnNBU3RyaW5nICYgYVNwZWFrSGVhZGVyKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRTcGVha0hlYWRlcihjb25zdCBuc0FTdHJpbmcgJiBhU3BlYWtIZWFkZXIpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3BlYWtOdW1lcmFsKG5zQVN0cmluZyAmIGFTcGVh a051bWVyYWwpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNwZWFrTnVtZXJhbChjb25zdCBu c0FTdHJpbmcgJiBhU3BlYWtOdW1lcmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNw ZWFrUHVuY3R1YXRpb24obnNBU3RyaW5nICYgYVNwZWFrUHVuY3R1YXRpb24pID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldFNwZWFrUHVuY3R1YXRpb24oY29uc3QgbnNBU3RyaW5nICYgYVNwZWFr UHVuY3R1YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3BlZWNoUmF0ZShuc0FT dHJpbmcgJiBhU3BlZWNoUmF0ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3BlZWNoUmF0 ZShjb25zdCBuc0FTdHJpbmcgJiBhU3BlZWNoUmF0ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRTdHJlc3MobnNBU3RyaW5nICYgYVN0cmVzcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0U3RyZXNzKGNvbnN0IG5zQVN0cmluZyAmIGFTdHJlc3MpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0VGFibGVMYXlvdXQobnNBU3RyaW5nICYgYVRhYmxlTGF5b3V0KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRUYWJsZUxheW91dChjb25zdCBuc0FTdHJpbmcgJiBhVGFibGVMYXlv dXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4dEFsaWduKG5zQVN0cmluZyAmIGFU ZXh0QWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRleHRBbGlnbihjb25zdCBuc0FT dHJpbmcgJiBhVGV4dEFsaWduKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRleHREZWNv cmF0aW9uKG5zQVN0cmluZyAmIGFUZXh0RGVjb3JhdGlvbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0VGV4dERlY29yYXRpb24oY29uc3QgbnNBU3RyaW5nICYgYVRleHREZWNvcmF0aW9uKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRleHRJbmRlbnQobnNBU3RyaW5nICYgYVRleHRJ bmRlbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRleHRJbmRlbnQoY29uc3QgbnNBU3Ry aW5nICYgYVRleHRJbmRlbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4dFNoYWRv dyhuc0FTdHJpbmcgJiBhVGV4dFNoYWRvdykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGV4 dFNoYWRvdyhjb25zdCBuc0FTdHJpbmcgJiBhVGV4dFNoYWRvdykgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRUZXh0VHJhbnNmb3JtKG5zQVN0cmluZyAmIGFUZXh0VHJhbnNmb3JtKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUZXh0VHJhbnNmb3JtKGNvbnN0IG5zQVN0cmluZyAmIGFU ZXh0VHJhbnNmb3JtKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRvcChuc0FTdHJpbmcg JiBhVG9wKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUb3AoY29uc3QgbnNBU3RyaW5nICYg YVRvcCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVbmljb2RlQmlkaShuc0FTdHJpbmcg JiBhVW5pY29kZUJpZGkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFVuaWNvZGVCaWRpKGNv bnN0IG5zQVN0cmluZyAmIGFVbmljb2RlQmlkaSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRWZXJ0aWNhbEFsaWduKG5zQVN0cmluZyAmIGFWZXJ0aWNhbEFsaWduKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRWZXJ0aWNhbEFsaWduKGNvbnN0IG5zQVN0cmluZyAmIGFWZXJ0aWNhbEFs aWduKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZpc2liaWxpdHkobnNBU3RyaW5nICYg YVZpc2liaWxpdHkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpc2liaWxpdHkoY29uc3Qg bnNBU3RyaW5nICYgYVZpc2liaWxpdHkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Vm9p Y2VGYW1pbHkobnNBU3RyaW5nICYgYVZvaWNlRmFtaWx5KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRWb2ljZUZhbWlseShjb25zdCBuc0FTdHJpbmcgJiBhVm9pY2VGYW1pbHkpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0Vm9sdW1lKG5zQVN0cmluZyAmIGFWb2x1bWUpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldFZvbHVtZShjb25zdCBuc0FTdHJpbmcgJiBhVm9sdW1lKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdoaXRlU3BhY2UobnNBU3RyaW5nICYgYVdoaXRlU3Bh Y2UpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdoaXRlU3BhY2UoY29uc3QgbnNBU3RyaW5n ICYgYVdoaXRlU3BhY2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkb3dzKG5zQVN0 cmluZyAmIGFXaWRvd3MpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpZG93cyhjb25zdCBu c0FTdHJpbmcgJiBhV2lkb3dzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZHRoKG5z QVN0cmluZyAmIGFXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0V2lkdGgoY29uc3Qg bnNBU3RyaW5nICYgYVdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdvcmRTcGFj aW5nKG5zQVN0cmluZyAmIGFXb3JkU3BhY2luZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 V29yZFNwYWNpbmcoY29uc3QgbnNBU3RyaW5nICYgYVdvcmRTcGFjaW5nKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFpJbmRleChuc0FTdHJpbmcgJiBhWkluZGV4KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRaSW5kZXgoY29uc3QgbnNBU3RyaW5nICYgYVpJbmRleCkgPSAwOwoKfTsK IyAyNTIwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTUzJQcm9wZXJ0aWVzLmgi CmNsYXNzIG5zSURPTU5TQ1NTMlByb3BlcnRpZXMgOiBwdWJsaWMgbnNJRE9NQ1NTMlByb3BlcnRp ZXMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4ODgzNTRjMWEsIDB4ZDYyMywgMHg0NGE5LCB7IDB4YTgsIDB4OTQs IDB4NGUsIDB4ZTAsIDB4MWIsIDB4YTIsIDB4OTYsIDB4MTUgfX07IHJldHVybiBpaWQ7fQoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pBcHBlYXJhbmNlKG5zQVN0cmluZyAmIGFNb3pBcHBlYXJh bmNlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pBcHBlYXJhbmNlKGNvbnN0IG5zQVN0 cmluZyAmIGFNb3pBcHBlYXJhbmNlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJh Y2tncm91bmRDbGlwKG5zQVN0cmluZyAmIGFNb3pCYWNrZ3JvdW5kQ2xpcCkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0TW96QmFja2dyb3VuZENsaXAoY29uc3QgbnNBU3RyaW5nICYgYU1vekJh Y2tncm91bmRDbGlwKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJhY2tncm91bmRJ bmxpbmVQb2xpY3kobnNBU3RyaW5nICYgYU1vekJhY2tncm91bmRJbmxpbmVQb2xpY3kpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekJhY2tncm91bmRJbmxpbmVQb2xpY3koY29uc3QgbnNB U3RyaW5nICYgYU1vekJhY2tncm91bmRJbmxpbmVQb2xpY3kpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0TW96QmFja2dyb3VuZE9yaWdpbihuc0FTdHJpbmcgJiBhTW96QmFja2dyb3VuZE9y aWdpbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96QmFja2dyb3VuZE9yaWdpbihjb25z dCBuc0FTdHJpbmcgJiBhTW96QmFja2dyb3VuZE9yaWdpbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRNb3pCaW5kaW5nKG5zQVN0cmluZyAmIGFNb3pCaW5kaW5nKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRNb3pCaW5kaW5nKGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCaW5kaW5nKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJvcmRlckJvdHRvbUNvbG9ycyhuc0FTdHJp bmcgJiBhTW96Qm9yZGVyQm90dG9tQ29sb3JzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRN b3pCb3JkZXJCb3R0b21Db2xvcnMoY29uc3QgbnNBU3RyaW5nICYgYU1vekJvcmRlckJvdHRvbUNv bG9ycykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3JkZXJMZWZ0Q29sb3JzKG5z QVN0cmluZyAmIGFNb3pCb3JkZXJMZWZ0Q29sb3JzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRNb3pCb3JkZXJMZWZ0Q29sb3JzKGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCb3JkZXJMZWZ0Q29s b3JzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJvcmRlclJpZ2h0Q29sb3JzKG5z QVN0cmluZyAmIGFNb3pCb3JkZXJSaWdodENvbG9ycykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg U2V0TW96Qm9yZGVyUmlnaHRDb2xvcnMoY29uc3QgbnNBU3RyaW5nICYgYU1vekJvcmRlclJpZ2h0 Q29sb3JzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJvcmRlclRvcENvbG9ycyhu c0FTdHJpbmcgJiBhTW96Qm9yZGVyVG9wQ29sb3JzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRNb3pCb3JkZXJUb3BDb2xvcnMoY29uc3QgbnNBU3RyaW5nICYgYU1vekJvcmRlclRvcENvbG9y cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3JkZXJSYWRpdXMobnNBU3RyaW5n ICYgYU1vekJvcmRlclJhZGl1cykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96Qm9yZGVy UmFkaXVzKGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCb3JkZXJSYWRpdXMpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TW96Qm9yZGVyUmFkaXVzVG9wbGVmdChuc0FTdHJpbmcgJiBhTW96Qm9y ZGVyUmFkaXVzVG9wbGVmdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96Qm9yZGVyUmFk aXVzVG9wbGVmdChjb25zdCBuc0FTdHJpbmcgJiBhTW96Qm9yZGVyUmFkaXVzVG9wbGVmdCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3JkZXJSYWRpdXNUb3ByaWdodChuc0FTdHJp bmcgJiBhTW96Qm9yZGVyUmFkaXVzVG9wcmlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dE1vekJvcmRlclJhZGl1c1RvcHJpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCb3JkZXJSYWRp dXNUb3ByaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3JkZXJSYWRpdXNC b3R0b21sZWZ0KG5zQVN0cmluZyAmIGFNb3pCb3JkZXJSYWRpdXNCb3R0b21sZWZ0KSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pCb3JkZXJSYWRpdXNCb3R0b21sZWZ0KGNvbnN0IG5zQVN0 cmluZyAmIGFNb3pCb3JkZXJSYWRpdXNCb3R0b21sZWZ0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldE1vekJvcmRlclJhZGl1c0JvdHRvbXJpZ2h0KG5zQVN0cmluZyAmIGFNb3pCb3JkZXJS YWRpdXNCb3R0b21yaWdodCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96Qm9yZGVyUmFk aXVzQm90dG9tcmlnaHQoY29uc3QgbnNBU3RyaW5nICYgYU1vekJvcmRlclJhZGl1c0JvdHRvbXJp Z2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekJveEFsaWduKG5zQVN0cmluZyAm IGFNb3pCb3hBbGlnbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96Qm94QWxpZ24oY29u c3QgbnNBU3RyaW5nICYgYU1vekJveEFsaWduKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dE1vekJveERpcmVjdGlvbihuc0FTdHJpbmcgJiBhTW96Qm94RGlyZWN0aW9uKSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRNb3pCb3hEaXJlY3Rpb24oY29uc3QgbnNBU3RyaW5nICYgYU1vekJv eERpcmVjdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3hGbGV4KG5zQVN0 cmluZyAmIGFNb3pCb3hGbGV4KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pCb3hGbGV4 KGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCb3hGbGV4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldE1vekJveEZsZXhHcm91cChuc0FTdHJpbmcgJiBhTW96Qm94RmxleEdyb3VwKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pCb3hGbGV4R3JvdXAoY29uc3QgbnNBU3RyaW5nICYgYU1v ekJveEZsZXhHcm91cCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pCb3hPcmllbnQo bnNBU3RyaW5nICYgYU1vekJveE9yaWVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96 Qm94T3JpZW50KGNvbnN0IG5zQVN0cmluZyAmIGFNb3pCb3hPcmllbnQpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TW96Qm94T3JkaW5hbEdyb3VwKG5zQVN0cmluZyAmIGFNb3pCb3hPcmRp bmFsR3JvdXApID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekJveE9yZGluYWxHcm91cChj b25zdCBuc0FTdHJpbmcgJiBhTW96Qm94T3JkaW5hbEdyb3VwKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldE1vekJveFBhY2sobnNBU3RyaW5nICYgYU1vekJveFBhY2spID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldE1vekJveFBhY2soY29uc3QgbnNBU3RyaW5nICYgYU1vekJveFBhY2sp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW96Qm94U2l6aW5nKG5zQVN0cmluZyAmIGFN b3pCb3hTaXppbmcpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekJveFNpemluZyhjb25z dCBuc0FTdHJpbmcgJiBhTW96Qm94U2l6aW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dE1vekNvdW50ZXJJbmNyZW1lbnQobnNBU3RyaW5nICYgYU1vekNvdW50ZXJJbmNyZW1lbnQpID0g MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekNvdW50ZXJJbmNyZW1lbnQoY29uc3QgbnNBU3Ry aW5nICYgYU1vekNvdW50ZXJJbmNyZW1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TW96Q291bnRlclJlc2V0KG5zQVN0cmluZyAmIGFNb3pDb3VudGVyUmVzZXQpID0gMDsKICB2aXJ0 dWFsIG5zcmVzdWx0IFNldE1vekNvdW50ZXJSZXNldChjb25zdCBuc0FTdHJpbmcgJiBhTW96Q291 bnRlclJlc2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vekZsb2F0RWRnZShuc0FT dHJpbmcgJiBhTW96RmxvYXRFZGdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pGbG9h dEVkZ2UoY29uc3QgbnNBU3RyaW5nICYgYU1vekZsb2F0RWRnZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRNb3pGb3JjZUJyb2tlbkltYWdlSWNvbihuc0FTdHJpbmcgJiBhTW96Rm9yY2VC cm9rZW5JbWFnZUljb24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekZvcmNlQnJva2Vu SW1hZ2VJY29uKGNvbnN0IG5zQVN0cmluZyAmIGFNb3pGb3JjZUJyb2tlbkltYWdlSWNvbikgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pJbWFnZVJlZ2lvbihuc0FTdHJpbmcgJiBhTW96 SW1hZ2VSZWdpb24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vekltYWdlUmVnaW9uKGNv bnN0IG5zQVN0cmluZyAmIGFNb3pJbWFnZVJlZ2lvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRNb3pLZXlFcXVpdmFsZW50KG5zQVN0cmluZyAmIGFNb3pLZXlFcXVpdmFsZW50KSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pLZXlFcXVpdmFsZW50KGNvbnN0IG5zQVN0cmluZyAm IGFNb3pLZXlFcXVpdmFsZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vek9wYWNp dHkobnNBU3RyaW5nICYgYU1vek9wYWNpdHkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1v ek9wYWNpdHkoY29uc3QgbnNBU3RyaW5nICYgYU1vek9wYWNpdHkpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0TW96T3V0bGluZShuc0FTdHJpbmcgJiBhTW96T3V0bGluZSkgPSAwOwogIHZp cnR1YWwgbnNyZXN1bHQgU2V0TW96T3V0bGluZShjb25zdCBuc0FTdHJpbmcgJiBhTW96T3V0bGlu ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pPdXRsaW5lQ29sb3IobnNBU3RyaW5n ICYgYU1vek91dGxpbmVDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96T3V0bGlu ZUNvbG9yKGNvbnN0IG5zQVN0cmluZyAmIGFNb3pPdXRsaW5lQ29sb3IpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TW96T3V0bGluZVJhZGl1cyhuc0FTdHJpbmcgJiBhTW96T3V0bGluZVJh ZGl1cykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96T3V0bGluZVJhZGl1cyhjb25zdCBu c0FTdHJpbmcgJiBhTW96T3V0bGluZVJhZGl1cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRNb3pPdXRsaW5lUmFkaXVzVG9wbGVmdChuc0FTdHJpbmcgJiBhTW96T3V0bGluZVJhZGl1c1Rv cGxlZnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vek91dGxpbmVSYWRpdXNUb3BsZWZ0 KGNvbnN0IG5zQVN0cmluZyAmIGFNb3pPdXRsaW5lUmFkaXVzVG9wbGVmdCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRNb3pPdXRsaW5lUmFkaXVzVG9wcmlnaHQobnNBU3RyaW5nICYgYU1v ek91dGxpbmVSYWRpdXNUb3ByaWdodCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96T3V0 bGluZVJhZGl1c1RvcHJpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFNb3pPdXRsaW5lUmFkaXVzVG9w cmlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW96T3V0bGluZVJhZGl1c0JvdHRv bWxlZnQobnNBU3RyaW5nICYgYU1vek91dGxpbmVSYWRpdXNCb3R0b21sZWZ0KSA9IDA7CiAgdmly dHVhbCBuc3Jlc3VsdCBTZXRNb3pPdXRsaW5lUmFkaXVzQm90dG9tbGVmdChjb25zdCBuc0FTdHJp bmcgJiBhTW96T3V0bGluZVJhZGl1c0JvdHRvbWxlZnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0TW96T3V0bGluZVJhZGl1c0JvdHRvbXJpZ2h0KG5zQVN0cmluZyAmIGFNb3pPdXRsaW5l UmFkaXVzQm90dG9tcmlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vek91dGxpbmVS YWRpdXNCb3R0b21yaWdodChjb25zdCBuc0FTdHJpbmcgJiBhTW96T3V0bGluZVJhZGl1c0JvdHRv bXJpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vek91dGxpbmVTdHlsZShuc0FT dHJpbmcgJiBhTW96T3V0bGluZVN0eWxlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNb3pP dXRsaW5lU3R5bGUoY29uc3QgbnNBU3RyaW5nICYgYU1vek91dGxpbmVTdHlsZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pPdXRsaW5lV2lkdGgobnNBU3RyaW5nICYgYU1vek91dGxp bmVXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96T3V0bGluZVdpZHRoKGNvbnN0 IG5zQVN0cmluZyAmIGFNb3pPdXRsaW5lV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0TW96UmVzaXplcihuc0FTdHJpbmcgJiBhTW96UmVzaXplcikgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0TW96UmVzaXplcihjb25zdCBuc0FTdHJpbmcgJiBhTW96UmVzaXplcikgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb3pVc2VyRm9jdXMobnNBU3RyaW5nICYgYU1velVzZXJG b2N1cykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW96VXNlckZvY3VzKGNvbnN0IG5zQVN0 cmluZyAmIGFNb3pVc2VyRm9jdXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW96VXNl cklucHV0KG5zQVN0cmluZyAmIGFNb3pVc2VySW5wdXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0 IFNldE1velVzZXJJbnB1dChjb25zdCBuc0FTdHJpbmcgJiBhTW96VXNlcklucHV0KSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1velVzZXJNb2RpZnkobnNBU3RyaW5nICYgYU1velVzZXJN b2RpZnkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1velVzZXJNb2RpZnkoY29uc3QgbnNB U3RyaW5nICYgYU1velVzZXJNb2RpZnkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW96 VXNlclNlbGVjdChuc0FTdHJpbmcgJiBhTW96VXNlclNlbGVjdCkgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0TW96VXNlclNlbGVjdChjb25zdCBuc0FTdHJpbmcgJiBhTW96VXNlclNlbGVjdCkg PSAwOwoKfTsKIyAyNTUgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NQ1NTQ2hhcnNldFJ1bGUuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTUNTU0NoYXJzZXRSdWxlLmgiCmNsYXNzIG5zSURPTUNTU0NoYXJz ZXRSdWxlIDogcHVibGljIG5zSURPTUNTU1J1bGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MTlmZTc4Y2MsIDB4 NjVmZiwgMHg0YjFkLCB7IDB4YTUsIDB4ZDcsIDB4OWUsIDB4YTgsIDB4OTYsIDB4OTIsIDB4Y2Us IDB4YzYgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbmNvZGluZyhu c0FTdHJpbmcgJiBhRW5jb2RpbmcpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEVuY29kaW5n KGNvbnN0IG5zQVN0cmluZyAmIGFFbmNvZGluZykgPSAwOwoKfTsKIyAyNTYgIm5zRE9NQ2xhc3NJ bmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTSW1wb3J0 UnVsZS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTSW1wb3J0 UnVsZS5oIgpjbGFzcyBuc0lET01DU1NJbXBvcnRSdWxlIDogcHVibGljIG5zSURPTUNTU1J1bGUg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4YTZjZjkwY2YsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4 MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRIcmVmKG5zQVN0cmluZyAmIGFIcmVmKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldE1lZGlhKG5zSURPTU1lZGlhTGlzdCAqICphTWVkaWEpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVTaGVldChuc0lET01DU1NTdHlsZVNoZWV0ICogKmFTdHls ZVNoZWV0KSA9IDA7Cgp9OwojIDI1NyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NNZWRpYVJ1bGUuaCIgMQojIDI1ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU01lZGlhUnVsZS5oIgpjbGFzcyBuc0lET01DU1NN ZWRpYVJ1bGUgOiBwdWJsaWMgbnNJRE9NQ1NTUnVsZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBiYywg MHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhk ZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lZGlhKG5z SURPTU1lZGlhTGlzdCAqICphTWVkaWEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3Nz UnVsZXMobnNJRE9NQ1NTUnVsZUxpc3QgKiAqYUNzc1J1bGVzKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEluc2VydFJ1bGUoY29uc3QgbnNBU3RyaW5nICYgcnVsZSwgUFJVaW50MzIgaW5kZXgs IFBSVWludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZVJ1bGUo UFJVaW50MzIgaW5kZXgpID0gMDsKCn07CiMgMjU4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAx ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1ByaW1pdGl2ZVZhbHVlLmgiIDEK IyAxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NQcmltaXRpdmVWYWx1ZS5o IgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTVmFsdWUuaCIgMQojIDI1 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1ZhbHVlLmgiCmNsYXNzIG5zSURP TUNTU1ZhbHVlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0 IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDAwOWY3ZWE1LCAw eDllODAsIDB4NDFiZSwgeyAweGIwLCAweDA4LCAweGRiLCAweDYyLCAweGYxLCAweDA4LCAweDIz LCAweGYyIH19OyByZXR1cm4gaWlkO30KIyAzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u c0lET01DU1NWYWx1ZS5oIgogIGVudW0geyBDU1NfSU5IRVJJVCA9IDBVIH07CgogIGVudW0geyBD U1NfUFJJTUlUSVZFX1ZBTFVFID0gMVUgfTsKCiAgZW51bSB7IENTU19WQUxVRV9MSVNUID0gMlUg fTsKCiAgZW51bSB7IENTU19DVVNUT00gPSAzVSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD c3NUZXh0KG5zQVN0cmluZyAmIGFDc3NUZXh0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRD c3NUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGFDc3NUZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEdldENzc1ZhbHVlVHlwZShQUlVpbnQxNiAqYUNzc1ZhbHVlVHlwZSkgPSAwOwoKfTsKIyAx MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NQcmltaXRpdmVWYWx1ZS5oIiAy CiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTUHJpbWl0aXZlVmFsdWUu aCIKY2xhc3MgbnNJRE9NQ1NTUHJpbWl0aXZlVmFsdWUgOiBwdWJsaWMgbnNJRE9NQ1NTVmFsdWUg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4ZTI0OTAzMWYsIDB4OGRmOSwgMHg0ZTdhLCB7IDB4YjYsIDB4NDQsIDB4 MTgsIDB4OTQsIDB4NmQsIDB4Y2UsIDB4MDAsIDB4MTkgfX07IHJldHVybiBpaWQ7fQojIDM5ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAgZW51 bSB7IENTU19VTktOT1dOID0gMFUgfTsKCiAgZW51bSB7IENTU19OVU1CRVIgPSAxVSB9OwoKICBl bnVtIHsgQ1NTX1BFUkNFTlRBR0UgPSAyVSB9OwoKICBlbnVtIHsgQ1NTX0VNUyA9IDNVIH07Cgog IGVudW0geyBDU1NfRVhTID0gNFUgfTsKCiAgZW51bSB7IENTU19QWCA9IDVVIH07CgogIGVudW0g eyBDU1NfQ00gPSA2VSB9OwoKICBlbnVtIHsgQ1NTX01NID0gN1UgfTsKCiAgZW51bSB7IENTU19J TiA9IDhVIH07CgogIGVudW0geyBDU1NfUFQgPSA5VSB9OwoKICBlbnVtIHsgQ1NTX1BDID0gMTBV IH07CgogIGVudW0geyBDU1NfREVHID0gMTFVIH07CgogIGVudW0geyBDU1NfUkFEID0gMTJVIH07 CgogIGVudW0geyBDU1NfR1JBRCA9IDEzVSB9OwoKICBlbnVtIHsgQ1NTX01TID0gMTRVIH07Cgog IGVudW0geyBDU1NfUyA9IDE1VSB9OwoKICBlbnVtIHsgQ1NTX0haID0gMTZVIH07CgogIGVudW0g eyBDU1NfS0haID0gMTdVIH07CgogIGVudW0geyBDU1NfRElNRU5TSU9OID0gMThVIH07CgogIGVu dW0geyBDU1NfU1RSSU5HID0gMTlVIH07CgogIGVudW0geyBDU1NfVVJJID0gMjBVIH07CgogIGVu dW0geyBDU1NfSURFTlQgPSAyMVUgfTsKCiAgZW51bSB7IENTU19BVFRSID0gMjJVIH07CgogIGVu dW0geyBDU1NfQ09VTlRFUiA9IDIzVSB9OwoKICBlbnVtIHsgQ1NTX1JFQ1QgPSAyNFUgfTsKCiAg ZW51bSB7IENTU19SR0JDT0xPUiA9IDI1VSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmlt aXRpdmVUeXBlKFBSVWludDE2ICphUHJpbWl0aXZlVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRGbG9hdFZhbHVlKFBSVWludDE2IHVuaXRUeXBlLCBmbG9hdCBmbG9hdFZhbHVlKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZsb2F0VmFsdWUoUFJVaW50MTYgdW5pdFR5cGUs IGZsb2F0ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0cmluZ1ZhbHVl KFBSVWludDE2IHN0cmluZ1R5cGUsIGNvbnN0IG5zQVN0cmluZyAmIHN0cmluZ1ZhbHVlKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmluZ1ZhbHVlKG5zQVN0cmluZyAmIF9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q291bnRlclZhbHVlKG5zSURPTUNvdW50ZXIg KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlY3RWYWx1ZShuc0lET01S ZWN0ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSR0JDb2xvclZhbHVl KG5zSURPTVJHQkNvbG9yICoqX3JldHZhbCkgPSAwOwoKfTsKIyAyNTkgIm5zRE9NQ2xhc3NJbmZv LmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ1NTU3R5bGVSdWxl LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NTdHlsZVJ1bGUu aCIKY2xhc3MgbnNJRE9NQ1NTU3R5bGVSdWxlIDogcHVibGljIG5zSURPTUNTU1J1bGUgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4YTZjZjkwYmYsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4 ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRTZWxlY3RvclRleHQobnNBU3RyaW5nICYgYVNlbGVjdG9yVGV4dCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0b3JUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGFTZWxl Y3RvclRleHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGUobnNJRE9NQ1NTU3R5 bGVEZWNsYXJhdGlvbiAqICphU3R5bGUpID0gMDsKCn07CiMgMjYwICJuc0RPTUNsYXNzSW5mby5j cHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1N0eWxlU2hlZXQu aCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1N0eWxlU2hlZXQu aCIKY2xhc3MgbnNJRE9NQ1NTU3R5bGVTaGVldCA6IHB1YmxpYyBuc0lET01TdHlsZVNoZWV0IHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweGE2Y2Y5MGMyLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAw LCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0MCAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DU1NTdHlsZVNoZWV0LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRPd25lclJ1bGUobnNJRE9NQ1NTUnVsZSAqICphT3duZXJSdWxlKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldENzc1J1bGVzKG5zSURPTUNTU1J1bGVMaXN0ICogKmFDc3NS dWxlcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNlcnRSdWxlKGNvbnN0IG5zQVN0cmlu ZyAmIHJ1bGUsIFBSVWludDMyIGluZGV4LCBQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBEZWxldGVSdWxlKFBSVWludDMyIGluZGV4KSA9IDA7Cgp9OwojIDI2MSAi bnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE T01DU1NWYWx1ZUxpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP TUNTU1ZhbHVlTGlzdC5oIgpjbGFzcyBuc0lET01DU1NWYWx1ZUxpc3QgOiBwdWJsaWMgbnNJRE9N Q1NTVmFsdWUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OGYwOWZhODQsIDB4MzliOSwgMHg0ZGNhLCB7IDB4OWIs IDB4MmYsIDB4ZGIsIDB4MGUsIDB4ZWIsIDB4MTgsIDB4NjIsIDB4ODYgfX07IHJldHVybiBpaWQ7 fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNTU1ZhbHVlTGlzdC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5kZXgsIG5zSURPTUNTU1ZhbHVlICoqX3Jl dHZhbCkgPSAwOwoKfTsKIyAyNjIgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NUmFuZ2UuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvZG9tL25zSURPTVJhbmdlLmgiCmNsYXNzIG5zSURPTVJhbmdlIDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MGNlLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAw eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30K IyAzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01SYW5nZS5oIgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0U3RhcnRDb250YWluZXIobnNJRE9NTm9kZSAqICphU3RhcnRDb250YWluZXIp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhcnRPZmZzZXQoUFJJbnQzMiAqYVN0YXJ0 T2Zmc2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVuZENvbnRhaW5lcihuc0lET01O b2RlICogKmFFbmRDb250YWluZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW5kT2Zm c2V0KFBSSW50MzIgKmFFbmRPZmZzZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29s bGFwc2VkKFBSQm9vbCAqYUNvbGxhcHNlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD b21tb25BbmNlc3RvckNvbnRhaW5lcihuc0lET01Ob2RlICogKmFDb21tb25BbmNlc3RvckNvbnRh aW5lcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdGFydChuc0lET01Ob2RlICpyZWZO b2RlLCBQUkludDMyIG9mZnNldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRFbmQobnNJ RE9NTm9kZSAqcmVmTm9kZSwgUFJJbnQzMiBvZmZzZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0U3RhcnRCZWZvcmUobnNJRE9NTm9kZSAqcmVmTm9kZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRTdGFydEFmdGVyKG5zSURPTU5vZGUgKnJlZk5vZGUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0RW5kQmVmb3JlKG5zSURPTU5vZGUgKnJlZk5vZGUpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgU2V0RW5kQWZ0ZXIobnNJRE9NTm9kZSAqcmVmTm9kZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBDb2xsYXBzZShQUkJvb2wgdG9TdGFydCkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBTZWxlY3ROb2RlKG5zSURPTU5vZGUgKnJlZk5vZGUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgU2VsZWN0Tm9kZUNvbnRlbnRzKG5zSURPTU5vZGUgKnJlZk5vZGUpID0gMDsK CiAgZW51bSB7IFNUQVJUX1RPX1NUQVJUID0gMFUgfTsKCiAgZW51bSB7IFNUQVJUX1RPX0VORCA9 IDFVIH07CgogIGVudW0geyBFTkRfVE9fRU5EID0gMlUgfTsKCiAgZW51bSB7IEVORF9UT19TVEFS VCA9IDNVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBhcmVCb3VuZGFyeVBvaW50cyhQUlVp bnQxNiBob3csIG5zSURPTVJhbmdlICpzb3VyY2VSYW5nZSwgUFJJbnQxNiAqX3JldHZhbCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWxldGVDb250ZW50cyh2b2lkKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEV4dHJhY3RDb250ZW50cyhuc0lET01Eb2N1bWVudEZyYWdtZW50ICoqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZUNvbnRlbnRzKG5zSURPTURvY3Vt ZW50RnJhZ21lbnQgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydE5v ZGUobnNJRE9NTm9kZSAqbmV3Tm9kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdXJyb3Vu ZENvbnRlbnRzKG5zSURPTU5vZGUgKm5ld1BhcmVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBDbG9uZVJhbmdlKG5zSURPTVJhbmdlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBUb1N0cmluZyhuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IERldGFjaCh2b2lkKSA9IDA7Cgp9OwojIDI2MyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMg MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1JhbmdlLmgiIDEKIyAyNSAiLi4v Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1JhbmdlLmgiCmNsYXNzIG5zSURPTU5TUmFu Z2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwZjIsIDB4MTViMywg MHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIg fX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVDb250ZXh0dWFsRnJh Z21lbnQoY29uc3QgbnNBU3RyaW5nICYgZnJhZ21lbnQsIG5zSURPTURvY3VtZW50RnJhZ21lbnQg KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUG9pbnRJblJhbmdlKG5zSURP TU5vZGUgKnBhcmVudCwgUFJJbnQzMiBvZmZzZXQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBDb21wYXJlUG9pbnQobnNJRE9NTm9kZSAqcGFyZW50LCBQUkludDMy IG9mZnNldCwgUFJJbnQxNiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnRl cnNlY3RzTm9kZShuc0lET01Ob2RlICpuLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCiAgZW51bSB7 IE5PREVfQkVGT1JFID0gMFUgfTsKCiAgZW51bSB7IE5PREVfQUZURVIgPSAxVSB9OwoKICBlbnVt IHsgTk9ERV9CRUZPUkVfQU5EX0FGVEVSID0gMlUgfTsKCiAgZW51bSB7IE5PREVfSU5TSURFID0g M1UgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZU5vZGUobnNJRE9NTm9kZSAqbiwgUFJV aW50MTYgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTlNEZXRhY2godm9pZCkg PSAwOwoKfTsKIyAyNjQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9kb20vbnNJRE9NUmFuZ2VFeGNlcHRpb24uaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvZG9tL25zSURPTVJhbmdlRXhjZXB0aW9uLmgiCmNsYXNzIG5zSURPTVJhbmdlRXhj ZXB0aW9uIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDBmODA3MzAxLCAweDM5 ZDIsIDB4MTFkNiwgeyAweGE3LCAweGYyLCAweDhmLCAweDUwLCAweDRmLCAweGY4LCAweDcwLCAw eGRjIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7IEJBRF9CT1VOREFSWVBPSU5UU19FUlIgPSAx VSB9OwoKICBlbnVtIHsgSU5WQUxJRF9OT0RFX1RZUEVfRVJSID0gMlUgfTsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0Q29kZShQUlVpbnQxNiAqYUNvZGUpID0gMDsKCn07CiMgMjY1ICJuc0RPTUNs YXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRyZWVX YWxrZXIuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVRyZWVXYWxr ZXIuaCIKY2xhc3MgbnNJRE9NVHJlZVdhbGtlcjsKCmNsYXNzIG5zSURPTU5vZGVGaWx0ZXI7CiMg MjkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NVHJlZVdhbGtlci5oIgpjbGFzcyBu c0lET01UcmVlV2Fsa2VyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDQwMGFm M2NhLCAweDFkZDIsIDB4MTFiMiwgeyAweGE1LCAweDBhLCAweDg4LCAweDdlLCAweGNjLCAweGEy LCAweGU2LCAweDNhIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9v dChuc0lET01Ob2RlICogKmFSb290KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdoYXRU b1Nob3coUFJVaW50MzIgKmFXaGF0VG9TaG93KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dEZpbHRlcihuc0lET01Ob2RlRmlsdGVyICogKmFGaWx0ZXIpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0RXhwYW5kRW50aXR5UmVmZXJlbmNlcyhQUkJvb2wgKmFFeHBhbmRFbnRpdHlSZWZl cmVuY2VzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnROb2RlKG5zSURPTU5v ZGUgKiAqYUN1cnJlbnROb2RlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDdXJyZW50Tm9k ZShuc0lET01Ob2RlICogYUN1cnJlbnROb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBh cmVudE5vZGUobnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg Rmlyc3RDaGlsZChuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBMYXN0Q2hpbGQobnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgUHJldmlvdXNTaWJsaW5nKG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IE5leHRTaWJsaW5nKG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFByZXZpb3VzTm9kZShuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBOZXh0Tm9kZShuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKfTsK IyAyNjYgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k b20vbnNJRE9NWFVMRG9jdW1lbnQuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t L25zSURPTVhVTERvY3VtZW50LmgiCmNsYXNzIG5zSURPTVhVTENvbW1hbmREaXNwYXRjaGVyOwoj IDI3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVhVTERvY3VtZW50LmgiCmNsYXNz IG5zSURPTVhVTERvY3VtZW50IDogcHVibGljIG5zSURPTURvY3VtZW50IHsKIHB1YmxpYzoKCiAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw eDE3ZGRkOGMwLCAweGM1ZjgsIDB4MTFkMiwgeyAweGE2LCAweGFlLCAweDAwLCAweDEwLCAweDRi LCAweGRlLCAweDYwLCAweDQ4IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0UG9wdXBOb2RlKG5zSURPTU5vZGUgKiAqYVBvcHVwTm9kZSkgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0UG9wdXBOb2RlKG5zSURPTU5vZGUgKiBhUG9wdXBOb2RlKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFRvb2x0aXBOb2RlKG5zSURPTU5vZGUgKiAqYVRvb2x0aXBOb2RlKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUb29sdGlwTm9kZShuc0lET01Ob2RlICogYVRvb2x0 aXBOb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbW1hbmREaXNwYXRjaGVyKG5z SURPTVhVTENvbW1hbmREaXNwYXRjaGVyICogKmFDb21tYW5kRGlzcGF0Y2hlcikgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRXaWR0aChQUkludDMyICphV2lkdGgpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0SGVpZ2h0KFBSSW50MzIgKmFIZWlnaHQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0RWxlbWVudHNCeUF0dHJpYnV0ZShjb25zdCBuc0FTdHJpbmcgJiBuYW1lLCBj b25zdCBuc0FTdHJpbmcgJiB2YWx1ZSwgbnNJRE9NTm9kZUxpc3QgKipfcmV0dmFsKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEFkZEJyb2FkY2FzdExpc3RlbmVyRm9yKG5zSURPTUVsZW1lbnQg KmJyb2FkY2FzdGVyLCBuc0lET01FbGVtZW50ICpvYnNlcnZlciwgY29uc3QgbnNBU3RyaW5nICYg YXR0cikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVCcm9hZGNhc3RMaXN0ZW5lckZv cihuc0lET01FbGVtZW50ICpicm9hZGNhc3RlciwgbnNJRE9NRWxlbWVudCAqb2JzZXJ2ZXIsIGNv bnN0IG5zQVN0cmluZyAmIGF0dHIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUGVyc2lzdChj b25zdCBuc0FTdHJpbmcgJiBpZCwgY29uc3QgbnNBU3RyaW5nICYgYXR0cikgPSAwOwoKfTsKIyAy NjcgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v bnNJRE9NWFVMRWxlbWVudC5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJ RE9NWFVMRWxlbWVudC5oIgpjbGFzcyBuc0lSREZDb21wb3NpdGVEYXRhU291cmNlOwoKY2xhc3Mg bnNJWFVMVGVtcGxhdGVCdWlsZGVyOwoKY2xhc3MgbnNJUkRGUmVzb3VyY2U7CgpjbGFzcyBuc0lD b250cm9sbGVyczsKCmNsYXNzIG5zSUJveE9iamVjdDsKIyAzNSAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL2RvbS9uc0lET01YVUxFbGVtZW50LmgiCmNsYXNzIG5zSURPTVhVTEVsZW1lbnQgOiBwdWJs aWMgbnNJRE9NRWxlbWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwNTc0ZWQ4MSwgMHhjMDg4LCAweDExZDIs IHsgMHg5NiwgMHhlZCwgMHgwMCwgMHgxMCwgMHg0YiwgMHg3YiwgMHg3ZCwgMHhlYiB9fTsgcmV0 dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElkKG5zQVN0cmluZyAmIGFJZCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SWQoY29uc3QgbnNBU3RyaW5nICYgYUlkKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNzTmFtZShuc0FTdHJpbmcgJiBhQ2xhc3NOYW1lKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDbGFzc05hbWUoY29uc3QgbnNBU3RyaW5nICYgYUNs YXNzTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGlnbihuc0FTdHJpbmcgJiBh QWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsaWduKGNvbnN0IG5zQVN0cmluZyAm IGFBbGlnbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXIobnNBU3RyaW5nICYgYURp cikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlyKGNvbnN0IG5zQVN0cmluZyAmIGFEaXIp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmxleChuc0FTdHJpbmcgJiBhRmxleCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmxleChjb25zdCBuc0FTdHJpbmcgJiBhRmxleCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGbGV4R3JvdXAobnNBU3RyaW5nICYgYUZsZXhHcm91 cCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmxleEdyb3VwKGNvbnN0IG5zQVN0cmluZyAm IGFGbGV4R3JvdXApID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3JkaW5hbChuc0FTdHJp bmcgJiBhT3JkaW5hbCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T3JkaW5hbChjb25zdCBu c0FTdHJpbmcgJiBhT3JkaW5hbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPcmllbnQo bnNBU3RyaW5nICYgYU9yaWVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T3JpZW50KGNv bnN0IG5zQVN0cmluZyAmIGFPcmllbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFj ayhuc0FTdHJpbmcgJiBhUGFjaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFjayhjb25z dCBuc0FTdHJpbmcgJiBhUGFjaykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIaWRkZW4o UFJCb29sICphSGlkZGVuKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIaWRkZW4oUFJCb29s IGFIaWRkZW4pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29sbGFwc2VkKFBSQm9vbCAq YUNvbGxhcHNlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29sbGFwc2VkKFBSQm9vbCBh Q29sbGFwc2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9ic2VydmVzKG5zQVN0cmlu ZyAmIGFPYnNlcnZlcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T2JzZXJ2ZXMoY29uc3Qg bnNBU3RyaW5nICYgYU9ic2VydmVzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lbnUo bnNBU3RyaW5nICYgYU1lbnUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1lbnUoY29uc3Qg bnNBU3RyaW5nICYgYU1lbnUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGV4dE1l bnUobnNBU3RyaW5nICYgYUNvbnRleHRNZW51KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRD b250ZXh0TWVudShjb25zdCBuc0FTdHJpbmcgJiBhQ29udGV4dE1lbnUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0VG9vbHRpcChuc0FTdHJpbmcgJiBhVG9vbHRpcCkgPSAwOwogIHZpcnR1 YWwgbnNyZXN1bHQgU2V0VG9vbHRpcChjb25zdCBuc0FTdHJpbmcgJiBhVG9vbHRpcCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaWR0aChuc0FTdHJpbmcgJiBhV2lkdGgpID0gMDsKICB2 aXJ0dWFsIG5zcmVzdWx0IFNldFdpZHRoKGNvbnN0IG5zQVN0cmluZyAmIGFXaWR0aCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQobnNBU3RyaW5nICYgYUhlaWdodCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0SGVpZ2h0KGNvbnN0IG5zQVN0cmluZyAmIGFIZWlnaHQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWluV2lkdGgobnNBU3RyaW5nICYgYU1pbldpZHRo KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNaW5XaWR0aChjb25zdCBuc0FTdHJpbmcgJiBh TWluV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWluSGVpZ2h0KG5zQVN0cmlu ZyAmIGFNaW5IZWlnaHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1pbkhlaWdodChjb25z dCBuc0FTdHJpbmcgJiBhTWluSGVpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1h eFdpZHRoKG5zQVN0cmluZyAmIGFNYXhXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 TWF4V2lkdGgoY29uc3QgbnNBU3RyaW5nICYgYU1heFdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldE1heEhlaWdodChuc0FTdHJpbmcgJiBhTWF4SGVpZ2h0KSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRNYXhIZWlnaHQoY29uc3QgbnNBU3RyaW5nICYgYU1heEhlaWdodCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQZXJzaXN0KG5zQVN0cmluZyAmIGFQZXJzaXN0KSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQZXJzaXN0KGNvbnN0IG5zQVN0cmluZyAmIGFQZXJz aXN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlZnQobnNBU3RyaW5nICYgYUxlZnQp ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExlZnQoY29uc3QgbnNBU3RyaW5nICYgYUxlZnQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VG9wKG5zQVN0cmluZyAmIGFUb3ApID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRvcChjb25zdCBuc0FTdHJpbmcgJiBhVG9wKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGFzb3VyY2VzKG5zQVN0cmluZyAmIGFEYXRhc291cmNl cykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YXNvdXJjZXMoY29uc3QgbnNBU3RyaW5n ICYgYURhdGFzb3VyY2VzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlZihuc0FTdHJp bmcgJiBhUmVmKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSZWYoY29uc3QgbnNBU3RyaW5n ICYgYVJlZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUb29sdGlwVGV4dChuc0FTdHJp bmcgJiBhVG9vbHRpcFRleHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRvb2x0aXBUZXh0 KGNvbnN0IG5zQVN0cmluZyAmIGFUb29sdGlwVGV4dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRTdGF0dXNUZXh0KG5zQVN0cmluZyAmIGFTdGF0dXNUZXh0KSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRTdGF0dXNUZXh0KGNvbnN0IG5zQVN0cmluZyAmIGFTdGF0dXNUZXh0KSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsbG93RXZlbnRzKFBSQm9vbCAqYUFsbG93RXZlbnRz KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbGxvd0V2ZW50cyhQUkJvb2wgYUFsbG93RXZl bnRzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0eWxlKG5zSURPTUNTU1N0eWxlRGVj bGFyYXRpb24gKiAqYVN0eWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGFiYXNl KG5zSVJERkNvbXBvc2l0ZURhdGFTb3VyY2UgKiAqYURhdGFiYXNlKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldEJ1aWxkZXIobnNJWFVMVGVtcGxhdGVCdWlsZGVyICogKmFCdWlsZGVyKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlc291cmNlKG5zSVJERlJlc291cmNlICogKmFS ZXNvdXJjZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250cm9sbGVycyhuc0lDb250 cm9sbGVycyAqICphQ29udHJvbGxlcnMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm94 T2JqZWN0KG5zSUJveE9iamVjdCAqICphQm94T2JqZWN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEZvY3VzKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQmx1cih2b2lkKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsaWNrKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgRG9Db21tYW5kKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RWxlbWVudHNC eUF0dHJpYnV0ZShjb25zdCBuc0FTdHJpbmcgJiBuYW1lLCBjb25zdCBuc0FTdHJpbmcgJiB2YWx1 ZSwgbnNJRE9NTm9kZUxpc3QgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDI2OCAibnNET01DbGFzc0lu Zm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01YVUxDb21tYW5k RGlzcGF0Y2hlci5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NWFVM Q29tbWFuZERpc3BhdGNoZXIuaCIKY2xhc3MgbnNJRE9NRWxlbWVudDsKCmNsYXNzIG5zSUNvbnRy b2xsZXI7CgpjbGFzcyBuc0lDb250cm9sbGVyczsKCmNsYXNzIG5zSURPTVdpbmRvdzsKIyAzMyAi Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01YVUxDb21tYW5kRGlzcGF0Y2hlci5oIgpj bGFzcyBuc0lET01YVUxDb21tYW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHhmM2M1MDM2MSwgMHgxNGZlLCAweDExZDMsIHsgMHhiZiwgMHg4NywgMHgwMCwg MHgxMCwgMHg1YSwgMHgxYiwgMHgwNiwgMHgyNyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldEZvY3VzZWRFbGVtZW50KG5zSURPTUVsZW1lbnQgKiAqYUZvY3VzZWRFbGVt ZW50KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb2N1c2VkRWxlbWVudChuc0lET01FbGVt ZW50ICogYUZvY3VzZWRFbGVtZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvY3Vz ZWRXaW5kb3cobnNJRE9NV2luZG93ICogKmFGb2N1c2VkV2luZG93KSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRGb2N1c2VkV2luZG93KG5zSURPTVdpbmRvdyAqIGFGb2N1c2VkV2luZG93KSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZENvbW1hbmRVcGRhdGVyKG5zSURPTUVsZW1lbnQg KnVwZGF0ZXIsIGNvbnN0IG5zQVN0cmluZyAmIGV2ZW50cywgY29uc3QgbnNBU3RyaW5nICYgdGFy Z2V0cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVDb21tYW5kVXBkYXRlcihuc0lE T01FbGVtZW50ICp1cGRhdGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZUNvbW1h bmRzKGNvbnN0IG5zQVN0cmluZyAmIGV2ZW50TmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRDb250cm9sbGVyRm9yQ29tbWFuZChjb25zdCBjaGFyICpjb21tYW5kLCBuc0lDb250cm9s bGVyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250cm9sbGVycyhu c0lDb250cm9sbGVycyAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWR2YW5j ZUZvY3VzKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmV3aW5kRm9jdXModm9pZCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZHZhbmNlRm9jdXNJbnRvU3VidHJlZShuc0lET01F bGVtZW50ICplbHQpID0gMDsKCn07CiMgMjY5ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNyeXB0by5oIiAxCiMgMjUgIi4uLy4uLy4u L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ3J5cHRvLmgiCmNsYXNzIG5zSURPTUNyeXB0byA6IHB1 YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmNDVlZmJlMCwgMHgxZDUyLCAweDExZDQs IHsgMHg4YSwgMHg3YywgMHgwMCwgMHg2MCwgMHgwOCwgMHhjOCwgMHg0NCwgMHhjMyB9fTsgcmV0 dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZlcnNpb24obnNBU3RyaW5nICYgYVZl cnNpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2VuZXJhdGVDUk1GUmVxdWVzdChuc0lE T01DUk1GT2JqZWN0ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbXBvcnRV c2VyQ2VydGlmaWNhdGVzKGNvbnN0IG5zQVN0cmluZyAmIG5pY2tuYW1lLCBjb25zdCBuc0FTdHJp bmcgJiBjbW1mUmVzcG9uc2UsIFBSQm9vbCBkb0ZvcmNlZEJhY2t1cCwgbnNBU3RyaW5nICYgX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQb3BDaGFsbGVuZ2VSZXNwb25zZShjb25z dCBuc0FTdHJpbmcgJiBjaGFsbGVuZ2UsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgUmFuZG9tKFBSSW50MzIgbnVtQnl0ZXMsIG5zQVN0cmluZyAmIF9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2lnblRleHQobnNBU3RyaW5nICYgX3JldHZh bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBbGVydChjb25zdCBuc0FTdHJpbmcgJiBtZXNz YWdlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvZ291dCh2b2lkKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IERpc2FibGVSaWdodENsaWNrKHZvaWQpID0gMDsKCn07CiMgMjcwICJuc0RP TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNS TUZPYmplY3QuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNSTUZP YmplY3QuaCIKY2xhc3MgbnNJRE9NQ1JNRk9iamVjdCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHgxNmRhNDZjMCwgMHgyMDhkLCAweDExZDQsIHsgMHg4YSwgMHg3YywgMHgwMCwg MHg2MCwgMHgwOCwgMHhjOCwgMHg0NCwgMHhjMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFJlcXVlc3QobnNBU3RyaW5nICYgYVJlcXVlc3QpID0gMDsKCn07CiMgMjcx ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z SURPTVBrY3MxMS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NUGtj czExLmgiCmNsYXNzIG5zSURPTVBrY3MxMSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg PSB7MHg5ZmQ0Mjk1MCwgMHgyNWU3LCAweDExZDQsIHsgMHg4YSwgMHg3ZCwgMHgwMCwgMHg2MCwg MHgwOCwgMHhjOCwgMHg0NCwgMHhjMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVz dWx0IERlbGV0ZW1vZHVsZShjb25zdCBuc0FTdHJpbmcgJiBtb2R1bGVOYW1lLCBQUkludDMyICpf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZG1vZHVsZShjb25zdCBuc0FTdHJp bmcgJiBtb2R1bGVOYW1lLCBjb25zdCBuc0FTdHJpbmcgJiBsaWJyYXJ5RnVsbFBhdGgsIFBSSW50 MzIgY3J5cHRvTWVjaGFuaXNtRmxhZ3MsIFBSSW50MzIgY2lwaGVyRmxhZ3MsIFBSSW50MzIgKl9y ZXR2YWwpID0gMDsKCn07CiMgMjcyICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUveHVsZG9jL25zSUNvbnRyb2xsZXJzLmgiIDEKIyAxMCAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3h1bGRvYy9uc0lDb250cm9sbGVycy5oIgojIDEgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS94dWxkb2MvbnNJQ29udHJvbGxlci5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5j bHVkZS94dWxkb2MvbnNJQ29udHJvbGxlci5oIgpjbGFzcyBuc0lDb250cm9sbGVyIDogcHVibGlj IG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7 c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQ1YjYxYjgyLCAweDFkYTQsIDB4MTFkMywgeyAw eGJmLCAweDg3LCAweDAwLCAweDEwLCAweDVhLCAweDFiLCAweDA2LCAweDI3IH19OyByZXR1cm4g aWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNDb21tYW5kRW5hYmxlZChjb25zdCBjaGFyICpj b21tYW5kLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3VwcG9y dHNDb21tYW5kKGNvbnN0IGNoYXIgKmNvbW1hbmQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBEb0NvbW1hbmQoY29uc3QgY2hhciAqY29tbWFuZCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBPbkV2ZW50KGNvbnN0IGNoYXIgKmV2ZW50TmFtZSkgPSAwOwoKfTsK IyAxMjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94dWxkb2MvbnNJQ29udHJvbGxlci5oIgpjbGFz cyBuc0lDb21tYW5kUGFyYW1zOwojIDEzMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3h1bGRvYy9u c0lDb250cm9sbGVyLmgiCmNsYXNzIG5zSUNvbW1hbmRDb250cm9sbGVyIDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweGViZTU1MDgwLCAweGM4YTksIDB4MTFkNSwgeyAweGE3LCAw eDNjLCAweGRkLCAweDYyLCAweDBkLCAweDZlLCAweDA0LCAweGJjIH19OyByZXR1cm4gaWlkO30K CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tbWFuZFN0YXRlV2l0aFBhcmFtcyhjb25zdCBjaGFy ICpjb21tYW5kLCBuc0lDb21tYW5kUGFyYW1zICphQ29tbWFuZFBhcmFtcykgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBEb0NvbW1hbmRXaXRoUGFyYW1zKGNvbnN0IGNoYXIgKmNvbW1hbmQsIG5z SUNvbW1hbmRQYXJhbXMgKmFDb21tYW5kUGFyYW1zKSA9IDA7Cgp9OwojIDIwMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL3h1bGRvYy9uc0lDb250cm9sbGVyLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1l cmF0b3I7CiMgMjExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHVsZG9jL25zSUNvbnRyb2xsZXIu aCIKY2xhc3MgbnNJQ29udHJvbGxlckNvbW1hbmRHcm91cCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHg5ZjgyYzQwNCwgMHgxYzdiLCAweDExZDUsIHsgMHhhNywgMHgzYywgMHhl YywgMHhhNCwgMHgzYywgMHhhOCwgMHgzNiwgMHhmYyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEFkZENvbW1hbmRUb0dyb3VwKGNvbnN0IGNoYXIgKmFDb21tYW5kLCBjb25z dCBjaGFyICphR3JvdXApID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ29tbWFuZEZy b21Hcm91cChjb25zdCBjaGFyICphQ29tbWFuZCwgY29uc3QgY2hhciAqYUdyb3VwKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IElzQ29tbWFuZEluR3JvdXAoY29uc3QgY2hhciAqYUNvbW1hbmQs IGNvbnN0IGNoYXIgKmFHcm91cCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldEdyb3Vwc0VudW1lcmF0b3IobnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW51bWVyYXRvckZvckdyb3VwKGNvbnN0IGNo YXIgKmFHcm91cCwgbnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTEg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94dWxkb2MvbnNJQ29udHJvbGxlcnMuaCIgMgoKCgoKCgpj bGFzcyBuc0lET01YVUxDb21tYW5kRGlzcGF0Y2hlcjsKIyAyNyAiLi4vLi4vLi4vZGlzdC9pbmNs dWRlL3h1bGRvYy9uc0lDb250cm9sbGVycy5oIgpjbGFzcyBuc0lDb250cm9sbGVycyA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNWVkM2EwMSwgMHg3Y2M3LCAweDExZDMsIHsg MHhiZiwgMHg4NywgMHgwMCwgMHgxMCwgMHg1YSwgMHgxYiwgMHgwNiwgMHgyNyB9fTsgcmV0dXJu IGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbW1hbmREaXNwYXRjaGVyKG5zSURPTVhV TENvbW1hbmREaXNwYXRjaGVyICogKmFDb21tYW5kRGlzcGF0Y2hlcikgPSAwOwogIHZpcnR1YWwg bnNyZXN1bHQgU2V0Q29tbWFuZERpc3BhdGNoZXIobnNJRE9NWFVMQ29tbWFuZERpc3BhdGNoZXIg KiBhQ29tbWFuZERpc3BhdGNoZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udHJv bGxlckZvckNvbW1hbmQoY29uc3QgY2hhciAqY29tbWFuZCwgbnNJQ29udHJvbGxlciAqKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0Q29udHJvbGxlckF0KFBSVWludDMy IGluZGV4LCBuc0lDb250cm9sbGVyICpjb250cm9sbGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IFJlbW92ZUNvbnRyb2xsZXJBdChQUlVpbnQzMiBpbmRleCwgbnNJQ29udHJvbGxlciAqKl9y ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udHJvbGxlckF0KFBSVWludDMy IGluZGV4LCBuc0lDb250cm9sbGVyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBBcHBlbmRDb250cm9sbGVyKG5zSUNvbnRyb2xsZXIgKmNvbnRyb2xsZXIpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ29udHJvbGxlcihuc0lDb250cm9sbGVyICpjb250cm9sbGVy KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRyb2xsZXJJZChuc0lDb250cm9sbGVy ICpjb250cm9sbGVyLCBQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRDb250cm9sbGVyQnlJZChQUlVpbnQzMiBjb250cm9sbGVySUQsIG5zSUNvbnRyb2xsZXIg KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRyb2xsZXJDb3VudChQ UlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKfTsKIyAyNzMgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgoj IDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSVNlbGVjdGlvbi5oIiAxCiMgMTcg Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSVNlbGVjdGlvbi5oIgpjbGFzcyBuc0lE T01Ob2RlOwoKY2xhc3MgbnNJRE9NUmFuZ2U7CiMgMzYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9j b250ZW50L25zSVNlbGVjdGlvbi5oIgpjbGFzcyBuc0lTZWxlY3Rpb24gOiBwdWJsaWMgbnNJU3Vw cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4YjJjN2VkNTksIDB4ODYzNCwgMHg0MzUyLCB7IDB4OWUsIDB4 MzcsIDB4NTQsIDB4ODQsIDB4YzgsIDB4YjYsIDB4ZTQsIDB4ZTEgfX07IHJldHVybiBpaWQ7fQoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbmNob3JOb2RlKG5zSURPTU5vZGUgKiAqYUFuY2hv ck5vZGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QW5jaG9yT2Zmc2V0KFBSSW50 MzIgKmFBbmNob3JPZmZzZXQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNO b2RlKG5zSURPTU5vZGUgKiAqYUZvY3VzTm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRGb2N1c09mZnNldChQUkludDMyICphRm9jdXNPZmZzZXQpID0gMDsKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0SXNDb2xsYXBzZWQoUFJCb29sICphSXNDb2xsYXBzZWQpID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmFuZ2VDb3VudChQUkludDMyICphUmFuZ2VDb3VudCkg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSYW5nZUF0KFBSSW50MzIgaW5kZXgsIG5z SURPTVJhbmdlICoqX3JldHZhbCkgPSAwOwojIDkxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29u dGVudC9uc0lTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvbGxhcHNlKG5zSURPTU5v ZGUgKnBhcmVudE5vZGUsIFBSSW50MzIgb2Zmc2V0KSA9IDA7CiMgMTAxICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvY29udGVudC9uc0lTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEV4dGVu ZChuc0lET01Ob2RlICpwYXJlbnROb2RlLCBQUkludDMyIG9mZnNldCkgPSAwOwoKCgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IENvbGxhcHNlVG9TdGFydCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgQ29sbGFwc2VUb0VuZCh2b2lkKSA9IDA7CiMgMTI3ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvY29udGVudC9uc0lTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRh aW5zTm9kZShuc0lET01Ob2RlICpub2RlLCBQUkJvb2wgZW50aXJlbHlDb250YWluZWQsIFBSQm9v bCAqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0QWxsQ2hpbGRy ZW4obnNJRE9NTm9kZSAqcGFyZW50Tm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBB ZGRSYW5nZShuc0lET01SYW5nZSAqcmFuZ2UpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg UmVtb3ZlUmFuZ2UobnNJRE9NUmFuZ2UgKnJhbmdlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz dWx0IFJlbW92ZUFsbFJhbmdlcyh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERl bGV0ZUZyb21Eb2N1bWVudCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2Vs ZWN0aW9uTGFuZ3VhZ2VDaGFuZ2UoUFJCb29sIGxhbmdSVEwpID0gMDsKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgVG9TdHJpbmcoUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAyNzQgIm5z RE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJ Qm94T2JqZWN0LmgiIDEKIyAxNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lCb3hP YmplY3QuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUJveExheW91dE1h bmFnZXIuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUJveExheW91 dE1hbmFnZXIuaCIKY2xhc3MgbnNJQm94TGF5b3V0TWFuYWdlciA6IHB1YmxpYyBuc0lTdXBwb3J0 cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z dCBuc0lJRCBpaWQgPSB7MHhkYzA2Yjg5MCwgMHgxNWExLCAweDQ1YTksIHsgMHhhMSwgMHhhMywg MHhmMSwgMHg0NCwgMHhiNCwgMHgyZSwgMHhlYSwgMHgyOSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IExheW91dCh2b2lkKSA9IDA7Cgp9OwojIDg0ICIuLi8uLi8uLi9kaXN0 L2luY2x1ZGUvbGF5b3V0L25zSUJveExheW91dE1hbmFnZXIuaCIKbnNyZXN1bHQKTlNfTmV3Qm94 TGF5b3V0TWFuYWdlcihuc0lCb3hMYXlvdXRNYW5hZ2VyKiogYVJlc3VsdCk7CiMgMTUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJQm94T2JqZWN0LmgiIDIKCgoKIyAxICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUJveFBhaW50TWFuYWdlci5oIiAxCiMgMjUgIi4uLy4u Ly4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJQm94UGFpbnRNYW5hZ2VyLmgiCmNsYXNzIG5zSUJv eFBhaW50TWFuYWdlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1ZGExZThm MCwgMHg2MjU1LCAweDRiOWMsIHsgMHhhZiwgMHg4MCwgMHhhYSwgMHgzZCwgMHhhZCwgMHg3Ziwg MHgyZiwgMHhkYiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KHZv aWQpID0gMDsKCn07CiMgODQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJQm94UGFp bnRNYW5hZ2VyLmgiCm5zcmVzdWx0Ck5TX05ld0JveFBhaW50TWFuYWdlcihuc0lCb3hQYWludE1h bmFnZXIqKiBhUmVzdWx0KTsKIyAxOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lC b3hPYmplY3QuaCIgMgoKCgoKCgpjbGFzcyBuc0lET01FbGVtZW50OwojIDM1ICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSUJveE9iamVjdC5oIgpjbGFzcyBuc0lCb3hPYmplY3QgOiBw dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4Y2FhYmY3NmYsIDB4OWQzNSwgMHg0MDFm LCB7IDB4YmUsIDB4YWMsIDB4MzksIDB4NTUsIDB4ODEsIDB4N2MsIDB4NjQsIDB4NWMgfX07IHJl dHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbGVtZW50KG5zSURPTUVsZW1lbnQg KiAqYUVsZW1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGF5b3V0TWFuYWdlcihu c0lCb3hMYXlvdXRNYW5hZ2VyICogKmFMYXlvdXRNYW5hZ2VyKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRMYXlvdXRNYW5hZ2VyKG5zSUJveExheW91dE1hbmFnZXIgKiBhTGF5b3V0TWFuYWdl cikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWludE1hbmFnZXIobnNJQm94UGFpbnRN YW5hZ2VyICogKmFQYWludE1hbmFnZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhaW50 TWFuYWdlcihuc0lCb3hQYWludE1hbmFnZXIgKiBhUGFpbnRNYW5hZ2VyKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFgoUFJJbnQzMiAqYVgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0WShQUkludDMyICphWSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JlZW5YKFBS SW50MzIgKmFTY3JlZW5YKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjcmVlblkoUFJJ bnQzMiAqYVNjcmVlblkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgoUFJJbnQz MiAqYVdpZHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhlaWdodChQUkludDMyICph SGVpZ2h0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5QXNTdXBwb3J0cyhj b25zdCBQUlVuaWNoYXIgKnByb3BlcnR5TmFtZSwgbnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5QXNTdXBwb3J0cyhjb25zdCBQUlVuaWNo YXIgKnByb3BlcnR5TmFtZSwgbnNJU3VwcG9ydHMgKnZhbHVlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFByb3BlcnR5KGNvbnN0IFBSVW5pY2hhciAqcHJvcGVydHlOYW1lLCBQUlVuaWNo YXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5KGNvbnN0 IFBSVW5pY2hhciAqcHJvcGVydHlOYW1lLCBjb25zdCBQUlVuaWNoYXIgKnByb3BlcnR5VmFsdWUp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlUHJvcGVydHkoY29uc3QgUFJVbmljaGFy ICpwcm9wZXJ0eU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50Qm94KG5z SURPTUVsZW1lbnQgKiAqYVBhcmVudEJveCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRG aXJzdENoaWxkKG5zSURPTUVsZW1lbnQgKiAqYUZpcnN0Q2hpbGQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0TGFzdENoaWxkKG5zSURPTUVsZW1lbnQgKiAqYUxhc3RDaGlsZCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXh0U2libGluZyhuc0lET01FbGVtZW50ICogKmFOZXh0 U2libGluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2aW91c1NpYmxpbmcobnNJ RE9NRWxlbWVudCAqICphUHJldmlvdXNTaWJsaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldExvb2tBbmRGZWVsTWV0cmljKGNvbnN0IFBSVW5pY2hhciAqcHJvcGVydHlOYW1lLCBQUlVu aWNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDMzOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xh eW91dC9uc0lCb3hPYmplY3QuaCIKbnNyZXN1bHQKTlNfTmV3Qm94T2JqZWN0KG5zSUJveE9iamVj dCoqIGFSZXN1bHQpOwojIDI3NSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlU2VsZWN0aW9uLmgiIDEKIyAxNyAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlU2VsZWN0aW9uLmgiCmNsYXNzIG5zSVRyZWVCb3hP YmplY3Q7CiMgMjcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJVHJlZVNlbGVjdGlv bi5oIgpjbGFzcyBuc0lUcmVlU2VsZWN0aW9uIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1Ymxp YzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp ZCA9IHsweGY4YTEzMzY0LCAweDE4NGUsIDB4NGRhMywgeyAweGJhLCAweGRmLCAweDVjLCAweDA0 LCAweDgzLCAweDc1LCAweDM3LCAweGY4IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0VHJlZShuc0lUcmVlQm94T2JqZWN0ICogKmFUcmVlKSA9IDA7CiAgdmlydHVh bCBuc3Jlc3VsdCBTZXRUcmVlKG5zSVRyZWVCb3hPYmplY3QgKiBhVHJlZSkgPSAwOwoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDb3VudChQUkludDMyICphQ291bnQpID0gMDsKCgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IElzU2VsZWN0ZWQoUFJJbnQzMiBpbmRleCwgUFJCb29sICpfcmV0dmFs KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdChQUkludDMyIGluZGV4KSA9IDA7 CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRpbWVkU2VsZWN0KFBSSW50MzIgaW5kZXgsIFBSSW50 MzIgZGVsYXkpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9nZ2xlU2VsZWN0KFBSSW50 MzIgaW5kZXgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSYW5nZWRTZWxlY3QoUFJJ bnQzMiBzdGFydEluZGV4LCBQUkludDMyIGVuZEluZGV4LCBQUkJvb2wgYXVnbWVudCkgPSAwOwoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhclJhbmdlKFBSSW50MzIgc3RhcnRJbmRleCwgUFJJ bnQzMiBlbmRJbmRleCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhclNlbGVjdGlv bih2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEludmVydFNlbGVjdGlvbih2b2lk KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdEFsbCh2b2lkKSA9IDA7CgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJhbmdlQ291bnQoUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSYW5nZUF0KFBSSW50MzIgaSwgUFJJbnQzMiAqbWluLCBQ UkludDMyICptYXgpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW52YWxpZGF0ZVNlbGVj dGlvbih2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkanVzdFNlbGVjdGlvbihQ UkludDMyIGluZGV4LCBQUkludDMyIGNvdW50KSA9IDA7CiMgMTMxICIuLi8uLi8uLi9kaXN0L2lu Y2x1ZGUvbGF5b3V0L25zSVRyZWVTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNl bGVjdEV2ZW50c1N1cHByZXNzZWQoUFJCb29sICphU2VsZWN0RXZlbnRzU3VwcHJlc3NlZCkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0RXZlbnRzU3VwcHJlc3NlZChQUkJvb2wgYVNl bGVjdEV2ZW50c1N1cHByZXNzZWQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1 cnJlbnRJbmRleChQUkludDMyICphQ3VycmVudEluZGV4KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRDdXJyZW50SW5kZXgoUFJJbnQzMiBhQ3VycmVudEluZGV4KSA9IDA7CgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTaGlmdFNlbGVjdFBpdm90KFBSSW50MzIgKmFTaGlmdFNlbGVjdFBp dm90KSA9IDA7Cgp9OwojIDI3NiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlQ29udGVudFZpZXcuaCIgMQojIDI5ICIuLi8uLi8u Li9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVDb250ZW50Vmlldy5oIgpjbGFzcyBuc0lUcmVl Q29udGVudFZpZXcgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OTcyYWU5ZmYs IDB4YzdiMywgMHg0YjYwLCB7IDB4YTUsIDB4MWUsIDB4YTIsIDB4MGEsIDB4OWQsIDB4ZTMsIDB4 NjksIDB4NDcgfX07IHJldHVybiBpaWQ7fQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSb290 KG5zSURPTUVsZW1lbnQgKiAqYVJvb3QpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 SXRlbUF0SW5kZXgoUFJJbnQzMiBpbmRleCwgbnNJRE9NRWxlbWVudCAqKl9yZXR2YWwpID0gMDsK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5kZXhPZkl0ZW0obnNJRE9NRWxlbWVudCAqaXRl bSwgUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoKfTsKIyAyNzcgIm5zRE9NQ2xhc3NJbmZvLmNwcCIg MgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJVHJlZVZpZXcuaCIgMQojIDEw ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVWaWV3LmgiCiMgMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlQm94T2JqZWN0LmgiIDEKIyAyMSAiLi4vLi4v Li4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlQm94T2JqZWN0LmgiCmNsYXNzIG5zSVRyZWVW aWV3OwoKY2xhc3MgbnNJVHJlZVNlbGVjdGlvbjsKCmNsYXNzIG5zSURPTUV2ZW50OwojIDM1ICIu Li8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVCb3hPYmplY3QuaCIKY2xhc3MgbnNJ VHJlZUJveE9iamVjdCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg0NDQ4MTM4 NSwgMHhiMWRhLCAweDQ4MGEsIHsgMHg5MCwgMHgyNiwgMHgxZiwgMHgwMiwgMHgzMiwgMHhjNCwg MHhlZSwgMHg1OSB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 Vmlldyhuc0lUcmVlVmlldyAqICphVmlldykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Vmll dyhuc0lUcmVlVmlldyAqIGFWaWV3KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZv Y3VzZWQoUFJCb29sICphRm9jdXNlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Rm9jdXNl ZChQUkJvb2wgYUZvY3VzZWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHJlZUJv ZHkobnNJRE9NRWxlbWVudCAqICphVHJlZUJvZHkpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1 bHQgR2V0U2VsZWN0aW9uKG5zSVRyZWVTZWxlY3Rpb24gKiAqYVNlbGVjdGlvbikgPSAwOwoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSb3dIZWlnaHQoUFJJbnQzMiAqYVJvd0hlaWdodCkgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2x1bW5JbmRleChjb25zdCBQUlVuaWNoYXIg KmNvbElELCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dENvbHVtbklEKFBSSW50MzIgY29sSW5kZXgsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0S2V5Q29sdW1uSW5kZXgoUFJJbnQzMiAqX3JldHZhbCkg PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaXJzdFZpc2libGVSb3coUFJJbnQzMiAq X3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXN0VmlzaWJsZVJvdyhQ UkludDMyICpfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhZ2VDb3Vu dChQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuc3VyZVJv d0lzVmlzaWJsZShQUkludDMyIGluZGV4KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNj cm9sbFRvUm93KFBSSW50MzIgaW5kZXgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBT Y3JvbGxCeUxpbmVzKFBSSW50MzIgbnVtTGluZXMpID0gMDsKIyAxMzcgIi4uLy4uLy4uL2Rpc3Qv aW5jbHVkZS9sYXlvdXQvbnNJVHJlZUJveE9iamVjdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2Ny b2xsQnlQYWdlcyhQUkludDMyIG51bVBhZ2VzKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEludmFsaWRhdGUodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlQ29s dW1uKGNvbnN0IFBSVW5pY2hhciAqY29sSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW52 YWxpZGF0ZVJvdyhQUkludDMyIGluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEludmFs aWRhdGVDZWxsKFBSSW50MzIgcm93LCBjb25zdCBQUlVuaWNoYXIgKmNvbElEKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEludmFsaWRhdGVQcmltYXJ5Q2VsbChQUkludDMyIHJvdykgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmFuZ2UoUFJJbnQzMiBzdGFydEluZGV4LCBQ UkludDMyIGVuZEluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEludmFsaWRhdGVTY3Jv bGxiYXIodm9pZCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um93QXQoUFJJbnQz MiB4LCBQUkludDMyIHksIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKIyAxNzcgIi4uLy4uLy4uL2Rp c3QvaW5jbHVkZS9sYXlvdXQvbnNJVHJlZUJveE9iamVjdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q2VsbEF0KFBSSW50MzIgeCwgUFJJbnQzMiB5LCBQUkludDMyICpyb3csIFBSVW5pY2hhciAq KmNvbElELCBQUlVuaWNoYXIgKipjaGlsZEVsdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRDb29yZHNGb3JDZWxsSXRlbShQUkludDMyIHJvdywgY29uc3QgUFJVbmljaGFyICpjb2xJ RCwgY29uc3QgUFJVbmljaGFyICplbGVtZW50LCBQUkludDMyICp4LCBQUkludDMyICp5LCBQUklu dDMyICp3aWR0aCwgUFJJbnQzMiAqaGVpZ2h0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IElzQ2VsbENyb3BwZWQoUFJJbnQzMiByb3csIGNvbnN0IG5zQVN0cmluZyAmIGNvbElELCBQUkJv b2wgKl9yZXR2YWwpID0gMDsKIyAxOTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJ VHJlZUJveE9iamVjdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUm93Q291bnRDaGFuZ2VkKFBSSW50 MzIgaW5kZXgsIFBSSW50MzIgY291bnQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgT25E cmFnRW50ZXIobnNJRE9NRXZlbnQgKmV2ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9u RHJhZ0V4aXQobnNJRE9NRXZlbnQgKmV2ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9u RHJhZ092ZXIobnNJRE9NRXZlbnQgKmV2ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9u RHJhZ0Ryb3AobnNJRE9NRXZlbnQgKmV2ZW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IENsZWFyU3R5bGVBbmRJbWFnZUNhY2hlcyh2b2lkKSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi9k aXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVWaWV3LmgiIDIKIyAyNSAiLi4vLi4vLi4vZGlzdC9p bmNsdWRlL2xheW91dC9uc0lUcmVlVmlldy5oIgpjbGFzcyBuc0lUcmVlU2VsZWN0aW9uOwojIDM1 ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVWaWV3LmgiCmNsYXNzIG5zSVRy ZWVWaWV3IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDU4YTUzNzM0LCAweDE4 MzcsIDB4NGYzMCwgeyAweDliLCAweGZkLCAweGVlLCAweDU4LCAweGY2LCAweDNjLCAweGEwLCAw eDQ5IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um93Q291bnQo UFJJbnQzMiAqYVJvd0NvdW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVj dGlvbihuc0lUcmVlU2VsZWN0aW9uICogKmFTZWxlY3Rpb24pID0gMDsKICB2aXJ0dWFsIG5zcmVz dWx0IFNldFNlbGVjdGlvbihuc0lUcmVlU2VsZWN0aW9uICogYVNlbGVjdGlvbikgPSAwOwoKCgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJvd1Byb3BlcnRpZXMoUFJJbnQzMiBpbmRleCwgbnNJ U3VwcG9ydHNBcnJheSAqcHJvcGVydGllcykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldENlbGxQcm9wZXJ0aWVzKFBSSW50MzIgcm93LCBjb25zdCBQUlVuaWNoYXIgKmNvbElELCBu c0lTdXBwb3J0c0FycmF5ICpwcm9wZXJ0aWVzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRDb2x1bW5Qcm9wZXJ0aWVzKGNvbnN0IFBSVW5pY2hhciAqY29sSUQsIG5zSURPTUVsZW1l bnQgKmNvbEVsdCwgbnNJU3VwcG9ydHNBcnJheSAqcHJvcGVydGllcykgPSAwOwoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgSXNDb250YWluZXIoUFJJbnQzMiBpbmRleCwgUFJCb29sICpfcmV0dmFs KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzQ29udGFpbmVyT3BlbihQUkludDMyIGluZGV4 LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNDb250YWluZXJF bXB0eShQUkludDMyIGluZGV4LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKIyA5NiAiLi4vLi4vLi4v ZGlzdC9pbmNsdWRlL2xheW91dC9uc0lUcmVlVmlldy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNT ZXBhcmF0b3IoUFJJbnQzMiBpbmRleCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBJc1NvcnRlZChQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBDYW5Ecm9wT24oUFJJbnQzMiBpbmRleCwgUFJCb29sICpfcmV0dmFsKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkRyb3BCZWZvcmVBZnRlcihQUkludDMyIGluZGV4 LCBQUkJvb2wgYmVmb3JlLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgogIGVudW0geyBpbkRy b3BCZWZvcmUgPSAwIH07CgogIGVudW0geyBpbkRyb3BPbiA9IDEgfTsKCiAgZW51bSB7IGluRHJv cEFmdGVyID0gMiB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcm9wKFBSSW50MzIgcm93LCBQUklu dDMyIG9yaWVudGF0aW9uKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnRJ bmRleChQUkludDMyIHJvd0luZGV4LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CiMgMTQzICIuLi8u Li8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVRyZWVWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3Vs dCBIYXNOZXh0U2libGluZyhQUkludDMyIHJvd0luZGV4LCBQUkludDMyIGFmdGVySW5kZXgsIFBS Qm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExldmVsKFBS SW50MzIgaW5kZXgsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRJbWFnZVNyYyhQUkludDMyIHJvdywgY29uc3QgUFJVbmljaGFyICpjb2xJRCwgbnNB U3RyaW5nICYgX3JldHZhbCkgPSAwOwoKCgoKCiAgZW51bSB7IHByb2dyZXNzTm9ybWFsID0gMSB9 OwoKICBlbnVtIHsgcHJvZ3Jlc3NVbmRldGVybWluZWQgPSAyIH07CgogIGVudW0geyBwcm9ncmVz c05vbmUgPSAzIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb2dyZXNzTW9kZShQUkludDMy IHJvdywgY29uc3QgUFJVbmljaGFyICpjb2xJRCwgUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2VsbFZhbHVlKFBSSW50MzIgcm93LCBjb25zdCBQUlVu aWNoYXIgKmNvbElELCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRDZWxsVGV4dChQUkludDMyIHJvdywgY29uc3QgUFJVbmljaGFyICpjb2xJRCwg bnNBU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUcmVl KG5zSVRyZWVCb3hPYmplY3QgKnRyZWUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9n Z2xlT3BlblN0YXRlKFBSSW50MzIgaW5kZXgpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg Q3ljbGVIZWFkZXIoY29uc3QgUFJVbmljaGFyICpjb2xJRCwgbnNJRE9NRWxlbWVudCAqZWx0KSA9 IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3Rpb25DaGFuZ2VkKHZvaWQpID0gMDsK CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3ljbGVDZWxsKFBSSW50MzIgcm93LCBjb25zdCBQUlVu aWNoYXIgKmNvbElEKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNFZGl0YWJsZShQ UkludDMyIHJvdywgY29uc3QgUFJVbmljaGFyICpjb2xJRCwgUFJCb29sICpfcmV0dmFsKSA9IDA7 CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENlbGxUZXh0KFBSSW50MzIgcm93LCBjb25zdCBQ UlVuaWNoYXIgKmNvbElELCBjb25zdCBQUlVuaWNoYXIgKnZhbHVlKSA9IDA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgUGVyZm9ybUFjdGlvbihjb25zdCBQUlVuaWNoYXIgKmFjdGlvbikgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQZXJmb3JtQWN0aW9uT25Sb3coY29uc3QgUFJVbmlj aGFyICphY3Rpb24sIFBSSW50MzIgcm93KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBl cmZvcm1BY3Rpb25PbkNlbGwoY29uc3QgUFJVbmljaGFyICphY3Rpb24sIFBSSW50MzIgcm93LCBj b25zdCBQUlVuaWNoYXIgKmNvbElEKSA9IDA7Cgp9OwojIDI3OCAibnNET01DbGFzc0luZm8uY3Bw IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01YUGF0aEV2YWx1YXRvci5o IiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NWFBhdGhFdmFsdWF0b3Iu aCIKY2xhc3MgbnNJRE9NWFBhdGhOU1Jlc29sdmVyOwoKY2xhc3MgbnNJRE9NWFBhdGhSZXN1bHQ7 CgpjbGFzcyBuc0lET01YUGF0aEV4cHJlc3Npb247CgpjbGFzcyBYUGF0aEV4Y2VwdGlvbjsKIyAz MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01YUGF0aEV2YWx1YXRvci5oIgpjbGFz cyBuc0lET01YUGF0aEV2YWx1YXRvciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHg3NTUwNmY4YSwgMHhiNTA0LCAweDExZDUsIHsgMHhhNywgMHhmMiwgMHhjYSwgMHgxMCwgMHg4 YSwgMHhiOCwgMHhiNiwgMHhmYyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IENyZWF0ZUV4cHJlc3Npb24oY29uc3QgbnNBU3RyaW5nICYgZXhwcmVzc2lvbiwgbnNJRE9NWFBh dGhOU1Jlc29sdmVyICpyZXNvbHZlciwgbnNJRE9NWFBhdGhFeHByZXNzaW9uICoqX3JldHZhbCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVOU1Jlc29sdmVyKG5zSURPTU5vZGUgKm5v ZGVSZXNvbHZlciwgbnNJRE9NWFBhdGhOU1Jlc29sdmVyICoqX3JldHZhbCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBFdmFsdWF0ZShjb25zdCBuc0FTdHJpbmcgJiBleHByZXNzaW9uLCBuc0lE T01Ob2RlICpjb250ZXh0Tm9kZSwgbnNJRE9NWFBhdGhOU1Jlc29sdmVyICpyZXNvbHZlciwgUFJV aW50MTYgdHlwZSwgbnNJRE9NWFBhdGhSZXN1bHQgKnJlc3VsdCwgbnNJRE9NWFBhdGhSZXN1bHQg KipfcmV0dmFsKSA9IDA7Cgp9OwojIDI3OSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMzEyICJu c0RPTUNsYXNzSW5mby5jcHAiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJ SW1hZ2VEb2N1bWVudC5oIiAxCiMgMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25z SUltYWdlRG9jdW1lbnQuaCIKY2xhc3MgbnNJSW1hZ2VEb2N1bWVudCA6IHB1YmxpYyBuc0lTdXBw b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHhiNDgyZjZkOCwgMHg0MGE5LCAweDRmMjAsIHsgMHg4OSwgMHhm MywgMHg3NywgMHgyZCwgMHg0MSwgMHg3YSwgMHg0YywgMHg4MSB9fTsgcmV0dXJuIGlpZDt9CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlUmVzaXppbmdFbmFibGVkKFBSQm9vbCAqYUltYWdl UmVzaXppbmdFbmFibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlSXNPdmVy Zmxvd2luZyhQUkJvb2wgKmFJbWFnZUlzT3ZlcmZsb3dpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0SW1hZ2VJc1Jlc2l6ZWQoUFJCb29sICphSW1hZ2VJc1Jlc2l6ZWQpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgU2hyaW5rVG9GaXQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBSZXN0b3JlSW1hZ2Uodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb2dnbGVJ bWFnZVNpemUodm9pZCkgPSAwOwoKfTsKIyAzMTMgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgoKc3Rh dGljIGNvbnN0IG5zQ0lEIGtDUGx1Z2luTWFuYWdlckNJRCA9IHsgMHhjZTc2ODk5MCwgMHg1YTRl LCAweDExZDIsIHsweDgxLCAweDY0LCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweDlkLCAweDdh fSB9OwpzdGF0aWMgY29uc3QgbnNDSUQga0RPTVNPRl9DSUQgPSB7IDB4OWViNzYwZjAsIDB4NDM4 MCwgMHgxMWQyLCB7MHhiMywgMHgyOCwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHgzOCwgMHg1 OX0gfTsKIyAzODQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIKc3RhdGljIG5zRE9NQ2xhc3NJbmZvRGF0 YSBzQ2xhc3NJbmZvRGF0YVtdID0gewojIDM5NCAibnNET01DbGFzc0luZm8uY3BwIgogIHsgIldp bmRvdyIsIHsgbnNXaW5kb3dTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9T RVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNT IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfR0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X0ZJTkFMSVpFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0VOVU1F UkFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UsIDEsIH0s CiMgNDA2ICJuc0RPTUNsYXNzSW5mby5jcHAiCiAgeyAiTG9jYXRpb24iLCB7IG5zTG9jYXRpb25T SDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3Jp cHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNP TFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllf SU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkg JiB+bnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSwgMSwgfSwK CgoKICB7ICJOYXZpZ2F0b3IiLCB7IG5zRE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAwLCAwLCAw LCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BS T1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9E U19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1Jf U0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFN RVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3Jp cHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiUGx1Z2luIiwg eyBuc1BsdWdpblNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBD U2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3Jp cHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVS RkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwK CiAgeyAiUGx1Z2luQXJyYXkiLCB7IG5zUGx1Z2luQXJyYXlTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1df UFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9N T0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZP Ul9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9O QU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUp IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9HRVRQUk9QRVJUWSksIDEsIH0sCgogIHsgIk1pbWVUeXBlIiwgeyBuc0RPTUdlbmVyaWNT SDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3Jp cHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNP TFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllf SU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSks IDEsIH0sCgogIHsgIk1pbWVUeXBlQXJyYXkiLCB7IG5zTWltZVR5cGVBcnJheVNIOjpkb0NyZWF0 ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tf SU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1Rf SU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf UE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNF IHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCiAgeyAiQmFyUHJvcCIsIHsgbnNE T01HZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwg bnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldB TlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9F TlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZB Q0VTX09OTFkpLCAxLCB9LAoKICB7ICJIaXN0b3J5IiwgeyBuc0hpc3RvcnlTSDo6ZG9DcmVhdGUg fSwgMCwgMCwgMCwgKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxM T1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lO U1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lO VEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BP U1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9HRVRQUk9QRVJUWSksIDEsIH0sCgogIHsgIlNjcmVlbiIsIHsgbnNET01H ZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9E RUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf TkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVN X1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpLCAxLCB9LAoKCgogIHsgIlhNTERvY3VtZW50IiwgeyBuc0RvY3VtZW50U0g6OmRvQ3Jl YXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQURE UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf QVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZM RUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVS RkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfREVMUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfRU5VTUVSQVRFLCAxLCB9LAoKCiAgeyAiRG9jdW1lbnRUeXBlIiwgeyBuc05vZGVTSDo6 ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf UkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9J TlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSwgMSwgfSwKCiAgeyAi RE9NSW1wbGVtZW50YXRpb24iLCB7IG5zRE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAwLCAwLCAw LCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BS T1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9E U19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1Jf U0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFN RVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3Jp cHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiRE9NRXhjZXB0 aW9uIiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3Jp cHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5H X1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBF IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FD Q0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJ TkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkRvY3VtZW50RnJhZ21lbnQiLCB7IG5z RE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf RU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJG QUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiRWxlbWVudCIsIHsgbnNFbGVtZW50U0g6OmRvQ3JlYXRl IH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNL X0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFD RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6 OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJBdHRyIiwgeyBuc0RPTUdl bmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1f UVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNf T05MWSksIDEsIH0sCgogIHsgIlRleHQiLCB7IG5zTm9kZVNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAw LCAoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1df UFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9N T0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZP Ul9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9O QU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUp IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpLCAxLCB9LAoKICB7ICJDb21tZW50IiwgeyBuc05vZGVT SDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVS WV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZ KSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYg fm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSwgMSwgfSwKCiAg eyAiQ0RBVEFTZWN0aW9uIiwgeyBuc05vZGVTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9E U19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19Q Uk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBU QUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxl OjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJF Q1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0FERFBST1BFUlRZKSwgMSwgfSwKICB7ICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLCB7IG5z Tm9kZVNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9E RUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf TkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVN X1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJU WSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpLCAxLCB9 LAoKICB7ICJFbnRpdHkiLCB7IG5zTm9kZVNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgobnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BS T1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRB QkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf Q0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBD U2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVD UkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkpLCAxLCB9LAogIHsgIkVudGl0eVJlZmVyZW5jZSIsIHsgbnNOb2RlU0g6 OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3Jp cHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNP TFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllf SU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldB TlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5u c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSksIDEsIH0sCiAgeyAi Tm90YXRpb24iLCB7IG5zTm9kZVNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgobnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklO R19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQ RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tB Q0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNT SU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQURE UFJPUEVSVFkpLCAxLCB9LAogIHsgIk5vZGVMaXN0IiwgeyBuc0FycmF5U0g6OmRvQ3JlYXRlIH0s IDAsIDAsIDAsICgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9X X1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNU QU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRF UkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NU Q1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBu c0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfR0VUUFJPUEVSVFkpLCAxLCB9LAogIHsgIk5hbWVkTm9kZU1hcCIsIHsgbnNO YW1lZE5vZGVNYXBTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgobnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9HRVRQUk9QRVJUWSksIDEsIH0s CgoKCgoKICB7ICJTdHlsZVNoZWV0TGlzdCIsIHsgbnNTdHlsZVNoZWV0TGlzdFNIOjpkb0NyZWF0 ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tf SU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1Rf SU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf UE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNF IHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCgoKCiAgeyAiRXZlbnQiLCB7IG5z RE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf RU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJG QUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiTXV0YXRpb25FdmVudCIsIHsgbnNET01HZW5lcmljU0g6 OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf QUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9S RUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xW RSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lO VEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAx LCB9LAoKCgogIHsgIkhUTUxEb2N1bWVudCIsIHsgbnNIVE1MRG9jdW1lbnRTSDo6ZG9DcmVhdGUg fSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tf SU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1Rf SU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf UE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNF IHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3Jp cHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVSVFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9FTlVNRVJBVEUsIDEsIH0sCgoKICB7ICJIVE1MQ29sbGVjdGlvbiIsIHsgbnNIVE1MQ29sbGVj dGlvblNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1f UVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNf T05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCiAgeyAi SFRNTE9wdGlvbkNvbGxlY3Rpb24iLCB7IG5zSFRNTE9wdGlvbkNvbGxlY3Rpb25TSDo6ZG9DcmVh dGUgfSwgMCwgMCwgMCwgKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNL X0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFD RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9HRVRQUk9QRVJUWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NF VFBST1BFUlRZLCAxLCB9LAoKCgogIHsgIkhUTUxDb2xsZWN0aW9uIiwgeyBuc0Zvcm1Db250cm9s TGlzdFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1f UVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNf T05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCgogIHsg IkhUTUxDb2xsZWN0aW9uIiwgeyBuc0hUTUxDb2xsZWN0aW9uU0g6OmRvQ3JlYXRlIH0sIDAsIDAs IDAsICgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9X X1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1Bf TU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9G T1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0Vf TkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRF KSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENT Y3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfR0VUUFJPUEVSVFkpLCAxLCB9LAoKCgoKICB7ICJIVE1MQW5jaG9yRWxlbWVudCIsIHsg bnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9T RVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNT IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9f SU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf U0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BF UlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwg fSwKCiAgeyAiSFRNTEFwcGxldEVsZW1lbnQiLCB7IG5zSFRNTEFwcGxldEVsZW1lbnRTSDo6ZG9D cmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9B RERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRh YmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JF RkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5U RVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf QUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lY UENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0 YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxBcmVhRWxl bWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19E VVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9U T1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJM RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NI RUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpD TEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JF QVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19P TkxZKSwgMSwgfSwKCiAgeyAiSFRNTEJSRWxlbWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0Ny ZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVG TEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRF UkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9B RERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRh YmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRNTEJhc2VFbGVt ZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RV UklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RP VFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxF IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hF Q0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNM QVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVB VEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf QUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09O TFkpLCAxLCB9LAoKICB7ICJIVE1MQmFzZUZvbnRFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6 OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZ X0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkp IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+ bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1Nj cmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MQm9k eUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9f UFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQ VEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BS RUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxCdXR0b25FbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50 U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RV Ql9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQ Uk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwg bnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBD U2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVX UkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FV RVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09O TFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkg JiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQ Q1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1M RExpc3RFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgo KCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJP UF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9T Q1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1F UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MRGVsRWxlbWVudCIsIHsgbnNIVE1MRWxlbWVu dFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVM UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05F V1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9R VUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19P TkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkp ICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lY UENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRN TERpcmVjdG9yeUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxEaXZFbGVtZW50IiwgeyBuc0hUTUxF bGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwg bnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldB TlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9F TlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZB Q0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9Q RVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYg fm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7 ICJIVE1MRW1iZWRFbGVtZW50IiwgeyBuc0hUTUxQbHVnaW5PYmpFbGVtZW50U0g6OmRvQ3JlYXRl IH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNL X0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFD RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6 OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MRmllbGRTZXRFbGVt ZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RV UklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RP VFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxF IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hF Q0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNM QVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVB VEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf QUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09O TFkpLCAxLCB9LAoKICB7ICJIVE1MRm9udEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9D cmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9B RERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRh YmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JF RkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5U RVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf QUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lY UENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0 YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxGb3JtRWxl bWVudCIsIHsgbnNIVE1MRm9ybUVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9f UFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQ VEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BS RUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9ORVdFTlVNRVJBVEUsIDEsIH0sCgoKCiAgeyAiSFRNTEZyYW1lRWxlbWVu dCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1Nj cmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJ TkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZ UEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNL QUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFT U0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRF IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FE RFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZ KSwgMSwgfSwKCiAgeyAiSFRNTEZyYW1lU2V0RWxlbWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpk b0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf UkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9J TlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3Jp cHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRNTEhSRWxl bWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19E VVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9U T1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJM RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NI RUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpD TEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JF QVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19P TkxZKSwgMSwgfSwKCiAgeyAiSFRNTEhlYWRFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRv Q3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf QUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9S RUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xW RSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lO VEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1Njcmlw dGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MSGVhZGlu Z0VsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9f UFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQ VEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BS RUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxIdG1sRWxlbWVudCIsIHsgbnNIVE1MRWxlbWVudFNI Ojpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVS WV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZ KSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYg fm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lYUENT Y3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRNTElG cmFtZUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgo KChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNf VE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1ND UklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVT IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVS RkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxJbWFnZUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1l bnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1f UVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNf T05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZ KSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJ WFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhU TUxJbnB1dEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwg KCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19Q Uk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9S X1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05B TUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkg fCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxJbnNFbGVtZW50IiwgeyBuc0hUTUxFbGVt ZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9E RUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf TkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVN X1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJU WSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5z SVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJI VE1MSXNJbmRleEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxMSUVsZW1lbnQiLCB7IG5zSFRNTEVs ZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VO VU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BF UlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+ bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsg IkhUTUxMYWJlbEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxMZWdlbmRFbGVtZW50IiwgeyBuc0hU TUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQ Uk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkp ICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoK ICB7ICJIVE1MTGlua0VsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwg MCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19Q Uk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFO Q0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJG QUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENS RUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJ TkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxNYXBFbGVtZW50IiwgeyBuc0hU TUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQ Uk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkp ICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoK ICB7ICJIVE1MTWVudUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwg MCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19Q Uk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFO Q0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJG QUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENS RUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJ TkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxNZXRhRWxlbWVudCIsIHsgbnNI VE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6 OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RV Ql9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQ Uk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xW RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5U RVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VU UFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZ KSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwK CiAgeyAiSFRNTE1vZEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwg MCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpB TExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19Q Uk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFO Q0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJG QUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENS RUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJ TkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxPTGlzdEVsZW1lbnQiLCB7IG5z SFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VU UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NF VFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJU WSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0s CgogIHsgIkhUTUxPYmplY3RFbGVtZW50IiwgeyBuc0hUTUxQbHVnaW5PYmpFbGVtZW50U0g6OmRv Q3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf QUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9S RUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xW RSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lO VEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1Njcmlw dGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MT3B0R3Jv dXBFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgo bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9N T0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RP X1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJ UFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldB TlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9Q UkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RV Ql9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZB Q0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MT3B0aW9uRWxlbWVudCIsIHsgbnNIVE1MRWxlbWVu dFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVM UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05F V1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9R VUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19P TkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkp ICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lY UENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRN TFBhcmFncmFwaEVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxQYXJhbUVsZW1lbnQiLCB7IG5zSFRN TEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBD U2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3Jp cHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVS RkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBS T1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkg JiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgog IHsgIkhUTUxQcmVFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAs IDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxM T1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJP UF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNF X0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFD RV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVB VEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5G T19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MUXVvdGVFbGVtZW50IiwgeyBuc0hU TUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZF IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQ Uk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkp ICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoK ICB7ICJIVE1MU2NyaXB0RWxlbWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAw LCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9X X1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNU QU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRF UkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NU Q1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBu c0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFT U0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRNTFNlbGVjdEVsZW1lbnQiLCB7 IG5zSFRNTFNlbGVjdEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RV Ql9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVS SU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9U WVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUg fCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVD S0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3Jp cHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xB U1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFU RSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9B RERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05M WSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZLCAxLCB9LAoKCiAgeyAiSFRN TFNwYWNlckVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwg KCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19Q Uk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9S X1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05B TUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkg fCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxTcGFuRWxlbWVudCIsIHsgbnNIVE1MRWxl bWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf REVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3Jp cHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5V TV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNF U19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVS VFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5u c0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAi SFRNTFN0eWxlRWxlbWVudCIsIHsgbnNIVE1MRWxlbWVudFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAw LCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9X X1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1Bf TU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9G T1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0Vf TkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRF KSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENT Y3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9f SU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQiLCB7 IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf U0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VT UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9Q RVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEs IH0sCgogIHsgIkhUTUxUYWJsZUNlbGxFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3Jl YXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQURE UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf QVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZM RUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVS RkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFi bGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVGFibGVDb2xF bGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BS T1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRB QkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf Q0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBD U2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVD UkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVGFibGVDb2xHcm91cEVsZW1lbnQiLCB7IG5zSFRNTEVs ZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VO VU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BF UlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+ bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsg IkhUTUxUYWJsZUVsZW1lbnQiLCB7IG5zSFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwg MCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpV U0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhUTUxUYWJsZVJvd0VsZW1lbnQiLCB7IG5z SFRNTEVsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VU UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NF VFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJU WSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0s CgogIHsgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3Jl YXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQURE UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8 IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf QVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZM RUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVS RkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFi bGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVGV4dEFyZWFF bGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJ WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BS T1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRB QkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf Q0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBD U2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVD UkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVGl0bGVFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6 OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZ X0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkp IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpX QU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+ bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1Nj cmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVUxp c3RFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKCgo bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVT RV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9N T0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RP X1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJ UFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldB TlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9Q UkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RV Ql9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZB Q0VTX09OTFkpLCAxLCB9LAoKICB7ICJIVE1MVW5rbm93bkVsZW1lbnQiLCB7IG5zSFRNTEVsZW1l bnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1f UVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNf T05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZ KSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgJiB+bnNJ WFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkhU TUxXQlJFbGVtZW50IiwgeyBuc0hUTUxFbGVtZW50U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgo KCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJP UF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9T Q1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1F UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9TRVRQUk9QRVJUWSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkpICYgfm5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRF UkZBQ0VTX09OTFkpLCAxLCB9LAoKCgogIHsgIkNTU1N0eWxlUnVsZSIsIHsgbnNET01HZW5lcmlj U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9G T1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9Q RVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9O VF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZ X0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkp LCAxLCB9LAoKICB7ICJDU1NDaGFyc2V0UnVsZSIsIHsgbnNET01HZW5lcmljU0g6OmRvQ3JlYXRl IH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJs ZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxM T1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lO U1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lO VEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BP U1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7 ICJDU1NJbXBvcnRSdWxlIiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwg KChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNf VE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1ND UklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVT IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkNTU01lZGlhUnVs ZSIsIHsgbnNET01HZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19S RVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NF U1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5G T19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKICB7ICJDU1NOYW1lU3BhY2VSdWxlIiwgeyBuc0RP TUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VO VU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSksIDEsIH0sCgogIHsgIkNTU1J1bGVMaXN0IiwgeyBuc0NTU1J1bGVMaXN0U0g6OmRv Q3JlYXRlIH0sIDAsIDAsIDAsICgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVG TEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRF UkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVSVFkpLCAxLCB9LAoKICB7ICJDU1NHcm91cFJ1 bGVSdWxlTGlzdCIsIHsgbnNDU1NSdWxlTGlzdFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKChu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9f UFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQ VEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dF VFBST1BFUlRZKSwgMSwgfSwKCiAgeyAiTWVkaWFMaXN0IiwgeyBuc01lZGlhTGlzdFNIOjpkb0Ny ZWF0ZSB9LCAwLCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FT S19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVD VF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZB Q0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwK CiAgeyAiU3R5bGVTaGVldExpc3QiLCB7IG5zRE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAwLCAw LCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCiAgeyAiQ1NTU3R5bGVTaGVldCIsIHsgbnNET01H ZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9E RUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRf TkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVN X1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VT X09OTFkpLCAxLCB9LAoKICB7ICJDU1NTdHlsZURlY2xhcmF0aW9uIiwgeyBuc0NTU1N0eWxlRGVj bFNIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENT Y3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdS RVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVF UllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05M WSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBST1BFUlRZKSwgMSwgfSwKCiAgeyAiQ29t cHV0ZWRDU1NTdHlsZURlY2xhcmF0aW9uIiwgeyBuc0NTU1N0eWxlRGVjbFNIOjpkb0NyZWF0ZSB9 LCAwLCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9X X1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNU QU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRF UkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NU Q1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBu c0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCiAgeyAi Uk9DU1NQcmltaXRpdmVWYWx1ZSIsIHsgbnNET01HZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAs IDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1df UFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9N T0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZP Ul9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9O QU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUp IHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKCgogIHsgIlJhbmdl IiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf U0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VT UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIlNlbGVjdGlvbiIsIHsgbnNET01HZW5lcmlj U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsIChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BF UlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3Jp cHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNP TFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfUE9TVENSRUFURSksIDEsIH0sCgoKCiAgeyAiWFVMRG9jdW1lbnQiLCB7IG5zRG9j dW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VO VU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQQ1Njcmlw dGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BF UlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVSVFkpIHwgbnNJ WFBDU2NyaXB0YWJsZTo6V0FOVF9FTlVNRVJBVEUsIDEsIH0sCgoKICB7ICJYVUxFbGVtZW50Iiwg eyBuc0VsZW1lbnRTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKCgoKChuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VU UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NF VFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJU WSkgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0s CgogIHsgIlhVTENvbW1hbmREaXNwYXRjaGVyIiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUg fSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJU WSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBD U2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxl OjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5T VEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5U RVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9T VENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwg bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsg Ik5vZGVMaXN0IiwgeyBuc0FycmF5U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKG5zSVhQQ1Nj cmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6 VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVC X0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJ TkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZ UEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8 IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENT Y3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNL QUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1Njcmlw dGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFT U0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVS VFkpLCAxLCB9LAoKICB7ICJOYW1lZE5vZGVNYXAiLCB7IG5zTmFtZWROb2RlTWFwU0g6OmRvQ3Jl YXRlIH0sIDAsIDAsIDAsICgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBS T1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FT S19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVD VF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZB Q0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVSVFkpLCAxLCB9LAoKICB7ICJBdHRyIiwgeyBuc0RP TUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0Vf SlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBu c0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRh YmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VO VU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFD RVNfT05MWSksIDEsIH0sCgogIHsgIlhVTENvbnRyb2xsZXJzIiwgeyBuc0RPTUdlbmVyaWNTSDo6 ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVG TEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9QT1NUQ1JFQVRFKSwgMSwgfSwKCiAgeyAiQm94T2JqZWN0IiwgeyBuc0RPTUdlbmVyaWNT SDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9S X0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVS VFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRf UkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9QT1NUQ1JFQVRFKSwgMSwgfSwKCiAgeyAiVHJlZVNlbGVjdGlvbiIsIHsgbnNET01H ZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsIChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNT VFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RF TFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lY UENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9O RVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1Nj cmlwdGFibGU6OldBTlRfUE9TVENSRUFURSksIDEsIH0sCgogIHsgIlRyZWVDb250ZW50VmlldyIs IHsgbnNET01HZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsIChuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VU UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSksIDEsIH0sCgoKCiAgeyAiQ3J5cHRv IiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChuc0lYUENTY3JpcHRh YmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9K U1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1Jf U0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VT UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZP X0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgogIHsgIkNSTUZPYmplY3QiLCB7IG5zRE9NR2VuZXJp Y1NIOjpkb0NyZWF0ZSB9LCAwLCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJf Rk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxl OjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRP TlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JF U09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVS WV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZ KSwgMSwgfSwKCiAgeyAiUGtjczExIiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwg MCwgMCwgKChuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExP V19QUk9QX01PRFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9Q X01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0Vf Rk9SX1NDUklQVEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNF X05BTUVTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0 YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFU RSkgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBD U2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCiMgNzcwICJuc0RP TUNsYXNzSW5mby5jcHAiCiAgeyAiVHJlZVdhbGtlciIsIHsgbnNET01HZW5lcmljU0g6OmRvQ3Jl YXRlIH0sIDAsIDAsIDAsICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNL X0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFD RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoK CgoKCiAgeyAiQ1NTUmVjdCIsIHsgbnNET01HZW5lcmljU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAs ICgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJPUEVSVFkgfCBuc0lYUENT Y3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6 OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJP UF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6QUxMT1dfUFJPUF9NT0RT X1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNLX0lOU1RBTkNFX0ZPUl9T Q1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNUX0lOVEVSRkFDRV9OQU1F UyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BPU1RDUkVBVEUpIHwg bnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFDRSB8IG5zSVhQQ1Njcmlw dGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpLCAxLCB9LAoKCgogIHsgIkNocm9tZVdp bmRvdyIsIHsgbnNXaW5kb3dTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKG5zSVhQQ1NjcmlwdGFi bGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pT U1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9T RVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVT T0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBu c0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQ Q1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRh YmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNT IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6 OldBTlRfR0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9QUkVDUkVBVEUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0ZJTkFMSVpFIHwgbnNJWFBDU2Ny aXB0YWJsZTo6V0FOVF9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfREVMUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0VOVU1FUkFURSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UsIDEsIH0sCiMgNzkyICJuc0RPTUNsYXNzSW5m by5jcHAiCiAgeyAiQ1NTUkdCQ29sb3IiLCB7IG5zRE9NR2VuZXJpY1NIOjpkb0NyZWF0ZSB9LCAw LCAwLCAwLCAoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwg bnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3Jp cHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFM TE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BS T1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5D RV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZB Q0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JF QVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lY UENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSwgMSwgfSwKCgogIHsgIlJh bmdlRXhjZXB0aW9uIiwgeyBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUgfSwgMCwgMCwgMCwgKChu c0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01P RFNfRFVSSU5HX1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9f UFJPVE9UWVBFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQ VEFCTEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwg bnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FO VF9DSEVDS0FDQ0VTUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lY UENTY3JpcHRhYmxlOjpET05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJs ZTo6Q0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWSksIDEsIH0sCgoKICB7ICJDU1NWYWx1ZUxpc3Qi LCB7IG5zQ1NTVmFsdWVMaXN0U0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKG5zSVhQQ1Njcmlw dGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNF X0pTU1RVQl9GT1JfREVMUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZP Ul9TRVRQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdf UkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUg fCBuc0lYUENTY3JpcHRhYmxlOjpET05UX0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5z SVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3Jp cHRhYmxlOjpXQU5UX05FV1JFU09MVkUgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUND RVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRFUkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lO Rk9fSU5URVJGQUNFU19PTkxZKSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfR0VUUFJPUEVSVFkp LCAxLCB9LAoKCiAgeyAiSFRNTENvbGxlY3Rpb24iLCB7IG5zQ29udGVudExpc3RTSDo6ZG9DcmVh dGUgfSwgMCwgMCwgMCwgKCgobnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfQUREUFJP UEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9ERUxQUk9QRVJUWSB8IG5z SVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX1NFVFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0 YWJsZTo6QUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6 QUxMT1dfUFJPUF9NT0RTX1RPX1BST1RPVFlQRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfQVNL X0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9SRUZMRUNU X0lOVEVSRkFDRV9OQU1FUyB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfTkVXUkVTT0xWRSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfQ0hFQ0tBQ0NFU1MgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5U X1BPU1RDUkVBVEUpIHwgbnNJWFBDU2NyaXB0YWJsZTo6RE9OVF9FTlVNX1FVRVJZX0lOVEVSRkFD RSB8IG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkpIHwgbnNJWFBD U2NyaXB0YWJsZTo6V0FOVF9HRVRQUk9QRVJUWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BS RUNSRUFURSwgMSwgfSwKCgoKCiAgeyAiWE1MU3R5bGVzaGVldFByb2Nlc3NpbmdJbnN0cnVjdGlv biIsIHsgbnNOb2RlU0g6OmRvQ3JlYXRlIH0sIDAsIDAsIDAsICgoKChuc0lYUENTY3JpcHRhYmxl OjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NU VUJfRk9SX0RFTFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VU UFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfRFVSSU5HX1JFU09M VkUgfCBuc0lYUENTY3JpcHRhYmxlOjpBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFIHwgbnNJ WFBDU2NyaXB0YWJsZTo6RE9OVF9BU0tfSU5TVEFOQ0VfRk9SX1NDUklQVEFCTEUgfCBuc0lYUENT Y3JpcHRhYmxlOjpET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTIHwgbnNJWFBDU2NyaXB0YWJs ZTo6V0FOVF9ORVdSRVNPTFZFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9DSEVDS0FDQ0VTUyB8 IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSkgfCBuc0lYUENTY3JpcHRhYmxlOjpE T05UX0VOVU1fUVVFUllfSU5URVJGQUNFIHwgbnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJTkZPX0lO VEVSRkFDRVNfT05MWSkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1BSRUNSRUFURSB8IG5zSVhQ Q1NjcmlwdGFibGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NF VFBST1BFUlRZKSAmIH5uc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJU WSksIDEsIH0sCgoKICB7ICJJbWFnZURvY3VtZW50IiwgeyBuc0hUTUxEb2N1bWVudFNIOjpkb0Ny ZWF0ZSB9LCAwLCAwLCAwLCAoKCgoKG5zSVhQQ1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FE RFBST1BFUlRZIHwgbnNJWFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfREVMUFJPUEVSVFkg fCBuc0lYUENTY3JpcHRhYmxlOjpVU0VfSlNTVFVCX0ZPUl9TRVRQUk9QRVJUWSB8IG5zSVhQQ1Nj cmlwdGFibGU6OkFMTE9XX1BST1BfTU9EU19EVVJJTkdfUkVTT0xWRSB8IG5zSVhQQ1NjcmlwdGFi bGU6OkFMTE9XX1BST1BfTU9EU19UT19QUk9UT1RZUEUgfCBuc0lYUENTY3JpcHRhYmxlOjpET05U X0FTS19JTlNUQU5DRV9GT1JfU0NSSVBUQUJMRSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfUkVG TEVDVF9JTlRFUkZBQ0VfTkFNRVMgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX05FV1JFU09MVkUg fCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0NIRUNLQUNDRVNTIHwgbnNJWFBDU2NyaXB0YWJsZTo6 V0FOVF9QT1NUQ1JFQVRFKSB8IG5zSVhQQ1NjcmlwdGFibGU6OkRPTlRfRU5VTV9RVUVSWV9JTlRF UkZBQ0UgfCBuc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lORk9fSU5URVJGQUNFU19PTkxZKSB8IG5z SVhQQ1NjcmlwdGFibGU6OldBTlRfUFJFQ1JFQVRFIHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9B RERQUk9QRVJUWSB8IG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfU0VUUFJPUEVSVFkpICYgfm5zSVhQ Q1NjcmlwdGFibGU6OlVTRV9KU1NUVUJfRk9SX0FERFBST1BFUlRZKSB8IG5zSVhQQ1NjcmlwdGFi bGU6OldBTlRfQUREUFJPUEVSVFkgfCBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0RFTFBST1BFUlRZ IHwgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9HRVRQUk9QRVJUWSkgfCBuc0lYUENTY3JpcHRhYmxl OjpXQU5UX0VOVU1FUkFURSwgMSwgfSwKCgp9OwoKbnNJWFBDb25uZWN0ICpuc0RPTUNsYXNzSW5m bzo6c1hQQ29ubmVjdCA9IDA7Cm5zSVNjcmlwdFNlY3VyaXR5TWFuYWdlciAqbnNET01DbGFzc0lu Zm86OnNTZWNNYW4gPSAwOwpQUkJvb2wgbnNET01DbGFzc0luZm86OnNJc0luaXRpYWxpemVkID0g MDsKCgoKanN2YWwgbnNET01DbGFzc0luZm86OnNUb3BfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2 YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c1Njcm9s bGJhcnNfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEp Owpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c0xvY2F0aW9uX2lkID0gKCgoanN2YWwpKDAgLSAoKGpz dmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNDb21w b25lbnRzX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgx KTsKanN2YWwgbnNET01DbGFzc0luZm86OnNDb25zdHJ1Y3Rvcl9pZCA9ICgoKGpzdmFsKSgwIC0g KChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpz X2NvbnRlbnRfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAw eDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c0NvbnRlbnRfaWQgPSAoKChqc3ZhbCkoMCAtICgo anN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c1Np ZGViYXJfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEp Owpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c01lbnViYXJfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2 YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c1Rvb2xi YXJfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpq c3ZhbCBuc0RPTUNsYXNzSW5mbzo6c0xvY2F0aW9uYmFyX2lkID0gKCgoanN2YWwpKDAgLSAoKGpz dmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNQZXJz b25hbGJhcl9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4 MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzU3RhdHVzYmFyX2lkID0gKCgoanN2YWwpKDAgLSAo KGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNE aXJlY3Rvcmllc19pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8 IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzQ29udHJvbGxlcnNfaWQgPSAoKChqc3ZhbCko MCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5m bzo6c0xlbmd0aF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8 IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzSW5uZXJIZWlnaHRfaWQgPSAoKChqc3ZhbCko MCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5m bzo6c0lubmVyV2lkdGhfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwg MSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c091dGVySGVpZ2h0X2lkID0gKCgoanN2 YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFz c0luZm86OnNPdXRlcldpZHRoX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkp IDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNTY3JlZW5YX2lkID0gKCgoanN2 YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFz c0luZm86OnNTY3JlZW5ZX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8 IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNTdGF0dXNfaWQgPSAoKChqc3ZhbCko MCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5m bzo6c05hbWVfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAw eDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09ubW91c2Vkb3duX2lkID0gKCgoanN2YWwpKDAg LSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86 OnNPbm1vdXNldXBfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkg fCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09uY2xpY2tfaWQgPSAoKChqc3ZhbCkoMCAt ICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6 c09uY29udGV4dG1lbnVfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwg MSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09ubW91c2VvdmVyX2lkID0gKCgoanN2 YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFz c0luZm86OnNPbm1vdXNlb3V0X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkp IDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNPbmtleWRvd25faWQgPSAoKChq c3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNs YXNzSW5mbzo6c09ua2V5dXBfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkg PDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09ua2V5cHJlc3NfaWQgPSAoKChq c3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNs YXNzSW5mbzo6c09ubW91c2Vtb3ZlX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMw KSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNPbmZvY3VzX2lkID0gKCgo anN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01D bGFzc0luZm86OnNPbmJsdXJfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkg PDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09uc3VibWl0X2lkID0gKCgoanN2 YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFz c0luZm86OnNPbnJlc2V0X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8 IDEpIHwgMHgxKTsKanN2YWwgbnNET01DbGFzc0luZm86OnNPbmNoYW5nZV9pZCA9ICgoKGpzdmFs KSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJ bmZvOjpzT25zZWxlY3RfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwg MSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09ubG9hZF9pZCA9ICgoKGpzdmFsKSgw IC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZv OjpzT251bmxvYWRfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkg fCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09uYWJvcnRfaWQgPSAoKChqc3ZhbCkoMCAt ICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6 c09uZXJyb3JfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAw eDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09ucGFpbnRfaWQgPSAoKChqc3ZhbCkoMCAtICgo anN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09u cmVzaXplX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgx KTsKanN2YWwgbnNET01DbGFzc0luZm86OnNPbnNjcm9sbF9pZCA9ICgoKGpzdmFsKSgwIC0gKChq c3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzU2Ny b2xsSW50b1ZpZXdfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkg fCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c1Njcm9sbFhfaWQgPSAoKChqc3ZhbCkoMCAt ICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6 c1Njcm9sbFlfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAw eDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c09wZW5faWQgPSAoKChqc3ZhbCkoMCAtICgoanN2 YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3ZhbCBuc0RPTUNsYXNzSW5mbzo6c0l0ZW1f aWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwpqc3Zh bCBuc0RPTUNsYXNzSW5mbzo6c0VudW1lcmF0ZV9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkx IDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzTmF2aWdhdG9y X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2 YWwgbnNET01DbGFzc0luZm86OnNEb2N1bWVudF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkx IDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CmpzdmFsIG5zRE9NQ2xhc3NJbmZvOjpzV2luZG93X2lk ID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKanN2YWwg bnNET01DbGFzc0luZm86OnNGcmFtZXNfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAo MzApKSkgPDwgMSkgfCAweDEpOwoKY29uc3QgSlNDbGFzcyAqbnNET01DbGFzc0luZm86OnNPYmpl Y3RDbGFzcyA9IDA7CgpQUkJvb2wgbnNET01DbGFzc0luZm86OnNEb1NlY3VyaXR5Q2hlY2tJbkFk ZFByb3BlcnR5ID0gMTsKCgpzdGF0aWMgaW5saW5lIEpTT2JqZWN0ICoKR2V0R2xvYmFsSlNPYmpl Y3QoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaikKewogIEpTT2JqZWN0ICp0bXA7CgogIHdo aWxlICgodG1wID0gOjpKU19HZXRQYXJlbnQoY3gsIG9iaikpKSB7CiAgICBvYmogPSB0bXA7CiAg fQoKICByZXR1cm4gb2JqOwp9CgpzdGF0aWMganN2YWwKR2V0SW50ZXJuZWRKU1ZhbChKU0NvbnRl eHQgKmN4LCBjb25zdCBjaGFyICpzdHIpCnsKICBKU1N0cmluZyAqcyA9IDo6SlNfSW50ZXJuU3Ry aW5nKGN4LCBzdHIpOwoKICBpZiAoIXMpIHsKICAgIHJldHVybiAoKChqc3ZhbCkoMCAtICgoanN2 YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIH0KCiAgcmV0dXJuICgoKGpzdmFsKShzKSkg fCAoMHg0KSk7Cn0KCgoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OkRlZmluZVN0YXRpY0pTVmFs cyhKU0NvbnRleHQgKmN4KQp7CgoKCgoKCiAgc1RvcF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gs ICJ0b3AiKTsgaWYgKCEoKChzVG9wX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9 PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc1Njcm9sbGJh cnNfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAic2Nyb2xsYmFycyIpOyBpZiAoISgoKHNTY3Jv bGxiYXJzX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0xvY2F0aW9uX2lkID0gR2V0SW50ZXJu ZWRKU1ZhbChjeCwgImxvY2F0aW9uIik7IGlmICghKCgoc0xvY2F0aW9uX2lkKSAmICgoKEpTVWlu dDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcw MDBlTCk7IH07CiAgc0NvbXBvbmVudHNfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAiQ29tcG9u ZW50cyIpOyBpZiAoISgoKHNDb21wb25lbnRzX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAt IDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0Nv bnN0cnVjdG9yX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgImNvbnN0cnVjdG9yIik7IGlmICgh KCgoc0NvbnN0cnVjdG9yX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQp KSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc19jb250ZW50X2lkID0g R2V0SW50ZXJuZWRKU1ZhbChjeCwgIl9jb250ZW50Iik7IGlmICghKCgoc19jb250ZW50X2lkKSAm ICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDcwMDBlTCk7IH07CiAgc0NvbnRlbnRfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAi Y29udGVudCIpOyBpZiAoISgoKHNDb250ZW50X2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAt IDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc1Np ZGViYXJfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAic2lkZWJhciIpOyBpZiAoISgoKHNTaWRl YmFyX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAo KG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc01lbnViYXJfaWQgPSBHZXRJbnRlcm5lZEpT VmFsKGN4LCAibWVudWJhciIpOyBpZiAoISgoKHNNZW51YmFyX2lkKSAmICgoKEpTVWludDMyKTEg PDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7 IH07CiAgc1Rvb2xiYXJfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAidG9vbGJhciIpOyBpZiAo ISgoKHNUb29sYmFyX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7 IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0xvY2F0aW9uYmFyX2lkID0g R2V0SW50ZXJuZWRKU1ZhbChjeCwgImxvY2F0aW9uYmFyIik7IGlmICghKCgoc0xvY2F0aW9uYmFy X2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5z cmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc1BlcnNvbmFsYmFyX2lkID0gR2V0SW50ZXJuZWRK U1ZhbChjeCwgInBlcnNvbmFsYmFyIik7IGlmICghKCgoc1BlcnNvbmFsYmFyX2lkKSAmICgoKEpT VWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgw MDcwMDBlTCk7IH07CiAgc1N0YXR1c2Jhcl9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJzdGF0 dXNiYXIiKTsgaWYgKCEoKChzU3RhdHVzYmFyX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAt IDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0Rp cmVjdG9yaWVzX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgImRpcmVjdG9yaWVzIik7IGlmICgh KCgoc0RpcmVjdG9yaWVzX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQp KSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0NvbnRyb2xsZXJzX2lk ID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgImNvbnRyb2xsZXJzIik7IGlmICghKCgoc0NvbnRyb2xs ZXJzX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAo KG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0xlbmd0aF9pZCA9IEdldEludGVybmVkSlNW YWwoY3gsICJsZW5ndGgiKTsgaWYgKCEoKChzTGVuZ3RoX2lkKSAmICgoKEpTVWludDMyKTEgPDwg KDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07 CiAgc0lubmVySGVpZ2h0X2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgImlubmVySGVpZ2h0Iik7 IGlmICghKCgoc0lubmVySGVpZ2h0X2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9 PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0lubmVyV2lk dGhfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAiaW5uZXJXaWR0aCIpOyBpZiAoISgoKHNJbm5l cldpZHRoX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc091dGVySGVpZ2h0X2lkID0gR2V0SW50 ZXJuZWRKU1ZhbChjeCwgIm91dGVyV2lkdGgiKTsgaWYgKCEoKChzT3V0ZXJIZWlnaHRfaWQpICYg KCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwNzAwMGVMKTsgfTsKICBzT3V0ZXJXaWR0aF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gs ICJvdXRlcldpZHRoIik7IGlmICghKCgoc091dGVyV2lkdGhfaWQpICYgKCgoSlNVaW50MzIpMSA8 PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsg fTsKICBzU2NyZWVuWF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJzY3JlZW5YIik7IGlmICgh KCgoc1NjcmVlblhfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzU2NyZWVuWV9pZCA9IEdldElu dGVybmVkSlNWYWwoY3gsICJzY3JlZW5ZIik7IGlmICghKCgoc1NjcmVlbllfaWQpICYgKCgoSlNV aW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw NzAwMGVMKTsgfTsKICBzU3RhdHVzX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgInN0YXR1cyIp OyBpZiAoISgoKHNTdGF0dXNfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4 NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzTmFtZV9pZCA9IEdl dEludGVybmVkSlNWYWwoY3gsICJuYW1lIik7IGlmICghKCgoc05hbWVfaWQpICYgKCgoSlNVaW50 MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAw MGVMKTsgfTsKICBzT25tb3VzZWRvd25faWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAib25tb3Vz ZWRvd24iKTsgaWYgKCEoKChzT25tb3VzZWRvd25faWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykp IC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBz T25tb3VzZXVwX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgIm9ubW91c2V1cCIpOyBpZiAoISgo KHNPbm1vdXNldXBfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25jbGlja19pZCA9IEdldElu dGVybmVkSlNWYWwoY3gsICJvbmNsaWNrIik7IGlmICghKCgoc09uY2xpY2tfaWQpICYgKCgoSlNV aW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw NzAwMGVMKTsgfTsKICBzT25jb250ZXh0bWVudV9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJv bmNvbnRleHRtZW51Iik7IGlmICghKCgoc09uY29udGV4dG1lbnVfaWQpICYgKCgoSlNVaW50MzIp MSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVM KTsgfTsKICBzT25tb3VzZW92ZXJfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAib25tb3VzZW92 ZXIiKTsgaWYgKCEoKChzT25tb3VzZW92ZXJfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0g MSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25t b3VzZW91dF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJvbm1vdXNlb3V0Iik7IGlmICghKCgo c09ubW91c2VvdXRfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25rZXlkb3duX2lkID0gR2V0 SW50ZXJuZWRKU1ZhbChjeCwgIm9ua2V5ZG93biIpOyBpZiAoISgoKHNPbmtleWRvd25faWQpICYg KCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwNzAwMGVMKTsgfTsKICBzT25rZXl1cF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJv bmtleXVwIik7IGlmICghKCgoc09ua2V5dXBfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0g MSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25r ZXlwcmVzc19pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJvbmtleXByZXNzIik7IGlmICghKCgo c09ua2V5cHJlc3NfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25tb3VzZW1vdmVfaWQgPSBH ZXRJbnRlcm5lZEpTVmFsKGN4LCAib25tb3VzZW1vdmUiKTsgaWYgKCEoKChzT25tb3VzZW1vdmVf aWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNy ZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25mb2N1c19pZCA9IEdldEludGVybmVkSlNWYWwo Y3gsICJvbmZvY3VzIik7IGlmICghKCgoc09uZm9jdXNfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAo MykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsK ICBzT25ibHVyX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgIm9uYmx1ciIpOyBpZiAoISgoKHNP bmJsdXJfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJu ICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25zdWJtaXRfaWQgPSBHZXRJbnRlcm5l ZEpTVmFsKGN4LCAib25zdWJtaXQiKTsgaWYgKCEoKChzT25zdWJtaXRfaWQpICYgKCgoSlNVaW50 MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAw MGVMKTsgfTsKICBzT25yZXNldF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJvbnJlc2V0Iik7 IGlmICghKCgoc09ucmVzZXRfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4 NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25jaGFuZ2VfaWQg PSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAib25jaGFuZ2UiKTsgaWYgKCEoKChzT25jaGFuZ2VfaWQp ICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1 bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25zZWxlY3RfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4 LCAib25zZWxlY3QiKTsgaWYgKCEoKChzT25zZWxlY3RfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAo MykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsK ICBzT25sb2FkX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgIm9ubG9hZCIpOyBpZiAoISgoKHNP bmxvYWRfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJu ICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT251bmxvYWRfaWQgPSBHZXRJbnRlcm5l ZEpTVmFsKGN4LCAib251bmxvYWQiKTsgaWYgKCEoKChzT251bmxvYWRfaWQpICYgKCgoSlNVaW50 MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAw MGVMKTsgfTsKICBzT25hYm9ydF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJvbmFib3J0Iik7 IGlmICghKCgoc09uYWJvcnRfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4 NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25lcnJvcl9pZCA9 IEdldEludGVybmVkSlNWYWwoY3gsICJvbmVycm9yIik7IGlmICghKCgoc09uZXJyb3JfaWQpICYg KCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwNzAwMGVMKTsgfTsKICBzT25wYWludF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJv bnBhaW50Iik7IGlmICghKCgoc09ucGFpbnRfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0g MSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25y ZXNpemVfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAib25yZXNpemUiKTsgaWYgKCEoKChzT25y ZXNpemVfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJu ICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzT25zY3JvbGxfaWQgPSBHZXRJbnRlcm5l ZEpTVmFsKGN4LCAib25zY3JvbGwiKTsgaWYgKCEoKChzT25zY3JvbGxfaWQpICYgKCgoSlNVaW50 MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAw MGVMKTsgfTsKICBzU2Nyb2xsSW50b1ZpZXdfaWQgPSBHZXRJbnRlcm5lZEpTVmFsKGN4LCAic2Ny b2xsSW50b1ZpZXciKTsgaWYgKCEoKChzU2Nyb2xsSW50b1ZpZXdfaWQpICYgKCgoSlNVaW50MzIp MSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVM KTsgfTsKICBzU2Nyb2xsWF9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJzY3JvbGxYIik7IGlm ICghKCgoc1Njcm9sbFhfaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkp IHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzU2Nyb2xsWV9pZCA9IEdl dEludGVybmVkSlNWYWwoY3gsICJzY3JvbGxZIik7IGlmICghKCgoc1Njcm9sbFlfaWQpICYgKCgo SlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4 ODAwNzAwMGVMKTsgfTsKICBzT3Blbl9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJvcGVuIik7 IGlmICghKCgoc09wZW5faWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09IDB4NCkp IHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfTsKICBzSXRlbV9pZCA9IEdldElu dGVybmVkSlNWYWwoY3gsICJpdGVtIik7IGlmICghKCgoc0l0ZW1faWQpICYgKCgoSlNVaW50MzIp MSA8PCAoMykpIC0gMSkpID09IDB4NCkpIHsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVM KTsgfTsKICBzRW51bWVyYXRlX2lkID0gR2V0SW50ZXJuZWRKU1ZhbChjeCwgImVudW1lcmF0ZVBy b3BlcnRpZXMiKTsgaWYgKCEoKChzRW51bWVyYXRlX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMp KSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAg c05hdmlnYXRvcl9pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJuYXZpZ2F0b3IiKTsgaWYgKCEo KChzTmF2aWdhdG9yX2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7 IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0RvY3VtZW50X2lkID0gR2V0 SW50ZXJuZWRKU1ZhbChjeCwgImRvY3VtZW50Iik7IGlmICghKCgoc0RvY3VtZW50X2lkKSAmICgo KEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAw eDgwMDcwMDBlTCk7IH07CiAgc1dpbmRvd19pZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJ3aW5k b3ciKTsgaWYgKCEoKChzV2luZG93X2lkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9 PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IH07CiAgc0ZyYW1lc19p ZCA9IEdldEludGVybmVkSlNWYWwoY3gsICJmcmFtZXMiKTsgaWYgKCEoKChzRnJhbWVzX2lkKSAm ICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7IHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDcwMDBlTCk7IH07CgogIHJldHVybiAwOwp9CgoKbnNyZXN1bHQKbnNET01DbGFzc0lu Zm86OldyYXBOYXRpdmUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKnNjb3BlLCBuc0lTdXBwb3J0 cyAqbmF0aXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCYgYUlJRCwg anN2YWwgKnZwKQp7CiAgaWYgKCFuYXRpdmUpIHsKICAgICp2cCA9ICgoanN2YWwpKDApKTsKCiAg ICByZXR1cm4gMDsKICB9CgogIGRvIHsgaWYgKCEoc1hQQ29ubmVjdCkpIHsgOyByZXR1cm4gKChu c3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICBuc0NPTVB0cjxuc0lYUENv bm5lY3RKU09iamVjdEhvbGRlcj4gaG9sZGVyOwoKICBuc3Jlc3VsdCBydiA9IHNYUENvbm5lY3Qt PldyYXBOYXRpdmUoY3gsIHNjb3BlLCBuYXRpdmUsIGFJSUQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKGhvbGRlcikpOwogIGRvIHsgaWYgKCEo KCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7Cgog IEpTT2JqZWN0KiBvYmogPSAwOwogIHJ2ID0gaG9sZGVyLT5HZXRKU09iamVjdCgmb2JqKTsKICBk byB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hp bGUgKDApOwoKICAqdnAgPSAoKGpzdmFsKShvYmopKTsKCiAgcmV0dXJuIHJ2Owp9CgoKbnNyZXN1 bHQKbnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oSlNDb250ZXh0ICpjeCwgbnNyZXN1 bHQgYVJlc3VsdCkKewogIG5zQ09NUHRyPG5zSUV4Y2VwdGlvblNlcnZpY2U+IHhzID0KICAgIGRv X0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9leGNlcHRpb25zZXJ2aWNlOzEiKTsKICBpZiAoIXhz KQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsKCiAgbnNDT01QdHI8bnNJRXhj ZXB0aW9uTWFuYWdlcj4geG07CiAgbnNyZXN1bHQgcnYgPSB4cy0+R2V0Q3VycmVudEV4Y2VwdGlv bk1hbmFnZXIoZ2V0dGVyX0FkZFJlZnMoeG0pKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgw MDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICBuc0NPTVB0cjxuc0lF eGNlcHRpb24+IGV4Y2VwdGlvbjsKICBydiA9IHhtLT5HZXRFeGNlcHRpb25Gcm9tUHJvdmlkZXIo YVJlc3VsdCwgMCwgZ2V0dGVyX0FkZFJlZnMoZXhjZXB0aW9uKSk7CgogIGpzdmFsIGp2OwogIHJ2 ID0gV3JhcE5hdGl2ZShjeCwgOjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCBleGNlcHRpb24sCiAg ICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88bnNJRXhjZXB0aW9uPjo6R2V0SUlEKCksICZq dik7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsg fSB9IHdoaWxlICgwKTsKICBKU19TZXRQZW5kaW5nRXhjZXB0aW9uKGN4LCBqdik7CgogIHJldHVy biAwOwp9Cgpuc0RPTUNsYXNzSW5mbzo6bnNET01DbGFzc0luZm8obnNET01DbGFzc0luZm9EYXRh KiBhRGF0YSkgOiBtRGF0YShhRGF0YSkKewp9Cgpuc0RPTUNsYXNzSW5mbzo6fm5zRE9NQ2xhc3NJ bmZvKCkKewogIGlmICgoUHRyQml0cyhtRGF0YS0+bUNhY2hlZENsYXNzSW5mbykgJiAweDEpKSB7 CgogICAgbnNET01DbGFzc0luZm9EYXRhKiBkYXRhID0gY29uc3RfY2FzdDwgbnNET01DbGFzc0lu Zm9EYXRhKiA+KG1EYXRhKTsKICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDwgbnNFeHRlcm5hbERPTUNs YXNzSW5mb0RhdGEqID4oZGF0YSk7CiAgfQp9Cgpuc3JlZmNudCBuc0RPTUNsYXNzSW5mbzo6QWRk UmVmKHZvaWQpIHsgOyAoKHZvaWQpMCk7ICsrbVJlZkNudDsgOyByZXR1cm4gbVJlZkNudDsgfTsK bnNyZWZjbnQgbnNET01DbGFzc0luZm86OlJlbGVhc2Uodm9pZCkgeyA7ICgodm9pZCkwKTsgLS1t UmVmQ250OyA7IGlmIChtUmVmQ250ID09IDApIHsgbVJlZkNudCA9IDE7IGRvIHsgOyBkZWxldGUg KHRoaXMpOyB9IHdoaWxlICgwKTsgcmV0dXJuIDA7IH0gcmV0dXJuIG1SZWZDbnQ7IH07Cgpuc3Jl c3VsdCBuc0RPTUNsYXNzSW5mbzo6UXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZv aWQqKiBhSW5zdGFuY2VQdHIpIHsgOyBpZiAoICFhSW5zdGFuY2VQdHIgKSByZXR1cm4gKChuc3Jl c3VsdCkgMHg4MDAwNDAwM0wpOyBuc0lTdXBwb3J0cyogZm91bmRJbnRlcmZhY2U7CiAgaWYgKCBh SUlELkVxdWFscyhuc0NPTVR5cGVJbmZvPG5zSVhQQ1NjcmlwdGFibGU+OjpHZXRJSUQoKSkgKSBm b3VuZEludGVyZmFjZSA9IHN0YXRpY19jYXN0PCBuc0lYUENTY3JpcHRhYmxlKiA+KHRoaXMpOyBl bHNlCiAgaWYgKCBhSUlELkVxdWFscyhuc0NPTVR5cGVJbmZvPG5zSUNsYXNzSW5mbz46OkdldElJ RCgpKSApIGZvdW5kSW50ZXJmYWNlID0gc3RhdGljX2Nhc3Q8IG5zSUNsYXNzSW5mbyogPih0aGlz KTsgZWxzZQogIGlmICggYUlJRC5FcXVhbHMobnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz46Okdl dElJRCgpKSApIGZvdW5kSW50ZXJmYWNlID0gc3RhdGljX2Nhc3Q8IG5zSVN1cHBvcnRzKiA+KHN0 YXRpY19jYXN0PCBuc0lYUENTY3JpcHRhYmxlKiA+KHRoaXMpKTsgZWxzZQpmb3VuZEludGVyZmFj ZSA9IDA7IG5zcmVzdWx0IHN0YXR1czsgaWYgKCAhZm91bmRJbnRlcmZhY2UgKSBzdGF0dXMgPSAo KG5zcmVzdWx0KSAweDgwMDA0MDAyTCk7IGVsc2UgeyAoZm91bmRJbnRlcmZhY2UpLT5BZGRSZWYo KTsgc3RhdHVzID0gMDsgfSAqYUluc3RhbmNlUHRyID0gZm91bmRJbnRlcmZhY2U7IHJldHVybiBz dGF0dXM7IH0KCgpKU0NsYXNzIG5zRE9NQ2xhc3NJbmZvOjpzRE9NQ29uc3RydWN0b3JQcm90b0Ns YXNzID0gewogICJET00gQ29uc3RydWN0b3IucHJvdG90eXBlIiwgMCwKICBKU19Qcm9wZXJ0eVN0 dWIsIEpTX1Byb3BlcnR5U3R1YiwgSlNfUHJvcGVydHlTdHViLCBKU19Qcm9wZXJ0eVN0dWIsCiAg SlNfRW51bWVyYXRlU3R1YiwgSlNfUmVzb2x2ZVN0dWIsIEpTX0NvbnZlcnRTdHViLCBKU19GaW5h bGl6ZVN0dWIKfTsKCgpzdGF0aWMgY29uc3QgY2hhciAqCkN1dFByZWZpeChjb25zdCBjaGFyICph TmFtZSkgewogIHN0YXRpYyBjb25zdCBjaGFyIHByZWZpeF9uc0lET01bXSA9ICJuc0lET00iOwog IHN0YXRpYyBjb25zdCBjaGFyIHByZWZpeF9uc0lbXSA9ICJuc0kiOwoKICBpZiAoc3RybmNtcChh TmFtZSwgcHJlZml4X25zSURPTSwgc2l6ZW9mKHByZWZpeF9uc0lET00pIC0gMSkgPT0gMCkgewog ICAgcmV0dXJuIGFOYW1lICsgc2l6ZW9mKHByZWZpeF9uc0lET00pIC0gMTsKICB9CgogIGlmIChz dHJuY21wKGFOYW1lLCBwcmVmaXhfbnNJLCBzaXplb2YocHJlZml4X25zSSkgLSAxKSA9PSAwKSB7 CiAgICByZXR1cm4gYU5hbWUgKyBzaXplb2YocHJlZml4X25zSSkgLSAxOwogIH0KCiAgcmV0dXJu IGFOYW1lOwp9CgoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OlJlZ2lzdGVyQ2xhc3NOYW1lKFBS SW50MzIgYUNsYXNzSW5mb0lEKQp7CiAgZXh0ZXJuIG5zU2NyaXB0TmFtZVNwYWNlTWFuYWdlciAq Z05hbWVTcGFjZU1hbmFnZXI7CiAgZG8geyBpZiAoIShnTmFtZVNwYWNlTWFuYWdlcikpIHsgOyBy ZXR1cm4gKCgobnNyZXN1bHQpIDB4QzFGMzAwMDApICsgMSk7IH0gfSB3aGlsZSAoMCk7CgogIGdO YW1lU3BhY2VNYW5hZ2VyLT5SZWdpc3RlckNsYXNzTmFtZShzQ2xhc3NJbmZvRGF0YVthQ2xhc3NJ bmZvSURdLm1OYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ2xh c3NJbmZvSUQpOwoKICByZXR1cm4gMDsKfQoKCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpSZWdp c3RlckNsYXNzUHJvdG9zKFBSSW50MzIgYUNsYXNzSW5mb0lEKQp7CiAgZXh0ZXJuIG5zU2NyaXB0 TmFtZVNwYWNlTWFuYWdlciAqZ05hbWVTcGFjZU1hbmFnZXI7CiAgZG8geyBpZiAoIShnTmFtZVNw YWNlTWFuYWdlcikpIHsgOyByZXR1cm4gKCgobnNyZXN1bHQpIDB4QzFGMzAwMDApICsgMSk7IH0g fSB3aGlsZSAoMCk7CiAgUFJCb29sIGZvdW5kX29sZDsKCiAgY29uc3QgbnNJSUQgKnByaW1hcnlf aWlkID0gc0NsYXNzSW5mb0RhdGFbYUNsYXNzSW5mb0lEXS5tUHJvdG9DaGFpbkludGVyZmFjZTsK CiAgaWYgKCFwcmltYXJ5X2lpZCB8fCBwcmltYXJ5X2lpZCA9PSAmbnNDT01UeXBlSW5mbzxuc0lT dXBwb3J0cz46OkdldElJRCgpKSB7CiAgICByZXR1cm4gMDsKICB9CgogIG5zQ09NUHRyPG5zSUlu dGVyZmFjZUluZm9NYW5hZ2VyPiBpaW0gPQogICAgZG9udF9BZGRSZWYoWFBUSV9HZXRJbnRlcmZh Y2VJbmZvTWFuYWdlcigpKTsKICBkbyB7IGlmICghKGlpbSkpIHsgOyByZXR1cm4gKChuc3Jlc3Vs dCkgMHg4MDA0MDExMUwpOyB9IH0gd2hpbGUgKDApOwoKICBuc0NPTVB0cjxuc0lJbnRlcmZhY2VJ bmZvPiBpZl9pbmZvOwogIFBSQm9vbCBmaXJzdCA9IDE7CgogIGlpbS0+R2V0SW5mb0ZvcklJRChw cmltYXJ5X2lpZCwgZ2V0dGVyX0FkZFJlZnMoaWZfaW5mbykpOwoKICB3aGlsZSAoaWZfaW5mbykg ewogICAgbnNJSUQgKmlpZCA9IDA7CgogICAgaWZfaW5mby0+R2V0SW50ZXJmYWNlSUlEKCZpaWQp OwogICAgZG8geyBpZiAoIShpaWQpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZM KTsgfSB9IHdoaWxlICgwKTsKCiAgICBpZiAoaWlkLT5FcXVhbHMobnNDT01UeXBlSW5mbzxuc0lT dXBwb3J0cz46OkdldElJRCgpKSkgewogICAgICBuc01lbW9yeTo6RnJlZShpaWQpOwoKICAgICAg YnJlYWs7CiAgICB9CgogICAgbnNYUElETENTdHJpbmcgbmFtZTsKICAgIGlmX2luZm8tPkdldE5h bWUoZ2V0dGVyX0NvcGllcyhuYW1lKSk7CgogICAgZ05hbWVTcGFjZU1hbmFnZXItPlJlZ2lzdGVy Q2xhc3NQcm90byhDdXRQcmVmaXgobmFtZSksIGlpZCwgJmZvdW5kX29sZCk7CgogICAgbnNNZW1v cnk6OkZyZWUoaWlkKTsKCiAgICBpZiAoZmlyc3QpIHsKICAgICAgZmlyc3QgPSAwOwogICAgfSBl bHNlIGlmIChmb3VuZF9vbGQpIHsKICAgICAgYnJlYWs7CiAgICB9CgogICAgbnNDT01QdHI8bnNJ SW50ZXJmYWNlSW5mbz4gdG1wKGlmX2luZm8pOwogICAgdG1wLT5HZXRQYXJlbnQoZ2V0dGVyX0Fk ZFJlZnMoaWZfaW5mbykpOwogIH0KCiAgcmV0dXJuIDA7Cn0KCgpuc3Jlc3VsdApuc0RPTUNsYXNz SW5mbzo6UmVnaXN0ZXJFeHRlcm5hbENsYXNzZXMoKQp7CiAgZXh0ZXJuIG5zU2NyaXB0TmFtZVNw YWNlTWFuYWdlciAqZ05hbWVTcGFjZU1hbmFnZXI7CiAgZG8geyBpZiAoIShnTmFtZVNwYWNlTWFu YWdlcikpIHsgOyByZXR1cm4gKCgobnNyZXN1bHQpIDB4QzFGMzAwMDApICsgMSk7IH0gfSB3aGls ZSAoMCk7CgogIG5zcmVzdWx0IHJ2ID0gMDsKICBuc0NPTVB0cjxuc0lDYXRlZ29yeU1hbmFnZXI+ IGNtID0KICAgIGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9jYXRlZ29yeW1hbmFnZXI7MSIs ICZydik7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBy djsgfSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJU2ltcGxlRW51bWVyYXRvcj4gZTsKICBy diA9IGNtLT5FbnVtZXJhdGVDYXRlZ29yeSgiSmF2YVNjcmlwdCBET00gY2xhc3MiLCBnZXR0ZXJf QWRkUmVmcyhlKSk7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJl dHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgbnNYUElETENTdHJpbmcgY29udHJhY3RJZDsKICBu c0NBdXRvU3RyaW5nIGNhdGVnb3J5RW50cnk7CiAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IGVudHJ5 OwoKICB3aGlsZSAoKCEoKGUtPkdldE5leHQoZ2V0dGVyX0FkZFJlZnMoZW50cnkpKSkgJiAweDgw MDAwMDAwKSkpIHsKICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzQ1N0cmluZz4gY2F0ZWdvcnkoZG9f UXVlcnlJbnRlcmZhY2UoZW50cnkpKTsKCiAgICBpZiAoIWNhdGVnb3J5KSB7CiAgICAgIDsKICAg ICAgY29udGludWU7CiAgICB9CgogICAgcnYgPSBjYXRlZ29yeS0+R2V0RGF0YShjYXRlZ29yeUVu dHJ5KTsKCiAgICBjbS0+R2V0Q2F0ZWdvcnlFbnRyeSgiSmF2YVNjcmlwdCBET00gY2xhc3MiLCBj YXRlZ29yeUVudHJ5LmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0NvcGll cyhjb250cmFjdElkKSk7CiAgICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7 IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICAgIG5zQ0lEIGNpZDsKICAgIHJ2ID0gbnND b21wb25lbnRNYW5hZ2VyOjpDb250cmFjdElEVG9DbGFzc0lEKGNvbnRyYWN0SWQsICZjaWQpOwoK ICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSB7CiAgICAgIDsKICAgICAgY29udGludWU7CiAg ICB9CgogICAgcnYgPSBnTmFtZVNwYWNlTWFuYWdlci0+UmVnaXN0ZXJFeHRlcm5hbENsYXNzTmFt ZShjYXRlZ29yeUVudHJ5LmdldCgpLCBjaWQpOwogICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4 MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKICB9CgogIHJ2ID0gZ05h bWVTcGFjZU1hbmFnZXItPlJlZ2lzdGVyRXh0ZXJuYWxJbnRlcmZhY2VzKDEpOwoKICByZXR1cm4g cnY7Cn0KIyAxMjM3ICJuc0RPTUNsYXNzSW5mby5jcHAiCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZv OjpJbml0KCkKewoKCiAgOwoKCgogIGRvIHsgaWYgKCEoIXNJc0luaXRpYWxpemVkKSkgeyA7IHJl dHVybiAoKChuc3Jlc3VsdCkgMHhDMUYzMDAwMCkgKyAyKTsgfSB9IHdoaWxlICgwKTsKCiAgZXh0 ZXJuIG5zU2NyaXB0TmFtZVNwYWNlTWFuYWdlciAqZ05hbWVTcGFjZU1hbmFnZXI7CiAgZG8geyBp ZiAoIShnTmFtZVNwYWNlTWFuYWdlcikpIHsgOyByZXR1cm4gKCgobnNyZXN1bHQpIDB4QzFGMzAw MDApICsgMSk7IH0gfSB3aGlsZSAoMCk7CgogIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uo bnNJWFBDb25uZWN0OjpHZXRDSUQoKSwgJnNYUENvbm5lY3QpOwogIGRvIHsgaWYgKCEoKCEoKHJ2 KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09N UHRyPG5zSVhQQ0Z1bmN0aW9uVGhpc1RyYW5zbGF0b3I+IG9sZDsKCiAgbnNDT01QdHI8bnNJWFBD RnVuY3Rpb25UaGlzVHJhbnNsYXRvcj4gZWx0ID0gbmV3IG5zRXZlbnRMaXN0ZW5lclRoaXNUcmFu c2xhdG9yKCk7CiAgZG8geyBpZiAoIShlbHQpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw NzAwMGVMKTsgfSB9IHdoaWxlICgwKTsKCiAgc1hQQ29ubmVjdC0+U2V0RnVuY3Rpb25UaGlzVHJh bnNsYXRvcihuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50TGlzdGVuZXI+OjpHZXRJSUQoKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsdCwgZ2V0dGVyX0FkZFJlZnMo b2xkKSk7CgogIG5zQ09NUHRyPG5zSVNjcmlwdFNlY3VyaXR5TWFuYWdlcj4gc20gPQogICAgZG9f R2V0U2VydmljZSgiQG1vemlsbGEub3JnL3NjcmlwdHNlY3VyaXR5bWFuYWdlcjsxIiwgJnJ2KTsK ICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0g d2hpbGUgKDApOwoKICBzU2VjTWFuID0gc207CiAgKHNTZWNNYW4pLT5BZGRSZWYoKTsKCiAgbnND T01QdHI8bnNJVGhyZWFkSlNDb250ZXh0U3RhY2s+IHN0YWNrID0KICAgIGRvX0dldFNlcnZpY2Uo IkBtb3ppbGxhLm9yZy9qcy94cGMvQ29udGV4dFN0YWNrOzEiLCAmcnYpOwogIGRvIHsgaWYgKCEo KCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7Cgog IEpTQ29udGV4dCAqY3ggPSAwOwoKICBydiA9IHN0YWNrLT5HZXRTYWZlSlNDb250ZXh0KCZjeCk7 CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9 IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJQ29tcG9uZW50UmVnaXN0cmFyPiBjcjsKICBOU19H ZXRDb21wb25lbnRSZWdpc3RyYXIoZ2V0dGVyX0FkZFJlZnMoY3IpKTsKICBjb25zdCBuc0lJRCog eHBhdGhFdmFsdWF0b3JJSUQgPSAwOwogIGlmIChjcikgewogICAgUFJCb29sIGhhdmVYUGF0aERP TTsKICAgIGNyLT5Jc0NvbnRyYWN0SURSZWdpc3RlcmVkKCJAbW96aWxsYS5vcmcvZG9tL3hwYXRo LWV2YWx1YXRvcjsxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYXZlWFBhdGhE T00pOwogICAgaWYgKGhhdmVYUGF0aERPTSkgewogICAgICB4cGF0aEV2YWx1YXRvcklJRCA9ICZu c0NPTVR5cGVJbmZvPG5zSURPTVhQYXRoRXZhbHVhdG9yPjo6R2V0SUlEKCk7CiAgICB9CiAgfQoK ICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9f V2luZG93X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxu c0lET01XaW5kb3c+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMg Y29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lE T01XaW5kb3c+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUpTV2luZG93Pjo6 R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01XaW5kb3dJbnRlcm5hbD46OkdldElJ RCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRSZWNlaXZlcj46OkdldElJRCgpLAog ICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwKICAgICZuc0NP TVR5cGVJbmZvPG5zSURPTVZpZXdDU1M+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5z SURPTUFic3RyYWN0Vmlldz46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVy ZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFb ZURPTUNsYXNzSW5mb19Mb2NhdGlvbl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0g Jm5zQ09NVHlwZUluZm88bnNJRE9NTG9jYXRpb24+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRl cmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01Mb2NhdGlvbj46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUlu Zm88bnNJRE9NTlNMb2NhdGlvbj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGlu dGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0Rh dGFbZURPTUNsYXNzSW5mb19OYXZpZ2F0b3JfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFj ZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTU5hdmlnYXRvcj46OkdldElJRCgpOyBkLm1IYXNDbGFz c0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsK ICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5hdmlnYXRvcj46OkdldElJRCgpLAogICAgJm5zQ09N VHlwZUluZm88bnNJRE9NSlNOYXZpZ2F0b3I+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFj ZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFz c0luZm9EYXRhW2VET01DbGFzc0luZm9fUGx1Z2luX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRl cmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01QbHVnaW4+OjpHZXRJSUQoKTsgZC5tSGFzQ2xh c3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7 CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01QbHVnaW4+OjpHZXRJSUQoKSwKICAwIH07IGQubUlu dGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9 IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fUGx1Z2luQXJyYXlfaWRdOyA7IDsgZC5tUHJv dG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTVBsdWdpbkFycmF5Pjo6R2V0 SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRl cmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NUGx1Z2luQXJyYXk+OjpH ZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUpTUGx1Z2luQXJyYXk+OjpHZXRJSUQo KSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xh c3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fTWltZVR5cGVfaWRd OyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTU1pbWVU eXBlPjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5z SUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTWltZVR5 cGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoK ICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9f TWltZVR5cGVBcnJheV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlw ZUluZm88bnNJRE9NTWltZVR5cGVBcnJheT46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFj ZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NP TVR5cGVJbmZvPG5zSURPTU1pbWVUeXBlQXJyYXk+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVy ZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHND bGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQmFyUHJvcF9pZF07IDsgOyBkLm1Qcm90b0NoYWlu SW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQmFyUHJvcD46OkdldElJRCgpOyBkLm1I YXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3Rb XSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUJhclByb3A+OjpHZXRJSUQoKSwKICAwIH07 IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0 YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSGlzdG9yeV9pZF07IDsgOyBkLm1Q cm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSGlzdG9yeT46OkdldElJ RCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJm YWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSGlzdG9yeT46OkdldElJ RCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01D bGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19TY3JlZW5faWRd OyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTVNjcmVl bj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJ RCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTVNjcmVlbj46 OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsg bnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19YTUxE b2N1bWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88 bnNJRE9NWE1MRG9jdW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBz dGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5m bzxuc0lET01Eb2N1bWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NWE1M RG9jdW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TRG9jdW1lbnQ+ OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTURvY3VtZW50RXZlbnQ+OjpHZXRJ SUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTURvY3VtZW50U3R5bGU+OjpHZXRJSUQoKSwK ICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTURvY3VtZW50Vmlldz46OkdldElJRCgpLAogICAgJm5z Q09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRSYW5nZT46OkdldElJRCgpLAogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NRG9jdW1lbnRUcmF2ZXJzYWw+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJ bmZvPG5zSURPTURvY3VtZW50WEJMPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lE T01FdmVudFRhcmdldD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+ OjpHZXRJSUQoKSwKICB4cGF0aEV2YWx1YXRvcklJRCwgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50 ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0 YVtlRE9NQ2xhc3NJbmZvX0RvY3VtZW50VHlwZV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJm YWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRUeXBlPjo6R2V0SUlEKCk7IGQubUhh c0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtd ID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRUeXBlPjo6R2V0SUlEKCksCiAg ICAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJm YWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0Ns YXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19ET01JbXBsZW1lbnRhdGlvbl9pZF07IDsgOyBkLm1Q cm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NRE9NSW1wbGVtZW50YXRp b24+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJ SUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01ET01JbXBs ZW1lbnRhdGlvbj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9s aXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNs YXNzSW5mb19ET01FeGNlcHRpb25faWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZu c0NPTVR5cGVJbmZvPG5zSURPTURPTUV4Y2VwdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0lu dGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAg ICZuc0NPTVR5cGVJbmZvPG5zSURPTURPTUV4Y2VwdGlvbj46OkdldElJRCgpLAogICAgJm5zQ09N VHlwZUluZm88bnNJRXhjZXB0aW9uPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0g aW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZv RGF0YVtlRE9NQ2xhc3NJbmZvX0RvY3VtZW50RnJhZ21lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFp bkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTURvY3VtZW50RnJhZ21lbnQ+OjpHZXRJ SUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVy ZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01Eb2N1bWVudEZyYWdtZW50 Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAog IDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0lu Zm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19FbGVtZW50X2lkXTsgOyA7 IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Pjo6 R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICpp bnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudD46Okdl dElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwK ICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRl cmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBz Q2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0F0dHJfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbklu dGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUF0dHI+OjpHZXRJSUQoKTsgZC5tSGFzQ2xh c3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7 CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01BdHRyPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBl SW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVy ZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFb ZURPTUNsYXNzSW5mb19UZXh0X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnND T01UeXBlSW5mbzxuc0lET01UZXh0Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0g MTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NVGV4dD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZl bnRUYXJnZXQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RP TUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0NvbW1lbnRf aWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUNv bW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3Qg bnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01Db21t ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46Okdl dElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07 IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0 YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ0RBVEFTZWN0aW9uX2lkXTsgOyA7 IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01DREFUQVNlY3Rp b24+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJ SUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01DREFUQVNl Y3Rpb24+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6 R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAg fTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9E YXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19Qcm9jZXNzaW5nSW5zdHJ1Y3Rp b25faWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURP TVByb2Nlc3NpbmdJbnN0cnVjdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9 IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5 cGVJbmZvPG5zSURPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbj46OkdldElJRCgpLAogICAgJm5zQ09N VHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZv PG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNl X2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9N Q2xhc3NJbmZvX0VudGl0eV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09N VHlwZUluZm88bnNJRE9NRW50aXR5Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0g MTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NRW50aXR5Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50 ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0 YVtlRE9NQ2xhc3NJbmZvX0VudGl0eVJlZmVyZW5jZV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50 ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NRW50aXR5UmVmZXJlbmNlPjo6R2V0SUlEKCk7 IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2Vf bGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRW50aXR5UmVmZXJlbmNlPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RP TUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX05vdGF0aW9u X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01O b3RhdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25z dCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5v dGF0aW9uPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7 IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJ bmZvX05vZGVMaXN0X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBl SW5mbzxuc0lET01Ob2RlTGlzdD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7 IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJ bmZvPG5zSURPTU5vZGVMaXN0Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50 ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0 YVtlRE9NQ2xhc3NJbmZvX05hbWVkTm9kZU1hcF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJm YWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NTmFtZWROb2RlTWFwPjo6R2V0SUlEKCk7IGQubUhh c0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtd ID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTmFtZWROb2RlTWFwPjo6R2V0SUlEKCksCiAg MCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5m b0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0RvY3VtZW50U3R5bGVTaGVl dExpc3RfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5z SURPTVN0eWxlU2hlZXRMaXN0Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMDsg c3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewoKICAgICZuc0NPTVR5cGVJ bmZvPG5zSURPTVN0eWxlU2hlZXRMaXN0Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2Vz ID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJ bmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0V2ZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZh Y2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0lu dGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAg ICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TRXZlbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJ bmZvPG5zSURPTUtleUV2ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01N b3VzZUV2ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU1VJRXZlbnQ+ OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7 IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fTXV0 YXRpb25FdmVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUlu Zm88bnNJRE9NTXV0YXRpb25FdmVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9 IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5 cGVJbmZvPG5zSURPTU11dGF0aW9uRXZlbnQ+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFj ZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFz c0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTERvY3VtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hh aW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRG9jdW1lbnQ+OjpHZXRJSUQo KTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFj ZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRG9jdW1lbnQ+OjpHZXRJ SUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTERvY3VtZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0RvY3VtZW50Pjo6R2V0SUlEKCksCiAgICAmbnND T01UeXBlSW5mbzxuc0lET01Eb2N1bWVudEV2ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01Eb2N1bWVudFN0eWxlPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01Eb2N1bWVudFZpZXc+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTURv Y3VtZW50UmFuZ2U+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTURvY3VtZW50 VHJhdmVyc2FsPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01Eb2N1bWVudFhC TD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJ SUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgeHBhdGhF dmFsdWF0b3JJSUQsIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsg bnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1M Q29sbGVjdGlvbl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUlu Zm88bnNJRE9NSFRNTENvbGxlY3Rpb24+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2Ug PSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01U eXBlSW5mbzxuc0lET01Ob2RlTGlzdD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJ RE9NSFRNTENvbGxlY3Rpb24+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fSFRNTE9wdGlvbkNvbGxlY3Rpb25faWRdOyA7IDsgZC5tUHJvdG9DaGFp bkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9uPjo6R2V0SUlE KCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZh Y2VfbGlzdFtdID0gewoKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTE9wdGlvbkNvbGxl Y3Rpb24+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9u Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAg eyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hU TUxGb3JtQ29udHJvbENvbGxlY3Rpb25faWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9 ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9uPjo6R2V0SUlEKCk7IGQubUhhc0Ns YXNzSW50ZXJmYWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0g ewoKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9uPjo6R2V0SUlEKCksCiAg ICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxGb3JtQ29udHJvbExpc3Q+OjpHZXRJSUQoKSwK ICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJ bmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEdlbmVyaWNDb2xs ZWN0aW9uX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxu c0lET01IVE1MQ29sbGVjdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7 IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKCiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01IVE1MQ29sbGVjdGlvbj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNl cyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNz SW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MQW5jaG9yRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90 b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEFuY2hvckVsZW1lbnQ+ OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQg KmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MQW5jaG9y RWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MQW5jaG9y RWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVu dD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+ OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwg Jm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFj ZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFz c0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEFwcGxldEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJv dG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxBcHBsZXRFbGVtZW50 Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlE ICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEFwcGxl dEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1l bnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxl Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCks ICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZh Y2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xh c3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxBcmVhRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90 b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEFyZWFFbGVtZW50Pjo6 R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICpp bnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEFyZWFFbGVt ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxBcmVhRWxlbWVu dD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46Okdl dElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJ SUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09N VHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBp bnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9E YXRhW2VET01DbGFzc0luZm9fSFRNTEJSRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50 ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEJSRWxlbWVudD46OkdldElJRCgpOyBk Lm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xp c3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxCUkVsZW1lbnQ+OjpHZXRJSUQo KSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5z Q09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5z SURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xp c3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xh c3NJbmZvX0hUTUxCYXNlRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0g Jm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEJhc2VFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0Ns YXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0g ewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEJhc2VFbGVtZW50Pjo6R2V0SUlEKCksCiAg ICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5 cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBl SW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00z Tm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9 CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5m b19IVE1MQmFzZUZvbnRFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MQmFzZUZvbnRFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhh c0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtd ID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEJhc2VGb250RWxlbWVudD46OkdldElJ RCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAm bnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5z Q09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88 bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2Vf bGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01D bGFzc0luZm9fSFRNTEJvZHlFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2Ug PSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MQm9keUVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFz Q2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10g PSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MQm9keUVsZW1lbnQ+OjpHZXRJSUQoKSwK ICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09N VHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5 cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURP TTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7 IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJ bmZvX0hUTUxCdXR0b25FbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MQnV0dG9uRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXND bGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9 IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxCdXR0b25FbGVtZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxCdXR0b25FbGVtZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01U eXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0 OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNz SW5mb19IVE1MRExpc3RFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MRExpc3RFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0Ns YXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0g ewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTERMaXN0RWxlbWVudD46OkdldElJRCgpLAog ICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01U eXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlw ZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9N M05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsg fQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0lu Zm9fSFRNTERlbEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NP TVR5cGVJbmZvPG5zSURPTUhUTUxFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJm YWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5z Q09NVHlwZUluZm88bnNJRE9NSFRNTE1vZEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5 cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJ RE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURP TUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RP TUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxEaXJl Y3RvcnlFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBl SW5mbzxuc0lET01IVE1MRGlyZWN0b3J5RWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0lu dGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAg ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxEaXJlY3RvcnlFbGVtZW50Pjo6R2V0SUlEKCksCiAg ICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5 cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBl SW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00z Tm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9 CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5m b19IVE1MRGl2RWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09N VHlwZUluZm88bnNJRE9NSFRNTERpdkVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRl cmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MRGl2RWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09N VHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxu c0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJ RE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpH ZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5z RE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEVt YmVkRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUlu Zm88bnNJRE9NSFRNTEVtYmVkRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFj ZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NP TVR5cGVJbmZvPG5zSURPTUhUTUxFbWJlZEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5 cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJ RE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURP TUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RP TUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxGaWVs ZFNldEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJ bmZvPG5zSURPTUhUTUxGaWVsZFNldEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRl cmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MRmllbGRTZXRFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJ bmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5m bzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9k ZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9Cgog IHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19I VE1MRm9udEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5 cGVJbmZvPG5zSURPTUhUTUxGb250RWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVy ZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZu c0NPTVR5cGVJbmZvPG5zSURPTUhUTUxGb250RWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09N VHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxu c0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJ RE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpH ZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5z RE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEZv cm1FbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5m bzxuc0lET01IVE1MRm9ybUVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2Ug PSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01U eXBlSW5mbzxuc0lET01IVE1MRm9ybUVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJ bmZvPG5zSURPTU5TSFRNTEZvcm1FbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5m bzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVs ZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVu dFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgp LAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFz c0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MRnJhbWVFbGVt ZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lE T01IVE1MRnJhbWVFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsg c3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUlu Zm88bnNJRE9NSFRNTEZyYW1lRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88 bnNJRE9NTlNIVE1MRnJhbWVFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1l bnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRh cmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAog IDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0lu Zm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MRnJhbWVTZXRFbGVt ZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lE T01IVE1MRnJhbWVTZXRFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0g MTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NSFRNTEZyYW1lU2V0RWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9N RXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJ SUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9N Q2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEhSRWxl bWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJ RE9NSFRNTEhSRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0 YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZv PG5zSURPTUhUTUxIUkVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURP TU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENT U0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0 Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9 OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0Rh dGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxIZWFkRWxlbWVudF9pZF07 IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEhl YWRFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNv bnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9N SFRNTEhlYWRFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hU TUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxp bmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46Okdl dElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5t SW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZk ID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MSGVhZGluZ0VsZW1lbnRfaWRdOyA7 IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxIZWFk aW5nRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBj b25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURP TUhUTUxIZWFkaW5nRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9N TlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NT SW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+ OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07 IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0 YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTEh0bWxFbGVtZW50X2lkXTsg OyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MSHRt bEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29u c3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01I VE1MSHRtbEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRN TEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGlu ZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0 SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1J bnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQg PSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxJRnJhbWVFbGVtZW50X2lkXTsgOyA7 IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MSUZyYW1l RWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25z dCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhU TUxJRnJhbWVFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hU TUxGcmFtZUVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRN TEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGlu ZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0 SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1J bnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQg PSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxJbWFnZUVsZW1lbnRfaWRdOyA7IDsg ZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxJbWFnZUVs ZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3Qg bnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1M SW1hZ2VFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxJ bWFnZUVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVs ZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0 eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlE KCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRl cmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBz Q2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxJbnB1dEVsZW1lbnRfaWRdOyA7IDsgZC5t UHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxJbnB1dEVsZW1l bnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJ SUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MSW5w dXRFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxJbnB1 dEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1l bnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxl Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCks ICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZh Y2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xh c3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxJbnNFbGVtZW50X2lkXTsgOyA7IGQubVByb3Rv Q2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRWxlbWVudD46OkdldElJ RCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJm YWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxNb2RFbGVtZW50Pjo6 R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlE KCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgp LCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBl SW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVy ZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFb ZURPTUNsYXNzSW5mb19IVE1MSXNJbmRleEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbklu dGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxJc0luZGV4RWxlbWVudD46OkdldElJ RCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJm YWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxJc0luZGV4RWxlbWVu dD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46Okdl dElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJ SUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09N VHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBp bnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9E YXRhW2VET01DbGFzc0luZm9fSFRNTExJRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50 ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTExJRWxlbWVudD46OkdldElJRCgpOyBk Lm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xp c3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxMSUVsZW1lbnQ+OjpHZXRJSUQo KSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5z Q09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5z SURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xp c3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xh c3NJbmZvX0hUTUxMYWJlbEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9 ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxMYWJlbEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFz Q2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10g PSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MTGFiZWxFbGVtZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01U eXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0 OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNz SW5mb19IVE1MTGVnZW5kRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0g Jm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTExlZ2VuZEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFz Q2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10g PSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MTGVnZW5kRWxlbWVudD46OkdldElJRCgp LAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnND T01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09N VHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJ RE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlz dDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFz c0luZm9fSFRNTExpbmtFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MTGlua0VsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xh c3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7 CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MTGlua0VsZW1lbnQ+OjpHZXRJSUQoKSwKICAg ICZuc0NPTVR5cGVJbmZvPG5zSURPTUxpbmtTdHlsZT46OkdldElJRCgpLAogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9N RXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJ SUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9N Q2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTE1hcEVs ZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5z SURPTUhUTUxNYXBFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsg c3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUlu Zm88bnNJRE9NSFRNTE1hcEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5z SURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVu dENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFy Z2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAg MCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5m b0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxNZW51RWxlbWVudF9p ZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRN TE1lbnVFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGlj IGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJ RE9NSFRNTE1lbnVFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01O U0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJ bmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46 OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsg ZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRh ICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MTWV0YUVsZW1lbnRfaWRdOyA7 IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxNZXRh RWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25z dCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhU TUxNZXRhRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1M RWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5l U3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJ SUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUlu dGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9 IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTE1vZEVsZW1lbnRfaWRdOyA7IDsgZC5t UHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxNb2RFbGVtZW50 Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlE ICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTE1vZEVs ZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+ OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6 R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZu c0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2Vz ID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJ bmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxPTGlzdEVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9D aGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxPTGlzdEVsZW1lbnQ+OjpH ZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmlu dGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MT0xpc3RFbGVt ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6 R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46Okdl dElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnND T01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9 IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5m b0RhdGFbZURPTUNsYXNzSW5mb19IVE1MT2JqZWN0RWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0No YWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTE9iamVjdEVsZW1lbnQ+OjpH ZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmlu dGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MT2JqZWN0RWxl bWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46 OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpH ZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5z Q09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMg PSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0lu Zm9EYXRhW2VET01DbGFzc0luZm9fSFRNTE9wdEdyb3VwRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90 b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTE9wdEdyb3VwRWxlbWVu dD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJ RCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxPcHRH cm91cEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVs ZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0 eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlE KCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRl cmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBz Q2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxPcHRpb25FbGVtZW50X2lkXTsgOyA7IGQu bVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MT3B0aW9uRWxl bWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBu c0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxP cHRpb25FbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxF bGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVT dHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJ RCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50 ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0g c0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MUGFyYWdyYXBoRWxlbWVudF9pZF07IDsg OyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFBhcmFn cmFwaEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMg Y29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lE T01IVE1MUGFyYWdyYXBoRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJ RE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50 Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJn ZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAw IH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZv RGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTFBhcmFtRWxlbWVudF9p ZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRN TFBhcmFtRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRp YyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5z SURPTUhUTUxQYXJhbUVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURP TU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENT U0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0 Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9 OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0Rh dGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxQcmVFbGVtZW50X2lkXTsg OyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MUHJl RWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25z dCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhU TUxQcmVFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxF bGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVT dHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJ RCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50 ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0g c0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MUXVvdGVFbGVtZW50X2lkXTsgOyA7IGQu bVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MUXVvdGVFbGVt ZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5z SUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFF1 b3RlRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxl bWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5 bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQo KSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVy ZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHND bGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTFNjcmlwdEVsZW1lbnRfaWRdOyA7IDsgZC5t UHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxTY3JpcHRFbGVt ZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5z SUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFNj cmlwdEVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVs ZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0 eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlE KCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRl cmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBz Q2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxTZWxlY3RFbGVtZW50X2lkXTsgOyA7IGQu bVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MU2VsZWN0RWxl bWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBu c0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxT ZWxlY3RFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxT ZWxlY3RFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU1hCTEZv cm1Db250cm9sPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVt ZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHls ZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgp LCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJm YWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0Ns YXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MU3BhY2VyRWxlbWVudF9pZF07IDsgOyBkLm1Q cm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTEVsZW1lbnQ+OjpH ZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAwOyBzdGF0aWMgY29uc3QgbnNJSUQgKmlu dGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRWxlbWVudD46 OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJ RCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQo KSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlw ZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fSFRNTFNwYW5FbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRl cmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRWxlbWVudD46OkdldElJRCgpOyBkLm1I YXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3Rb XSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxFbGVtZW50Pjo6R2V0SUlEKCksCiAg ICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5 cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBl SW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00z Tm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9 CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5m b19IVE1MU3R5bGVFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnND T01UeXBlSW5mbzxuc0lET01IVE1MU3R5bGVFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNz SW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewog ICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFN0eWxlRWxlbWVudD46OkdldElJRCgpLAogICAg Jm5zQ09NVHlwZUluZm88bnNJRE9NTGlua1N0eWxlPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURP TUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01F dmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJ RCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01D bGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MVGFibGVD YXB0aW9uRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlw ZUluZm88bnNJRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xh c3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7 CgogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ+OjpHZXRJ SUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwg Jm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZu c0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZv PG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNl X2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9N Q2xhc3NJbmZvX0hUTUxUYWJsZUNlbGxFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRl cmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MVGFibGVDZWxsRWxlbWVudD46OkdldElJ RCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJm YWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxUYWJsZUNlbGxFbGVt ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6 R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46Okdl dElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnND T01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9 IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5m b0RhdGFbZURPTUNsYXNzSW5mb19IVE1MVGFibGVDb2xFbGVtZW50X2lkXTsgOyA7IGQubVByb3Rv Q2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MVGFibGVDb2xFbGVtZW50 Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlE ICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFRhYmxl Q29sRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxl bWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5 bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQo KSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVy ZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKCgoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9 IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTFRhYmxlQ29sR3JvdXBFbGVtZW50X2lk XTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1M VGFibGVDb2xFbGVtZW50Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3Rh dGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88 bnNJRE9NSFRNTFRhYmxlQ29sRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88 bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVt ZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRU YXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwK ICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJ bmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fSFRNTFRhYmxlRWxlbWVu dF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9N SFRNTFRhYmxlRWxlbWVudD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0 YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZv PG5zSURPTUhUTUxUYWJsZUVsZW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5z SURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVu dENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFy Z2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAg MCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5m b0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxUYWJsZVJvd0VsZW1l bnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURP TUhUTUxUYWJsZVJvd0VsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAx OyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01IVE1MVGFibGVSb3dFbGVtZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURP TUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01F dmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJ RCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01D bGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19IVE1MVGFibGVT ZWN0aW9uRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlw ZUluZm88bnNJRE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xh c3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7 CgogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+OjpHZXRJ SUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKSwg Jm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0SUlEKCksICZu c0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NPTVR5cGVJbmZv PG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNl X2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9N Q2xhc3NJbmZvX0hUTUxUZXh0QXJlYUVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVy ZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxUZXh0QXJlYUVsZW1lbnQ+OjpHZXRJSUQo KTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFj ZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MVGV4dEFyZWFFbGVtZW50 Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxUZXh0QXJlYUVsZW1l bnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTEVsZW1lbnQ+OjpH ZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRWxlbWVudENTU0lubGluZVN0eWxlPjo6R2V0 SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0g aW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZv RGF0YVtlRE9NQ2xhc3NJbmZvX0hUTUxUaXRsZUVsZW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFp bkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxUaXRsZUVsZW1lbnQ+OjpHZXRJ SUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVy ZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MVGl0bGVFbGVtZW50 Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0 SUlEKCksICZuc0NPTVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJ RCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01U eXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGlu dGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0Rh dGFbZURPTUNsYXNzSW5mb19IVE1MVUxpc3RFbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5J bnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MVUxpc3RFbGVtZW50Pjo6R2V0SUlE KCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZh Y2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NSFRNTFVMaXN0RWxlbWVudD46 OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJ RCgpLCAmbnNDT01UeXBlSW5mbzxuc0lET01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQo KSwgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlw ZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fSFRNTFVua25vd25FbGVtZW50X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5J bnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01IVE1MRWxlbWVudD46OkdldElJRCgpOyBk Lm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xp c3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxFbGVtZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0hUTUxFbGVtZW50Pjo6R2V0SUlEKCksICZuc0NP TVR5cGVJbmZvPG5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZT46OkdldElJRCgpLCAmbnNDT01U eXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T00zTm9kZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0 OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNz SW5mb19IVE1MV0JSRWxlbWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5z Q09NVHlwZUluZm88bnNJRE9NSFRNTEVsZW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRl cmZhY2UgPSAwOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01IVE1MRWxlbWVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NTlNIVE1MRWxlbWVudD46OkdldElJRCgpLCAmbnNDT01UeXBlSW5mbzxuc0lE T01FbGVtZW50Q1NTSW5saW5lU3R5bGU+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9N RXZlbnRUYXJnZXQ+OjpHZXRJSUQoKSwgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJ SUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9N Q2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ1NTU3R5bGVS dWxlX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lE T01DU1NTdHlsZVJ1bGU+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0 aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01DU1NTdHlsZVJ1bGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fQ1NTQ2hhcnNldFJ1bGVfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVy ZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU0NoYXJzZXRSdWxlPjo6R2V0SUlEKCk7IGQu bUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlz dFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NQ1NTQ2hhcnNldFJ1bGU+OjpHZXRJSUQo KSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xh c3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ1NTSW1wb3J0UnVs ZV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9N Q1NTSW1wb3J0UnVsZT46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRp YyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5z SURPTUNTU0ltcG9ydFJ1bGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fQ1NTTWVkaWFSdWxlX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZh Y2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01DU1NNZWRpYVJ1bGU+OjpHZXRJSUQoKTsgZC5tSGFz Q2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10g PSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01DU1NNZWRpYVJ1bGU+OjpHZXRJSUQoKSwKICAw IH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZv RGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ1NTTmFtZVNwYWNlUnVsZV9p ZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQ1NT UnVsZT46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBu c0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU1J1 bGU+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoK ICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9f Q1NTUnVsZUxpc3RfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJ bmZvPG5zSURPTUNTU1J1bGVMaXN0Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0g MTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NQ1NTUnVsZUxpc3Q+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMg PSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0lu Zm9EYXRhW2VET01DbGFzc0luZm9fQ1NTR3JvdXBSdWxlUnVsZUxpc3RfaWRdOyA7IDsgZC5tUHJv dG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU1J1bGVMaXN0Pjo6R2V0 SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRl cmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NQ1NTUnVsZUxpc3Q+OjpH ZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5z RE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fTWVkaWFM aXN0X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lE T01NZWRpYUxpc3Q+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMg Y29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lE T01NZWRpYUxpc3Q+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2Vf bGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01D bGFzc0luZm9fU3R5bGVTaGVldExpc3RfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9 ICZuc0NPTVR5cGVJbmZvPG5zSURPTVN0eWxlU2hlZXRMaXN0Pjo6R2V0SUlEKCk7IGQubUhhc0Ns YXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0g ewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NU3R5bGVTaGVldExpc3Q+OjpHZXRJSUQoKSwKICAw IH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZv RGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ1NTU3R5bGVTaGVldF9pZF07 IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQ1NTU3R5 bGVTaGVldD46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25z dCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUNT U1N0eWxlU2hlZXQ+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2Vf bGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01D bGFzc0luZm9fQ1NTU3R5bGVEZWNsYXJhdGlvbl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJm YWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbj46OkdldElJRCgp OyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNl X2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU1N0eWxlRGVjbGFyYXRpb24+ OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTUzJQcm9wZXJ0aWVzPjo6R2V0 SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0NTUzJQcm9wZXJ0aWVzPjo6R2V0SUlE KCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNs YXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0NvbXB1dGVkQ1NT U3R5bGVEZWNsYXJhdGlvbl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09N VHlwZUluZm88bnNJRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFz c0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsK CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01DU1NTdHlsZURlY2xhcmF0aW9uPjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01DU1MyUHJvcGVydGllcz46OkdldElJRCgpLAogICAg Jm5zQ09NVHlwZUluZm88bnNJRE9NTlNDU1MyUHJvcGVydGllcz46OkdldElJRCgpLAogIDAgfTsg ZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRh ICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19ST0NTU1ByaW1pdGl2ZVZhbHVlX2lk XTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01DU1NQ cmltaXRpdmVWYWx1ZT46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRp YyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKCiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01DU1NQcmltaXRpdmVWYWx1ZT46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9 IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5m b0RhdGFbZURPTUNsYXNzSW5mb19DU1NWYWx1ZUxpc3RfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbklu dGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU1ZhbHVlTGlzdD46OkdldElJRCgpOyBk Lm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xp c3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUNTU1ZhbHVlTGlzdD46OkdldElJRCgp LAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFz c0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19DU1NSZWN0X2lkXTsg OyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01SZWN0Pjo6 R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICpp bnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NUmVjdD46OkdldElJ RCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01D bGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19DU1NSR0JDb2xv cl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9N UkdCQ29sb3I+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29u c3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01S R0JDb2xvcj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0 OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNz SW5mb19SYW5nZV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUlu Zm88bnNJRE9NUmFuZ2U+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0 aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01SYW5nZT46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNSYW5nZT46 OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsg bnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19UcmVl V2Fsa2VyX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxu c0lET01UcmVlV2Fsa2VyPjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3Rh dGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88 bnNJRE9NVHJlZVdhbGtlcj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNlcyA9IGludGVy ZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNzSW5mb0RhdGFb ZURPTUNsYXNzSW5mb19TZWxlY3Rpb25faWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9 ICZuc0NPTVR5cGVJbmZvPG5zSVNlbGVjdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVy ZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZu c0NPTVR5cGVJbmZvPG5zSVNlbGVjdGlvbj46OkdldElJRCgpLAogIDAgfTsgZC5tSW50ZXJmYWNl cyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRhICZkID0gc0NsYXNz SW5mb0RhdGFbZURPTUNsYXNzSW5mb19YVUxEb2N1bWVudF9pZF07IDsgOyBkLm1Qcm90b0NoYWlu SW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NWFVMRG9jdW1lbnQ+OjpHZXRJSUQoKTsg ZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9s aXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01YVUxEb2N1bWVudD46OkdldElJRCgp LAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTlNEb2N1bWVudD46OkdldElJRCgpLAogICAgJm5z Q09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRFdmVudD46OkdldElJRCgpLAogICAgJm5zQ09NVHlw ZUluZm88bnNJRE9NRG9jdW1lbnRWaWV3Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01Eb2N1bWVudFhCTD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRG9j dW1lbnRTdHlsZT46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRS YW5nZT46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnRUcmF2ZXJz YWw+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUV2ZW50VGFyZ2V0Pjo6R2V0 SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET00zTm9kZT46OkdldElJRCgpLAogIDAgfTsg ZC5tSW50ZXJmYWNlcyA9IGludGVyZmFjZV9saXN0OyB9CgogIHsgbnNET01DbGFzc0luZm9EYXRh ICZkID0gc0NsYXNzSW5mb0RhdGFbZURPTUNsYXNzSW5mb19YVUxFbGVtZW50X2lkXTsgOyA7IGQu bVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01YVUxFbGVtZW50Pjo6 R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICpp bnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NWFVMRWxlbWVudD46 OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnRUYXJnZXQ+OjpHZXRJSUQo KSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xh c3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fWFVMQ29tbWFuZERp c3BhdGNoZXJfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZv PG5zSURPTVhVTENvbW1hbmREaXNwYXRjaGVyPjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJm YWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5z Q09NVHlwZUluZm88bnNJRE9NWFVMQ29tbWFuZERpc3BhdGNoZXI+OjpHZXRJSUQoKSwKICAwIH07 IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0 YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fWFVMTm9kZUxpc3RfaWRdOyA7IDsg ZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTU5vZGVMaXN0Pjo6 R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICpp bnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTm9kZUxpc3Q+OjpH ZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5z RE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fWFVMTmFt ZWROb2RlTWFwX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5m bzxuc0lET01OYW1lZE5vZGVNYXA+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAw OyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01OYW1lZE5vZGVNYXA+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMg PSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0lu Zm9EYXRhW2VET01DbGFzc0luZm9fWFVMQXR0cl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJm YWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQXR0cj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0lu dGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAg ICZuc0NPTVR5cGVJbmZvPG5zSURPTUF0dHI+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFj ZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFz c0luZm9EYXRhW2VET01DbGFzc0luZm9fWFVMQ29udHJvbGxlcnNfaWRdOyA7IDsgZC5tUHJvdG9D aGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSUNvbnRyb2xsZXJzPjo6R2V0SUlEKCk7 IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMDsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2Vf bGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJQ29udHJvbGxlcnM+OjpHZXRJSUQoKSwK ICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJ bmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQm94T2JqZWN0X2lkXTsg OyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lCb3hPYmplY3Q+ OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQg KmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lCb3hPYmplY3Q+OjpH ZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5z RE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fVHJlZVNl bGVjdGlvbl9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88 bnNJVHJlZVNlbGVjdGlvbj46OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0 YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZv PG5zSVRyZWVTZWxlY3Rpb24+OjpHZXRJSUQoKSwKICAwIH07IGQubUludGVyZmFjZXMgPSBpbnRl cmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRh W2VET01DbGFzc0luZm9fVHJlZUNvbnRlbnRWaWV3X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRl cmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lUcmVlQ29udGVudFZpZXc+OjpHZXRJSUQoKTsgZC5t SGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0 W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lUcmVlQ29udGVudFZpZXc+OjpHZXRJSUQoKSwK ICAgICZuc0NPTVR5cGVJbmZvPG5zSVRyZWVWaWV3Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRl cmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBz Q2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0NyeXB0b19pZF07IDsgOyBkLm1Qcm90b0NoYWlu SW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9NQ3J5cHRvPjo6R2V0SUlEKCk7IGQubUhh c0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlEICppbnRlcmZhY2VfbGlzdFtd ID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NQ3J5cHRvPjo6R2V0SUlEKCksCiAgMCB9OyBk Lm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEg JmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0NSTUZPYmplY3RfaWRdOyA7IDsgZC5t UHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUNSTUZPYmplY3Q+OjpH ZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0aWMgY29uc3QgbnNJSUQgKmlu dGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01DUk1GT2JqZWN0Pjo6 R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBu c0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX1BrY3Mx MV9pZF07IDsgOyBkLm1Qcm90b0NoYWluSW50ZXJmYWNlID0gJm5zQ09NVHlwZUluZm88bnNJRE9N UGtjczExPjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0 IG5zSUlEICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NUGtj czExPjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0K CiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZv X1hNTFN0eWxlc2hlZXRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25faWRdOyA7IDsgZC5tUHJvdG9DaGFp bkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbj46 OkdldElJRCgpOyBkLm1IYXNDbGFzc0ludGVyZmFjZSA9IDA7IHN0YXRpYyBjb25zdCBuc0lJRCAq aW50ZXJmYWNlX2xpc3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTVByb2Nlc3NpbmdJ bnN0cnVjdGlvbj46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTGlua1N0eWxl Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJ RCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NM05vZGU+OjpHZXRJSUQoKSwKICAwIH07IGQu bUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQojIDIxNjAgIm5zRE9NQ2xhc3NJbmZvLmNw cCIKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAmZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0lu Zm9fQ2hyb21lV2luZG93X2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRlcmZhY2UgPSAmbnNDT01U eXBlSW5mbzxuc0lET01XaW5kb3c+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAw OyBzdGF0aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBl SW5mbzxuc0lET01XaW5kb3c+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUpT V2luZG93Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01XaW5kb3dJbnRlcm5h bD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NQ2hyb21lV2luZG93Pjo6R2V0 SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFJlY2VpdmVyPjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01FdmVudFRhcmdldD46OkdldElJRCgpLAogICAgJm5z Q09NVHlwZUluZm88bnNJRE9NVmlld0NTUz46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88 bnNJRE9NQWJzdHJhY3RWaWV3Pjo6R2V0SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50 ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RPTUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0 YVtlRE9NQ2xhc3NJbmZvX1JhbmdlRXhjZXB0aW9uX2lkXTsgOyA7IGQubVByb3RvQ2hhaW5JbnRl cmZhY2UgPSAmbnNDT01UeXBlSW5mbzxuc0lET01SYW5nZUV4Y2VwdGlvbj46OkdldElJRCgpOyBk Lm1IYXNDbGFzc0ludGVyZmFjZSA9IDE7IHN0YXRpYyBjb25zdCBuc0lJRCAqaW50ZXJmYWNlX2xp c3RbXSA9IHsKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTVJhbmdlRXhjZXB0aW9uPjo6R2V0SUlE KCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lFeGNlcHRpb24+OjpHZXRJSUQoKSwKICAwIH07IGQu bUludGVyZmFjZXMgPSBpbnRlcmZhY2VfbGlzdDsgfQoKICB7IG5zRE9NQ2xhc3NJbmZvRGF0YSAm ZCA9IHNDbGFzc0luZm9EYXRhW2VET01DbGFzc0luZm9fQ29udGVudExpc3RfaWRdOyA7IDsgZC5t UHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9u Pjo6R2V0SUlEKCk7IGQubUhhc0NsYXNzSW50ZXJmYWNlID0gMTsgc3RhdGljIGNvbnN0IG5zSUlE ICppbnRlcmZhY2VfbGlzdFtdID0gewogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NTm9kZUxpc3Q+ OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxDb2xsZWN0aW9uPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KCiAgeyBuc0RP TUNsYXNzSW5mb0RhdGEgJmQgPSBzQ2xhc3NJbmZvRGF0YVtlRE9NQ2xhc3NJbmZvX0ltYWdlRG9j dW1lbnRfaWRdOyA7IDsgZC5tUHJvdG9DaGFpbkludGVyZmFjZSA9ICZuc0NPTVR5cGVJbmZvPG5z SUltYWdlRG9jdW1lbnQ+OjpHZXRJSUQoKTsgZC5tSGFzQ2xhc3NJbnRlcmZhY2UgPSAxOyBzdGF0 aWMgY29uc3QgbnNJSUQgKmludGVyZmFjZV9saXN0W10gPSB7CiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01IVE1MRG9jdW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSUltYWdl RG9jdW1lbnQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTU5TSFRNTERvY3Vt ZW50Pjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01OU0RvY3VtZW50Pjo6R2V0 SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01Eb2N1bWVudEV2ZW50Pjo6R2V0SUlEKCks CiAgICAmbnNDT01UeXBlSW5mbzxuc0lET01Eb2N1bWVudFN0eWxlPjo6R2V0SUlEKCksCiAgICAm bnNDT01UeXBlSW5mbzxuc0lET01Eb2N1bWVudFZpZXc+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5 cGVJbmZvPG5zSURPTURvY3VtZW50UmFuZ2U+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZv PG5zSURPTURvY3VtZW50VHJhdmVyc2FsPjo6R2V0SUlEKCksCiAgICAmbnNDT01UeXBlSW5mbzxu c0lET01Eb2N1bWVudFhCTD46OkdldElJRCgpLAogICAgJm5zQ09NVHlwZUluZm88bnNJRE9NRXZl bnRUYXJnZXQ+OjpHZXRJSUQoKSwKICAgICZuc0NPTVR5cGVJbmZvPG5zSURPTTNOb2RlPjo6R2V0 SUlEKCksCiAgMCB9OyBkLm1JbnRlcmZhY2VzID0gaW50ZXJmYWNlX2xpc3Q7IH0KIyAyMjMwICJu c0RPTUNsYXNzSW5mby5jcHAiCiAgRGVmaW5lU3RhdGljSlNWYWxzKGN4KTsKCiAgUFJJbnQzMiBp OwoKICBmb3IgKGkgPSAwOyBpIDwgZURPTUNsYXNzSW5mb0lEQ291bnQ7ICsraSkgewogICAgUmVn aXN0ZXJDbGFzc05hbWUoaSk7CiAgfQoKICBmb3IgKGkgPSAwOyBpIDwgZURPTUNsYXNzSW5mb0lE Q291bnQ7ICsraSkgewogICAgUmVnaXN0ZXJDbGFzc1Byb3RvcyhpKTsKICB9CgogIFJlZ2lzdGVy RXh0ZXJuYWxDbGFzc2VzKCk7CgogIHNJc0luaXRpYWxpemVkID0gMTsKCiAgcmV0dXJuIDA7Cn0K CgpQUkludDMyCm5zRE9NQ2xhc3NJbmZvOjpHZXRBcnJheUluZGV4RnJvbUlkKEpTQ29udGV4dCAq Y3gsIGpzdmFsIGlkLCBQUkJvb2wgKmFJc051bWJlcikKewogIGpzZG91YmxlIGFycmF5X2luZGV4 OwoKICBpZiAoYUlzTnVtYmVyKSB7CiAgICAqYUlzTnVtYmVyID0gMDsKICB9CgogIGlmICghOjpK U19WYWx1ZVRvTnVtYmVyKGN4LCBpZCwgJmFycmF5X2luZGV4KSkgewogICAgcmV0dXJuIC0xOwog IH0KCiAganNpbnQgaSA9IC0xOwoKICBpZiAoISgoKChfX2V4dGVuc2lvbl9fICh7IGpzX2llZWVf ZG91YmxlX3NoYXBlX3R5cGUgc2hfdTsgc2hfdS52YWx1ZSA9IChhcnJheV9pbmRleCk7IHNoX3Uu cGFydHMubXN3OyB9KSkgJiAweDdmZjAwMDAwKSAhPSAweDdmZjAwMDAwKSAmJiAhKChfX2V4dGVu c2lvbl9fICh7IGpzX2llZWVfZG91YmxlX3NoYXBlX3R5cGUgc2hfdTsgc2hfdS52YWx1ZSA9IChh cnJheV9pbmRleCk7IHNoX3UucGFydHMubXN3OyB9KSkgPT0gMHg4MDAwMDAwMCAmJiAoX19leHRl bnNpb25fXyAoeyBqc19pZWVlX2RvdWJsZV9zaGFwZV90eXBlIHNoX3U7IHNoX3UudmFsdWUgPSAo YXJyYXlfaW5kZXgpOyBzaF91LnBhcnRzLmxzdzsgfSkpID09IDApICYmICgoYXJyYXlfaW5kZXgp ID09IChpID0gKGpzaW50KShhcnJheV9pbmRleCkpKSkpIHsKICAgIHJldHVybiAtMTsKICB9Cgog IGlmIChhSXNOdW1iZXIpIHsKICAgICphSXNOdW1iZXIgPSAxOwogIH0KCiAgcmV0dXJuIGk7Cn0K Cm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpHZXRJbnRlcmZhY2VzKFBSVWludDMyICphQ291bnQs IG5zSUlEICoqKmFBcnJheSkKewogIFBSVWludDMyIGNvdW50ID0gMDsKCiAgd2hpbGUgKG1EYXRh LT5tSW50ZXJmYWNlc1tjb3VudF0pIHsKICAgIGNvdW50Kys7CiAgfQoKICAqYUNvdW50ID0gY291 bnQ7CgogIGlmICghY291bnQpIHsKICAgICphQXJyYXkgPSAwOwoKICAgIHJldHVybiAwOwogIH0K CiAgKmFBcnJheSA9IHN0YXRpY19jYXN0PCBuc0lJRCAqKiA+KG5zTWVtb3J5OjpBbGxvYyhjb3Vu dCAqIHNpemVvZihuc0lJRCAqKSkpOwogIGRvIHsgaWYgKCEoKmFBcnJheSkpIHsgOyByZXR1cm4g KChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOyB9IH0gd2hpbGUgKDApOwoKICBQUlVpbnQzMiBpOwog IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICBuc0lJRCAqaWlkID0gc3RhdGljX2Nh c3Q8IG5zSUlEICogPihuc01lbW9yeTo6Q2xvbmUobURhdGEtPm1JbnRlcmZhY2VzW2ldLCBzaXpl b2YobnNJSUQpKSk7CgoKICAgIGlmICghaWlkKSB7CiAgICAgIGRvIHsgUFJJbnQzMiBpdGVyXyA9 IFBSSW50MzIoKGkpKTsgd2hpbGUgKC0taXRlcl8gPj0gMCkgbnNNZW1vcnk6OkZyZWUoKCgqYUFy cmF5KSlbaXRlcl9dKTsgbnNNZW1vcnk6OkZyZWUoKCgqYUFycmF5KSkpOyB9IHdoaWxlICgwKTsK CiAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICB9CgogICAgKigoKmFB cnJheSkgKyBpKSA9IGlpZDsKICB9CgogIHJldHVybiAwOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNz SW5mbzo6R2V0SGVscGVyRm9yTGFuZ3VhZ2UoUFJVaW50MzIgbGFuZ3VhZ2UsIG5zSVN1cHBvcnRz ICoqX3JldHZhbCkKewogIGlmIChsYW5ndWFnZSA9PSBuc0lQcm9ncmFtbWluZ0xhbmd1YWdlOjpK QVZBU0NSSVBUKSB7CiAgICAqX3JldHZhbCA9IHN0YXRpY19jYXN0PCBuc0lYUENTY3JpcHRhYmxl ICogPih0aGlzKTsKCiAgICAoKl9yZXR2YWwpLT5BZGRSZWYoKTsKICB9IGVsc2UgewogICAgKl9y ZXR2YWwgPSAwOwogIH0KCiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpH ZXRDb250cmFjdElEKGNoYXIgKiphQ29udHJhY3RJRCkKewogICphQ29udHJhY3RJRCA9IDA7Cgog IHJldHVybiAwOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6R2V0Q2xhc3NEZXNjcmlwdGlv bihjaGFyICoqYUNsYXNzRGVzY3JpcHRpb24pCnsKICByZXR1cm4gR2V0Q2xhc3NOYW1lKGFDbGFz c0Rlc2NyaXB0aW9uKTsKfQoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OkdldENsYXNzSUQobnND SUQgKiphQ2xhc3NJRCkKewogICphQ2xhc3NJRCA9IDA7CiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0 Cm5zRE9NQ2xhc3NJbmZvOjpHZXRDbGFzc0lETm9BbGxvYyhuc0NJRCAqYUNsYXNzSUQpCnsKICBy ZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA0MDExMUwpOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5m bzo6R2V0SW1wbGVtZW50YXRpb25MYW5ndWFnZShQUlVpbnQzMiAqYUltcGxMYW5ndWFnZSkKewog ICphSW1wbExhbmd1YWdlID0gbnNJUHJvZ3JhbW1pbmdMYW5ndWFnZTo6Q1BMVVNQTFVTOwoKICBy ZXR1cm4gMDsKfQoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OkdldEZsYWdzKFBSVWludDMyICph RmxhZ3MpCnsKICAqYUZsYWdzID0gKG5zSUNsYXNzSW5mbzo6TUFJTl9USFJFQURfT05MWSB8IG5z SUNsYXNzSW5mbzo6RE9NX09CSkVDVCk7CgogIHJldHVybiAwOwp9CgoKCm5zcmVzdWx0Cm5zRE9N Q2xhc3NJbmZvOjpHZXRDbGFzc05hbWUoY2hhciAqKmFDbGFzc05hbWUpCnsKICAqYUNsYXNzTmFt ZSA9IG5zQ1JUOjpzdHJkdXAobURhdGEtPm1OYW1lKTsKCiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0 Cm5zRE9NQ2xhc3NJbmZvOjpHZXRTY3JpcHRhYmxlRmxhZ3MoUFJVaW50MzIgKmFGbGFncykKewog ICphRmxhZ3MgPSBtRGF0YS0+bVNjcmlwdGFibGVGbGFnczsKCiAgcmV0dXJuIDA7Cn0KCm5zcmVz dWx0Cm5zRE9NQ2xhc3NJbmZvOjpQcmVDcmVhdGUobnNJU3VwcG9ydHMgKm5hdGl2ZU9iaiwgSlND b250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqZ2xvYmFsT2Jq LCBKU09iamVjdCAqKnBhcmVudE9iaikKewogIDsKCiAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw MGZmZmZMKTsKfQoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OkNyZWF0ZShuc0lYUENvbm5lY3RX cmFwcGVkTmF0aXZlICp3cmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgIEpTQ29udGV4dCAq Y3gsIEpTT2JqZWN0ICpvYmopCnsKICA7CgogIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZm TCk7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpQb3N0Q3JlYXRlKG5zSVhQQ29ubmVjdFdy YXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ29udGV4 dCAqY3gsIEpTT2JqZWN0ICpvYmopCnsKICBzdGF0aWMgY29uc3QgbnNJSUQgKnNTdXBwb3J0c0lJ RCA9ICZuc0NPTVR5cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0SUlEKCk7CgoKICBpZiAobURhdGEt Pm1Qcm90b0NoYWluSW50ZXJmYWNlID09IHNTdXBwb3J0c0lJRCB8fAogICAgICAhbURhdGEtPm1Q cm90b0NoYWluSW50ZXJmYWNlKSB7CiAgICByZXR1cm4gMDsKICB9CgogIEpTT2JqZWN0ICpwcm90 byA9IDA7CgogIHdyYXBwZXItPkdldEpTT2JqZWN0UHJvdG90eXBlKCZwcm90byk7CgogIEpTT2Jq ZWN0ICpwcm90b19wcm90byA9IDo6SlNfR2V0UHJvdG90eXBlKGN4LCBwcm90byk7CgogIEpTQ2xh c3MgKnByb3RvX3Byb3RvX2NsYXNzID0gSlNfR2V0Q2xhc3MoY3gsIHByb3RvX3Byb3RvKTsKCiAg aWYgKCFzT2JqZWN0Q2xhc3MpIHsKICAgIHNPYmplY3RDbGFzcyA9IHByb3RvX3Byb3RvX2NsYXNz OwogIH0KCiAgaWYgKHByb3RvX3Byb3RvX2NsYXNzICE9IHNPYmplY3RDbGFzcykgewoKCgoKICAg IHJldHVybiAwOwogIH0KIyAyNDU5ICJuc0RPTUNsYXNzSW5mby5jcHAiCiAgSlNPYmplY3QgKmds b2JhbCA9IEdldEdsb2JhbEpTT2JqZWN0KGN4LCBvYmopOwoKICBqc3ZhbCB2YWw7CiAgaWYgKCE6 OkpTX0dldFByb3BlcnR5KGN4LCBnbG9iYWwsIG1EYXRhLT5tTmFtZSwgJnZhbCkpIHsKICAgIHJl dHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgfQoKICByZXR1cm4gMDsKfQoKbnNyZXN1 bHQKbnNET01DbGFzc0luZm86OkFkZFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUg KndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09i amVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJCb29sICpfcmV0dmFsKQp7CiAgOwoKICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZm ZkwpOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6RGVsUHJvcGVydHkobnNJWFBDb25uZWN0 V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQUkJvb2wgKl9yZXR2YWwpCnsKICA7CgogIHJldHVybiAoKG5zcmVz dWx0KSAweDgwMDBmZmZmTCk7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpHZXRQcm9wZXJ0 eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2 cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqX3JldHZhbCkKewogIDsKCiAg cmV0dXJuIDA7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpTZXRQcm9wZXJ0eShuc0lYUENv bm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqX3JldHZhbCkKewogIDsKCiAgcmV0dXJuICgo bnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsKfQoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86OkVudW1l cmF0ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAog ICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIFBSQm9vbCAqX3JldHZhbCkK ewogIGlmICghc1NlY01hbikKICAgIHJldHVybiAwOwoKCiAgbnNyZXN1bHQgcnYgPQogICAgc1Nl Y01hbi0+Q2hlY2tQcm9wZXJ0eUFjY2VzcyhjeCwgb2JqLCBtRGF0YS0+bU5hbWUsIHNFbnVtZXJh dGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVhQQ1NlY3VyaXR5TWFu YWdlcjo6QUNDRVNTX0dFVF9QUk9QRVJUWSk7CgogIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSB7 CgogICAgKl9yZXR2YWwgPSAwOwogIH0KCiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xh c3NJbmZvOjpOZXdFbnVtZXJhdGUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2Jq LCBQUlVpbnQzMiBlbnVtX29wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICpz dGF0ZXAsIGpzaWQgKmlkcCwgUFJCb29sICpfcmV0dmFsKQp7CiAgOwoKICByZXR1cm4gKChuc3Jl c3VsdCkgMHg4MDAwZmZmZkwpOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6UmVzb2x2ZUNv bnN0cnVjdG9yKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwKQp7CiAgSlNPYmplY3QgKmdsb2JhbCA9 IEdldEdsb2JhbEpTT2JqZWN0KGN4LCBvYmopOwoKICBqc3ZhbCB2YWw7CiAgaWYgKCE6OkpTX0dl dFByb3BlcnR5KGN4LCBnbG9iYWwsIG1EYXRhLT5tTmFtZSwgJnZhbCkpIHsKICAgIHJldHVybiAo KG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgfQoKICBpZiAoISghKCgodmFsKSAmICgoKEpTVWlu dDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDApIHx8ICgodmFsKSA9PSAoKGpzdmFsKSgwKSkpKSkg ewoKCgoKCiAgICBKU1N0cmluZyAqc3RyID0gKChKU1N0cmluZyAqKSgodm9pZCAqKSgoc0NvbnN0 cnVjdG9yX2lkKSAmIH4oanN2YWwpKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpKSk7CiAgICBp ZiAoITo6SlNfU2V0VUNQcm9wZXJ0eShjeCwgb2JqLCA6OkpTX0dldFN0cmluZ0NoYXJzKHN0ciks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OkpTX0dldFN0cmluZ0xlbmd0aChzdHIpLCAm dmFsKSkgewogICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogICAgfQoKICAg ICpvYmpwID0gb2JqOwogIH0KCiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZv OjpOZXdSZXNvbHZlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4 dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlk LCBQUlVpbnQzMiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipv YmpwLCBQUkJvb2wgKl9yZXR2YWwpCnsKICBpZiAoaWQgPT0gc0NvbnN0cnVjdG9yX2lkICYmICEo ZmxhZ3MgJiAweDAyKSkgewogICAgcmV0dXJuIFJlc29sdmVDb25zdHJ1Y3RvcihjeCwgb2JqLCBv YmpwKTsKICB9CgogIHJldHVybiAwOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6Q29udmVy dChuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAg ICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBQUlVpbnQzMiB0eXBlLCBqc3ZhbCAq dnAsCiAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqX3JldHZhbCkKewogIDsKCiAgcmV0 dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsKfQoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86 OkZpbmFsaXplKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAq Y3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqKQp7CiAgOwoKICByZXR1 cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6 Q2hlY2tBY2Nlc3MobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0 ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlk LCBQUlVpbnQzMiBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwLCBQ UkJvb2wgKl9yZXR2YWwpCnsKICBQUlVpbnQzMiBtb2RlX3R5cGUgPSBtb2RlICYgKEpTQUNDX1dS SVRFIC0gMSk7CgogIGlmICgobW9kZV90eXBlID09IEpTQUNDX1dBVENIIHx8CiAgICAgICBtb2Rl X3R5cGUgPT0gSlNBQ0NfUFJPVE8gfHwKICAgICAgIG1vZGVfdHlwZSA9PSBKU0FDQ19QQVJFTlQp CiAgICAgICYmIHNTZWNNYW4pIHsKCiAgICBKU09iamVjdCAqcmVhbF9vYmogPSAwOwogICAgbnNy ZXN1bHQgcnYgPSB3cmFwcGVyLT5HZXRKU09iamVjdCgmcmVhbF9vYmopOwogICAgZG8geyBpZiAo ISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsK CiAgICBydiA9CiAgICAgIHNTZWNNYW4tPkNoZWNrUHJvcGVydHlBY2Nlc3MoY3gsIHJlYWxfb2Jq LCBtRGF0YS0+bU5hbWUsIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z SVhQQ1NlY3VyaXR5TWFuYWdlcjo6QUNDRVNTX0dFVF9QUk9QRVJUWSk7CgogICAgaWYgKCgocnYp ICYgMHg4MDAwMDAwMCkpIHsKCiAgICAgICpfcmV0dmFsID0gMDsKICAgIH0KICB9CgogIHJldHVy biAwOwp9Cgpuc3Jlc3VsdApuc0RPTUNsYXNzSW5mbzo6Q2FsbChuc0lYUENvbm5lY3RXcmFwcGVk TmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICBKU09i amVjdCAqb2JqLCBQUlVpbnQzMiBhcmdjLCBqc3ZhbCAqYXJndiwganN2YWwgKnZwLAogICAgICAg ICAgICAgICAgICAgICBQUkJvb2wgKl9yZXR2YWwpCnsKICA7CgogIHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDBmZmZmTCk7Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpDb25zdHJ1Y3QobnNJ WFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBQUlVpbnQzMiBhcmdjLCBqc3ZhbCAqYXJn diwKICAgICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCkK ewogIDsKCiAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsKfQoKbnNyZXN1bHQKbnNE T01DbGFzc0luZm86Okhhc0luc3RhbmNlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAq b2JqLCBqc3ZhbCB2YWwsIFBSQm9vbCAqYnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ UkJvb2wgKl9yZXR2YWwpCnsKICA7CgogIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7 Cn0KCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZvOjpNYXJrKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRp dmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0 ICpvYmosIHZvaWQgKmFyZywgUFJVaW50MzIgKl9yZXR2YWwpCnsKICA7CgogIHJldHVybiAoKG5z cmVzdWx0KSAweDgwMDBmZmZmTCk7Cn0KCgoKbnNJQ2xhc3NJbmZvICoKbnNET01DbGFzc0luZm86 OkdldENsYXNzSW5mb0luc3RhbmNlKG5zRE9NQ2xhc3NJbmZvSUQgYUlEKQp7CiAgaWYgKGFJRCA+ PSBlRE9NQ2xhc3NJbmZvSURDb3VudCkgewogICAgOwoKICAgIHJldHVybiAwOwogIH0KCiAgaWYg KCFzSXNJbml0aWFsaXplZCkgewogICAgbnNyZXN1bHQgcnYgPSBJbml0KCk7CgogICAgZG8geyBp ZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiAwOyB9IH0gd2hpbGUgKDAp OwogIH0KCiAgaWYgKCFzQ2xhc3NJbmZvRGF0YVthSURdLm1DYWNoZWRDbGFzc0luZm8pIHsKICAg IG5zRE9NQ2xhc3NJbmZvRGF0YSYgZGF0YSA9IHNDbGFzc0luZm9EYXRhW2FJRF07CgogICAgZGF0 YS5tQ2FjaGVkQ2xhc3NJbmZvID0gZGF0YS51Lm1Db25zdHJ1Y3RvckZwdHIoJmRhdGEpOwogICAg ZG8geyBpZiAoIShkYXRhLm1DYWNoZWRDbGFzc0luZm8pKSB7IDsgcmV0dXJuIDA7IH0gfSB3aGls ZSAoMCk7CgogICAgKGRhdGEubUNhY2hlZENsYXNzSW5mbyktPkFkZFJlZigpOwogIH0KCiAgOwoK CiAgbnNJQ2xhc3NJbmZvICpjbGFzc2luZm8gPSBzQ2xhc3NJbmZvRGF0YVthSURdLm1DYWNoZWRD bGFzc0luZm87CgogIChjbGFzc2luZm8pLT5BZGRSZWYoKTsKCiAgcmV0dXJuIGNsYXNzaW5mbzsK fQoKCm5zSUNsYXNzSW5mbyAqCm5zRE9NQ2xhc3NJbmZvOjpHZXRDbGFzc0luZm9JbnN0YW5jZShu c0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQp7CiAgOwoKCgogIGlmICghYURhdGEtPm1DYWNoZWRD bGFzc0luZm8pIHsKICAgIGlmIChhRGF0YS0+dS5tRXh0ZXJuYWxDb25zdHJ1Y3RvckZwdHIpIHsK ICAgICAgYURhdGEtPm1DYWNoZWRDbGFzc0luZm8gPQogICAgICAgIGFEYXRhLT51Lm1FeHRlcm5h bENvbnN0cnVjdG9yRnB0cihhRGF0YS0+bU5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgYURhdGEt Pm1DYWNoZWRDbGFzc0luZm8gPSBuc0RPTUdlbmVyaWNTSDo6ZG9DcmVhdGUoYURhdGEpOwogICAg fQogICAgZG8geyBpZiAoIShhRGF0YS0+bUNhY2hlZENsYXNzSW5mbykpIHsgOyByZXR1cm4gMDsg fSB9IHdoaWxlICgwKTsKCiAgICAoYURhdGEtPm1DYWNoZWRDbGFzc0luZm8pLT5BZGRSZWYoKTsK ICAgIGFEYXRhLT5tQ2FjaGVkQ2xhc3NJbmZvID0gKG5zSUNsYXNzSW5mbyopKFB0ckJpdHMoYURh dGEtPm1DYWNoZWRDbGFzc0luZm8pIHwgMHgxKTsKICB9CgogIG5zSUNsYXNzSW5mbyAqY2xhc3Np bmZvID0gKG5zSUNsYXNzSW5mbyopKFB0ckJpdHMoYURhdGEtPm1DYWNoZWRDbGFzc0luZm8pICYg fjB4MSk7CgogIChjbGFzc2luZm8pLT5BZGRSZWYoKTsKCiAgcmV0dXJuIGNsYXNzaW5mbzsKfQoK CnZvaWQKbnNET01DbGFzc0luZm86OlNodXREb3duKCkKewogIGlmIChzQ2xhc3NJbmZvRGF0YVsw XS51Lm1Db25zdHJ1Y3RvckZwdHIpIHsKICAgIFBSVWludDMyIGk7CgogICAgZm9yIChpID0gMDsg aSA8IGVET01DbGFzc0luZm9JRENvdW50OyBpKyspIHsKICAgICAgZG8geyBpZiAoc0NsYXNzSW5m b0RhdGFbaV0ubUNhY2hlZENsYXNzSW5mbykgeyAoc0NsYXNzSW5mb0RhdGFbaV0ubUNhY2hlZENs YXNzSW5mbyktPlJlbGVhc2UoKTsgKHNDbGFzc0luZm9EYXRhW2ldLm1DYWNoZWRDbGFzc0luZm8p ID0gMDsgfSB9IHdoaWxlICgwKTsKICAgIH0KICB9CgogIHNUb3BfaWQgPSAoKChqc3ZhbCkoMCAt ICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNTY3JvbGxiYXJzX2lkID0gKCgo anN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzTG9jYXRpb25f aWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHND b21wb25lbnRzX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwg MHgxKTsKICBzQ29uc3RydWN0b3JfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzAp KSkgPDwgMSkgfCAweDEpOwogIHNfY29udGVudF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkx IDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc0NvbnRlbnRfaWQgPSAoKChqc3ZhbCkoMCAtICgo anN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNTaWRlYmFyX2lkID0gKCgoanN2YWwp KDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzTWVudWJhcl9pZCA9ICgo KGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc1Rvb2xiYXJf aWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNM b2NhdGlvbmJhcl9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8 IDB4MSk7CiAgc1BlcnNvbmFsYmFyX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMw KSkpIDw8IDEpIHwgMHgxKTsKICBzU3RhdHVzYmFyX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFs KTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzRGlyZWN0b3JpZXNfaWQgPSAoKChqc3ZhbCko MCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNDb250cm9sbGVyc19pZCA9 ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc0xlbmd0 aF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAg c0lubmVySGVpZ2h0X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEp IHwgMHgxKTsKICBzSW5uZXJXaWR0aF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgz MCkpKSA8PCAxKSB8IDB4MSk7CiAgc091dGVySGVpZ2h0X2lkID0gKCgoanN2YWwpKDAgLSAoKGpz dmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT3V0ZXJXaWR0aF9pZCA9ICgoKGpzdmFs KSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc1NjcmVlblhfaWQgPSAo KChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNTY3JlZW5Z X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBz U3RhdHVzX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgx KTsKICBzTmFtZV9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8 IDB4MSk7CiAgc09ubW91c2Vkb3duX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMw KSkpIDw8IDEpIHwgMHgxKTsKICBzT25tb3VzZXVwX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFs KTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT25jbGlja19pZCA9ICgoKGpzdmFsKSgwIC0g KChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc09uY29udGV4dG1lbnVfaWQgPSAo KChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNPbm1vdXNl b3Zlcl9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7 CiAgc09ubW91c2VvdXRfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwg MSkgfCAweDEpOwogIHNPbmtleWRvd25faWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAo MzApKSkgPDwgMSkgfCAweDEpOwogIHNPbmtleXVwX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFs KTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT25rZXlwcmVzc19pZCA9ICgoKGpzdmFsKSgw IC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc09ubW91c2Vtb3ZlX2lkID0g KCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT25mb2N1 c19pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAg c09uYmx1cl9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4 MSk7CiAgc09uc3VibWl0X2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8 IDEpIHwgMHgxKTsKICBzT25yZXNldF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgz MCkpKSA8PCAxKSB8IDB4MSk7CiAgc09uY2hhbmdlX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFs KTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT25zZWxlY3RfaWQgPSAoKChqc3ZhbCkoMCAt ICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNPbmxvYWRfaWQgPSAoKChqc3Zh bCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNPbnVubG9hZF9pZCA9 ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc09uYWJv cnRfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwog IHNPbmVycm9yX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwg MHgxKTsKICBzT25wYWludF9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8 PCAxKSB8IDB4MSk7CiAgc09ucmVzaXplX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwg KDMwKSkpIDw8IDEpIHwgMHgxKTsKICBzT25zY3JvbGxfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2 YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNTY3JvbGxJbnRvVmlld19pZCA9ICgoKGpz dmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc1Njcm9sbFhfaWQg PSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNTY3Jv bGxZX2lkID0gKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsK ICBzT3Blbl9pZCA9ICgoKGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4 MSk7CiAgc0l0ZW1faWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkg fCAweDEpOwogIHNFbnVtZXJhdGVfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzAp KSkgPDwgMSkgfCAweDEpOwogIHNOYXZpZ2F0b3JfaWQgPSAoKChqc3ZhbCkoMCAtICgoanN2YWwp MSA8PCAoMzApKSkgPDwgMSkgfCAweDEpOwogIHNEb2N1bWVudF9pZCA9ICgoKGpzdmFsKSgwIC0g KChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc1dpbmRvd19pZCA9ICgoKGpzdmFs KSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CiAgc0ZyYW1lc19pZCA9ICgo KGpzdmFsKSgwIC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSk7CgogIGRvIHsgaWYg KHNYUENvbm5lY3QpIHsgKHNYUENvbm5lY3QpLT5SZWxlYXNlKCk7IChzWFBDb25uZWN0KSA9IDA7 IH0gfSB3aGlsZSAoMCk7CiAgZG8geyBpZiAoc1NlY01hbikgeyAoc1NlY01hbiktPlJlbGVhc2Uo KTsgKHNTZWNNYW4pID0gMDsgfSB9IHdoaWxlICgwKTsKfQoKCnN0YXRpYyBjb25zdCBuc0lYUENv bm5lY3RXcmFwcGVkTmF0aXZlICpjYWNoZWRfd3JhcHBlcjsKc3RhdGljIGNvbnN0IEpTQ29udGV4 dCAqY2FjaGVkX2N4OwoKdm9pZCBJbnZhbGlkYXRlQ29udGV4dEFuZFdyYXBwZXJDYWNoZSgpCnsK ICBjYWNoZWRfd3JhcHBlciA9IDA7CiAgY2FjaGVkX2N4ID0gMDsKfQoKCgoKCnN0YXRpYyBpbmxp bmUgUFJCb29sCm5lZWRzU2VjdXJpdHlDaGVjayhKU0NvbnRleHQgKmN4LCBuc0lYUENvbm5lY3RX cmFwcGVkTmF0aXZlICp3cmFwcGVyKQp7CgoKCgoKCgogIGlmIChjeCAhPSBjYWNoZWRfY3ggfHwg d3JhcHBlciAhPSBjYWNoZWRfd3JhcHBlcikgewogICAgY2FjaGVkX2N4ID0gMDsKICAgIGNhY2hl ZF93cmFwcGVyID0gMDsKCiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZlOwogICAgd3Jh cHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICAgIG5zQ09NUHRyPG5z SVNjcmlwdEdsb2JhbE9iamVjdD4gc2dvKGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwoKICAg IGlmICghc2dvKSB7CiAgICAgIDsKCiAgICAgIHJldHVybiAxOwogICAgfQoKICAgIG5zQ09NUHRy PG5zSVNjcmlwdENvbnRleHQ+IG90aGVyU2NyaXB0Q29udGV4dDsKICAgIHNnby0+R2V0Q29udGV4 dChnZXR0ZXJfQWRkUmVmcyhvdGhlclNjcmlwdENvbnRleHQpKTsKCiAgICBpZiAoIW90aGVyU2Ny aXB0Q29udGV4dCkgewogICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBpZiAoY3ggIT0gKEpTQ29u dGV4dCAqKW90aGVyU2NyaXB0Q29udGV4dC0+R2V0TmF0aXZlQ29udGV4dCgpKSB7CiAgICAgIHJl dHVybiAxOwogICAgfQogIH0KCgoKICBKU1N0YWNrRnJhbWUgKmZwID0gMDsKICBKU09iamVjdCAq ZnBfb2JqID0gMDsKCiAgZG8gewogICAgZnAgPSA6OkpTX0ZyYW1lSXRlcmF0b3IoY3gsICZmcCk7 CgogICAgaWYoIWZwKSB7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGZwX29iaiA9IDo6SlNfR2V0 RnJhbWVGdW5jdGlvbk9iamVjdChjeCwgZnApOwogIH0gd2hpbGUgKCFmcF9vYmopOwoKICBpZiAo ZnBfb2JqKSB7CiAgICBKU09iamVjdCAqZ2xvYmFsID0gR2V0R2xvYmFsSlNPYmplY3QoY3gsIGZw X29iaik7CgogICAgSlNPYmplY3QgKndyYXBwZXJfb2JqID0gMDsKICAgIHdyYXBwZXItPkdldEpT T2JqZWN0KCZ3cmFwcGVyX29iaik7CgogICAgaWYgKGdsb2JhbCAhPSB3cmFwcGVyX29iaikgewog ICAgICByZXR1cm4gMTsKICAgIH0KICB9CgogIGNhY2hlZF9jeCA9IGN4OwogIGNhY2hlZF93cmFw cGVyID0gd3JhcHBlcjsKCiAgcmV0dXJuIDA7Cn0KCgoKCm5zcmVzdWx0Cm5zRE9NQ2xhc3NJbmZv Ojpkb0NoZWNrUHJvcGVydHlBY2Nlc3MoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2 YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJWFBDb25uZWN0 V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUlVpbnQzMiBhY2Nlc3NNb2RlLCBQUkJvb2wgaXNXaW5kb3cpCnsKICBpZiAoIXNTZWNN YW4pIHsKICAgIHJldHVybiAwOwogIH0KCgoKICBpZiAoaWQgPT0gc0NvbXBvbmVudHNfaWQgJiYK ICAgICAgYWNjZXNzTW9kZSA9PSBuc0lYUENTZWN1cml0eU1hbmFnZXI6OkFDQ0VTU19HRVRfUFJP UEVSVFkgJiYgaXNXaW5kb3cpIHsKICAgIHJldHVybiAwOwogIH0KCiAgbnNDT01QdHI8bnNJU3Vw cG9ydHM+IG5hdGl2ZTsKICB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMobmF0aXZl KSk7CgogIG5zQ09NUHRyPG5zSVNjcmlwdEdsb2JhbE9iamVjdD4gc2dvKGRvX1F1ZXJ5SW50ZXJm YWNlKG5hdGl2ZSkpOwoKICBpZiAoIXNnbykgewogICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRv Yyhkb19RdWVyeUludGVyZmFjZShuYXRpdmUpKTsKICAgIGRvIHsgaWYgKCEoZG9jKSkgeyA7IHJl dHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgZG9jLT5H ZXRTY3JpcHRHbG9iYWxPYmplY3QoZ2V0dGVyX0FkZFJlZnMoc2dvKSk7CgogICAgaWYgKCFzZ28p IHsKIyAyOTMwICJuc0RPTUNsYXNzSW5mby5jcHAiCiAgICAgIHJldHVybiAwOwogICAgfQogIH0K CiAgbnNDT01QdHI8bnNJU2NyaXB0Q29udGV4dD4gc2N4OwogIHNnby0+R2V0Q29udGV4dChnZXR0 ZXJfQWRkUmVmcyhzY3gpKTsKCiAgaWYgKCFzY3ggfHwgKChzY3gtPklzQ29udGV4dEluaXRpYWxp emVkKCkpICYgMHg4MDAwMDAwMCkpIHsKICAgIHJldHVybiAwOwogIH0KCiAgSlNPYmplY3QgKmds b2JhbCA9IHNnby0+R2V0R2xvYmFsSlNPYmplY3QoKTsKCiAgcmV0dXJuIHNTZWNNYW4tPkNoZWNr UHJvcGVydHlBY2Nlc3MoY3gsIGdsb2JhbCwgbURhdGEtPm1OYW1lLCBpZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NNb2RlKTsKfQoKbnNyZXN1bHQKbnNXaW5k b3dTSDo6UHJlQ3JlYXRlKG5zSVN1cHBvcnRzICpuYXRpdmVPYmosIEpTQ29udGV4dCAqIGN4LAog ICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKiBnbG9iYWxPYmosIEpTT2JqZWN0ICogKnBh cmVudE9iaikKewojIDI5NjMgIm5zRE9NQ2xhc3NJbmZvLmNwcCIKICBuc0NPTVB0cjxuc0lTY3Jp cHRHbG9iYWxPYmplY3Q+IHNnbyhkb19RdWVyeUludGVyZmFjZShuYXRpdmVPYmopKTsKICA7Cgog IGlmIChzZ28pIHsKICAgICpwYXJlbnRPYmogPSBzZ28tPkdldEdsb2JhbEpTT2JqZWN0KCk7Cgog ICAgaWYgKCpwYXJlbnRPYmopIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfQoKCgoKCiAgKnBh cmVudE9iaiA9IGdsb2JhbE9iajsKCiAgcmV0dXJuIDA7Cn0KCm5zcmVzdWx0Cm5zV2luZG93U0g6 OkdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4 dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBq c3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCkKewoKCgoKICBpZiAoKCgoKGlkKSAmIDB4MSkgJiYg KGlkKSAhPSAoKChqc3ZhbCkoMCAtICgoanN2YWwpMSA8PCAoMzApKSkgPDwgMSkgfCAweDEpKSB8 fCAoKChpZCkgJiAoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkgPT0gMHgyKSkpIHsKCgoKCgog ICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IG5hdGl2ZTsKICAgIHdyYXBwZXItPkdldE5hdGl2ZShn ZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsKCiAgICBuc0NPTVB0cjxuc0lET01XaW5kb3dJbnRlcm5h bD4gd2luKGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwoKICAgIG5zQ09NUHRyPG5zSURPTVdp bmRvd0NvbGxlY3Rpb24+IGZyYW1lczsKICAgIHdpbi0+R2V0RnJhbWVzKGdldHRlcl9BZGRSZWZz KGZyYW1lcykpOwoKICAgIGlmIChmcmFtZXMpIHsKICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93 PiBmcmFtZTsKICAgICAgZnJhbWVzLT5JdGVtKCgoanNpbnQpKGlkKSA+PiAxKSwgZ2V0dGVyX0Fk ZFJlZnMoZnJhbWUpKTsKCiAgICAgIGlmIChmcmFtZSkgewoKCgoKICAgICAgICByZXR1cm4gV3Jh cE5hdGl2ZShjeCwgOjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCBmcmFtZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSURPTVdpbmRvdz46OkdldElJRCgpLCB2cCk7 CiAgICAgIH0KICAgIH0KICB9CgogIGlmIChuZWVkc1NlY3VyaXR5Q2hlY2soY3gsIHdyYXBwZXIp KSB7CgoKCgogICAgaWYgKCgoKGlkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAw eDQpICYmICEoISgoKCp2cCkgJiAoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkgPT0gMHgwKSB8 fCAoKCp2cCkgPT0gKChqc3ZhbCkoMCkpKSkgJiYKICAgICAgICA6OkpTX1R5cGVPZlZhbHVlKGN4 LCAqdnApICE9IEpTVFlQRV9GVU5DVElPTikgewoKCgoKCiAgICAgIG5zQ09NUHRyPG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmU+IHdyYXBwZXI7CiAgICAgIHNYUENvbm5lY3QtPkdldFdyYXBwZWRO YXRpdmVPZkpTT2JqZWN0KGN4LCAoKEpTT2JqZWN0ICopKCh2b2lkICopKCgqdnApICYgfihqc3Zh bCkoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkpKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMod3JhcHBlcikpOwoKICAgICAgaWYg KHdyYXBwZXIpIHsKICAgICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZlOwogICAgICAg IHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsKCiAgICAgICAgbnND T01QdHI8bnNJRE9NV2luZG93PiB3aW5kb3coZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlKSk7Cgog ICAgICAgIGlmICh3aW5kb3cpIHsKCgoKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAg ICAgfQogICAgfQoKICAgIG5zcmVzdWx0IHJ2ID0KICAgICAgZG9DaGVja1Byb3BlcnR5QWNjZXNz KGN4LCBvYmosIGlkLCB3cmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJWFBD U2VjdXJpdHlNYW5hZ2VyOjpBQ0NFU1NfR0VUX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgMSk7CgogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHsKCgoKICAgICAgKl9y ZXR2YWwgPSAwOwoKICAgICAgKnZwID0gKChqc3ZhbCkoMCkpOwogICAgfQogIH0KCiAgcmV0dXJu IDA7Cn0KCm5zcmVzdWx0Cm5zV2luZG93U0g6OlNldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBw ZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAg IEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCkKewog IGlmIChuZWVkc1NlY3VyaXR5Q2hlY2soY3gsIHdyYXBwZXIpKSB7CiAgICBuc3Jlc3VsdCBydiA9 CiAgICAgIGRvQ2hlY2tQcm9wZXJ0eUFjY2VzcyhjeCwgb2JqLCBpZCwgd3JhcHBlciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVhQQ1NlY3VyaXR5TWFuYWdlcjo6QUNDRVNTX1NFVF9Q Uk9QRVJUWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOwoKICAgIGlmICgoKHJ2KSAm IDB4ODAwMDAwMDApKSB7CgoKCiAgICAgICpfcmV0dmFsID0gMDsKCiAgICAgIHJldHVybiAwOwog ICAgfQogIH0KCiAgaWYgKGlkID09IHNMb2NhdGlvbl9pZCkgewogICAgSlNTdHJpbmcgKnZhbCA9 IDo6SlNfVmFsdWVUb1N0cmluZyhjeCwgKnZwKTsKICAgIGRvIHsgaWYgKCEodmFsKSkgeyA7IHJl dHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNDT01Q dHI8bnNJU3VwcG9ydHM+IG5hdGl2ZTsKICAgIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRk UmVmcyhuYXRpdmUpKTsKCiAgICBuc0NPTVB0cjxuc0lET01XaW5kb3dJbnRlcm5hbD4gd2luZG93 KGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwogICAgZG8geyBpZiAoISh3aW5kb3cpKSB7IDsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgICBuc0NP TVB0cjxuc0lET01Mb2NhdGlvbj4gbG9jYXRpb247CiAgICBuc3Jlc3VsdCBydiA9IHdpbmRvdy0+ R2V0TG9jYXRpb24oZ2V0dGVyX0FkZFJlZnMobG9jYXRpb24pKTsKICAgIGRvIHsgaWYgKCEoKCEo KHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAg bnNEZXBlbmRlbnRTdHJpbmcgaHJlZihyZWludGVycHJldF9jYXN0PCBQUlVuaWNoYXIgKiA+KDo6 SlNfR2V0U3RyaW5nQ2hhcnModmFsKSksCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6OkpT X0dldFN0cmluZ0xlbmd0aCh2YWwpKTsKCiAgICBydiA9IGxvY2F0aW9uLT5TZXRIcmVmKGhyZWYp OwogICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsg fSB9IHdoaWxlICgwKTsKCiAgICByZXR1cm4gV3JhcE5hdGl2ZShjeCwgb2JqLCBsb2NhdGlvbiwg bnNDT01UeXBlSW5mbzxuc0lET01Mb2NhdGlvbj46OkdldElJRCgpLCB2cCk7CiAgfQoKICByZXR1 cm4gbnNFdmVudFJlY2lldmVyU0g6OlNldFByb3BlcnR5KHdyYXBwZXIsIGN4LCBvYmosIGlkLCB2 cCwgX3JldHZhbCk7Cn0KCm5zcmVzdWx0Cm5zV2luZG93U0g6OkFkZFByb3BlcnR5KG5zSVhQQ29u bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAg ICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsCiAgICAgICAgICAg ICAgICAgICAgICAgIFBSQm9vbCAqX3JldHZhbCkKewoKCiAgaWYgKCFzRG9TZWN1cml0eUNoZWNr SW5BZGRQcm9wZXJ0eSkgewogICAgcmV0dXJuIDA7CiAgfQoKICBpZiAoaWQgPT0gc0xvY2F0aW9u X2lkKSB7CgoKCiAgICByZXR1cm4gKChuc3Jlc3VsdCkgKCgoUFJVaW50MzIpKDEpPDwzMSkgfCAo KFBSVWludDMyKSgxNCArMHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEwMDApKSkgKTsKICB9Cgog IG5zcmVzdWx0IHJ2ID0KICAgIGRvQ2hlY2tQcm9wZXJ0eUFjY2VzcyhjeCwgb2JqLCBpZCwgd3Jh cHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYUENTZWN1cml0eU1hbmFnZXI6OkFD Q0VTU19TRVRfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CgogIGlmICgo KHJ2KSAmIDB4ODAwMDAwMDApKSB7CgoKCiAgICAqX3JldHZhbCA9IDA7CiAgfQoKICByZXR1cm4g MDsKfQoKbnNyZXN1bHQKbnNXaW5kb3dTSDo6RGVsUHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBl ZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAg SlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwKICAgICAgICAgICAgICAgICAgICAg ICAgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKGlkID09IHNMb2NhdGlvbl9pZCkgewoKCgogICAg cmV0dXJuICgobnNyZXN1bHQpICgoKFBSVWludDMyKSgxKTw8MzEpIHwgKChQUlVpbnQzMikoMTQg KzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSgxMDAwKSkpICk7CiAgfQoKICBuc3Jlc3VsdCBydiA9 CiAgICBkb0NoZWNrUHJvcGVydHlBY2Nlc3MoY3gsIG9iaiwgaWQsIHdyYXBwZXIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJWFBDU2VjdXJpdHlNYW5hZ2VyOjpBQ0NFU1NfU0VUX1BST1BF UlRZLAogICAgICAgICAgICAgICAgICAgICAgICAgIDEpOwoKICBpZiAoKChydikgJiAweDgwMDAw MDAwKSkgewoKCgogICAgKl9yZXR2YWwgPSAwOwogIH0KCiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBK U0Jvb2wKQmFzZVN0dWJDb25zdHJ1Y3Rvcihjb25zdCBuc0dsb2JhbE5hbWVTdHJ1Y3QgKm5hbWVf c3RydWN0LCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmos IHVpbnROIGFyZ2MsIGpzdmFsICphcmd2LCBqc3ZhbCAqcnZhbCkKewogIG5zcmVzdWx0IHJ2Owog IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9 PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlRXh0ZXJuYWxDb25zdHJ1Y3RvcikgewogICAgbmF0 aXZlID0gZG9fQ3JlYXRlSW5zdGFuY2UobmFtZV9zdHJ1Y3QtPm1DSUQsICZydik7CiAgfSBlbHNl IGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUV4dGVy bmFsQ29uc3RydWN0b3JBbGlhcykgewogICAgbmF0aXZlID0gZG9fQ3JlYXRlSW5zdGFuY2UobmFt ZV9zdHJ1Y3QtPm1BbGlhcy0+bUNJRCwgJnJ2KTsKICB9IGVsc2UgewogICAgbmF0aXZlID0gZG9f Q3JlYXRlSW5zdGFuY2UoKm5hbWVfc3RydWN0LT5tRGF0YS0+bUNvbnN0cnVjdG9yQ0lELCAmcnYp OwogIH0KICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgewogICAgOwogICAgbnNET01DbGFzc0lu Zm86OlRocm93SlNFeGNlcHRpb24oY3gsIHJ2KTsKCiAgICByZXR1cm4gKEpTSW50bikwOwogIH0K CiAgbnNDT01QdHI8bnNJSlNOYXRpdmVJbml0aWFsaXplcj4gaW5pdGlhbGl6ZXIoZG9fUXVlcnlJ bnRlcmZhY2UobmF0aXZlKSk7CiAgaWYgKGluaXRpYWxpemVyKSB7CiAgICBydiA9IGluaXRpYWxp emVyLT5Jbml0aWFsaXplKGN4LCBvYmosIGFyZ2MsIGFyZ3YpOwogICAgaWYgKCgocnYpICYgMHg4 MDAwMDAwMCkpIHsKICAgICAgbnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgo KG5zcmVzdWx0KSAweEMxRjMwMDAwKSArIDEpKTsKCiAgICAgIHJldHVybiAoSlNJbnRuKTA7CiAg ICB9CiAgfQoKICBuc0NPTVB0cjxuc0lTY3JpcHRPYmplY3RPd25lcj4gb3duZXIoZG9fUXVlcnlJ bnRlcmZhY2UobmF0aXZlKSk7CiAgaWYgKG93bmVyKSB7CiAgICBuc0NPTVB0cjxuc0lTY3JpcHRD b250ZXh0PiBjb250ZXh0OwoKICAgIG5zSlNVdGlsczo6R2V0U3RhdGljU2NyaXB0Q29udGV4dChj eCwgb2JqLCBnZXR0ZXJfQWRkUmVmcyhjb250ZXh0KSk7CiAgICBpZiAoIWNvbnRleHQpIHsKICAg ICAgbnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4ODAw MGZmZmZMKSk7CgogICAgICByZXR1cm4gKEpTSW50bikwOwogICAgfQoKICAgIEpTT2JqZWN0KiBu ZXdfb2JqOwogICAgcnYgPSBvd25lci0+R2V0U2NyaXB0T2JqZWN0KGNvbnRleHQsICh2b2lkKiop Jm5ld19vYmopOwoKICAgIGlmICgoISgocnYpICYgMHg4MDAwMDAwMCkpKSB7CiAgICAgICpydmFs ID0gKChqc3ZhbCkobmV3X29iaikpOwogICAgfQoKICAgIHJldHVybiBydjsKICB9CgogIHJ2ID0g bnNET01HZW5lcmljU0g6OldyYXBOYXRpdmUoY3gsIDo6SlNfR2V0R2xvYmFsT2JqZWN0KGN4KSwg bmF0aXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxu c0lTdXBwb3J0cz46OkdldElJRCgpLCBydmFsKTsKCiAgcmV0dXJuICghKChydikgJiAweDgwMDAw MDAwKSkgPyAoSlNJbnRuKTEgOiAoSlNJbnRuKTA7Cn0KCnN0YXRpYyBuc3Jlc3VsdApEZWZpbmVJ bnRlcmZhY2VDb25zdGFudHMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgbnNJ SUQgKmFJSUQpCnsKICBuc0NPTVB0cjxuc0lJbnRlcmZhY2VJbmZvTWFuYWdlcj4gaWltID0KICAg IGRvbnRfQWRkUmVmKFhQVElfR2V0SW50ZXJmYWNlSW5mb01hbmFnZXIoKSk7CiAgZG8geyBpZiAo IShpaW0pKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgw KTsKCiAgbnNDT01QdHI8bnNJSW50ZXJmYWNlSW5mbz4gaWZfaW5mbzsKCiAgbnNyZXN1bHQgcnYg PSBpaW0tPkdldEluZm9Gb3JJSUQoYUlJRCwgZ2V0dGVyX0FkZFJlZnMoaWZfaW5mbykpOwogIGRv IHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSAmJiBpZl9pbmZvKSkgeyA7IHJldHVybiBy djsgfSB9IHdoaWxlICgwKTsKCiAgUFJVaW50MTYgY29uc3RhbnRfY291bnQ7CgogIGlmX2luZm8t PkdldENvbnN0YW50Q291bnQoJmNvbnN0YW50X2NvdW50KTsKCiAgaWYgKCFjb25zdGFudF9jb3Vu dCkgewogICAgcmV0dXJuIDA7CiAgfQoKICBuc0NPTVB0cjxuc0lJbnRlcmZhY2VJbmZvPiBwYXJl bnRfaWZfaW5mbzsKCiAgcnYgPSBpZl9pbmZvLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnMocGFy ZW50X2lmX2luZm8pKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkgJiYgcGFy ZW50X2lmX2luZm8pKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICBQUlVpbnQxNiBw YXJlbnRfY29uc3RhbnRfY291bnQsIGk7CiAgcGFyZW50X2lmX2luZm8tPkdldENvbnN0YW50Q291 bnQoJnBhcmVudF9jb25zdGFudF9jb3VudCk7CgogIGZvciAoaSA9IHBhcmVudF9jb25zdGFudF9j b3VudDsgaSA8IGNvbnN0YW50X2NvdW50OyBpKyspIHsKICAgIGNvbnN0IG5zWFBUQ29uc3RhbnQg KmMgPSAwOwoKICAgIHJ2ID0gaWZfaW5mby0+R2V0Q29uc3RhbnQoaSwgJmMpOwogICAgZG8geyBp ZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpICYmIGMpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hp bGUgKDApOwoKICAgIFBSVWludDE2IHR5cGUgPSBjLT5HZXRUeXBlKCkuVGFnUGFydCgpOwoKICAg IGpzdmFsIHY7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTg6 CiAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX1U4OgogICAgICB7CiAgICAgICAgdiA9ICgoKGpzdmFs KShjLT5HZXRWYWx1ZSgpLT52YWwudTgpIDw8IDEpIHwgMHgxKTsKICAgICAgICBicmVhazsKICAg ICAgfQogICAgICBjYXNlIG5zWFBUVHlwZTo6VF9JMTY6CiAgICAgIGNhc2UgbnNYUFRUeXBlOjpU X1UxNjoKICAgICAgewogICAgICAgIHYgPSAoKChqc3ZhbCkoYy0+R2V0VmFsdWUoKS0+dmFsLnUx NikgPDwgMSkgfCAweDEpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgbnNYUFRU eXBlOjpUX0kzMjoKICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfVTMyOgogICAgICB7CiAgICAgICAg diA9ICgoKGpzdmFsKShjLT5HZXRWYWx1ZSgpLT52YWwudTMyKSA8PCAxKSB8IDB4MSk7CiAgICAg ICAgYnJlYWs7CiAgICAgIH0KICAgICAgZGVmYXVsdDoKICAgICAgewoKCgogICAgICAgIGNvbnRp bnVlOwogICAgICB9CiAgICB9CgogICAgaWYgKCE6OkpTX0RlZmluZVByb3BlcnR5KGN4LCBvYmos IGMtPkdldE5hbWUoKSwgdiwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAx KSkgewogICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogICAgfQogIH0KCiAg cmV0dXJuIDA7Cn0KCnN0YXRpYyBKU0Jvb2wKRE9NSlNDbGFzc19Db25zdHJ1Y3QoSlNDb250ZXh0 ICpjeCwgSlNPYmplY3QgKm9iaiwgdWludE4gYXJnYywganN2YWwgKmFyZ3YsCiAgICAgICAgICAg ICAgICAgICAgIGpzdmFsICpydmFsKQp7CiAgSlNPYmplY3QqIGNsYXNzX29iaiA9ICgoSlNPYmpl Y3QgKikoKHZvaWQgKikoKGFyZ3ZbLTJdKSAmIH4oanN2YWwpKCgoSlNVaW50MzIpMSA8PCAoMykp IC0gMSkpKSk7CiAgaWYgKCFjbGFzc19vYmopIHsKICAgIDsKICAgIG5zRE9NQ2xhc3NJbmZvOjpU aHJvd0pTRXhjZXB0aW9uKGN4LCAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCkpOwoKICAgIHJldHVy biAoSlNJbnRuKTA7CiAgfQoKICBjb25zdCBQUlVuaWNoYXIqIGNsYXNzX25hbWUgPQogICAgICBj b25zdF9jYXN0PCBjb25zdCBQUlVuaWNoYXIgKiA+KHN0YXRpY19jYXN0PCBQUlVuaWNoYXIgKiA+ KDo6SlNfR2V0UHJpdmF0ZShjeCwgY2xhc3Nfb2JqKSkpOwoKCgogIGV4dGVybiBuc1NjcmlwdE5h bWVTcGFjZU1hbmFnZXIgKmdOYW1lU3BhY2VNYW5hZ2VyOwogIGlmICghY2xhc3NfbmFtZSB8fCAh Z05hbWVTcGFjZU1hbmFnZXIpIHsKICAgIDsKICAgIG5zRE9NQ2xhc3NJbmZvOjpUaHJvd0pTRXhj ZXB0aW9uKGN4LCAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCkpOwoKICAgIHJldHVybiAoSlNJbnRu KTA7CiAgfQoKICBjb25zdCBuc0dsb2JhbE5hbWVTdHJ1Y3QgKm5hbWVfc3RydWN0ID0gMDsKICBn TmFtZVNwYWNlTWFuYWdlci0+TG9va3VwTmFtZShuc0RlcGVuZGVudFN0cmluZyhjbGFzc19uYW1l KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZV9zdHJ1Y3QpOwogIGlmICgh bmFtZV9zdHJ1Y3QpIHsKICAgIDsKICAgIG5zRE9NQ2xhc3NJbmZvOjpUaHJvd0pTRXhjZXB0aW9u KGN4LCAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCkpOwoKICAgIHJldHVybiAoSlNJbnRuKTA7CiAg fQoKICBpZiAoKG5hbWVfc3RydWN0LT5tVHlwZSAhPSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBl RXh0ZXJuYWxDbGFzc0luZm8gfHwKICAgICAgICFuYW1lX3N0cnVjdC0+bURhdGEtPm1Db25zdHJ1 Y3RvckNJRCkgJiYKICAgICAgbmFtZV9zdHJ1Y3QtPm1UeXBlICE9IG5zR2xvYmFsTmFtZVN0cnVj dDo6ZVR5cGVFeHRlcm5hbENvbnN0cnVjdG9yICYmCiAgICAgIG5hbWVfc3RydWN0LT5tVHlwZSAh PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlRXh0ZXJuYWxDb25zdHJ1Y3RvckFsaWFzKSB7Cgog ICAgOwogICAgbnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQp ICgoKFBSVWludDMyKSgxKTw8MzEpIHwgKChQUlVpbnQzMikoMTQgKzB4NDUpPDwxNikgfCAoKFBS VWludDMyKSg5KSkpICkpOwoKICAgIHJldHVybiAoSlNJbnRuKTA7CiAgfQoKICByZXR1cm4gQmFz ZVN0dWJDb25zdHJ1Y3RvcihuYW1lX3N0cnVjdCwgY3gsIG9iaiwgYXJnYywgYXJndiwgcnZhbCk7 Cn0KCnN0YXRpYyBKU0Jvb2wKRE9NSlNDbGFzc19IYXNJbnN0YW5jZShKU0NvbnRleHQgKmN4LCBK U09iamVjdCAqb2JqLCBqc3ZhbCB2LCBKU0Jvb2wgKmJwKQp7CiAgSlNPYmplY3QgKmRvbV9vYmo7 CiAgaWYgKCE6OkpTX1ZhbHVlVG9PYmplY3QoY3gsIHYsICZkb21fb2JqKSkgewogICAgOwogICAg bnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpICgoKFBSVWlu dDMyKSgxKTw8MzEpIHwgKChQUlVpbnQzMikoMTQgKzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSg5 KSkpICkpOwoKICAgIHJldHVybiAoSlNJbnRuKTA7CiAgfQoKICBpZiAoIWRvbV9vYmopIHsKICAg IHJldHVybiAoSlNJbnRuKTE7CiAgfQoKICBKU0NsYXNzICpkb21fY2xhc3MgPSBKU19HZXRDbGFz cyhjeCwgZG9tX29iaik7CiAgaWYgKCFkb21fY2xhc3MpIHsKICAgIDsKICAgIG5zRE9NQ2xhc3NJ bmZvOjpUaHJvd0pTRXhjZXB0aW9uKGN4LCAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCkpOwoKICAg IHJldHVybiAoSlNJbnRuKTA7CiAgfQoKICBjb25zdCBuc0dsb2JhbE5hbWVTdHJ1Y3QgKm5hbWVf c3RydWN0ID0gMDsKCiAgZXh0ZXJuIG5zU2NyaXB0TmFtZVNwYWNlTWFuYWdlciAqZ05hbWVTcGFj ZU1hbmFnZXI7CiAgaWYgKCFnTmFtZVNwYWNlTWFuYWdlcikgewogICAgOwogICAgbnNET01DbGFz c0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKSk7Cgog ICAgcmV0dXJuIChKU0ludG4pMDsKICB9CgogIGdOYW1lU3BhY2VNYW5hZ2VyLT5Mb29rdXBOYW1l KE5TX0NvbnZlcnRBU0NJSXRvVUNTMihkb21fY2xhc3MtPm5hbWUpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZuYW1lX3N0cnVjdCk7CiAgaWYgKCFuYW1lX3N0cnVjdCkgewogICAg OwogICAgbnNET01DbGFzc0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4 ODAwMGZmZmZMKSk7CgogICAgcmV0dXJuIChKU0ludG4pMDsKICB9CgogIDsKCgoKCiAgY29uc3Qg UFJVbmljaGFyKiBjbGFzc19uYW1lID0KICAgICAgY29uc3RfY2FzdDwgY29uc3QgUFJVbmljaGFy ICogPihzdGF0aWNfY2FzdDwgUFJVbmljaGFyICogPig6OkpTX0dldFByaXZhdGUoY3gsIG9iaikp KTsKCgogIGlmICghY2xhc3NfbmFtZSkgewogICAgOwogICAgbnNET01DbGFzc0luZm86OlRocm93 SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKSk7CgogICAgcmV0dXJuIChK U0ludG4pMDsKICB9CgogIGNvbnN0IG5zR2xvYmFsTmFtZVN0cnVjdCAqY2xhc3NfbmFtZV9zdHJ1 Y3QgPSAwOwogIGdOYW1lU3BhY2VNYW5hZ2VyLT5Mb29rdXBOYW1lKG5zRGVwZW5kZW50U3RyaW5n KGNsYXNzX25hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbGFzc19uYW1l X3N0cnVjdCk7CiAgaWYgKCFjbGFzc19uYW1lX3N0cnVjdCkgewogICAgOwogICAgbnNET01DbGFz c0luZm86OlRocm93SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKSk7Cgog ICAgcmV0dXJuIChKU0ludG4pMDsKICB9CgogIGlmIChjbGFzc19uYW1lX3N0cnVjdC0+bVR5cGUg IT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUNsYXNzUHJvdG8gJiYKICAgICAgY2xhc3NfbmFt ZV9zdHJ1Y3QtPm1UeXBlICE9IG5zR2xvYmFsTmFtZVN0cnVjdDo6ZVR5cGVJbnRlcmZhY2UpIHsK ICAgICpicCA9IChuYW1lX3N0cnVjdCA9PSBjbGFzc19uYW1lX3N0cnVjdCk7CgogICAgcmV0dXJu IChKU0ludG4pMTsKICB9CgogIGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1l U3RydWN0OjplVHlwZUV4dGVybmFsQ29uc3RydWN0b3JBbGlhcykgewogICAgbmFtZV9zdHJ1Y3Qg PSBnTmFtZVNwYWNlTWFuYWdlci0+R2V0Q29uc3RydWN0b3JQcm90byhuYW1lX3N0cnVjdCk7CiAg ICBpZiAoIW5hbWVfc3RydWN0KSB7CiAgICAgIDsKICAgICAgbnNET01DbGFzc0luZm86OlRocm93 SlNFeGNlcHRpb24oY3gsICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKSk7CgogICAgICByZXR1cm4g KEpTSW50bikwOwogICAgfQogIH0KCiAgOwoKCgogIGNvbnN0IG5zRE9NQ2xhc3NJbmZvRGF0YSAq Y2lfZGF0YSA9IDA7CiAgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1 Y3Q6OmVUeXBlQ2xhc3NDb25zdHJ1Y3RvciAmJgogICAgICBuYW1lX3N0cnVjdC0+bURPTUNsYXNz SW5mb0lEID49IDApIHsKICAgIGNpX2RhdGEgPSAmc0NsYXNzSW5mb0RhdGFbbmFtZV9zdHJ1Y3Qt Pm1ET01DbGFzc0luZm9JRF07CiAgfSBlbHNlIGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNH bG9iYWxOYW1lU3RydWN0OjplVHlwZUV4dGVybmFsQ2xhc3NJbmZvKSB7CiAgICBjaV9kYXRhID0g bmFtZV9zdHJ1Y3QtPm1EYXRhOwogIH0KCiAgbnNDT01QdHI8bnNJSW50ZXJmYWNlSW5mb01hbmFn ZXI+IGlpbSA9CiAgICBkb250X0FkZFJlZihYUFRJX0dldEludGVyZmFjZUluZm9NYW5hZ2VyKCkp OwogIGlmICghaWltKSB7CiAgICA7CiAgICBuc0RPTUNsYXNzSW5mbzo6VGhyb3dKU0V4Y2VwdGlv bihjeCwgKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpKTsKCiAgICByZXR1cm4gKEpTSW50bikwOwog IH0KCiAgbnNDT01QdHI8bnNJSW50ZXJmYWNlSW5mbz4gaWZfaW5mbzsKICBQUlVpbnQzMiBjb3Vu dCA9IDA7CiAgY29uc3QgbnNJSUQqIGNsYXNzX2ludGVyZmFjZTsKICB3aGlsZSAoKGNsYXNzX2lu dGVyZmFjZSA9IGNpX2RhdGEtPm1JbnRlcmZhY2VzW2NvdW50KytdKSkgewogICAgaWYgKGNsYXNz X25hbWVfc3RydWN0LT5tSUlELkVxdWFscygqY2xhc3NfaW50ZXJmYWNlKSkgewogICAgICAqYnAg PSAoSlNJbnRuKTE7CgogICAgICByZXR1cm4gKEpTSW50bikxOwogICAgfQoKICAgIGlpbS0+R2V0 SW5mb0ZvcklJRChjbGFzc19pbnRlcmZhY2UsIGdldHRlcl9BZGRSZWZzKGlmX2luZm8pKTsKICAg IGlmICghaWZfaW5mbykgewogICAgICA7CiAgICAgIG5zRE9NQ2xhc3NJbmZvOjpUaHJvd0pTRXhj ZXB0aW9uKGN4LCAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCkpOwoKICAgICAgcmV0dXJuIChKU0lu dG4pMDsKICAgIH0KCiAgICBpZl9pbmZvLT5IYXNBbmNlc3RvcigmY2xhc3NfbmFtZV9zdHJ1Y3Qt Pm1JSUQsIGJwKTsKCiAgICBpZiAoKmJwKSB7CiAgICAgIHJldHVybiAoSlNJbnRuKTE7CiAgICB9 CiAgfQoKICByZXR1cm4gKEpTSW50bikxOwp9CgpzdGF0aWMgSlNCb29sCkRPTUpTQ2xhc3NfdG9T dHJpbmcoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgdWludE4gYXJnYywganN2YWwgKmFy Z3YsCiAgICAgICAgICAgICAgICAgICAganN2YWwgKnJ2YWwpCnsKICBjb25zdCBQUlVuaWNoYXIq IGNsYXNzX25hbWUgPQogICAgICBjb25zdF9jYXN0PCBjb25zdCBQUlVuaWNoYXIgKiA+KHN0YXRp Y19jYXN0PCBQUlVuaWNoYXIgKiA+KDo6SlNfR2V0UHJpdmF0ZShjeCwgb2JqKSkpOwoKCiAgaWYg KCFjbGFzc19uYW1lKSB7CiAgICA7CiAgICBuc0RPTUNsYXNzSW5mbzo6VGhyb3dKU0V4Y2VwdGlv bihjeCwgKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpKTsKCiAgICByZXR1cm4gKEpTSW50bikwOwog IH0KCiAgbnNBdXRvU3RyaW5nIHJlc3VsdFN0cmluZygnWycpOwogIHJlc3VsdFN0cmluZy5BcHBl bmQoY2xhc3NfbmFtZSk7CiAgcmVzdWx0U3RyaW5nLkFwcGVuZChQUlVuaWNoYXIoJ10nKSk7Cgog IEpTU3RyaW5nKiBzdHIgPSA6OkpTX05ld1VDU3RyaW5nQ29weU4oY3gsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PCBjb25zdCBqc2NoYXIg KiA+KHJlc3VsdFN0cmluZy5nZXQoKSksCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVzdWx0U3RyaW5nLkxlbmd0aCgpKTsKICBkbyB7IGlmICghKHN0cikpIHsgOyBy ZXR1cm4gKEpTSW50bikwOyB9IH0gd2hpbGUgKDApOwoKICAqcnZhbCA9ICgoKGpzdmFsKShzdHIp KSB8ICgweDQpKTsKCiAgcmV0dXJuIChKU0ludG4pMTsKfQoKSlNDbGFzcyBuc0RPTUNsYXNzSW5m bzo6c0RPTUpTQ2xhc3MgPSB7CiAgIkRPTSBDbGFzcyIsICgxPDwwKSwKICBKU19Qcm9wZXJ0eVN0 dWIsIEpTX1Byb3BlcnR5U3R1YiwgSlNfUHJvcGVydHlTdHViLCBKU19Qcm9wZXJ0eVN0dWIsCiAg SlNfRW51bWVyYXRlU3R1YiwgSlNfUmVzb2x2ZVN0dWIsIEpTX0NvbnZlcnRTdHViLCBKU19GaW5h bGl6ZVN0dWIsCiAgMCwgMCwgMCwgRE9NSlNDbGFzc19Db25zdHJ1Y3QsCiAgMCwgRE9NSlNDbGFz c19IYXNJbnN0YW5jZQp9OwoKSlNGdW5jdGlvblNwZWMgbnNET01DbGFzc0luZm86OnNET01KU0Ns YXNzX21ldGhvZHNbXSA9IHsKICB7InRvU3RyaW5nIiwgRE9NSlNDbGFzc190b1N0cmluZywgMCwg MCwgMH0sCiAgezAsIDAsIDAsIDAsIDB9Cn07CgoKbnNyZXN1bHQKbnNET01DbGFzc0luZm86Oklu aXRET01KU0NsYXNzKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopCnsKICBKU09iamVjdCAq cHJvdG8gPSA6OkpTX0luaXRDbGFzcyhjeCwgb2JqLCAwLCAmc0RPTUpTQ2xhc3MsIDAsIDAsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc0RPTUpTQ2xhc3NfbWV0aG9kcywg MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICA7CiAgaWYgKCFwcm90 bykgewogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsKICB9CgogIHJldHVybiAw Owp9CgoKbnNyZXN1bHQKbnNXaW5kb3dTSDo6R2xvYmFsUmVzb2x2ZShuc0lTdXBwb3J0cyAqbmF0 aXZlLCBKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAg ICAgIEpTU3RyaW5nICpzdHIsIFBSVWludDMyIGZsYWdzLCBQUkJvb2wgKmRpZF9yZXNvbHZlKQp7 CiAgKmRpZF9yZXNvbHZlID0gMDsKCiAgZXh0ZXJuIG5zU2NyaXB0TmFtZVNwYWNlTWFuYWdlciAq Z05hbWVTcGFjZU1hbmFnZXI7CgogIGRvIHsgaWYgKCEoZ05hbWVTcGFjZU1hbmFnZXIpKSB7IDsg cmV0dXJuICgoKG5zcmVzdWx0KSAweEMxRjMwMDAwKSArIDEpOyB9IH0gd2hpbGUgKDApOwoKICBu c0RlcGVuZGVudFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IFBSVW5pY2hhciog Pig6OkpTX0dldFN0cmluZ0NoYXJzKHN0cikpLAoKICAgICAgICAgICAgICAgICAgICAgICAgIDo6 SlNfR2V0U3RyaW5nTGVuZ3RoKHN0cikpOwoKICBjb25zdCBuc0dsb2JhbE5hbWVTdHJ1Y3QgKm5h bWVfc3RydWN0ID0gMDsKICBjb25zdCBQUlVuaWNoYXIgKmNsYXNzX25hbWUgPSAwOwoKICBnTmFt ZVNwYWNlTWFuYWdlci0+TG9va3VwTmFtZShuYW1lLCAmbmFtZV9zdHJ1Y3QsICZjbGFzc19uYW1l KTsKCiAgaWYgKCFuYW1lX3N0cnVjdCkgewogICAgcmV0dXJuIDA7CiAgfQoKICBkbyB7IGlmICgh KGNsYXNzX25hbWUpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdo aWxlICgwKTsKCiAgbnNyZXN1bHQgcnYgPSAwOwoKICBpZiAobmFtZV9zdHJ1Y3QtPm1UeXBlID09 IG5zR2xvYmFsTmFtZVN0cnVjdDo6ZVR5cGVFeHRlcm5hbENsYXNzSW5mb0NyZWF0b3IpIHsKICAg IG5zQ09NUHRyPG5zSURPTUNJRXh0ZW5zaW9uPiBjcmVhdG9yKGRvX0NyZWF0ZUluc3RhbmNlKG5h bWVfc3RydWN0LT5tQ0lELCAmcnYpKTsKICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAw MDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNDT01QdHI8bnNJRE9N U2NyaXB0T2JqZWN0RmFjdG9yeT4gc29mKGRvX0dldFNlcnZpY2Uoa0RPTVNPRl9DSUQpKTsKICAg IGRvIHsgaWYgKCEoc29mKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7IH0g fSB3aGlsZSAoMCk7CgogICAgcnYgPSBjcmVhdG9yLT5SZWdpc3RlckRPTUNJKE5TX0NvbnZlcnRV Q1MydG9VVEY4KG5hbWUpLmdldCgpLCBzb2YpOwogICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4 MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICBydiA9IGdOYW1l U3BhY2VNYW5hZ2VyLT5Mb29rdXBOYW1lKG5hbWUsICZuYW1lX3N0cnVjdCk7CiAgICBpZiAoKChy dikgJiAweDgwMDAwMDAwKSB8fCAhbmFtZV9zdHJ1Y3QgfHwKICAgICAgICBuYW1lX3N0cnVjdC0+ bVR5cGUgIT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUV4dGVybmFsQ2xhc3NJbmZvKSB7CiAg ICAgIDsKCiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgaWYgKG5hbWVfc3RydWN0LT5tVHlw ZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlSW50ZXJmYWNlKSB7CgoKCiAgICBKU09iamVj dCogY2xhc3Nfb2JqID0gOjpKU19EZWZpbmVPYmplY3QoY3gsIG9iaiwgOjpKU19HZXRTdHJpbmdC eXRlcyhzdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZz RE9NSlNDbGFzcywgMCwgMCk7CiAgICBpZiAoIWNsYXNzX29iaikgewogICAgICByZXR1cm4gKChu c3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogICAgfQoKICAgIGlmICghOjpKU19TZXRQcml2YXRlKGN4 LCBjbGFzc19vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PCB2b2lkICog PihzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCAqID4oY2xhc3NfbmFtZSkpKSkgewoKCiAgICAgIHJl dHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgICB9CgoKCgogICAgcnYgPSBEZWZpbmVJ bnRlcmZhY2VDb25zdGFudHMoY3gsIGNsYXNzX29iaiwgJm5hbWVfc3RydWN0LT5tSUlEKTsKICAg IGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3 aGlsZSAoMCk7CgogICAgKmRpZF9yZXNvbHZlID0gMTsKCiAgICByZXR1cm4gMDsKICB9CgogIGlm IChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUNsYXNzQ29u c3RydWN0b3IgfHwKICAgICAgbmFtZV9zdHJ1Y3QtPm1UeXBlID09IG5zR2xvYmFsTmFtZVN0cnVj dDo6ZVR5cGVFeHRlcm5hbENsYXNzSW5mbyB8fAogICAgICBuYW1lX3N0cnVjdC0+bVR5cGUgPT0g bnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUNsYXNzUHJvdG8gfHwKICAgICAgbmFtZV9zdHJ1Y3Qt Pm1UeXBlID09IG5zR2xvYmFsTmFtZVN0cnVjdDo6ZVR5cGVFeHRlcm5hbENvbnN0cnVjdG9yQWxp YXMpIHsKICAgIGNvbnN0IG5zRE9NQ2xhc3NJbmZvRGF0YSAqY2lfZGF0YSA9IDA7CiAgICBjb25z dCBuc0dsb2JhbE5hbWVTdHJ1Y3QqIGFsaWFzX3N0cnVjdCA9IDA7CgogICAgaWYgKG5hbWVfc3Ry dWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlQ2xhc3NDb25zdHJ1Y3RvciAm JgogICAgICAgIG5hbWVfc3RydWN0LT5tRE9NQ2xhc3NJbmZvSUQgPj0gMCkgewogICAgICBjaV9k YXRhID0gJnNDbGFzc0luZm9EYXRhW25hbWVfc3RydWN0LT5tRE9NQ2xhc3NJbmZvSURdOwogICAg fSBlbHNlIGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlw ZUV4dGVybmFsQ2xhc3NJbmZvKSB7CiAgICAgIGNpX2RhdGEgPSBuYW1lX3N0cnVjdC0+bURhdGE7 CiAgICB9IGVsc2UgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6 OmVUeXBlRXh0ZXJuYWxDb25zdHJ1Y3RvckFsaWFzKSB7CiAgICAgIGFsaWFzX3N0cnVjdCA9IGdO YW1lU3BhY2VNYW5hZ2VyLT5HZXRDb25zdHJ1Y3RvclByb3RvKG5hbWVfc3RydWN0KTsKICAgICAg ZG8geyBpZiAoIShhbGlhc19zdHJ1Y3QpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZm ZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgICAgIGlmIChhbGlhc19zdHJ1Y3QtPm1UeXBlID09IG5z R2xvYmFsTmFtZVN0cnVjdDo6ZVR5cGVDbGFzc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgY2lfZGF0 YSA9ICZzQ2xhc3NJbmZvRGF0YVthbGlhc19zdHJ1Y3QtPm1ET01DbGFzc0luZm9JRF07CiAgICAg IH0gZWxzZSBpZiAoYWxpYXNfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVU eXBlRXh0ZXJuYWxDbGFzc0luZm8pIHsKICAgICAgICBjaV9kYXRhID0gYWxpYXNfc3RydWN0LT5t RGF0YTsKICAgICAgfQogICAgfQoKICAgIEpTT2JqZWN0KiBjbGFzc19vYmogPSA6OkpTX0RlZmlu ZU9iamVjdChjeCwgb2JqLCA6OkpTX0dldFN0cmluZ0J5dGVzKHN0ciksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNET01KU0NsYXNzLCAwLCAwKTsKICAgIGlm ICghY2xhc3Nfb2JqKSB7CiAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAg ICB9CgogICAgaWYgKCE6OkpTX1NldFByaXZhdGUoY3gsIGNsYXNzX29iaiwKICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8IHZvaWQgKiA+KHN0YXRpY19jYXN0PCBjb25zdCB2b2lk ICogPihjbGFzc19uYW1lKSkpKSB7CgoKICAgICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZm ZmZMKTsKICAgIH0KCiAgICBjb25zdCBuc0lJRCAqcHJpbWFyeV9paWQgPSAmbnNDT01UeXBlSW5m bzxuc0lTdXBwb3J0cz46OkdldElJRCgpOwoKICAgIGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0g bnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUNsYXNzUHJvdG8pIHsKICAgICAgcHJpbWFyeV9paWQg PSAmbmFtZV9zdHJ1Y3QtPm1JSUQ7CiAgICB9IGVsc2UgaWYgKGNpX2RhdGEgJiYgY2lfZGF0YS0+ bVByb3RvQ2hhaW5JbnRlcmZhY2UpIHsKICAgICAgcHJpbWFyeV9paWQgPSBjaV9kYXRhLT5tUHJv dG9DaGFpbkludGVyZmFjZTsKICAgIH0KCiAgICBuc1hQSURMQ1N0cmluZyBjbGFzc19wYXJlbnRf bmFtZTsKCiAgICBpZiAoIXByaW1hcnlfaWlkLT5FcXVhbHMobnNDT01UeXBlSW5mbzxuc0lTdXBw b3J0cz46OkdldElJRCgpKSkgewogICAgICBydiA9IERlZmluZUludGVyZmFjZUNvbnN0YW50cyhj eCwgY2xhc3Nfb2JqLCBwcmltYXJ5X2lpZCk7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4 ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgoKCiAgICAgIGlmIChw cmltYXJ5X2lpZC0+RXF1YWxzKG5zQ09NVHlwZUluZm88bnNJRE9NRXZlbnQ+OjpHZXRJSUQoKSkp IHsKICAgICAgICBydiA9IERlZmluZUludGVyZmFjZUNvbnN0YW50cyhjeCwgY2xhc3Nfb2JqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuc0NPTVR5cGVJbmZvPG5zSURP TU5TRXZlbnQ+OjpHZXRJSUQoKSk7CiAgICAgICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAw MDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKICAgICAgfQoKICAgICAgbnND T01QdHI8bnNJSW50ZXJmYWNlSW5mb01hbmFnZXI+IGlpbSA9CiAgICAgICAgZG9udF9BZGRSZWYo WFBUSV9HZXRJbnRlcmZhY2VJbmZvTWFuYWdlcigpKTsKICAgICAgZG8geyBpZiAoIShpaW0pKSB7 IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNDAxMTFMKTsgfSB9IHdoaWxlICgwKTsKCiAgICAg IG5zQ09NUHRyPG5zSUludGVyZmFjZUluZm8+IGlmX2luZm87CiAgICAgIGlpbS0+R2V0SW5mb0Zv cklJRChwcmltYXJ5X2lpZCwgZ2V0dGVyX0FkZFJlZnMoaWZfaW5mbykpOwogICAgICBkbyB7IGlm ICghKGlmX2luZm8pKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdo aWxlICgwKTsKCiAgICAgIG5zQ09NUHRyPG5zSUludGVyZmFjZUluZm8+IHBhcmVudDsKICAgICAg bnNJSUQgKmlpZCA9IDA7CgogICAgICBpZiAoY2lfZGF0YSAmJiAhY2lfZGF0YS0+bUhhc0NsYXNz SW50ZXJmYWNlKSB7CiAgICAgICAgaWZfaW5mby0+R2V0SW50ZXJmYWNlSUlEKCZpaWQpOwogICAg ICB9IGVsc2UgewogICAgICAgIGlmX2luZm8tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJl bnQpKTsKICAgICAgICBkbyB7IGlmICghKHBhcmVudCkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkg MHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgICAgICBwYXJlbnQtPkdldEludGVyZmFj ZUlJRCgmaWlkKTsKICAgICAgfQoKICAgICAgaWYgKGlpZCkgewogICAgICAgIGlmICghaWlkLT5F cXVhbHMobnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz46OkdldElJRCgpKSkgewogICAgICAgICAg aWYgKGNpX2RhdGEgJiYgIWNpX2RhdGEtPm1IYXNDbGFzc0ludGVyZmFjZSkgewoKCgoKICAgICAg ICAgICAgaWZfaW5mby0+R2V0TmFtZShnZXR0ZXJfQ29waWVzKGNsYXNzX3BhcmVudF9uYW1lKSk7 CiAgICAgICAgICB9IGVsc2UgewoKCgoKCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIHBhcmVu dC0+R2V0TmFtZShnZXR0ZXJfQ29waWVzKGNsYXNzX3BhcmVudF9uYW1lKSk7CiAgICAgICAgICB9 CiAgICAgICAgfQoKICAgICAgICBuc01lbW9yeTo6RnJlZShpaWQpOwogICAgICB9CiAgICB9Cgog ICAgSlNPYmplY3QgKnByb3RvID0gMDsKCiAgICBpZiAoY2xhc3NfcGFyZW50X25hbWUpIHsKICAg ICAganN2YWwgdmFsOwoKICAgICAgaWYgKCE6OkpTX0dldFByb3BlcnR5KGN4LCBvYmosIEN1dFBy ZWZpeChjbGFzc19wYXJlbnRfbmFtZSksICZ2YWwpKSB7CiAgICAgICAgcmV0dXJuICgobnNyZXN1 bHQpIDB4ODAwMGZmZmZMKTsKICAgICAgfQoKICAgICAgSlNPYmplY3QgKnRtcCA9ICgoKHZhbCkg JiAoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkgPT0gMHgwKSA/ICgoSlNPYmplY3QgKikoKHZv aWQgKikoKHZhbCkgJiB+KGpzdmFsKSgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSkpIDogMDsK CiAgICAgIGlmICh0bXApIHsKICAgICAgICBpZiAoITo6SlNfR2V0UHJvcGVydHkoY3gsIHRtcCwg InByb3RvdHlwZSIsICZ2YWwpKSB7CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAw ZmZmZkwpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCgoKHZhbCkgJiAoKChKU1VpbnQzMikxIDw8 ICgzKSkgLSAxKSkgPT0gMHgwKSkgewogICAgICAgICAgcHJvdG8gPSAoKEpTT2JqZWN0ICopKCh2 b2lkICopKCh2YWwpICYgfihqc3ZhbCkoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkpKTsKICAg ICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBKU09iamVjdCAqZG90X3Byb3RvdHlwZSA9IDA7Cgog ICAgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlRXh0 ZXJuYWxDb25zdHJ1Y3RvckFsaWFzKSB7CiAgICAgIG5hbWVfc3RydWN0ID0gYWxpYXNfc3RydWN0 OwogICAgfQoKICAgIGlmIChuYW1lX3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1lU3RydWN0 OjplVHlwZUNsYXNzQ29uc3RydWN0b3IpIHsKICAgICAgUFJJbnQzMiBpZCA9IG5hbWVfc3RydWN0 LT5tRE9NQ2xhc3NJbmZvSUQ7CiAgICAgIDsKCiAgICAgIG5zRE9NQ2xhc3NJbmZvSUQgY2lfaWQg PSAobnNET01DbGFzc0luZm9JRClpZDsKCiAgICAgIG5zQ09NUHRyPG5zSUNsYXNzSW5mbz4gY2ko ZG9udF9BZGRSZWYoR2V0Q2xhc3NJbmZvSW5zdGFuY2UoY2lfaWQpKSk7CiAgICAgIGRvIHsgaWYg KCEoY2kpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgw KTsKCiAgICAgIG5zQ09NUHRyPG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9sZGVyPiBwcm90b19ob2xk ZXI7CgogICAgICBuc3Jlc3VsdCBydiA9CiAgICAgICAgc1hQQ29ubmVjdC0+R2V0V3JhcHBlZE5h dGl2ZVByb3RvdHlwZShjeCwgb2JqLCBjaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKHByb3RvX2hvbGRlcikpOwogICAgICBkbyB7 IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4 ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgICAgIHJ2ID0gcHJvdG9faG9sZGVyLT5HZXRK U09iamVjdCgmZG90X3Byb3RvdHlwZSk7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAw MDAwMDApKSkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUg KDApOwoKICAgICAgSlNPYmplY3QgKnhwY19wcm90b19wcm90byA9IDo6SlNfR2V0UHJvdG90eXBl KGN4LCBkb3RfcHJvdG90eXBlKTsKCiAgICAgIGlmIChwcm90byAmJiBKU19HZXRDbGFzcyhjeCwg eHBjX3Byb3RvX3Byb3RvKSA9PSBzT2JqZWN0Q2xhc3MpIHsKICAgICAgICBpZiAoITo6SlNfU2V0 UHJvdG90eXBlKGN4LCBkb3RfcHJvdG90eXBlLCBwcm90bykpIHsKICAgICAgICAgIHJldHVybiAo KG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYg KG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6OmVUeXBlRXh0ZXJuYWxD bGFzc0luZm8pIHsKICAgICAgbnNDT01QdHI8bnNJQ2xhc3NJbmZvPiBjaSA9CiAgICAgICAgZ2V0 dGVyX0FkZFJlZnMoR2V0Q2xhc3NJbmZvSW5zdGFuY2UobmFtZV9zdHJ1Y3QtPm1EYXRhKSk7CiAg ICAgIGRvIHsgaWYgKCEoY2kpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsg fSB9IHdoaWxlICgwKTsKCiAgICAgIG5zQ09NUHRyPG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9sZGVy PiBwcm90b19ob2xkZXI7CgogICAgICBuc3Jlc3VsdCBydiA9CiAgICAgICAgc1hQQ29ubmVjdC0+ R2V0V3JhcHBlZE5hdGl2ZVByb3RvdHlwZShjeCwgb2JqLCBjaSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKHByb3RvX2hvbGRlcikp OwogICAgICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuICgo bnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgICAgIHJ2ID0gcHJvdG9f aG9sZGVyLT5HZXRKU09iamVjdCgmZG90X3Byb3RvdHlwZSk7CiAgICAgIGRvIHsgaWYgKCEoKCEo KHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwp OyB9IH0gd2hpbGUgKDApOwoKICAgICAgSlNPYmplY3QgKnhwY19wcm90b19wcm90byA9IDo6SlNf R2V0UHJvdG90eXBlKGN4LCBkb3RfcHJvdG90eXBlKTsKCiAgICAgIGlmIChwcm90byAmJiBKU19H ZXRDbGFzcyhjeCwgeHBjX3Byb3RvX3Byb3RvKSA9PSBzT2JqZWN0Q2xhc3MpIHsKICAgICAgICBp ZiAoITo6SlNfU2V0UHJvdG90eXBlKGN4LCBkb3RfcHJvdG90eXBlLCBwcm90bykpIHsKICAgICAg ICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgICAgICAgfQogICAgICB9CiAg ICB9IGVsc2UgewogICAgICBkb3RfcHJvdG90eXBlID0gOjpKU19OZXdPYmplY3QoY3gsICZzRE9N Q29uc3RydWN0b3JQcm90b0NsYXNzLCBwcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG9iaik7CiAgICAgIGRvIHsgaWYgKCEoZG90X3Byb3RvdHlwZSkpIHsgOyByZXR1 cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOyB9IH0gd2hpbGUgKDApOwogICAgfQoKICAgIGpz dmFsIHYgPSAoKGpzdmFsKShkb3RfcHJvdG90eXBlKSk7CgogICAgaWYgKCE6OkpTX1NldFByb3Bl cnR5KGN4LCBjbGFzc19vYmosICJwcm90b3R5cGUiLCAmdikpIHsKICAgICAgcmV0dXJuICgobnNy ZXN1bHQpIDB4ODAwMGZmZmZMKTsKICAgIH0KCiAgICAqZGlkX3Jlc29sdmUgPSAxOwoKICAgIHJl dHVybiAwOwogIH0KCiAgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1 Y3Q6OmVUeXBlRXh0ZXJuYWxDb25zdHJ1Y3RvcikgewoKICAgIEpTT2JqZWN0KiBjbGFzc19vYmog PSA6OkpTX0RlZmluZU9iamVjdChjeCwgb2JqLCA6OkpTX0dldFN0cmluZ0J5dGVzKHN0ciksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNET01KU0NsYXNzLCAw LCAwKTsKICAgIGlmICghY2xhc3Nfb2JqKSB7CiAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgw MDBmZmZmTCk7CiAgICB9CgogICAgaWYgKCE6OkpTX1NldFByaXZhdGUoY3gsIGNsYXNzX29iaiwK ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8IHZvaWQgKiA+KHN0YXRpY19jYXN0 PCBjb25zdCB2b2lkICogPihjbGFzc19uYW1lKSkpKSB7CgoKICAgICAgcmV0dXJuICgobnNyZXN1 bHQpIDB4ODAwMGZmZmZMKTsKICAgIH0KCiAgICAqZGlkX3Jlc29sdmUgPSAxOwoKICAgIHJldHVy biAwOwogIH0KCiAgaWYgKG5hbWVfc3RydWN0LT5tVHlwZSA9PSBuc0dsb2JhbE5hbWVTdHJ1Y3Q6 OmVUeXBlUHJvcGVydHkpIHsKICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmUoZG9fQ3Jl YXRlSW5zdGFuY2UobmFtZV9zdHJ1Y3QtPm1DSUQsICZydikpOwogICAgZG8geyBpZiAoISgoISgo cnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICBq c3ZhbCBwcm9wX3ZhbDsKCiAgICBuc0NPTVB0cjxuc0lTY3JpcHRPYmplY3RPd25lcj4gb3duZXIo ZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlKSk7CiAgICBpZiAob3duZXIpIHsKICAgICAgbnNDT01Q dHI8bnNJU2NyaXB0Q29udGV4dD4gY29udGV4dDsKICAgICAgbnNKU1V0aWxzOjpHZXRTdGF0aWNT Y3JpcHRDb250ZXh0KGN4LCBvYmosIGdldHRlcl9BZGRSZWZzKGNvbnRleHQpKTsKICAgICAgZG8g eyBpZiAoIShjb250ZXh0KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0g fSB3aGlsZSAoMCk7CgogICAgICBKU09iamVjdCAqcHJvcF9vYmogPSAwOwoKICAgICAgcnYgPSBv d25lci0+R2V0U2NyaXB0T2JqZWN0KGNvbnRleHQsICh2b2lkKiopJnByb3Bfb2JqKTsKICAgICAg ZG8geyBpZiAoIShwcm9wX29iaikpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwp OyB9IH0gd2hpbGUgKDApOwoKICAgICAgcHJvcF92YWwgPSAoKGpzdmFsKShwcm9wX29iaikpOwog ICAgfSBlbHNlIHsKICAgICAgcnYgPSBXcmFwTmF0aXZlKGN4LCA6OkpTX0dldEdsb2JhbE9iamVj dChjeCksIG5hdGl2ZSwKICAgICAgICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88bnNJU3Vw cG9ydHM+OjpHZXRJSUQoKSwgJnByb3BfdmFsKTsKICAgIH0KCiAgICBkbyB7IGlmICghKCghKChy dikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICAgIFBS Qm9vbCByZXR2YWwgPSA6OkpTX0RlZmluZVVDUHJvcGVydHkoY3gsIG9iaiwgOjpKU19HZXRTdHJp bmdDaGFycyhzdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 OkpTX0dldFN0cmluZ0xlbmd0aChzdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcm9wX3ZhbCwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMSB8IDB4MDIpOwogICAgKmRpZF9yZXNvbHZlID0gMTsKCiAgICByZXR1 cm4gcmV0dmFsID8gMCA6ICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsKICB9CgogIGlmIChuYW1l X3N0cnVjdC0+bVR5cGUgPT0gbnNHbG9iYWxOYW1lU3RydWN0OjplVHlwZUR5bmFtaWNOYW1lU2V0 KSB7CiAgICBuc0NPTVB0cjxuc0lTY3JpcHRFeHRlcm5hbE5hbWVTZXQ+IG5hbWVzZXQgPQogICAg ICBkb19DcmVhdGVJbnN0YW5jZShuYW1lX3N0cnVjdC0+bUNJRCwgJnJ2KTsKICAgIGRvIHsgaWYg KCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7 CgogICAgbnNDT01QdHI8bnNJU2NyaXB0R2xvYmFsT2JqZWN0PiBzZ28oZG9fUXVlcnlJbnRlcmZh Y2UobmF0aXZlKSk7CiAgICBkbyB7IGlmICghKHNnbykpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkg MHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgIG5zQ09NUHRyPG5zSVNjcmlwdENvbnRl eHQ+IGNvbnRleHQ7CgogICAgc2dvLT5HZXRDb250ZXh0KGdldHRlcl9BZGRSZWZzKGNvbnRleHQp KTsKICAgIGRvIHsgaWYgKCEoY29udGV4dCkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAw ZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgIHJ2ID0gbmFtZXNldC0+SW5pdGlhbGl6ZU5hbWVT ZXQoY29udGV4dCk7CgogICAgKmRpZF9yZXNvbHZlID0gMTsKICB9CgogIHJldHVybiBydjsKfQoK Cm5zcmVzdWx0Cm5zV2luZG93U0g6OkNhY2hlRG9jdW1lbnRQcm9wZXJ0eShKU0NvbnRleHQgKmN4 LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9N V2luZG93ICp3aW5kb3cpCnsKICBuc0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9jdW1lbnQ7CiAg bnNyZXN1bHQgcnYgPSB3aW5kb3ctPkdldERvY3VtZW50KGdldHRlcl9BZGRSZWZzKGRvY3VtZW50 KSk7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsg fSB9IHdoaWxlICgwKTsKCiAganN2YWwgdjsKICBydiA9IFdyYXBOYXRpdmUoY3gsIG9iaiwgZG9j dW1lbnQsIG5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1lbnQ+OjpHZXRJSUQoKSwgJnYpOwogIGRv IHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGls ZSAoMCk7CgogIG5zRGVwZW5kZW50U3RyaW5nIGRvY19zdHIocmVpbnRlcnByZXRfY2FzdDwgY29u c3QgbnNBU3RyaW5nOjpjaGFyX3R5cGUqID4oTCJkb2N1bWVudCIpLCBQUlVpbnQzMigoc2l6ZW9m KEwiZG9jdW1lbnQiKS9zaXplb2Yod2NoYXJfdCkpLTEpKTsKCiAgaWYgKCE6OkpTX0RlZmluZVVD UHJvcGVydHkoY3gsIG9iaiwgcmVpbnRlcnByZXRfY2FzdDwgY29uc3QganNjaGFyICogPihkb2Nf c3RyLmdldCgpKSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jX3N0ci5MZW5ndGgo KSwgdiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAweDAyKSkgewogICAgcmV0 dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsKICB9CgogIHJldHVybiAwOwp9Cgpuc3Jlc3Vs dApuc1dpbmRvd1NIOjpOZXdSZXNvbHZlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwg anN2YWwgaWQsIFBSVWludDMyIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0 ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKQp7CiAgSlNCb29sIGRpZF9yZXNvbHZlID0gKEpTSW50 bikwOwoKICBpZiAoITo6SlNfUmVzb2x2ZVN0YW5kYXJkQ2xhc3MoY3gsIG9iaiwgaWQsICZkaWRf cmVzb2x2ZSkpIHsKICAgICpfcmV0dmFsID0gKEpTSW50bikwOwoKICAgIHJldHVybiAoKG5zcmVz dWx0KSAweDgwMDBmZmZmTCk7CiAgfQoKICBpZiAoZGlkX3Jlc29sdmUpIHsKICAgICpvYmpwID0g b2JqOwoKICAgIHJldHVybiAwOwogIH0KCiAgaWYgKGlkID09IHNDb25zdHJ1Y3Rvcl9pZCAmJiAh KGZsYWdzICYgMHgwMikpIHsKICAgIHJldHVybiBSZXNvbHZlQ29uc3RydWN0b3IoY3gsIG9iaiwg b2JqcCk7CiAgfQoKICBpZiAoKCgoaWQpICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpID09 IDB4NCkpIHsKICAgIEpTU3RyaW5nICpzdHIgPSAoKEpTU3RyaW5nICopKCh2b2lkICopKChpZCkg JiB+KGpzdmFsKSgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSkpOwogICAgbnNDT01QdHI8bnNJ U3VwcG9ydHM+IG5hdGl2ZTsKICAgIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhu YXRpdmUpKTsKCiAgICBuc0NPTVB0cjxuc0lTY3JpcHRHbG9iYWxPYmplY3Q+IHNnbyhkb19RdWVy eUludGVyZmFjZShuYXRpdmUpKTsKICAgIGRvIHsgaWYgKCEoc2dvKSkgeyA7IHJldHVybiAoKG5z cmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNDT01QdHI8bnNJU2Ny aXB0Q29udGV4dD4gbXlfY29udGV4dDsKICAgIHNnby0+R2V0Q29udGV4dChnZXR0ZXJfQWRkUmVm cyhteV9jb250ZXh0KSk7CgogICAgaWYgKCFteV9jb250ZXh0IHx8ICgobXlfY29udGV4dC0+SXND b250ZXh0SW5pdGlhbGl6ZWQoKSkgJiAweDgwMDAwMDAwKSkgewoKCgogICAgICByZXR1cm4gMDsK ICAgIH0KCiAgICBuc3Jlc3VsdCBydiA9IDA7CgogICAgaWYgKCEoZmxhZ3MgJiAweDAyKSkgewoK CiAgICAgIHJ2ID0gR2xvYmFsUmVzb2x2ZShuYXRpdmUsIGN4LCBvYmosIHN0ciwgZmxhZ3MsICZk aWRfcmVzb2x2ZSk7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsg OyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAgICBpZiAoZGlkX3Jlc29sdmUpIHsKCgog ICAgICAgICpvYmpwID0gb2JqOwoKICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgfQoKCgoK CiAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hlbGw7CgogICAgc2dvLT5HZXREb2NTaGVs bChnZXR0ZXJfQWRkUmVmcyhkb2NTaGVsbCkpOwoKICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJl ZU5vZGU+IGRzbihkb19RdWVyeUludGVyZmFjZShkb2NTaGVsbCkpOwoKICAgIFBSSW50MzIgY291 bnQgPSAwOwoKICAgIGlmIChkc24pIHsKICAgICAgZHNuLT5HZXRDaGlsZENvdW50KCZjb3VudCk7 CiAgICB9CgogICAgaWYgKGNvdW50ID4gMCkgewogICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRy ZWVJdGVtPiBjaGlsZDsKCiAgICAgIGNvbnN0IGpzY2hhciAqY2hhcnMgPSA6OkpTX0dldFN0cmlu Z0NoYXJzKHN0cik7CgogICAgICBkc24tPkZpbmRDaGlsZFdpdGhOYW1lKHJlaW50ZXJwcmV0X2Nh c3Q8IGNvbnN0IFBSVW5pY2hhciogPihjaGFycyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgMSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhj aGlsZCkpOwoKICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiBjaGlsZF93aW4oZG9fR2V0SW50 ZXJmYWNlKGNoaWxkKSk7CgogICAgICBpZiAoY2hpbGRfd2luKSB7CgoKCgogICAgICAgIGpzdmFs IHY7CiAgICAgICAgcnYgPSBXcmFwTmF0aXZlKGN4LCA6OkpTX0dldEdsb2JhbE9iamVjdChjeCks IGNoaWxkX3dpbiwKICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxuc0lET01X aW5kb3dJbnRlcm5hbD46OkdldElJRCgpLCAmdik7CiAgICAgICAgZG8geyBpZiAoISgoISgocnYp ICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKIyA0MDI1ICJu c0RPTUNsYXNzSW5mby5jcHAiCiAgICAgICAgc0RvU2VjdXJpdHlDaGVja0luQWRkUHJvcGVydHkg PSAwOwoKICAgICAgICBQUkJvb2wgb2sgPSA6OkpTX0RlZmluZVVDUHJvcGVydHkoY3gsIG9iaiwg Y2hhcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6SlNfR2V0 U3RyaW5nTGVuZ3RoKHN0ciksIHYsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsIDApOwoKICAgICAgICBzRG9TZWN1cml0eUNoZWNrSW5BZGRQcm9wZXJ0eSA9 IDE7CgogICAgICAgIGlmICghb2spIHsKICAgICAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgw MDA0MDA1TCk7CiAgICAgICAgfQoKICAgICAgICAqb2JqcCA9IG9iajsKCiAgICAgICAgcmV0dXJu IDA7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoaWQgPT0gc19jb250ZW50X2lkKSB7CgoKCiAgICAg IEpTT2JqZWN0KiBnZXR0ZXJPYmo7CiAgICAgIHJ2ID0gbXlfY29udGV4dC0+Q29tcGlsZUZ1bmN0 aW9uKG9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDQXV0b1N0 cmluZygiX2NvbnRlbnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8IGNvbnN0IG5zQUZsYXRTdHJp bmcmID4obnNEZXBlbmRlbnRTdHJpbmcocmVpbnRlcnByZXRfY2FzdDwgY29uc3QgbnNBU3RyaW5n OjpjaGFyX3R5cGUqID4oTCJyZXR1cm4gdGhpcy5jb250ZW50OyIpLCBQUlVpbnQzMigoc2l6ZW9m KEwicmV0dXJuIHRoaXMuY29udGVudDsiKS9zaXplb2Yod2NoYXJfdCkpLTEpKSksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikgJmdl dHRlck9iaik7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSAmJiBnZXR0 ZXJPYmopKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsgfSB9IHdoaWxlICgw KTsKCiAgICAgIGlmICghOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBvYmosIDo6SlNfR2V0U3Ry aW5nQ2hhcnMoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpKU19HZXRT dHJpbmdMZW5ndGgoc3RyKSwgKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEp IHwgMHgxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpTUHJvcGVydHlPcCln ZXR0ZXJPYmosIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEgfCAweDEw IHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MCkpIHsKICAgICAgICByZXR1 cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwNUwpOwogICAgICB9CgogICAgICAqb2JqcCA9IG9iajsK CiAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGlmIChpZCA9PSBzTG9jYXRpb25faWQpIHsKCgoK CgogICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3dJbnRlcm5hbD4gd2luZG93KGRvX1F1ZXJ5SW50 ZXJmYWNlKG5hdGl2ZSkpOwogICAgICBkbyB7IGlmICghKHdpbmRvdykpIHsgOyByZXR1cm4gKChu c3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgICAgbnNDT01QdHI8bnNJ RE9NTG9jYXRpb24+IGxvY2F0aW9uOwogICAgICBydiA9IHdpbmRvdy0+R2V0TG9jYXRpb24oZ2V0 dGVyX0FkZFJlZnMobG9jYXRpb24pKTsKICAgICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAw MDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICAgIGpzdmFsIHY7CiAg ICAgIHJ2ID0gV3JhcE5hdGl2ZShjeCwgb2JqLCBsb2NhdGlvbiwgbnNDT01UeXBlSW5mbzxuc0lE T01Mb2NhdGlvbj46OkdldElJRCgpLCAmdik7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4 ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAgICBzRG9TZWN1 cml0eUNoZWNrSW5BZGRQcm9wZXJ0eSA9IDA7CgogICAgICBKU0Jvb2wgb2sgPSA6OkpTX0RlZmlu ZVVDUHJvcGVydHkoY3gsIG9iaiwgOjpKU19HZXRTdHJpbmdDaGFycyhzdHIpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpKU19HZXRTdHJpbmdMZW5ndGgoc3RyKSwg diwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOwoKICAg ICAgc0RvU2VjdXJpdHlDaGVja0luQWRkUHJvcGVydHkgPSAxOwoKICAgICAgaWYgKCFvaykgewog ICAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7CiAgICAgIH0KCiAgICAgICpv YmpwID0gb2JqOwoKICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgaWYgKGZsYWdzICYgMHgwMikg ewogICAgICBpZiAoSXNSZWFkb25seVJlcGxhY2VhYmxlKGlkKSB8fAogICAgICAgICAgKCEoZmxh Z3MgJiAweDAxKSAmJiBJc1dyaXRhYmxlUmVwbGFjZWFibGUoaWQpKSkgewoKCgoKCgogICAgICAg IGlmICghOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBvYmosIDo6SlNfR2V0U3RyaW5nQ2hhcnMo c3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OkpTX0dldFN0cmluZ0xl bmd0aChzdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGpzdmFsKSgw IC0gKChqc3ZhbCkxIDw8ICgzMCkpKSA8PCAxKSB8IDB4MSksIDAsIDAsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMSkpIHsKICAgICAgICAgIHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDA0MDA1TCk7CiAgICAgICAgfQoKICAgICAgICAqb2JqcCA9IG9iajsKCiAgICAgICAg cmV0dXJuIDA7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChpZCA9PSBzTmF2aWdhdG9y X2lkKSB7CiAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93SW50ZXJuYWw+IHdpbmRvdyhkb19R dWVyeUludGVyZmFjZShuYXRpdmUpKTsKICAgICAgICBkbyB7IGlmICghKHdpbmRvdykpIHsgOyBy ZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgICAgICBu c0NPTVB0cjxuc0lET01OYXZpZ2F0b3I+IG5hdmlnYXRvcjsKICAgICAgICBydiA9IHdpbmRvdy0+ R2V0TmF2aWdhdG9yKGdldHRlcl9BZGRSZWZzKG5hdmlnYXRvcikpOwogICAgICAgIGRvIHsgaWYg KCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7 CgogICAgICAgIGpzdmFsIHY7CiAgICAgICAgcnYgPSBXcmFwTmF0aXZlKGN4LCBvYmosIG5hdmln YXRvciwgbnNDT01UeXBlSW5mbzxuc0lET01OYXZpZ2F0b3I+OjpHZXRJSUQoKSwgJnYpOwogICAg ICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0g fSB3aGlsZSAoMCk7CgogICAgICAgIGlmICghOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBvYmos IDo6SlNfR2V0U3RyaW5nQ2hhcnMoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6OkpTX0dldFN0cmluZ0xlbmd0aChzdHIpLCB2LCAwLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsIDApKSB7CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4 MDAwNDAwNUwpOwogICAgICAgIH0KCiAgICAgICAgKm9ianAgPSBvYmo7CgogICAgICAgIHJldHVy biAwOwogICAgICB9CgogICAgICBpZiAoaWQgPT0gc0RvY3VtZW50X2lkKSB7CiAgICAgICAgbnND T01QdHI8bnNJRE9NV2luZG93SW50ZXJuYWw+IHdpbmRvdyhkb19RdWVyeUludGVyZmFjZShuYXRp dmUpKTsKICAgICAgICBkbyB7IGlmICghKHdpbmRvdykpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkg MHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgICAgICBydiA9IENhY2hlRG9jdW1lbnRQ cm9wZXJ0eShjeCwgb2JqLCB3aW5kb3cpOwogICAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4 ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAgICAgICpvYmpw ID0gb2JqOwoKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgaWYgKGlkID09IHNXaW5k b3dfaWQpIHsKICAgICAgICBqc3ZhbCB2OwogICAgICAgIHJ2ID0gV3JhcE5hdGl2ZShjeCwgb2Jq LCBuYXRpdmUsIG5zQ09NVHlwZUluZm88bnNJRE9NV2luZG93Pjo6R2V0SUlEKCksICZ2KTsKICAg ICAgICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9 IH0gd2hpbGUgKDApOwoKICAgICAgICBpZiAoITo6SlNfRGVmaW5lVUNQcm9wZXJ0eShjeCwgb2Jq LCA6OkpTX0dldFN0cmluZ0NoYXJzKHN0ciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpKU19HZXRTdHJpbmdMZW5ndGgoc3RyKSwgdiwgMCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLCAweDAyKSkgewogICAgICAgICAgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwMDQwMDVMKTsKICAgICAgICB9CgogICAgICAgICpvYmpwID0gb2JqOwoKICAgICAgICBy ZXR1cm4gMDsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBuc0V2ZW50UmVjaWV2ZXJTSDo6TmV3 UmVzb2x2ZSh3cmFwcGVyLCBjeCwgb2JqLCBpZCwgZmxhZ3MsIG9ianAsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JldHZhbCk7CiAgfQoKICByZXR1cm4gMDsKfQoK bnNyZXN1bHQKbnNXaW5kb3dTSDo6RmluYWxpemUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAq d3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9i aikKewogIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgd3JhcHBlci0+R2V0TmF0aXZl KGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwogIGRvIHsgaWYgKCEobmF0aXZlKSkgeyA7IHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5z SVNjcmlwdEdsb2JhbE9iamVjdD4gc2dvKGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwogIGRv IHsgaWYgKCEoc2dvKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3 aGlsZSAoMCk7CgogIHJldHVybiBzZ28tPk9uRmluYWxpemUob2JqKTsKfQoKCgoKbnNyZXN1bHQK bnNMb2NhdGlvblNIOjpDaGVja0FjY2Vzcyhuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFw cGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpv YmosIGpzdmFsIGlkLCBQUlVpbnQzMiBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGpz dmFsICp2cCwgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKChtb2RlICYgKEpTQUNDX1dSSVRFIC0g MSkpID09IEpTQUNDX1BST1RPICYmIChtb2RlICYgSlNBQ0NfV1JJVEUpKSB7CgoKCiAgICAqX3Jl dHZhbCA9IDA7CgogICAgcmV0dXJuICgobnNyZXN1bHQpICgoKFBSVWludDMyKSgxKTw8MzEpIHwg KChQUlVpbnQzMikoMTQgKzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSgxMDAwKSkpICk7CiAgfQoK ICByZXR1cm4gbnNET01HZW5lcmljU0g6OkNoZWNrQWNjZXNzKHdyYXBwZXIsIGN4LCBvYmosIGlk LCBtb2RlLCB2cCwgX3JldHZhbCk7Cn0KCgoKCm5zcmVzdWx0Cm5zTm9kZVNIOjpQcmVDcmVhdGUo bnNJU3VwcG9ydHMgKm5hdGl2ZU9iaiwgSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKmdsb2JhbE9i aiwKICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBhcmVudE9iaikKewogIG5zQ09NUHRy PG5zSUNvbnRlbnQ+IGNvbnRlbnQoZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlT2JqKSk7CiAgbnND T01QdHI8bnNJRG9jdW1lbnQ+IGRvYzsKCiAgaWYgKGNvbnRlbnQpIHsKICAgIGNvbnRlbnQtPkdl dERvY3VtZW50KCpnZXR0ZXJfQWRkUmVmcyhkb2MpKTsKICB9CgogIGlmICghZG9jKSB7CiMgNDI1 NCAibnNET01DbGFzc0luZm8uY3BwIgogICAgZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZl T2JqKTsKCiAgICBpZiAoIWRvYykgewoKCgogICAgICAqcGFyZW50T2JqID0gZ2xvYmFsT2JqOwoK ICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfQoKICBuc0lTdXBwb3J0cyAqbmF0aXZlX3BhcmVudCA9 IDA7CgogIGlmIChjb250ZW50KSB7CiAgICBpZiAoY29udGVudC0+SXNDb250ZW50T2ZUeXBlKG5z SUNvbnRlbnQ6OmVFTEVNRU5UIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ Q29udGVudDo6ZUhUTUwgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250 ZW50OjplSFRNTF9GT1JNX0NPTlRST0wpKSB7CiAgICAgIG5zQ09NUHRyPG5zSUZvcm1Db250cm9s PiBmb3JtX2NvbnRyb2woZG9fUXVlcnlJbnRlcmZhY2UoY29udGVudCkpOwoKICAgICAgaWYgKGZv cm1fY29udHJvbCkgewogICAgICAgIG5zQ09NUHRyPG5zSURPTUhUTUxGb3JtRWxlbWVudD4gZm9y bTsKCiAgICAgICAgZm9ybV9jb250cm9sLT5HZXRGb3JtKGdldHRlcl9BZGRSZWZzKGZvcm0pKTsK CiAgICAgICAgbmF0aXZlX3BhcmVudCA9IGZvcm07CiAgICAgIH0KICAgIH0KCiAgICBpZiAoIW5h dGl2ZV9wYXJlbnQpIHsKICAgICAgbnNDT01QdHI8bnNJQ29udGVudD4gcGFyZW50Q29udGVudDsK CiAgICAgIGNvbnRlbnQtPkdldFBhcmVudCgqZ2V0dGVyX0FkZFJlZnMocGFyZW50Q29udGVudCkp OwogICAgICBuYXRpdmVfcGFyZW50ID0gcGFyZW50Q29udGVudDsKCiAgICAgIGlmICghbmF0aXZl X3BhcmVudCkgewogICAgICAgIG5hdGl2ZV9wYXJlbnQgPSBkb2M7CiAgICAgIH0KICAgIH0KICB9 CgogIGlmICghbmF0aXZlX3BhcmVudCkgewoKCgoKCgogICAgbnNDT01QdHI8bnNJU2NyaXB0R2xv YmFsT2JqZWN0PiBzZ287CiAgICBkb2MtPkdldFNjcmlwdEdsb2JhbE9iamVjdChnZXR0ZXJfQWRk UmVmcyhzZ28pKTsKCiAgICBpZiAoIXNnbykgewoKCgogICAgICAqcGFyZW50T2JqID0gZ2xvYmFs T2JqOwoKICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgbmF0aXZlX3BhcmVudCA9IHNnbzsKICB9 CgogIGpzdmFsIHY7CgogIG5zcmVzdWx0IHJ2ID0gV3JhcE5hdGl2ZShjeCwgOjpKU19HZXRHbG9i YWxPYmplY3QoY3gpLCBuYXRpdmVfcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICBu c0NPTVR5cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0SUlEKCksICZ2KTsKCiAgKnBhcmVudE9iaiA9 ICgoSlNPYmplY3QgKikoKHZvaWQgKikoKHYpICYgfihqc3ZhbCkoKChKU1VpbnQzMikxIDw8ICgz KSkgLSAxKSkpKTsKCiAgcmV0dXJuIHJ2Owp9Cgpuc3Jlc3VsdApuc05vZGVTSDo6QWRkUHJvcGVy dHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAg ICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBS Qm9vbCAqX3JldHZhbCkKewogIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgd3JhcHBl ci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICBuc0NPTVB0cjxuc0lET01O b2RlPiBub2RlKGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwoKICBuc0NPTVB0cjxuc0lEb2N1 bWVudD4gZG9jOwoKICBpZiAobm9kZSkgewogICAgbnNDT01QdHI8bnNJRE9NRG9jdW1lbnQ+IGRv bWRvYzsKICAgIG5vZGUtPkdldE93bmVyRG9jdW1lbnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7 CiAgICBkb2MgPSBkb19RdWVyeUludGVyZmFjZShkb21kb2MpOwogIH0KCiAgaWYgKCFkb2MpIHsK ICAgIGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSk7CiAgfQoKICBpZiAoZG9jKSB7CiAg ICBuc0NPTVB0cjxuc0lDb250ZW50PiBjb250ZW50KGRvX1F1ZXJ5SW50ZXJmYWNlKG5vZGUpKTsK ICAgIGRvYy0+QWRkUmVmZXJlbmNlKGNvbnRlbnQsIHdyYXBwZXIpOwogIH0KCiAgcmV0dXJuIDA7 Cn0KCm5zcmVzdWx0Cm5zTm9kZVNIOjpHZXRGbGFncyhQUlVpbnQzMiAqYUZsYWdzKQp7CiAgKmFG bGFncyA9IChuc0lDbGFzc0luZm86Ok1BSU5fVEhSRUFEX09OTFkgfCBuc0lDbGFzc0luZm86OkRP TV9PQkpFQ1QpIHwgbnNJQ2xhc3NJbmZvOjpDT05URU5UX05PREU7CgogIHJldHVybiAwOwp9CgoK CgpQUkJvb2wKbnNFdmVudFJlY2lldmVyU0g6OlJlYWxseUlzRXZlbnROYW1lKGpzdmFsIGlkLCBq c2NoYXIgYUZpcnN0Q2hhcikKewoKCiAgc3dpdGNoIChhRmlyc3RDaGFyKSB7CiAgY2FzZSAnYScg OgogICAgcmV0dXJuIGlkID09IHNPbmFib3J0X2lkOwogIGNhc2UgJ2InIDoKICAgIHJldHVybiBp ZCA9PSBzT25ibHVyX2lkOwogIGNhc2UgJ2UnIDoKICAgIHJldHVybiBpZCA9PSBzT25lcnJvcl9p ZDsKICBjYXNlICdmJyA6CiAgICByZXR1cm4gaWQgPT0gc09uZm9jdXNfaWQ7CiAgY2FzZSAnYycg OgogICAgcmV0dXJuICgoaWQgPT0gc09uY2hhbmdlX2lkKSB8fAogICAgICAgICAgICAoaWQgPT0g c09uY2xpY2tfaWQpIHx8CiAgICAgICAgICAgIChpZCA9PSBzT25jb250ZXh0bWVudV9pZCkpOwog IGNhc2UgJ2wnIDoKICAgIHJldHVybiBpZCA9PSBzT25sb2FkX2lkOwogIGNhc2UgJ3AnIDoKICAg IHJldHVybiBpZCA9PSBzT25wYWludF9pZDsKICBjYXNlICdrJyA6CiAgICByZXR1cm4gKChpZCA9 PSBzT25rZXlkb3duX2lkKSB8fAogICAgICAgICAgICAoaWQgPT0gc09ua2V5cHJlc3NfaWQpIHx8 CiAgICAgICAgICAgIChpZCA9PSBzT25rZXl1cF9pZCkpOwogIGNhc2UgJ3UnIDoKICAgIHJldHVy biBpZCA9PSBzT251bmxvYWRfaWQ7CiAgY2FzZSAnbScgOgogICAgcmV0dXJuICgoaWQgPT0gc09u bW91c2Vtb3ZlX2lkKSB8fAogICAgICAgICAgICAoaWQgPT0gc09ubW91c2VvdXRfaWQpIHx8CiAg ICAgICAgICAgIChpZCA9PSBzT25tb3VzZW92ZXJfaWQpIHx8CiAgICAgICAgICAgIChpZCA9PSBz T25tb3VzZXVwX2lkKSB8fAogICAgICAgICAgICAoaWQgPT0gc09ubW91c2Vkb3duX2lkKSk7CiAg Y2FzZSAncicgOgogICAgcmV0dXJuICgoaWQgPT0gc09ucmVzZXRfaWQpIHx8CiAgICAgICAgICAg IChpZCA9PSBzT25yZXNpemVfaWQpKTsKICBjYXNlICdzJyA6CiAgICByZXR1cm4gKChpZCA9PSBz T25zY3JvbGxfaWQpIHx8CiAgICAgICAgICAgIChpZCA9PSBzT25zZWxlY3RfaWQpIHx8CiAgICAg ICAgICAgIChpZCA9PSBzT25zdWJtaXRfaWQpKTsKICB9CgogIHJldHVybiAwOwp9Cgpuc3Jlc3Vs dApuc0V2ZW50UmVjaWV2ZXJTSDo6UmVnaXN0ZXJDb21waWxlSGFuZGxlcihuc0lYUENvbm5lY3RX cmFwcGVkTmF0aXZlICp3cmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCBpZCwgUFJCb29sIGNvbXBpbGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqZGlkX2NvbXBpbGUpCnsK ICAqZGlkX2NvbXBpbGUgPSAwOwoKICBpZiAoIUlzRXZlbnROYW1lKGlkKSkgewogICAgcmV0dXJu IDA7CiAgfQoKICBuc0NPTVB0cjxuc0lTY3JpcHRDb250ZXh0PiBzY3JpcHRfY3g7CiAgbnNyZXN1 bHQgcnYgPSBuc0pTVXRpbHM6OkdldFN0YXRpY1NjcmlwdENvbnRleHQoY3gsIG9iaiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVm cyhzY3JpcHRfY3gpKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsg cmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZl OwogIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsKICA7CgogIG5z Q09NUHRyPG5zSURPTUV2ZW50UmVjZWl2ZXI+IHJlY2VpdmVyKGRvX1F1ZXJ5SW50ZXJmYWNlKG5h dGl2ZSkpOwogIGRvIHsgaWYgKCEocmVjZWl2ZXIpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4 ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJRXZlbnRMaXN0ZW5lck1h bmFnZXI+IG1hbmFnZXI7CgogIHJlY2VpdmVyLT5HZXRMaXN0ZW5lck1hbmFnZXIoZ2V0dGVyX0Fk ZFJlZnMobWFuYWdlcikpOwogIGRvIHsgaWYgKCEobWFuYWdlcikpIHsgOyByZXR1cm4gKChuc3Jl c3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICBKU1N0cmluZyAqc3RyID0gKChK U1N0cmluZyAqKSgodm9pZCAqKSgoaWQpICYgfihqc3ZhbCkoKChKU1VpbnQzMikxIDw8ICgzKSkg LSAxKSkpKTsKICBjb25zdCBQUlVuaWNoYXIgKnVzdHIgPSByZWludGVycHJldF9jYXN0PCBjb25z dCBQUlVuaWNoYXIgKiA+KDo6SlNfR2V0U3RyaW5nQ2hhcnMoc3RyKSk7CgoKICBuc0NPTVB0cjxu c0lBdG9tPiBhdG9tKGdldHRlcl9BZGRSZWZzKE5TX05ld0F0b20odXN0cikpKTsKICBkbyB7IGlm ICghKGF0b20pKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfSB9IHdoaWxl ICgwKTsKCiAgaWYgKGNvbXBpbGUpIHsKICAgIHJ2ID0gbWFuYWdlci0+Q29tcGlsZVNjcmlwdEV2 ZW50TGlzdGVuZXIoc2NyaXB0X2N4LCBuYXRpdmUsIGF0b20sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZF9jb21waWxlKTsKICB9IGVsc2UgewogICAgcnYg PSBtYW5hZ2VyLT5SZWdpc3RlclNjcmlwdEV2ZW50TGlzdGVuZXIoc2NyaXB0X2N4LCBuYXRpdmUs IGF0b20pOwogIH0KCiAgcmV0dXJuIHJ2Owp9Cgpuc3Jlc3VsdApuc0V2ZW50UmVjaWV2ZXJTSDo6 TmV3UmVzb2x2ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBp ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgZmxhZ3MsIEpTT2JqZWN0 ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKCEoKChpZCkgJiAoKChKU1VpbnQzMikx IDw8ICgzKSkgLSAxKSkgPT0gMHg0KSkgewogICAgcmV0dXJuIDA7CiAgfQoKICBQUkJvb2wgZGlk X2NvbXBpbGUgPSAwOwoKICBuc3Jlc3VsdCBydiA9IFJlZ2lzdGVyQ29tcGlsZUhhbmRsZXIod3Jh cHBlciwgY3gsIG9iaiwgaWQsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZkaWRfY29tcGlsZSk7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkg eyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgaWYgKGRpZF9jb21waWxlKSB7CiAgICAq b2JqcCA9IG9iajsKICB9CgogIHJldHVybiBuc0RPTUNsYXNzSW5mbzo6TmV3UmVzb2x2ZSh3cmFw cGVyLCBjeCwgb2JqLCBpZCwgZmxhZ3MsIG9ianAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9yZXR2YWwpOwp9Cgpuc3Jlc3VsdApuc0V2ZW50UmVjaWV2ZXJTSDo6U2V0UHJv cGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwp CnsKICBpZiAoOjpKU19UeXBlT2ZWYWx1ZShjeCwgKnZwKSAhPSBKU1RZUEVfRlVOQ1RJT04gfHwg ISgoKGlkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7CiAgICByZXR1 cm4gMDsKICB9CgogIFBSQm9vbCBkaWRfY29tcGlsZTsKCiAgcmV0dXJuIFJlZ2lzdGVyQ29tcGls ZUhhbmRsZXIod3JhcHBlciwgY3gsIG9iaiwgaWQsIDAsICZkaWRfY29tcGlsZSk7Cn0KIyA0NTA3 ICJuc0RPTUNsYXNzSW5mby5jcHAiCm5zcmVzdWx0Cm5zRWxlbWVudFNIOjpQb3N0Q3JlYXRlKG5z SVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAg ICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmopCnsKICBuc3Jlc3VsdCBydiA9IG5zTm9kZVNI OjpQb3N0Q3JlYXRlKHdyYXBwZXIsIGN4LCBvYmopOwogIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4 ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5z SVN1cHBvcnRzPiBuYXRpdmU7CgogIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhu YXRpdmUpKTsKCiAgbnNDT01QdHI8bnNJQ29udGVudD4gY29udGVudChkb19RdWVyeUludGVyZmFj ZShuYXRpdmUpKTsKICBkbyB7IGlmICghKGNvbnRlbnQpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRv YzsKCiAgY29udGVudC0+R2V0RG9jdW1lbnQoKmdldHRlcl9BZGRSZWZzKGRvYykpOwoKICBpZiAo IWRvYykgewoKCgogICAgcmV0dXJuIDA7CiAgfQoKCiAgbnNDT01QdHI8bnNJUHJlc1NoZWxsPiBz aGVsbDsKICBkb2MtPkdldFNoZWxsQXQoMCwgZ2V0dGVyX0FkZFJlZnMoc2hlbGwpKTsKCiAgaWYg KCFzaGVsbCkgewogICAgcmV0dXJuIDA7CiAgfQoKICBuc0lGcmFtZSogZnJhbWUgPSAwOwogIHNo ZWxsLT5HZXRQcmltYXJ5RnJhbWVGb3IoY29udGVudCwgJmZyYW1lKTsKCiAgaWYgKGZyYW1lKSB7 CgoKICAgIHJldHVybiAwOwogIH0KCgoKCiAgbnNDT01QdHI8bnNJQmluZGluZ01hbmFnZXI+IGJp bmRpbmdNYW5hZ2VyOwogIGRvYy0+R2V0QmluZGluZ01hbmFnZXIoZ2V0dGVyX0FkZFJlZnMoYmlu ZGluZ01hbmFnZXIpKTsKICBkbyB7IGlmICghKGJpbmRpbmdNYW5hZ2VyKSkgeyA7IHJldHVybiAo KG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5zSVhC TEJpbmRpbmc+IGJpbmRpbmc7CiAgYmluZGluZ01hbmFnZXItPkdldEJpbmRpbmcoY29udGVudCwg Z2V0dGVyX0FkZFJlZnMoYmluZGluZykpOwoKICBpZiAoYmluZGluZykgewoKCgogICAgcmV0dXJu IDA7CiAgfQoKCiAgbnNDT01QdHI8bnNJUHJlc0NvbnRleHQ+IHBjdHg7CiAgc2hlbGwtPkdldFBy ZXNDb250ZXh0KGdldHRlcl9BZGRSZWZzKHBjdHgpKTsKICBkbyB7IGlmICghKHBjdHgpKSB7IDsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCgoKCgogIG5z QXV0b1N0cmluZyBiaW5kaW5nVVJMOwogIHBjdHgtPkdldFhCTEJpbmRpbmdVUkwoY29udGVudCwg YmluZGluZ1VSTCk7CiAgaWYgKGJpbmRpbmdVUkwuSXNFbXB0eSgpKSB7CgogICAgcmV0dXJuIDA7 CiAgfQoKCiAgUFJCb29sIGR1bW15OwoKICBuc0NPTVB0cjxuc0lYQkxTZXJ2aWNlPiB4YmxTZXJ2 aWNlKGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy94Ymw7MSIpKTsKICBkbyB7IGlmICghKHhi bFNlcnZpY2UpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNDAxMTFMKTsgfSB9IHdoaWxl ICgwKTsKCiAgeGJsU2VydmljZS0+TG9hZEJpbmRpbmdzKGNvbnRlbnQsIGJpbmRpbmdVUkwsIDAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKGJpbmRpbmcpLCAmZHVt bXkpOwoKICBpZiAoYmluZGluZykgewogICAgYmluZGluZy0+RXhlY3V0ZUF0dGFjaGVkSGFuZGxl cigpOwogIH0KCiAgcmV0dXJuIDA7Cn0KCgoKCm5zcmVzdWx0Cm5zQXJyYXlTSDo6R2V0SXRlbUF0 KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAg ICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCkKewogIG5zQ09NUHRyPG5zSURPTU5vZGVMaXN0PiBs aXN0KGRvX1F1ZXJ5SW50ZXJmYWNlKGFOYXRpdmUpKTsKICBkbyB7IGlmICghKGxpc3QpKSB7IDsg cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9N Tm9kZSAqbm9kZSA9IDA7CiAgbnNyZXN1bHQgcnYgPSBsaXN0LT5JdGVtKGFJbmRleCwgJm5vZGUp OwoKICAqYVJlc3VsdCA9IG5vZGU7CgogIHJldHVybiBydjsKfQoKbnNyZXN1bHQKbnNBcnJheVNI OjpHZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRl eHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBq c3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCkKewogIFBSQm9vbCBpc19udW1iZXIgPSAwOwogIGlu dDMyIG4gPSBHZXRBcnJheUluZGV4RnJvbUlkKGN4LCBpZCwgJmlzX251bWJlcik7CgogIGlmIChp c19udW1iZXIpIHsKICAgIGlmIChuIDwgMCkgewogICAgICByZXR1cm4gKChuc3Jlc3VsdCkgKCgo UFJVaW50MzIpKDEpPDwzMSkgfCAoKFBSVWludDMyKSgxNCArMHg0NSk8PDE2KSB8ICgoUFJVaW50 MzIpKDEpKSkgKTsKICAgIH0KCiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZlOwogICAg d3JhcHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICAgIG5zQ09NUHRy PG5zSVN1cHBvcnRzPiBhcnJheV9pdGVtOwoKICAgIG5zcmVzdWx0IHJ2ID0gR2V0SXRlbUF0KG5h dGl2ZSwgbiwgZ2V0dGVyX0FkZFJlZnMoYXJyYXlfaXRlbSkpOwogICAgZG8geyBpZiAoISgoISgo cnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICBp ZiAoYXJyYXlfaXRlbSkgewogICAgICBydiA9IFdyYXBOYXRpdmUoY3gsIDo6SlNfR2V0R2xvYmFs T2JqZWN0KGN4KSwgYXJyYXlfaXRlbSwKICAgICAgICAgICAgICAgICAgICAgIG5zQ09NVHlwZUlu Zm88bnNJU3VwcG9ydHM+OjpHZXRJSUQoKSwgdnApOwogICAgICBkbyB7IGlmICghKCghKChydikg JiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwogICAgfQogIH0K CiAgcmV0dXJuIDA7Cn0KCgoKCm5zcmVzdWx0Cm5zTmFtZWRBcnJheVNIOjpHZXRQcm9wZXJ0eShu c0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqX3JldHZhbCkKewogIGlmICgoKChp ZCkgJiAoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkgPT0gMHg0KSkgewogICAgbnNDT01QdHI8 bnNJU3VwcG9ydHM+IG5hdGl2ZTsKICAgIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVm cyhuYXRpdmUpKTsKCiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gaXRlbTsKCiAgICBKU1N0cmlu ZyAqc3RyID0gKChKU1N0cmluZyAqKSgodm9pZCAqKSgoaWQpICYgfihqc3ZhbCkoKChKU1VpbnQz MikxIDw8ICgzKSkgLSAxKSkpKTsKICAgIG5zRGVwZW5kZW50U3RyaW5nIG5hbWUocmVpbnRlcnBy ZXRfY2FzdDwgY29uc3QgUFJVbmljaGFyICogPig6OkpTX0dldFN0cmluZ0NoYXJzKHN0cikpLAoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpKU19HZXRTdHJpbmdMZW5ndGgoc3RyKSk7Cgog ICAgbnNyZXN1bHQgcnYgPSBHZXROYW1lZEl0ZW0obmF0aXZlLCBuYW1lLCBnZXR0ZXJfQWRkUmVm cyhpdGVtKSk7CiAgICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0 dXJuIHJ2OyB9IH0gd2hpbGUgKDApOwoKICAgIGlmIChpdGVtKSB7CiAgICAgIHJ2ID0gV3JhcE5h dGl2ZShjeCwgOjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCBpdGVtLAogICAgICAgICAgICAgICAg ICAgICAgbnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz46OkdldElJRCgpLCB2cCk7CiAgICAgIGRv IHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGls ZSAoMCk7CgogICAgICByZXR1cm4gMDsKICAgIH0KCiAgICByZXR1cm4gMDsKICB9CgogIHJldHVy biBuc0FycmF5U0g6OkdldFByb3BlcnR5KHdyYXBwZXIsIGN4LCBvYmosIGlkLCB2cCwgX3JldHZh bCk7Cn0KCgoKCm5zcmVzdWx0Cm5zTmFtZWROb2RlTWFwU0g6OkdldEl0ZW1BdChuc0lTdXBwb3J0 cyAqYU5hdGl2ZSwgUFJVaW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJU3VwcG9ydHMgKiphUmVzdWx0KQp7CiAgbnNDT01QdHI8bnNJRE9NTmFtZWROb2RlTWFwPiBt YXAoZG9fUXVlcnlJbnRlcmZhY2UoYU5hdGl2ZSkpOwogIGRvIHsgaWYgKCEobWFwKSkgeyA7IHJl dHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zSURPTU5v ZGUgKm5vZGUgPSAwOwogIG5zcmVzdWx0IHJ2ID0gbWFwLT5JdGVtKGFJbmRleCwgJm5vZGUpOwoK ICAqYVJlc3VsdCA9IG5vZGU7CgogIHJldHVybiBydjsKfQoKbnNyZXN1bHQKbnNOYW1lZE5vZGVN YXBTSDo6R2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcm IGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVz dWx0KQp7CiAgbnNDT01QdHI8bnNJRE9NTmFtZWROb2RlTWFwPiBtYXAoZG9fUXVlcnlJbnRlcmZh Y2UoYU5hdGl2ZSkpOwogIGRvIHsgaWYgKCEobWFwKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAw eDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zSURPTU5vZGUgKm5vZGUgPSAwOwogIG5z cmVzdWx0IHJ2ID0gbWFwLT5HZXROYW1lZEl0ZW0oYU5hbWUsICZub2RlKTsKCiAgKmFSZXN1bHQg PSBub2RlOwoKICByZXR1cm4gcnY7Cn0KCgoKCm5zcmVzdWx0Cm5zSFRNTENvbGxlY3Rpb25TSDo6 R2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCkKewogIG5zQ09NUHRy PG5zSURPTUhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uKGRvX1F1ZXJ5SW50ZXJmYWNlKGFOYXRp dmUpKTsKICBkbyB7IGlmICghKGNvbGxlY3Rpb24pKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4 ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NTm9kZSAqbm9kZSA9IDA7CiAgbnNy ZXN1bHQgcnYgPSBjb2xsZWN0aW9uLT5JdGVtKGFJbmRleCwgJm5vZGUpOwoKICAqYVJlc3VsdCA9 IG5vZGU7CgogIHJldHVybiBydjsKfQoKbnNyZXN1bHQKbnNIVE1MQ29sbGVjdGlvblNIOjpHZXRO YW1lZEl0ZW0obnNJU3VwcG9ydHMgKmFOYXRpdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCkKewogIG5zQ09NUHRyPG5zSURPTUhUTUxDb2xs ZWN0aW9uPiBjb2xsZWN0aW9uKGRvX1F1ZXJ5SW50ZXJmYWNlKGFOYXRpdmUpKTsKICBkbyB7IGlm ICghKGNvbGxlY3Rpb24pKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9 IHdoaWxlICgwKTsKCiAgbnNJRE9NTm9kZSAqbm9kZSA9IDA7CiAgbnNyZXN1bHQgcnYgPSBjb2xs ZWN0aW9uLT5OYW1lZEl0ZW0oYU5hbWUsICZub2RlKTsKCiAgKmFSZXN1bHQgPSBub2RlOwoKICBy ZXR1cm4gcnY7Cn0KCgoKbnNyZXN1bHQKbnNDb250ZW50TGlzdFNIOjpQcmVDcmVhdGUobnNJU3Vw cG9ydHMgKm5hdGl2ZU9iaiwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgSlNPYmplY3QgKmdsb2JhbE9iaiwgSlNPYmplY3QgKipwYXJlbnRPYmopCnsKICBuc0NPTVB0 cjxuc0lDb250ZW50TGlzdD4gY29udGVudExpc3QoZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlT2Jq KSk7CiAgOwoKICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZlX3BhcmVudDsKICBjb250ZW50 TGlzdC0+R2V0UGFyZW50T2JqZWN0KGdldHRlcl9BZGRSZWZzKG5hdGl2ZV9wYXJlbnQpKTsKCiAg aWYgKCFuYXRpdmVfcGFyZW50KSB7CiAgICAqcGFyZW50T2JqID0gZ2xvYmFsT2JqOwogICAgcmV0 dXJuIDA7CiAgfQoKICBqc3ZhbCB2OwogIG5zcmVzdWx0IHJ2ID0gV3JhcE5hdGl2ZShjeCwgOjpK U19HZXRHbG9iYWxPYmplY3QoY3gpLCBuYXRpdmVfcGFyZW50LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0SUlEKCksICZ2KTsKCiAgKnBh cmVudE9iaiA9ICgoSlNPYmplY3QgKikoKHZvaWQgKikoKHYpICYgfihqc3ZhbCkoKChKU1VpbnQz MikxIDw8ICgzKSkgLSAxKSkpKTsKCiAgcmV0dXJuIHJ2Owp9CgoKCm5zcmVzdWx0Cm5zRm9ybUNv bnRyb2xMaXN0U0g6OkdldE5hbWVkSXRlbShuc0lTdXBwb3J0cyAqYU5hdGl2ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYU5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpCnsKICBuc0NP TVB0cjxuc0lET01OU0hUTUxGb3JtQ29udHJvbExpc3Q+IGxpc3QoZG9fUXVlcnlJbnRlcmZhY2Uo YU5hdGl2ZSkpOwogIGRvIHsgaWYgKCEobGlzdCkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4 MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICByZXR1cm4gbGlzdC0+TmFtZWRJdGVtKGFOYW1l LCBhUmVzdWx0KTsKfQoKCgpzdGF0aWMgaW5saW5lIFBSQm9vbApkb2N1bWVudE5lZWRzU2VjdXJp dHlDaGVjayhKU0NvbnRleHQgKmN4LCBuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVy KQp7CgogIEpTT2JqZWN0ICp3cmFwcGVyX29iaiA9IDA7CiAgd3JhcHBlci0+R2V0SlNPYmplY3Qo JndyYXBwZXJfb2JqKTsKCiAgSlNPYmplY3QgKndyYXBwZXJfZ2xvYmFsID0gR2V0R2xvYmFsSlNP YmplY3QoY3gsIHdyYXBwZXJfb2JqKTsKIyA0ODA5ICJuc0RPTUNsYXNzSW5mby5jcHAiCiAgaWYg KHdyYXBwZXJfZ2xvYmFsICE9IDo6SlNfR2V0R2xvYmFsT2JqZWN0KGN4KSkgewoKCgogICAgcmV0 dXJuIDE7CiAgfQoKCgoKCgoKICBKU09iamVjdCAqZnVuY3Rpb25fb2JqID0gMDsKICBKU1N0YWNr RnJhbWUgKmZwID0gMDsKCiAgZG8gewogICAgZnAgPSA6OkpTX0ZyYW1lSXRlcmF0b3IoY3gsICZm cCk7CgogICAgaWYgKCFmcCkgewogICAgICBpZiAoIWZ1bmN0aW9uX29iaikgewoKCgoKCiAgICAg ICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIGJyZWFrOwogICAgfQoKICAgIGZ1bmN0aW9uX29i aiA9IDo6SlNfR2V0RnJhbWVGdW5jdGlvbk9iamVjdChjeCwgZnApOwogIH0gd2hpbGUgKCFmdW5j dGlvbl9vYmopOwoKCiAgSlNPYmplY3QgKmZ1bmN0aW9uX2dsb2JhbCA9IEdldEdsb2JhbEpTT2Jq ZWN0KGN4LCBmdW5jdGlvbl9vYmopOwoKICBpZiAoZnVuY3Rpb25fZ2xvYmFsICE9IHdyYXBwZXJf Z2xvYmFsKSB7CgoKCgogICAgcmV0dXJuIDE7CiAgfQoKCgoKCiAgcmV0dXJuIDA7Cn0KCm5zcmVz dWx0Cm5zRG9jdW1lbnRTSDo6QWRkUHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAq d3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVj dCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBS Qm9vbCAqX3JldHZhbCkKewoKCiAgaWYgKCFzRG9TZWN1cml0eUNoZWNrSW5BZGRQcm9wZXJ0eSkg ewogICAgcmV0dXJuIDA7CiAgfQoKICBpZiAoaWQgPT0gc0xvY2F0aW9uX2lkKSB7CgoKCiAgICBy ZXR1cm4gKChuc3Jlc3VsdCkgKCgoUFJVaW50MzIpKDEpPDwzMSkgfCAoKFBSVWludDMyKSgxNCAr MHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEwMDApKSkgKTsKICB9CgogIHJldHVybiAwOwp9Cgpu c3Jlc3VsdApuc0RvY3VtZW50U0g6OkRlbFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRp dmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSlNP YmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBQUkJvb2wgKl9yZXR2YWwpCnsKICBpZiAoaWQgPT0gc0xvY2F0aW9uX2lkKSB7CgoKCiAgICBy ZXR1cm4gKChuc3Jlc3VsdCkgKCgoUFJVaW50MzIpKDEpPDwzMSkgfCAoKFBSVWludDMyKSgxNCAr MHg0NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEwMDApKSkgKTsKICB9CgogIHJldHVybiAwOwp9Cgpu c3Jlc3VsdApuc0RvY3VtZW50U0g6Ok5ld1Jlc29sdmUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2 ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2Jq ZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBmbGFncywKICAgICAgICAgICAgICAgICAgICAg ICAgIEpTT2JqZWN0ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKGlkID09IHNMb2Nh dGlvbl9pZCkgewoKCgoKCiAgICBKU1N0cmluZyAqc3RyID0gKChKU1N0cmluZyAqKSgodm9pZCAq KSgoaWQpICYgfihqc3ZhbCkoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkpKTsKICAgIG5zQ09N UHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgICB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0Fk ZFJlZnMobmF0aXZlKSk7CiAgICBkbyB7IGlmICghKG5hdGl2ZSkpIHsgOyByZXR1cm4gKChuc3Jl c3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgIG5zQ09NUHRyPG5zSURPTU5T RG9jdW1lbnQ+IGRvYyhkb19RdWVyeUludGVyZmFjZShuYXRpdmUpKTsKICAgIGRvIHsgaWYgKCEo ZG9jKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7 CgogICAgbnNDT01QdHI8bnNJRE9NTG9jYXRpb24+IGxvY2F0aW9uOwogICAgbnNyZXN1bHQgcnYg PSBkb2MtPkdldExvY2F0aW9uKGdldHRlcl9BZGRSZWZzKGxvY2F0aW9uKSk7CiAgICBkbyB7IGlm ICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0gd2hpbGUgKDAp OwoKICAgIGpzdmFsIHY7CgogICAgcnYgPSBXcmFwTmF0aXZlKGN4LCBvYmosIGxvY2F0aW9uLCBu c0NPTVR5cGVJbmZvPG5zSURPTUxvY2F0aW9uPjo6R2V0SUlEKCksICZ2KTsKICAgIGRvIHsgaWYg KCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7 CgogICAgc0RvU2VjdXJpdHlDaGVja0luQWRkUHJvcGVydHkgPSAwOwoKICAgIEpTQm9vbCBvayA9 IDo6SlNfRGVmaW5lVUNQcm9wZXJ0eShjeCwgb2JqLCA6OkpTX0dldFN0cmluZ0NoYXJzKHN0ciks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpKU19HZXRTdHJpbmdMZW5n dGgoc3RyKSwgdiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw KTsKCiAgICBzRG9TZWN1cml0eUNoZWNrSW5BZGRQcm9wZXJ0eSA9IDE7CgogICAgaWYgKCFvaykg ewogICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwNUwpOwogICAgfQoKICAgICpvYmpw ID0gb2JqOwoKICAgIHJldHVybiAwOwogIH0KCiAgcmV0dXJuIG5zTm9kZVNIOjpOZXdSZXNvbHZl KHdyYXBwZXIsIGN4LCBvYmosIGlkLCBmbGFncywgb2JqcCwgX3JldHZhbCk7Cn0KCm5zcmVzdWx0 Cm5zRG9jdW1lbnRTSDo6R2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3Jh cHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAq b2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpCnsKICBpZiAoZG9jdW1l bnROZWVkc1NlY3VyaXR5Q2hlY2soY3gsIHdyYXBwZXIpKSB7CiAgICBuc3Jlc3VsdCBydiA9CiAg ICAgIGRvQ2hlY2tQcm9wZXJ0eUFjY2VzcyhjeCwgb2JqLCBpZCwgd3JhcHBlciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zSVhQQ1NlY3VyaXR5TWFuYWdlcjo6QUNDRVNTX0dFVF9QUk9Q RVJUWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwoKICAgIGlmICgoKHJ2KSAmIDB4 ODAwMDAwMDApKSB7CgoKCiAgICAgICpfcmV0dmFsID0gMDsKCiAgICAgICp2cCA9ICgoanN2YWwp KDApKTsKICAgIH0KICB9CgogIHJldHVybiAwOwp9Cgpuc3Jlc3VsdApuc0RvY3VtZW50U0g6OlNl dFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAq Y3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpz dmFsICp2cCwgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKGRvY3VtZW50TmVlZHNTZWN1cml0eUNo ZWNrKGN4LCB3cmFwcGVyKSkgewogICAgbnNyZXN1bHQgcnYgPQogICAgICBkb0NoZWNrUHJvcGVy dHlBY2Nlc3MoY3gsIG9iaiwgaWQsIHdyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc0lYUENTZWN1cml0eU1hbmFnZXI6OkFDQ0VTU19TRVRfUFJPUEVSVFksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwKTsKCiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgewoKCgog ICAgICAqX3JldHZhbCA9IDA7CgogICAgICByZXR1cm4gMDsKICAgIH0KICB9CgogIGlmIChpZCA9 PSBzTG9jYXRpb25faWQpIHsKICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgICB3 cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMobmF0aXZlKSk7CiAgICBkbyB7IGlmICgh KG5hdGl2ZSkpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUg KDApOwoKICAgIG5zQ09NUHRyPG5zSURPTU5TRG9jdW1lbnQ+IGRvYyhkb19RdWVyeUludGVyZmFj ZShuYXRpdmUpKTsKICAgIGRvIHsgaWYgKCEoZG9jKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAw eDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNDT01QdHI8bnNJRE9NTG9jYXRpb24+ IGxvY2F0aW9uOwoKICAgIG5zcmVzdWx0IHJ2ID0gZG9jLT5HZXRMb2NhdGlvbihnZXR0ZXJfQWRk UmVmcyhsb2NhdGlvbikpOwogICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkg eyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICBpZiAobG9jYXRpb24pIHsKICAgICAg SlNTdHJpbmcgKnZhbCA9IDo6SlNfVmFsdWVUb1N0cmluZyhjeCwgKnZwKTsKICAgICAgZG8geyBp ZiAoISh2YWwpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxl ICgwKTsKCiAgICAgIG5zRGVwZW5kZW50U3RyaW5nIGhyZWYocmVpbnRlcnByZXRfY2FzdDwgY29u c3QgUFJVbmljaGFyICogPig6OkpTX0dldFN0cmluZ0NoYXJzKHZhbCkpLAoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OkpTX0dldFN0cmluZ0xlbmd0aCh2YWwpKTsKCiAgICAgIG5zcmVz dWx0IHJ2ID0gbG9jYXRpb24tPlNldEhyZWYoaHJlZik7CiAgICAgIGRvIHsgaWYgKCEoKCEoKHJ2 KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgogICAgICBy ZXR1cm4gV3JhcE5hdGl2ZShjeCwgb2JqLCBsb2NhdGlvbiwgbnNDT01UeXBlSW5mbzxuc0lET01M b2NhdGlvbj46OkdldElJRCgpLCB2cCk7CiAgICB9CiAgfQoKICByZXR1cm4gbnNOb2RlU0g6OlNl dFByb3BlcnR5KHdyYXBwZXIsIGN4LCBvYmosIGlkLCB2cCwgX3JldHZhbCk7Cn0KCm5zcmVzdWx0 Cm5zRG9jdW1lbnRTSDo6R2V0RmxhZ3MoUFJVaW50MzIqIGFGbGFncykKewogICphRmxhZ3MgPSAo bnNJQ2xhc3NJbmZvOjpNQUlOX1RIUkVBRF9PTkxZIHwgbnNJQ2xhc3NJbmZvOjpET01fT0JKRUNU KTsKCiAgcmV0dXJuIDA7Cn0KCgoKCgpuc3Jlc3VsdApuc0hUTUxEb2N1bWVudFNIOjpSZXNvbHZl SW1wbChKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYUENv bm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBqc3ZhbCBpZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJU3VwcG9ydHMgKipyZXN1bHQpCnsKICBuc0NPTVB0cjxuc0lTdXBwb3J0 cz4gbmF0aXZlOwoKICB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMobmF0aXZlKSk7 CiAgOwoKICBuc0NPTVB0cjxuc0lIVE1MRG9jdW1lbnQ+IGRvYyhkb19RdWVyeUludGVyZmFjZShu YXRpdmUpKTsKICBkbyB7IGlmICghKGRvYykpIHsgOyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAw ZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKCgoKICBKU1N0cmluZyAqc3RyID0gSlNfVmFsdWVUb1N0 cmluZyhjeCwgaWQpOwoKICBjb25zdCBuc0RlcGVuZGVudFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0 X2Nhc3Q8IGNvbnN0IFBSVW5pY2hhciAqID4oOjpKU19HZXRTdHJpbmdDaGFycyhzdHIpKSwKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OkpTX0dldFN0cmluZ0xlbmd0aChzdHIpKTsK CiAgcmV0dXJuIGRvYy0+UmVzb2x2ZU5hbWUobmFtZSwgMCwgcmVzdWx0KTsKfQoKCkpTQm9vbApu c0hUTUxEb2N1bWVudFNIOjpEb2N1bWVudE9wZW4oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9i aiwgdWludE4gYXJnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICphcmd2 LCBqc3ZhbCAqcnZhbCkKewogIGlmIChhcmdjID4gMikgewogICAgSlNPYmplY3QgKmdsb2JhbCA9 IEdldEdsb2JhbEpTT2JqZWN0KGN4LCBvYmopOwoKCgoKICAgIHJldHVybiA6OkpTX0NhbGxGdW5j dGlvbk5hbWUoY3gsIGdsb2JhbCwgIm9wZW4iLCBhcmdjLCBhcmd2LCBydmFsKTsKICB9CgogIG5z Q09NUHRyPG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmU+IHdyYXBwZXI7CgogIG5zcmVzdWx0IHJ2 ID0KICAgIHNYUENvbm5lY3QtPkdldFdyYXBwZWROYXRpdmVPZkpTT2JqZWN0KGN4LCBvYmosIGdl dHRlcl9BZGRSZWZzKHdyYXBwZXIpKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAw KSkpKSB7IDsgcmV0dXJuIChKU0ludG4pMDsgfSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJ U3VwcG9ydHM+IG5hdGl2ZTsKICBydiA9IHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVm cyhuYXRpdmUpKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0 dXJuIChKU0ludG4pMDsgfSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJRE9NTlNIVE1MRG9j dW1lbnQ+IGRvYyhkb19RdWVyeUludGVyZmFjZShuYXRpdmUpKTsKICBkbyB7IGlmICghKGRvYykp IHsgOyByZXR1cm4gKEpTSW50bikwOyB9IH0gd2hpbGUgKDApOwoKICBuc0NPTVB0cjxuc0lET01E b2N1bWVudD4gcmV0dmFsOwoKICBydiA9IGRvYy0+T3BlbihnZXR0ZXJfQWRkUmVmcyhyZXR2YWwp KTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIDA7IH0g fSB3aGlsZSAoMCk7CgogIHJ2ID0gV3JhcE5hdGl2ZShjeCwgOjpKU19HZXRHbG9iYWxPYmplY3Qo Y3gpLCByZXR2YWwsCiAgICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88bnNJRE9NRG9jdW1l bnQ+OjpHZXRJSUQoKSwgcnZhbCk7CiAgOwoKICByZXR1cm4gKCEoKHJ2KSAmIDB4ODAwMDAwMDAp KTsKfQoKbnNyZXN1bHQKbnNIVE1MRG9jdW1lbnRTSDo6TmV3UmVzb2x2ZShuc0lYUENvbm5lY3RX cmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBmbGFncywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKm9ianAsIFBSQm9vbCAqX3JldHZhbCkK ewogIGlmICghKGZsYWdzICYgMHgwMikpIHsKICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiByZXN1 bHQ7CgogICAgbnNyZXN1bHQgcnYgPSBSZXNvbHZlSW1wbChjeCwgd3JhcHBlciwgaWQsIGdldHRl cl9BZGRSZWZzKHJlc3VsdCkpOwogICAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkp KSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgICBpZiAocmVzdWx0KSB7CiAgICAg IEpTU3RyaW5nICpzdHIgPSBKU19WYWx1ZVRvU3RyaW5nKGN4LCBpZCk7CgogICAgICBKU0Jvb2wg b2sgPSAqX3JldHZhbCA9CiAgICAgICAgOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBvYmosIDo6 SlNfR2V0U3RyaW5nQ2hhcnMoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpK U19HZXRTdHJpbmdMZW5ndGgoc3RyKSwgKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkp IDw8IDEpIHwgMHgxKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CiAg ICAgICpvYmpwID0gb2JqOwoKICAgICAgcmV0dXJuIG9rID8gMCA6ICgobnNyZXN1bHQpIDB4ODAw MDQwMDVMKTsKICAgIH0KCiAgICBpZiAoaWQgPT0gc09wZW5faWQpIHsKICAgICAgSlNTdHJpbmcg KnN0ciA9ICgoSlNTdHJpbmcgKikoKHZvaWQgKikoKGlkKSAmIH4oanN2YWwpKCgoSlNVaW50MzIp MSA8PCAoMykpIC0gMSkpKSk7CiAgICAgIEpTRnVuY3Rpb24gKmZuYyA9CiAgICAgICAgOjpKU19E ZWZpbmVGdW5jdGlvbihjeCwgb2JqLCA6OkpTX0dldFN0cmluZ0J5dGVzKHN0ciksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEb2N1bWVudE9wZW4sIDAsIDB4MDEpOwoKICAgICAgKm9ianAg PSBvYmo7CgogICAgICByZXR1cm4gZm5jID8gMCA6ICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsK ICAgIH0KICB9CgogIHJldHVybiBuc0RvY3VtZW50U0g6Ok5ld1Jlc29sdmUod3JhcHBlciwgY3gs IG9iaiwgaWQsIGZsYWdzLCBvYmpwLCBfcmV0dmFsKTsKfQoKbnNyZXN1bHQKbnNIVE1MRG9jdW1l bnRTSDo6R2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwg anN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCwgUFJCb29s ICpfcmV0dmFsKQp7CgoKICBuc3Jlc3VsdCBydiA9IG5zRG9jdW1lbnRTSDo6R2V0UHJvcGVydHko d3JhcHBlciwgY3gsIG9iaiwgaWQsIHZwLCBfcmV0dmFsKTsKICBpZiAoISpfcmV0dmFsKSB7CiAg ICByZXR1cm4gcnY7CiAgfQoKICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gcmVzdWx0OwoKICBydiA9 IFJlc29sdmVJbXBsKGN4LCB3cmFwcGVyLCBpZCwgZ2V0dGVyX0FkZFJlZnMocmVzdWx0KSk7CiAg ZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdo aWxlICgwKTsKCiAgaWYgKHJlc3VsdCkgewogICAgcmV0dXJuIFdyYXBOYXRpdmUoY3gsIDo6SlNf R2V0R2xvYmFsT2JqZWN0KGN4KSwgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgbnNDT01U eXBlSW5mbzxuc0lTdXBwb3J0cz46OkdldElJRCgpLCB2cCk7CiAgfQoKICByZXR1cm4gMDsKfQoK CgoKSlNCb29sCm5zSFRNTEVsZW1lbnRTSDo6U2Nyb2xsSW50b1ZpZXcoSlNDb250ZXh0ICpjeCwg SlNPYmplY3QgKm9iaiwgdWludE4gYXJnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqc3ZhbCAqYXJndiwganN2YWwgKnJ2YWwpCnsKICBuc0NPTVB0cjxuc0lYUENvbm5lY3RXcmFw cGVkTmF0aXZlPiB3cmFwcGVyOwoKICBuc3Jlc3VsdCBydiA9CiAgICBzWFBDb25uZWN0LT5HZXRX cmFwcGVkTmF0aXZlT2ZKU09iamVjdChjeCwgb2JqLCBnZXR0ZXJfQWRkUmVmcyh3cmFwcGVyKSk7 CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiAoSlNJbnRu KTA7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgcnYg PSB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMobmF0aXZlKSk7CiAgZG8geyBpZiAo ISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiAoSlNJbnRuKTA7IH0gfSB3aGls ZSAoMCk7CgogIG5zQ09NUHRyPG5zSURPTU5TSFRNTEVsZW1lbnQ+IGVsZW1lbnQoZG9fUXVlcnlJ bnRlcmZhY2UobmF0aXZlKSk7CiAgZG8geyBpZiAoIShlbGVtZW50KSkgeyA7IHJldHVybiAoSlNJ bnRuKTA7IH0gfSB3aGlsZSAoMCk7CgogIEpTQm9vbCB0b3AgPSAoSlNJbnRuKTE7CgogIGlmIChh cmdjID4gMCkgewogICAgOjpKU19WYWx1ZVRvQm9vbGVhbihjeCwgYXJndlswXSwgJnRvcCk7CiAg fQoKICBydiA9IGVsZW1lbnQtPlNjcm9sbEludG9WaWV3KHRvcCk7CgogICpydmFsID0gKCgoanN2 YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgxKTsKCiAgcmV0dXJuICghKChy dikgJiAweDgwMDAwMDAwKSk7Cn0KCm5zcmVzdWx0Cm5zSFRNTEVsZW1lbnRTSDo6TmV3UmVzb2x2 ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIFBSVWludDMy IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwLCBQUkJv b2wgKl9yZXR2YWwpCnsKICBpZiAoaWQgPT0gc1Njcm9sbEludG9WaWV3X2lkICYmICEoMHgwMiAm IGZsYWdzKSkgewogICAgSlNTdHJpbmcgKnN0ciA9ICgoSlNTdHJpbmcgKikoKHZvaWQgKikoKGlk KSAmIH4oanN2YWwpKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpKSk7CiAgICBKU0Z1bmN0aW9u ICpjZm5jID0KICAgICAgOjpKU19EZWZpbmVGdW5jdGlvbihjeCwgb2JqLCA6OkpTX0dldFN0cmlu Z0J5dGVzKHN0ciksIFNjcm9sbEludG9WaWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgIDAs IDApOwoKICAgICpvYmpwID0gb2JqOwoKICAgIHJldHVybiBjZm5jID8gMCA6ICgobnNyZXN1bHQp IDB4ODAwMGZmZmZMKTsKICB9CgogIHJldHVybiBuc0VsZW1lbnRTSDo6TmV3UmVzb2x2ZSh3cmFw cGVyLCBjeCwgb2JqLCBpZCwgZmxhZ3MsIG9ianAsIF9yZXR2YWwpOwp9CgoKCgoKbnNyZXN1bHQK bnNIVE1MRm9ybUVsZW1lbnRTSDo6RmluZE5hbWVkSXRlbShuc0lGb3JtICphRm9ybSwgSlNTdHJp bmcgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAq KmFSZXN1bHQpCnsKICAqYVJlc3VsdCA9IDA7CgogIG5zRGVwZW5kZW50U3RyaW5nIG5hbWUocmVp bnRlcnByZXRfY2FzdDwgY29uc3QgUFJVbmljaGFyICogPig6OkpTX0dldFN0cmluZ0NoYXJzKHN0 cikpLAoKICAgICAgICAgICAgICAgICAgICAgICAgIDo6SlNfR2V0U3RyaW5nTGVuZ3RoKHN0cikp OwoKICBhRm9ybS0+UmVzb2x2ZU5hbWUobmFtZSwgYVJlc3VsdCk7CgogIGlmICghKmFSZXN1bHQp IHsKICAgIG5zQ09NUHRyPG5zSUNvbnRlbnQ+IGNvbnRlbnQoZG9fUXVlcnlJbnRlcmZhY2UoYUZv cm0pKTsKICAgIG5zQ09NUHRyPG5zSURPTUhUTUxGb3JtRWxlbWVudD4gZm9ybV9lbGVtZW50KGRv X1F1ZXJ5SW50ZXJmYWNlKGFGb3JtKSk7CgogICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYzsK ICAgIGNvbnRlbnQtPkdldERvY3VtZW50KCpnZXR0ZXJfQWRkUmVmcyhkb2MpKTsKCiAgICBuc0NP TVB0cjxuc0lIVE1MRG9jdW1lbnQ+IGh0bWxfZG9jKGRvX1F1ZXJ5SW50ZXJmYWNlKGRvYykpOwoK ICAgIGlmIChodG1sX2RvYyAmJiBmb3JtX2VsZW1lbnQpIHsKICAgICAgaHRtbF9kb2MtPlJlc29s dmVOYW1lKG5hbWUsIGZvcm1fZWxlbWVudCwgYVJlc3VsdCk7CiAgICB9CiAgfQoKICByZXR1cm4g MDsKfQoKbnNyZXN1bHQKbnNIVE1MRm9ybUVsZW1lbnRTSDo6TmV3UmVzb2x2ZShuc0lYUENvbm5l Y3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBSVWludDMyIGZsYWdzLCBKU09iamVjdCAqKm9ianAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sICpfcmV0dmFsKQp7CiAgaWYgKCghKDB4MDIg JiBmbGFncykpICYmICgoKGlkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQp KSB7CiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbmF0aXZlOwoKICAgIHdyYXBwZXItPkdldE5h dGl2ZShnZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsKICAgIDsKCiAgICBuc0NPTVB0cjxuc0lGb3Jt PiBmb3JtKGRvX1F1ZXJ5SW50ZXJmYWNlKG5hdGl2ZSkpOwogICAgbnNDT01QdHI8bnNJU3VwcG9y dHM+IHJlc3VsdDsKCiAgICBKU1N0cmluZyAqc3RyID0gKChKU1N0cmluZyAqKSgodm9pZCAqKSgo aWQpICYgfihqc3ZhbCkoKChKU1VpbnQzMikxIDw8ICgzKSkgLSAxKSkpKTsKICAgIEZpbmROYW1l ZEl0ZW0oZm9ybSwgc3RyLCBnZXR0ZXJfQWRkUmVmcyhyZXN1bHQpKTsKCiAgICBpZiAocmVzdWx0 KSB7CiAgICAgICpfcmV0dmFsID0gOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBvYmosIDo6SlNf R2V0U3RyaW5nQ2hhcnMoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpKU19HZXRTdHJpbmdMZW5ndGgoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCgoanN2YWwpKDAgLSAoKGpzdmFsKTEgPDwgKDMwKSkpIDw8IDEpIHwgMHgx KSwgMCwgMCwgMCk7CgogICAgICAqb2JqcCA9IG9iajsKCiAgICAgIHJldHVybiAqX3JldHZhbCA/ IDAgOiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7CiAgICB9CiAgfQoKICByZXR1cm4gbnNIVE1M RWxlbWVudFNIOjpOZXdSZXNvbHZlKHdyYXBwZXIsIGN4LCBvYmosIGlkLCBmbGFncywgb2JqcCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXR2YWwpOwp9CgoKbnNyZXN1 bHQKbnNIVE1MRm9ybUVsZW1lbnRTSDo6R2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5h dGl2ZSAqd3JhcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDb250ZXh0 ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKQp7CiAgbnNDT01QdHI8bnNJU3VwcG9y dHM+IG5hdGl2ZTsKCiAgd3JhcHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkp OwogIDsKCiAgbnNDT01QdHI8bnNJRm9ybT4gZm9ybShkb19RdWVyeUludGVyZmFjZShuYXRpdmUp KTsKCiAgaWYgKCgoKGlkKSAmICgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSA9PSAweDQpKSB7 CiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gcmVzdWx0OwoKICAgIEpTU3RyaW5nICpzdHIgPSAo KEpTU3RyaW5nICopKCh2b2lkICopKChpZCkgJiB+KGpzdmFsKSgoKEpTVWludDMyKTEgPDwgKDMp KSAtIDEpKSkpOwogICAgRmluZE5hbWVkSXRlbShmb3JtLCBzdHIsIGdldHRlcl9BZGRSZWZzKHJl c3VsdCkpOwoKICAgIGlmIChyZXN1bHQpIHsKCgogICAgICByZXR1cm4gV3JhcE5hdGl2ZShjeCwg OjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg IG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+OjpHZXRJSUQoKSwgdnApOwogICAgfQoKICAgIHJl dHVybiAwOwogIH0KCiAgUFJJbnQzMiBuID0gR2V0QXJyYXlJbmRleEZyb21JZChjeCwgaWQpOwoK ICBpZiAobiA+PSAwKSB7CiAgICBuc0NPTVB0cjxuc0lGb3JtQ29udHJvbD4gY29udHJvbDsKICAg IGZvcm0tPkdldEVsZW1lbnRBdChuLCBnZXR0ZXJfQWRkUmVmcyhjb250cm9sKSk7CgogICAgaWYg KGNvbnRyb2wpIHsKICAgICAgcmV0dXJuIFdyYXBOYXRpdmUoY3gsIDo6SlNfR2V0R2xvYmFsT2Jq ZWN0KGN4KSwgY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxu c0lTdXBwb3J0cz46OkdldElJRCgpLCB2cCk7CiAgICB9CiAgfQoKICByZXR1cm4gMDsKfQoKbnNy ZXN1bHQKbnNIVE1MRm9ybUVsZW1lbnRTSDo6TmV3RW51bWVyYXRlKG5zSVhQQ29ubmVjdFdyYXBw ZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0Nv bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJVaW50MzIgZW51bV9vcCwganN2YWwgKnN0YXRlcCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpzaWQgKmlkcCwgUFJCb29sICpfcmV0dmFsKQp7CiAgc3dpdGNoIChlbnVt X29wKSB7CiAgY2FzZSBKU0VOVU1FUkFURV9JTklUOgogICAgewogICAgICBuc0NPTVB0cjxuc0lT dXBwb3J0cz4gbmF0aXZlOwogICAgICB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMo bmF0aXZlKSk7CiAgICAgIDsKCiAgICAgIG5zQ09NUHRyPG5zSUZvcm0+IGZvcm0oZG9fUXVlcnlJ bnRlcmZhY2UobmF0aXZlKSk7CgogICAgICBpZiAoIWZvcm0pIHsKICAgICAgICAqc3RhdGVwID0g KChqc3ZhbCkoMCkpOwogICAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAg ICAgIH0KCiAgICAgICpzdGF0ZXAgPSAoKChqc3ZhbCkoMCkgPDwgMSkgfCAweDEpOwoKICAgICAg aWYgKGlkcCkgewogICAgICAgIFBSVWludDMyIGNvdW50ID0gMDsKICAgICAgICBmb3JtLT5HZXRF bGVtZW50Q291bnQoJmNvdW50KTsKCiAgICAgICAgKmlkcCA9ICgoKGpzdmFsKShjb3VudCkgPDwg MSkgfCAweDEpOwogICAgICB9CgogICAgICBicmVhazsKICAgIH0KICBjYXNlIEpTRU5VTUVSQVRF X05FWFQ6CiAgICB7CiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgICAgIHdy YXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsKICAgICAgOwoKICAgICAg bnNDT01QdHI8bnNJRm9ybT4gZm9ybShkb19RdWVyeUludGVyZmFjZShuYXRpdmUpKTsKICAgICAg ZG8geyBpZiAoIShmb3JtKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7IH0g fSB3aGlsZSAoMCk7CgogICAgICBQUkludDMyIGluZGV4ID0gKFBSSW50MzIpKChqc2ludCkoKnN0 YXRlcCkgPj4gMSk7CgogICAgICBQUlVpbnQzMiBjb3VudCA9IDA7CiAgICAgIGZvcm0tPkdldEVs ZW1lbnRDb3VudCgmY291bnQpOwoKICAgICAgaWYgKChQUlVpbnQzMilpbmRleCA8IGNvdW50KSB7 CiAgICAgICAgbnNDT01QdHI8bnNJRm9ybUNvbnRyb2w+IGNvbnRyb2xOb2RlOwogICAgICAgIGZv cm0tPkdldEVsZW1lbnRBdChpbmRleCwgZ2V0dGVyX0FkZFJlZnMoY29udHJvbE5vZGUpKTsKICAg ICAgICBkbyB7IGlmICghKGNvbnRyb2xOb2RlKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgw MDA0MDA1TCk7IH0gfSB3aGlsZSAoMCk7CgogICAgICAgIG5zQ09NUHRyPG5zSURPTUVsZW1lbnQ+ IGRvbUVsZW1lbnQgPSBkb19RdWVyeUludGVyZmFjZShjb250cm9sTm9kZSk7CiAgICAgICAgZG8g eyBpZiAoIShkb21FbGVtZW50KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7 IH0gfSB3aGlsZSAoMCk7CgogICAgICAgIG5zQXV0b1N0cmluZyBhdHRyOwogICAgICAgIGRvbUVs ZW1lbnQtPkdldEF0dHJpYnV0ZShzdGF0aWNfY2FzdDwgY29uc3QgbnNBRmxhdFN0cmluZyYgPihu c0RlcGVuZGVudFN0cmluZyhyZWludGVycHJldF9jYXN0PCBjb25zdCBuc0FTdHJpbmc6OmNoYXJf dHlwZSogPihMIm5hbWUiKSwgUFJVaW50MzIoKHNpemVvZihMIm5hbWUiKS9zaXplb2Yod2NoYXJf dCkpLTEpKSksIGF0dHIpOwogICAgICAgIGlmIChhdHRyLklzRW1wdHkoKSkgewoKICAgICAgICAg IGF0dHIuQXBwZW5kSW50KGluZGV4KTsKICAgICAgICB9CiAgICAgICAgSlNTdHJpbmcgKmpzbmFt ZSA9CiAgICAgICAgICBKU19OZXdVQ1N0cmluZ0NvcHlOKGN4LCByZWludGVycHJldF9jYXN0PCBj b25zdCBqc2NoYXIgKiA+KGF0dHIuZ2V0KCkpLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXR0ci5MZW5ndGgoKSk7CiAgICAgICAgZG8geyBpZiAoIShqc25hbWUpKSB7IDsgcmV0dXJu ICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsgfSB9IHdoaWxlICgwKTsKCiAgICAgICAgSlNfVmFs dWVUb0lkKGN4LCAoKChqc3ZhbCkoanNuYW1lKSkgfCAoMHg0KSksIGlkcCk7CgogICAgICAgICpz dGF0ZXAgPSAoKChqc3ZhbCkoKytpbmRleCkgPDwgMSkgfCAweDEpOwogICAgICB9IGVsc2Ugewog ICAgICAgICpzdGF0ZXAgPSAoKGpzdmFsKSgwKSk7CiAgICAgIH0KCiAgICAgIGJyZWFrOwogICAg fQogIGNhc2UgSlNFTlVNRVJBVEVfREVTVFJPWToKICAgICpzdGF0ZXAgPSAoKGpzdmFsKSgwKSk7 CgogICAgYnJlYWs7CiAgfQoKICByZXR1cm4gMDsKfQoKCgoKbnNyZXN1bHQKbnNIVE1MU2VsZWN0 RWxlbWVudFNIOjpHZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ29udGV4dCAqY3gsIEpTT2Jq ZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpz dmFsICp2cCwgUFJCb29sICpfcmV0dmFsKQp7CiAgUFJJbnQzMiBuID0gR2V0QXJyYXlJbmRleEZy b21JZChjeCwgaWQpOwoKICBpZiAobiA+PSAwKSB7CiAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4g bmF0aXZlOwoKICAgIHdyYXBwZXItPkdldE5hdGl2ZShnZXR0ZXJfQWRkUmVmcyhuYXRpdmUpKTsK ICAgIDsKCiAgICBuc0NPTVB0cjxuc0lET01IVE1MU2VsZWN0RWxlbWVudD4gcyhkb19RdWVyeUlu dGVyZmFjZShuYXRpdmUpKTsKCiAgICBuc0NPTVB0cjxuc0lET01IVE1MQ29sbGVjdGlvbj4gb3B0 aW9uczsKCiAgICBzLT5HZXRPcHRpb25zKGdldHRlcl9BZGRSZWZzKG9wdGlvbnMpKTsKCiAgICBp ZiAob3B0aW9ucykgewogICAgICBuc0NPTVB0cjxuc0lET01Ob2RlPiBub2RlOwoKICAgICAgb3B0 aW9ucy0+SXRlbShuLCBnZXR0ZXJfQWRkUmVmcyhub2RlKSk7CgogICAgICByZXR1cm4gV3JhcE5h dGl2ZShjeCwgOjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCBub2RlLAogICAgICAgICAgICAgICAg ICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSURPTU5vZGU+OjpHZXRJSUQoKSwgdnApOwogICAgfQog IH0KCiAgcmV0dXJuIDA7Cn0KCgpuc3Jlc3VsdApuc0hUTUxTZWxlY3RFbGVtZW50U0g6OlNldE9w dGlvbihKU0NvbnRleHQgKmN4LCBqc3ZhbCAqdnAsIFBSVWludDMyIGFJbmRleCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NTlNIVE1MT3B0aW9uQ29sbGVjdGlvbiAqYU9w dENvbGxlY3Rpb24pCnsKCiAgaWYgKCEoKCgqdnApICYgKCgoSlNVaW50MzIpMSA8PCAoMykpIC0g MSkpID09IDB4MCkgJiYgITo6SlNfQ29udmVydFZhbHVlKGN4LCAqdnAsIEpTVFlQRV9PQkpFQ1Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnApKSB7 CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogIH0KCiAgbnNDT01QdHI8bnNJ RE9NSFRNTE9wdGlvbkVsZW1lbnQ+IG5ld19vcHRpb247CgogIGlmICghKCgqdnApID09ICgoanN2 YWwpKDApKSkpIHsKICAgIG5zQ09NUHRyPG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmU+IG5ld193 cmFwcGVyOwogICAgbnNyZXN1bHQgcnY7CgogICAgcnYgPSBzWFBDb25uZWN0LT5HZXRXcmFwcGVk TmF0aXZlT2ZKU09iamVjdChjeCwgKChKU09iamVjdCAqKSgodm9pZCAqKSgoKnZwKSAmIH4oanN2 YWwpKCgoSlNVaW50MzIpMSA8PCAoMykpIC0gMSkpKSksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG5ld193cmFwcGVyKSk7CiAg ICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0g d2hpbGUgKDApOwoKICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgICBuZXdfd3Jh cHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICAgIG5ld19vcHRpb24g PSBkb19RdWVyeUludGVyZmFjZShuYXRpdmUpOwoKICAgIGlmICghbmV3X29wdGlvbikgewoKCiAg ICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgICB9CiAgfQoKICByZXR1cm4g YU9wdENvbGxlY3Rpb24tPlNldE9wdGlvbihhSW5kZXgsIG5ld19vcHRpb24pOwp9Cgpuc3Jlc3Vs dApuc0hUTUxTZWxlY3RFbGVtZW50U0g6OlNldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWRO YXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDb250 ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpCnsKICBpbnQzMiBuID0gR2V0 QXJyYXlJbmRleEZyb21JZChjeCwgaWQpOwoKICBpZiAobiA+PSAwKSB7CiAgICBuc0NPTVB0cjxu c0lTdXBwb3J0cz4gbmF0aXZlOwogICAgd3JhcHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZz KG5hdGl2ZSkpOwoKICAgIG5zQ09NUHRyPG5zSURPTUhUTUxTZWxlY3RFbGVtZW50PiBzZWxlY3Qo ZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlKSk7CiAgICBkbyB7IGlmICghKHNlbGVjdCkpIHsgOyBy ZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICAgIG5zQ09N UHRyPG5zSURPTUhUTUxDb2xsZWN0aW9uPiBvcHRpb25zOwogICAgc2VsZWN0LT5HZXRPcHRpb25z KGdldHRlcl9BZGRSZWZzKG9wdGlvbnMpKTsKCiAgICBuc0NPTVB0cjxuc0lET01OU0hUTUxPcHRp b25Db2xsZWN0aW9uPiBvYyhkb19RdWVyeUludGVyZmFjZShvcHRpb25zKSk7CiAgICBkbyB7IGlm ICghKG9jKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAo MCk7CgogICAgcmV0dXJuIFNldE9wdGlvbihjeCwgdnAsIG4sIG9jKTsKICB9CgogIHJldHVybiBu c0VsZW1lbnRTSDo6U2V0UHJvcGVydHkod3JhcHBlciwgY3gsIG9iaiwgaWQsIHZwLCBfcmV0dmFs KTsKfQojIDU1MTAgIm5zRE9NQ2xhc3NJbmZvLmNwcCIKbnNyZXN1bHQKbnNIVE1MRXh0ZXJuYWxP YmpTSDo6R2V0UGx1Z2luSW5zdGFuY2UobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBl ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUGx1Z2luSW5zdGFu Y2UgKipfcmVzdWx0KQp7CiAgKl9yZXN1bHQgPSAwOwoKICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4g bmF0aXZlOwoKICB3cmFwcGVyLT5HZXROYXRpdmUoZ2V0dGVyX0FkZFJlZnMobmF0aXZlKSk7Cgog IG5zQ09NUHRyPG5zSUNvbnRlbnQ+IGNvbnRlbnQoZG9fUXVlcnlJbnRlcmZhY2UobmF0aXZlKSk7 CiAgZG8geyBpZiAoIShjb250ZW50KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZm TCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2M7CgogIGNvbnRl bnQtPkdldERvY3VtZW50KCpnZXR0ZXJfQWRkUmVmcyhkb2MpKTsKCiAgaWYgKCFkb2MpIHsKCgog ICAgcmV0dXJuIDA7CiAgfQoKICBkb2MtPkZsdXNoUGVuZGluZ05vdGlmaWNhdGlvbnMoKTsKCgog IG5zQ09NUHRyPG5zSVByZXNTaGVsbD4gc2hlbGw7CiAgZG9jLT5HZXRTaGVsbEF0KDAsIGdldHRl cl9BZGRSZWZzKHNoZWxsKSk7CgogIGlmICghc2hlbGwpIHsKICAgIHJldHVybiAwOwogIH0KCiAg bnNJRnJhbWUqIGZyYW1lID0gMDsKICBzaGVsbC0+R2V0UHJpbWFyeUZyYW1lRm9yKGNvbnRlbnQs ICZmcmFtZSk7CgogIGlmICghZnJhbWUpIHsKCgogICAgcmV0dXJuIDA7CiAgfQoKICBuc0lPYmpl Y3RGcmFtZSogb2JqZWN0RnJhbWUgPSAwOwogIENhbGxRdWVyeUludGVyZmFjZShmcmFtZSwgJm9i amVjdEZyYW1lKTsKICBpZiAoIW9iamVjdEZyYW1lKSB7CiAgICByZXR1cm4gMDsKICB9CgogIHJl dHVybiBvYmplY3RGcmFtZS0+R2V0UGx1Z2luSW5zdGFuY2UoKl9yZXN1bHQpOwp9CgoKCnN0YXRp YyBQUkJvb2wKSXNPYmpJblByb3RvQ2hhaW4oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwg SlNPYmplY3QgKnByb3RvKQp7CiAgSlNPYmplY3QgKm8gPSBvYmo7CgogIHdoaWxlIChvKSB7CiAg ICBKU09iamVjdCAqcCA9IDo6SlNfR2V0UHJvdG90eXBlKGN4LCBvKTsKCiAgICBpZiAocCA9PSBw cm90bykgewogICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBvID0gcDsKICB9CgogIHJldHVybiAw Owp9CiMgNTU4OCAibnNET01DbGFzc0luZm8uY3BwIgpuc3Jlc3VsdApuc0hUTUxFeHRlcm5hbE9i alNIOjpQb3N0Q3JlYXRlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaikK ewogIG5zcmVzdWx0IHJ2ID0gbnNFbGVtZW50U0g6OlBvc3RDcmVhdGUod3JhcHBlciwgY3gsIG9i aik7CiAgZG8geyBpZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsg fSB9IHdoaWxlICgwKTsKCiAgbnNDT01QdHI8bnNJUGx1Z2luSW5zdGFuY2U+IHBpOwoKICBydiA9 IEdldFBsdWdpbkluc3RhbmNlKHdyYXBwZXIsIGdldHRlcl9BZGRSZWZzKHBpKSk7CiAgZG8geyBp ZiAoISgoISgocnYpICYgMHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgw KTsKCiAgaWYgKCFwaSkgewoKCiAgICByZXR1cm4gMDsKICB9CgogIEpTT2JqZWN0ICpwaV9vYmog PSAwOwogIEpTT2JqZWN0ICpwaV9wcm90byA9IDA7CgogIHJ2ID0gR2V0UGx1Z2luSlNPYmplY3Qo Y3gsIG9iaiwgcGksICZwaV9vYmosICZwaV9wcm90byk7CiAgZG8geyBpZiAoISgoISgocnYpICYg MHg4MDAwMDAwMCkpKSkgeyA7IHJldHVybiBydjsgfSB9IHdoaWxlICgwKTsKCiAgaWYgKCFwaV9v YmopIHsKCgogICAgcmV0dXJuIDA7CiAgfQoKICBpZiAoSXNPYmpJblByb3RvQ2hhaW4oY3gsIG9i aiwgcGlfb2JqKSkgewoKCgoKCiAgICByZXR1cm4gMDsKICB9CgoKCgoKICBKU09iamVjdCAqbXlf cHJvdG8gPSAwOwoKCiAgcnYgPSB3cmFwcGVyLT5HZXRKU09iamVjdFByb3RvdHlwZSgmbXlfcHJv dG8pOwogIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkpIHsgOyByZXR1cm4gcnY7 IH0gfSB3aGlsZSAoMCk7CgoKICBpZiAoITo6SlNfU2V0UHJvdG90eXBlKGN4LCBvYmosIHBpX29i aikpIHsKICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7CiAgfQoKICBpZiAocGlf cHJvdG8gJiYgSlNfR2V0Q2xhc3MoY3gsIHBpX3Byb3RvKSAhPSBzT2JqZWN0Q2xhc3MpIHsKCgog ICAgaWYgKCE6OkpTX1NldFByb3RvdHlwZShjeCwgcGlfcHJvdG8sIG15X3Byb3RvKSkgewogICAg ICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogICAgfQogIH0gZWxzZSB7CgoKCiAg ICBpZiAoITo6SlNfU2V0UHJvdG90eXBlKGN4LCBwaV9vYmosIG15X3Byb3RvKSkgewogICAgICBy ZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwZmZmZkwpOwogICAgfQogIH0KIyA1NzA2ICJuc0RPTUNs YXNzSW5mby5jcHAiCiAgcmV0dXJuIDA7Cn0KCgoKCm5zcmVzdWx0Cm5zSFRNTEFwcGxldEVsZW1l bnRTSDo6R2V0UGx1Z2luSlNPYmplY3QoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQbHVnaW5JbnN0YW5jZSAq cGx1Z2luX2luc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNP YmplY3QgKipwbHVnaW5fb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEpTT2JqZWN0ICoqcGx1Z2luX3Byb3RvKQp7CiAgKnBsdWdpbl9vYmogPSAwOwogICpwbHVn aW5fcHJvdG8gPSAwOwoKICBuc0NPTVB0cjxuc0lKVk1NYW5hZ2VyPiBqdm0oZG9fR2V0U2Vydmlj ZShuc0lKVk1NYW5hZ2VyOjpHZXRDSUQoKSkpOwoKICBpZiAoIWp2bSkgewogICAgcmV0dXJuIDA7 CiAgfQoKICBuc0NPTVB0cjxuc0lKVk1QbHVnaW5JbnN0YW5jZT4gamF2YVBsdWdpbkluc3RhbmNl OwoKICBqYXZhUGx1Z2luSW5zdGFuY2UgPSBkb19RdWVyeUludGVyZmFjZShwbHVnaW5faW5zdCk7 CgogIGlmICghamF2YVBsdWdpbkluc3RhbmNlKSB7CiAgICByZXR1cm4gMDsKICB9CgogIGpvYmpl Y3QgYXBwbGV0T2JqZWN0ID0gMDsKICBuc3Jlc3VsdCBydiA9IGphdmFQbHVnaW5JbnN0YW5jZS0+ R2V0SmF2YU9iamVjdCgmYXBwbGV0T2JqZWN0KTsKCiAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkg fHwgIWFwcGxldE9iamVjdCkgewogICAgcmV0dXJuIHJ2OwogIH0KCiAgbnNDT01QdHI8bnNJTGl2 ZUNvbm5lY3RNYW5hZ2VyPiBtYW5hZ2VyID0KICAgIGRvX0dldFNlcnZpY2UobnNJSlZNTWFuYWdl cjo6R2V0Q0lEKCkpOwoKICBpZiAoIW1hbmFnZXIpIHsKICAgIHJldHVybiAwOwogIH0KCiAgcmV0 dXJuIG1hbmFnZXItPldyYXBKYXZhT2JqZWN0KGN4LCBhcHBsZXRPYmplY3QsIHBsdWdpbl9vYmop Owp9CgoKCgpuc3Jlc3VsdApuc0hUTUxQbHVnaW5PYmpFbGVtZW50U0g6OkdldFBsdWdpbkpTT2Jq ZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJUGx1Z2luSW5zdGFuY2UgKnBsdWdpbl9pbnN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqcGx1Z2lu X29iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVj dCAqKnBsdWdpbl9wcm90bykKewogICpwbHVnaW5fb2JqID0gMDsKICAqcGx1Z2luX3Byb3RvID0g MDsKCgoKCgoKCiAgbnNJSUQgc2NyaXB0YWJsZUlJRCA9IG5zQ09NVHlwZUluZm88bnNJU3VwcG9y dHM+OjpHZXRJSUQoKTsKICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gc2NyaXB0YWJsZV9wZWVyOwoK ICBuc0NPTVB0cjxuc0lTY3JpcHRhYmxlUGx1Z2luPiBzcGkoZG9fUXVlcnlJbnRlcmZhY2UocGx1 Z2luX2luc3QpKTsKCiAgaWYgKHNwaSkgewogICAgbnNJSUQgKnNjcmlwdGFibGVJbnRlcmZhY2VQ dHIgPSAwOwogICAgc3BpLT5HZXRTY3JpcHRhYmxlSW50ZXJmYWNlKCZzY3JpcHRhYmxlSW50ZXJm YWNlUHRyKTsKCiAgICBpZiAoc2NyaXB0YWJsZUludGVyZmFjZVB0cikgewogICAgICBzcGktPkdl dFNjcmlwdGFibGVQZWVyKGdldHRlcl9BZGRSZWZzKHNjcmlwdGFibGVfcGVlcikpOwoKICAgICAg c2NyaXB0YWJsZUlJRCA9ICpzY3JpcHRhYmxlSW50ZXJmYWNlUHRyOwoKICAgICAgbnNNZW1vcnk6 OkZyZWUoc2NyaXB0YWJsZUludGVyZmFjZVB0cik7CiAgICB9CiAgfQoKICBuc0NPTVB0cjxuc0lD bGFzc0luZm8+IGNpKGRvX1F1ZXJ5SW50ZXJmYWNlKHBsdWdpbl9pbnN0KSk7CgogIGlmICghc2Ny aXB0YWJsZV9wZWVyKSB7CiAgICBpZiAoIWNpKSB7CgoKCgoKICAgICAgcmV0dXJuIG5zSFRNTEFw cGxldEVsZW1lbnRTSDo6R2V0UGx1Z2luSlNPYmplY3QoY3gsIG9iaiwgcGx1Z2luX2luc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdp bl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBsdWdpbl9wcm90byk7CiAgICB9CgoKCiAgICBzY3JpcHRhYmxlX3BlZXIgPSBwbHVnaW5f aW5zdDsKICB9CgoKCgoKCiAgaWYgKGNpKSB7CgoKCiAgICBQUlVpbnQzMiBmbGFnczsKICAgIGNp LT5HZXRGbGFncygmZmxhZ3MpOwoKICAgIGlmICghKGZsYWdzICYgbnNJQ2xhc3NJbmZvOjpQTFVH SU5fT0JKRUNUKSkgewoKCgoKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfQoKCgogIG5zQ09NUHRy PG5zSVBsdWdpbkhvc3Q+IHBsdWdpbk1hbmFnZXIgPQogICAgZG9fR2V0U2VydmljZShrQ1BsdWdp bk1hbmFnZXJDSUQpOwoKICBuc0NPTVB0cjxuc1BJUGx1Z2luSG9zdD4gcGx1Z2luSG9zdChkb19R dWVyeUludGVyZmFjZShwbHVnaW5NYW5hZ2VyKSk7CgogIGlmKHBsdWdpbkhvc3QpIHsKICAgIHBs dWdpbkhvc3QtPlNldElzU2NyaXB0YWJsZUluc3RhbmNlKHBsdWdpbl9pbnN0LCAxKTsKICB9CgoK CiAgbnNDT01QdHI8bnNJWFBDb25uZWN0SlNPYmplY3RIb2xkZXI+IGhvbGRlcjsKICBuc3Jlc3Vs dCBydiA9IHNYUENvbm5lY3QtPldyYXBOYXRpdmUoY3gsIDo6SlNfR2V0UGFyZW50KGN4LCBvYmop LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRhYmxlX3BlZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdGFibGVJSUQsIGdl dHRlcl9BZGRSZWZzKGhvbGRlcikpOwogIGRvIHsgaWYgKCEoKCEoKHJ2KSAmIDB4ODAwMDAwMDAp KSkpIHsgOyByZXR1cm4gcnY7IH0gfSB3aGlsZSAoMCk7CgoKCiAgbnNDT01QdHI8bnNJWFBDb25u ZWN0V3JhcHBlZE5hdGl2ZT4gcGlfd3JhcHBlcihkb19RdWVyeUludGVyZmFjZShob2xkZXIpKTsK ICBkbyB7IGlmICghKHBpX3dyYXBwZXIpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZm ZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgcnYgPSBwaV93cmFwcGVyLT5HZXRKU09iamVjdChwbHVn aW5fb2JqKTsKICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJu IHJ2OyB9IH0gd2hpbGUgKDApOwoKICByZXR1cm4gcGlfd3JhcHBlci0+R2V0SlNPYmplY3RQcm90 b3R5cGUocGx1Z2luX3Byb3RvKTsKfQoKbnNyZXN1bHQKbnNIVE1MUGx1Z2luT2JqRWxlbWVudFNI OjpOZXdSZXNvbHZlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2Jq LCBqc3ZhbCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy IGZsYWdzLCBKU09iamVjdCAqKm9ianAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUkJvb2wgKl9yZXR2YWwpCnsKICBpZiAoKCgoaWQpICYgKCgoSlNVaW50MzIpMSA8PCAo MykpIC0gMSkpID09IDB4NCkpIHsKCgoKICAgIEpTU3RyaW5nICpzdHIgPSAoKEpTU3RyaW5nICop KCh2b2lkICopKChpZCkgJiB+KGpzdmFsKSgoKEpTVWludDMyKTEgPDwgKDMpKSAtIDEpKSkpOwog ICAgY2hhciogY3N0cmluZyA9IDo6SlNfR2V0U3RyaW5nQnl0ZXMoc3RyKTsKCiAgICBuc0NPTVB0 cjxuc0lJbnRlcmZhY2VJbmZvTWFuYWdlcj4gaWltID0KICAgICAgZG9udF9BZGRSZWYoWFBUSV9H ZXRJbnRlcmZhY2VJbmZvTWFuYWdlcigpKTsKICAgIGRvIHsgaWYgKCEoaWltKSkgeyA7IHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogICAgbnNJSUQqIGlp ZCA9IDA7CgogICAgbnNyZXN1bHQgcnYgPSBpaW0tPkdldElJREZvck5hbWUoY3N0cmluZywgJmlp ZCk7CgogICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkgJiYgaWlkKSB7CiAgICAgIG5zQ09N UHRyPG5zSVBsdWdpbkluc3RhbmNlPiBwaTsKCiAgICAgIEdldFBsdWdpbkluc3RhbmNlKHdyYXBw ZXIsIGdldHRlcl9BZGRSZWZzKHBpKSk7CgogICAgICBpZiAocGkpIHsKCgoKICAgICAgICBuc0NP TVB0cjxuc0lQbHVnaW5Ib3N0PiBwbHVnaW5NYW5hZ2VyID0KICAgICAgICAgIGRvX0dldFNlcnZp Y2Uoa0NQbHVnaW5NYW5hZ2VyQ0lEKTsKCiAgICAgICAgbnNDT01QdHI8bnNQSVBsdWdpbkhvc3Q+ IHBsdWdpbkhvc3QoZG9fUXVlcnlJbnRlcmZhY2UocGx1Z2luTWFuYWdlcikpOwoKICAgICAgICBp ZihwbHVnaW5Ib3N0KSB7CiAgICAgICAgICBwbHVnaW5Ib3N0LT5TZXRJc1NjcmlwdGFibGVJbnN0 YW5jZShwaSwgMSk7CiAgICAgICAgfQoKICAgICAgICBuc0NPTVB0cjxuc0lYUENvbm5lY3RKU09i amVjdEhvbGRlcj4gaG9sZGVyOwogICAgICAgIHJ2ID0gc1hQQ29ubmVjdC0+V3JhcE5hdGl2ZShj eCwgOjpKU19HZXRHbG9iYWxPYmplY3QoY3gpLCBwaSwgKmlpZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMoaG9sZGVyKSk7CgogICAgICAgIGlmICgo ISgocnYpICYgMHg4MDAwMDAwMCkpKSB7CiAgICAgICAgICBKU09iamVjdCogaWZhY2VPYmo7Cgog ICAgICAgICAgcnYgPSBob2xkZXItPkdldEpTT2JqZWN0KCZpZmFjZU9iaik7CgogICAgICAgICAg aWYgKCghKChydikgJiAweDgwMDAwMDAwKSkpIHsKICAgICAgICAgICAgbnNNZW1vcnk6OkZyZWUo aWlkKTsKCiAgICAgICAgICAgICpfcmV0dmFsID0gOjpKU19EZWZpbmVVQ1Byb3BlcnR5KGN4LCBv YmosIDo6SlNfR2V0U3RyaW5nQ2hhcnMoc3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpKU19HZXRTdHJpbmdMZW5ndGgoc3RyKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChqc3ZhbCkoaWZhY2VPYmopKSwgMCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMHgwMSk7Cgog ICAgICAgICAgICAqb2JqcCA9IG9iajsKCiAgICAgICAgICAgIHJldHVybiAqX3JldHZhbCA/IDAg OiAoKG5zcmVzdWx0KSAweDgwMDA0MDA1TCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9 CgogICAgICBuc01lbW9yeTo6RnJlZShpaWQpOwogICAgfQogIH0KCiAgcmV0dXJuIG5zSFRNTEVs ZW1lbnRTSDo6TmV3UmVzb2x2ZSh3cmFwcGVyLCBjeCwgb2JqLCBpZCwgZmxhZ3MsIG9ianAsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmV0dmFsKTsKfQoKCgoKbnNyZXN1 bHQKbnNIVE1MT3B0aW9uQ29sbGVjdGlvblNIOjpTZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFw cGVkTmF0aXZlICp3cmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKQp7CiAgaW50 MzIgbiA9IEdldEFycmF5SW5kZXhGcm9tSWQoY3gsIGlkKTsKCiAgaWYgKG4gPCAwKSB7CiAgICBy ZXR1cm4gMDsKICB9CgogIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7CiAgd3JhcHBlci0+ R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICBuc0NPTVB0cjxuc0lET01OU0hU TUxPcHRpb25Db2xsZWN0aW9uPiBvYyhkb19RdWVyeUludGVyZmFjZShuYXRpdmUpKTsKICBkbyB7 IGlmICghKG9jKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGls ZSAoMCk7CgogIHJldHVybiBuc0hUTUxTZWxlY3RFbGVtZW50U0g6OlNldE9wdGlvbihjeCwgdnAs IG4sIG9jKTsKfQoKCgoKbnNyZXN1bHQKbnNQbHVnaW5TSDo6R2V0SXRlbUF0KG5zSVN1cHBvcnRz ICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBw b3J0cyAqKmFSZXN1bHQpCnsKICBuc0NPTVB0cjxuc0lET01QbHVnaW4+IHBsdWdpbihkb19RdWVy eUludGVyZmFjZShhTmF0aXZlKSk7CiAgZG8geyBpZiAoIShwbHVnaW4pKSB7IDsgcmV0dXJuICgo bnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NTWltZVR5cGUg Km1pbWVfdHlwZSA9IDA7CiAgbnNyZXN1bHQgcnYgPSBwbHVnaW4tPkl0ZW0oYUluZGV4LCAmbWlt ZV90eXBlKTsKCiAgKmFSZXN1bHQgPSBtaW1lX3R5cGU7CgogIHJldHVybiBydjsKfQoKbnNyZXN1 bHQKbnNQbHVnaW5TSDo6R2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBu c0FTdHJpbmcmIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiph UmVzdWx0KQp7CiAgbnNDT01QdHI8bnNJRE9NUGx1Z2luPiBwbHVnaW4oZG9fUXVlcnlJbnRlcmZh Y2UoYU5hdGl2ZSkpOwogIGRvIHsgaWYgKCEocGx1Z2luKSkgeyA7IHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zSURPTU1pbWVUeXBlICptaW1lX3R5 cGUgPSAwOwoKICBuc3Jlc3VsdCBydiA9IHBsdWdpbi0+TmFtZWRJdGVtKGFOYW1lLCAmbWltZV90 eXBlKTsKCiAgKmFSZXN1bHQgPSBtaW1lX3R5cGU7CgogIHJldHVybiBydjsKfQoKCgoKbnNyZXN1 bHQKbnNQbHVnaW5BcnJheVNIOjpHZXRJdGVtQXQobnNJU3VwcG9ydHMgKmFOYXRpdmUsIFBSVWlu dDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVz dWx0KQp7CiAgbnNDT01QdHI8bnNJRE9NUGx1Z2luQXJyYXk+IGFycmF5KGRvX1F1ZXJ5SW50ZXJm YWNlKGFOYXRpdmUpKTsKICBkbyB7IGlmICghKGFycmF5KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0 KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zSURPTVBsdWdpbiAqcGx1Z2luID0g MDsKICBuc3Jlc3VsdCBydiA9IGFycmF5LT5JdGVtKGFJbmRleCwgJnBsdWdpbik7CgogICphUmVz dWx0ID0gcGx1Z2luOwoKICByZXR1cm4gcnY7Cn0KCm5zcmVzdWx0Cm5zUGx1Z2luQXJyYXlTSDo6 R2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcmIGFOYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpCnsK ICBuc0NPTVB0cjxuc0lET01QbHVnaW5BcnJheT4gYXJyYXkoZG9fUXVlcnlJbnRlcmZhY2UoYU5h dGl2ZSkpOwogIGRvIHsgaWYgKCEoYXJyYXkpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw MGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NUGx1Z2luICpwbHVnaW4gPSAwOwoKICBu c3Jlc3VsdCBydiA9IGFycmF5LT5OYW1lZEl0ZW0oYU5hbWUsICZwbHVnaW4pOwoKICAqYVJlc3Vs dCA9IHBsdWdpbjsKCiAgcmV0dXJuIHJ2Owp9CgoKCgpuc3Jlc3VsdApuc01pbWVUeXBlQXJyYXlT SDo6R2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KQp7CiAgbnNDT01Q dHI8bnNJRE9NTWltZVR5cGVBcnJheT4gYXJyYXkoZG9fUXVlcnlJbnRlcmZhY2UoYU5hdGl2ZSkp OwogIGRvIHsgaWYgKCEoYXJyYXkpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZM KTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NTWltZVR5cGUgKm1pbWVfdHlwZSA9IDA7CiAgbnNy ZXN1bHQgcnYgPSBhcnJheS0+SXRlbShhSW5kZXgsICZtaW1lX3R5cGUpOwoKICAqYVJlc3VsdCA9 IG1pbWVfdHlwZTsKCiAgcmV0dXJuIHJ2Owp9Cgpuc3Jlc3VsdApuc01pbWVUeXBlQXJyYXlTSDo6 R2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcmIGFOYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCkK ewogIG5zQ09NUHRyPG5zSURPTU1pbWVUeXBlQXJyYXk+IGFycmF5KGRvX1F1ZXJ5SW50ZXJmYWNl KGFOYXRpdmUpKTsKICBkbyB7IGlmICghKGFycmF5KSkgeyA7IHJldHVybiAoKG5zcmVzdWx0KSAw eDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zSURPTU1pbWVUeXBlICptaW1lX3R5cGUg PSAwOwoKICBuc3Jlc3VsdCBydiA9IGFycmF5LT5OYW1lZEl0ZW0oYU5hbWUsICZtaW1lX3R5cGUp OwoKICAqYVJlc3VsdCA9IG1pbWVfdHlwZTsKCiAgcmV0dXJuIHJ2Owp9CgoKCgpuc3Jlc3VsdApu c1N0cmluZ0FycmF5U0g6OkdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndy YXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmpl Y3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQUkJvb2wgKl9yZXR2YWwpCnsKICBQUkJvb2wgaXNfbnVtYmVyID0gMDsKICBQUkludDMyIG4g PSBHZXRBcnJheUluZGV4RnJvbUlkKGN4LCBpZCwgJmlzX251bWJlcik7CgogIGlmICghaXNfbnVt YmVyKSB7CiAgICByZXR1cm4gMDsKICB9CgogIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBuYXRpdmU7 CiAgd3JhcHBlci0+R2V0TmF0aXZlKGdldHRlcl9BZGRSZWZzKG5hdGl2ZSkpOwoKICBuc0F1dG9T dHJpbmcgdmFsOwoKICBuc3Jlc3VsdCBydiA9IEdldFN0cmluZ0F0KG5hdGl2ZSwgbiwgdmFsKTsK ICBkbyB7IGlmICghKCghKChydikgJiAweDgwMDAwMDAwKSkpKSB7IDsgcmV0dXJuIHJ2OyB9IH0g d2hpbGUgKDApOwoKCgogIEpTU3RyaW5nICpzdHIgPQogICAgOjpKU19OZXdVQ1N0cmluZ0NvcHlO KGN4LCByZWludGVycHJldF9jYXN0PCBjb25zdCBqc2NoYXIgKiA+KHZhbC5nZXQoKSksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgdmFsLkxlbmd0aCgpKTsKICBkbyB7IGlmICghKHN0cikpIHsg OyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOyB9IH0gd2hpbGUgKDApOwoKICAqdnAg PSAoKChqc3ZhbCkoc3RyKSkgfCAoMHg0KSk7CgogIHJldHVybiAwOwp9CgoKCgpuc3Jlc3VsdApu c0hpc3RvcnlTSDo6R2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBl ciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmos IGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCkKewogIFBSQm9vbCBpc19udW1i ZXIgPSAwOwogIEdldEFycmF5SW5kZXhGcm9tSWQoY3gsIGlkLCAmaXNfbnVtYmVyKTsKCiAgaWYg KCFpc19udW1iZXIpIHsKICAgIHJldHVybiAwOwogIH0KCiAgbnNyZXN1bHQgcnYgPQogICAgc1Nl Y01hbi0+Q2hlY2tQcm9wZXJ0eUFjY2VzcyhjeCwgb2JqLCBtRGF0YS0+bU5hbWUsIHNJdGVtX2lk LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYUENTZWN1cml0eU1hbmFnZXI6 OkFDQ0VTU19DQUxMX01FVEhPRCk7CgogIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSB7CgogICAg Kl9yZXR2YWwgPSAwOwoKICAgIHJldHVybiAwOwogIH0KCgoKICByZXR1cm4gbnNTdHJpbmdBcnJh eVNIOjpHZXRQcm9wZXJ0eSh3cmFwcGVyLCBjeCwgb2JqLCBpZCwgdnAsIF9yZXR2YWwpOwp9Cgpu c3Jlc3VsdApuc0hpc3RvcnlTSDo6R2V0U3RyaW5nQXQobnNJU3VwcG9ydHMgKmFOYXRpdmUsIFBS SW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhUmVzdWx0 KQp7CiAgaWYgKGFJbmRleCA8IDApIHsKICAgIHJldHVybiAoKG5zcmVzdWx0KSAoKChQUlVpbnQz MikoMSk8PDMxKSB8ICgoUFJVaW50MzIpKDE0ICsweDQ1KTw8MTYpIHwgKChQUlVpbnQzMikoMSkp KSApOwogIH0KCiAgbnNDT01QdHI8bnNJRE9NSGlzdG9yeT4gaGlzdG9yeShkb19RdWVyeUludGVy ZmFjZShhTmF0aXZlKSk7CgogIHJldHVybiBoaXN0b3J5LT5JdGVtKGFJbmRleCwgYVJlc3VsdCk7 Cn0KCgoKCm5zcmVzdWx0Cm5zTWVkaWFMaXN0U0g6OkdldFN0cmluZ0F0KG5zSVN1cHBvcnRzICph TmF0aXZlLCBQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3Ry aW5nJiBhUmVzdWx0KQp7CiAgaWYgKGFJbmRleCA8IDApIHsKICAgIHJldHVybiAoKG5zcmVzdWx0 KSAoKChQUlVpbnQzMikoMSk8PDMxKSB8ICgoUFJVaW50MzIpKDE0ICsweDQ1KTw8MTYpIHwgKChQ UlVpbnQzMikoMSkpKSApOwogIH0KCiAgbnNDT01QdHI8bnNJRE9NTWVkaWFMaXN0PiBtZWRpYV9s aXN0KGRvX1F1ZXJ5SW50ZXJmYWNlKGFOYXRpdmUpKTsKCiAgcmV0dXJuIG1lZGlhX2xpc3QtPkl0 ZW0oUFJVaW50MzIoYUluZGV4KSwgYVJlc3VsdCk7Cn0KCgoKCm5zcmVzdWx0Cm5zU3R5bGVTaGVl dExpc3RTSDo6R2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCkKewog IG5zQ09NUHRyPG5zSURPTVN0eWxlU2hlZXRMaXN0PiBzdHlsZXNoZWV0cyhkb19RdWVyeUludGVy ZmFjZShhTmF0aXZlKSk7CiAgZG8geyBpZiAoIShzdHlsZXNoZWV0cykpIHsgOyByZXR1cm4gKChu c3Jlc3VsdCkgMHg4MDAwZmZmZkwpOyB9IH0gd2hpbGUgKDApOwoKICBuc0lET01TdHlsZVNoZWV0 ICpzaGVldCA9IDA7CiAgbnNyZXN1bHQgcnYgPSBzdHlsZXNoZWV0cy0+SXRlbShhSW5kZXgsICZz aGVldCk7CgogICphUmVzdWx0ID0gc2hlZXQ7CgogIHJldHVybiBydjsKfQoKCgoKbnNyZXN1bHQK bnNDU1NWYWx1ZUxpc3RTSDo6R2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQz MiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1 bHQpCnsKICBuc0NPTVB0cjxuc0lET01DU1NWYWx1ZUxpc3Q+IGNzc1ZhbHVlTGlzdChkb19RdWVy eUludGVyZmFjZShhTmF0aXZlKSk7CiAgZG8geyBpZiAoIShjc3NWYWx1ZUxpc3QpKSB7IDsgcmV0 dXJuICgobnNyZXN1bHQpIDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NQ1NT VmFsdWUgKmNzc1ZhbHVlID0gMDsKICBuc3Jlc3VsdCBydiA9IGNzc1ZhbHVlTGlzdC0+SXRlbShh SW5kZXgsICZjc3NWYWx1ZSk7CgogICphUmVzdWx0ID0gY3NzVmFsdWU7CgogIHJldHVybiBydjsK fQoKCgoKbnNyZXN1bHQKbnNDU1NTdHlsZURlY2xTSDo6R2V0U3RyaW5nQXQobnNJU3VwcG9ydHMg KmFOYXRpdmUsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0FTdHJpbmcmIGFSZXN1bHQpCnsKICBpZiAoYUluZGV4IDwgMCkgewogICAgcmV0dXJuICgobnNy ZXN1bHQpICgoKFBSVWludDMyKSgxKTw8MzEpIHwgKChQUlVpbnQzMikoMTQgKzB4NDUpPDwxNikg fCAoKFBSVWludDMyKSgxKSkpICk7CiAgfQoKICBuc0NPTVB0cjxuc0lET01DU1NTdHlsZURlY2xh cmF0aW9uPiBzdHlsZV9kZWNsKGRvX1F1ZXJ5SW50ZXJmYWNlKGFOYXRpdmUpKTsKCiAgcmV0dXJu IHN0eWxlX2RlY2wtPkl0ZW0oUFJVaW50MzIoYUluZGV4KSwgYVJlc3VsdCk7Cn0KCgoKCm5zcmVz dWx0Cm5zQ1NTUnVsZUxpc3RTSDo6R2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVp bnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJl c3VsdCkKewogIG5zQ09NUHRyPG5zSURPTUNTU1J1bGVMaXN0PiBsaXN0KGRvX1F1ZXJ5SW50ZXJm YWNlKGFOYXRpdmUpKTsKICBkbyB7IGlmICghKGxpc3QpKSB7IDsgcmV0dXJuICgobnNyZXN1bHQp IDB4ODAwMGZmZmZMKTsgfSB9IHdoaWxlICgwKTsKCiAgbnNJRE9NQ1NTUnVsZSAqcnVsZSA9IDA7 CiAgbnNyZXN1bHQgcnYgPSBsaXN0LT5JdGVtKGFJbmRleCwgJnJ1bGUpOwoKICAqYVJlc3VsdCA9 IHJ1bGU7CgogIHJldHVybiBydjsKfQoKCgoKbnNyZXN1bHQgbnNFdmVudExpc3RlbmVyVGhpc1Ry YW5zbGF0b3I6OlF1ZXJ5SW50ZXJmYWNlKGNvbnN0IG5zSUlEJiBhSUlELCB2b2lkKiogYUluc3Rh bmNlUHRyKSB7IDsgaWYgKCAhYUluc3RhbmNlUHRyICkgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw MDQwMDNMKTsgbnNJU3VwcG9ydHMqIGZvdW5kSW50ZXJmYWNlOwogIGlmICggYUlJRC5FcXVhbHMo bnNDT01UeXBlSW5mbzxuc0lYUENGdW5jdGlvblRoaXNUcmFuc2xhdG9yPjo6R2V0SUlEKCkpICkg Zm91bmRJbnRlcmZhY2UgPSBzdGF0aWNfY2FzdDwgbnNJWFBDRnVuY3Rpb25UaGlzVHJhbnNsYXRv ciogPih0aGlzKTsgZWxzZQogIGlmICggYUlJRC5FcXVhbHMobnNDT01UeXBlSW5mbzxuc0lTdXBw b3J0cz46OkdldElJRCgpKSApIGZvdW5kSW50ZXJmYWNlID0gc3RhdGljX2Nhc3Q8IG5zSVN1cHBv cnRzKiA+KHRoaXMpOyBlbHNlCmZvdW5kSW50ZXJmYWNlID0gMDsgbnNyZXN1bHQgc3RhdHVzOyBp ZiAoICFmb3VuZEludGVyZmFjZSApIHN0YXR1cyA9ICgobnNyZXN1bHQpIDB4ODAwMDQwMDJMKTsg ZWxzZSB7IChmb3VuZEludGVyZmFjZSktPkFkZFJlZigpOyBzdGF0dXMgPSAwOyB9ICphSW5zdGFu Y2VQdHIgPSBmb3VuZEludGVyZmFjZTsgcmV0dXJuIHN0YXR1czsgfQoKCm5zcmVmY250IG5zRXZl bnRMaXN0ZW5lclRoaXNUcmFuc2xhdG9yOjpBZGRSZWYodm9pZCkgeyA7ICgodm9pZCkwKTsgKytt UmVmQ250OyA7IHJldHVybiBtUmVmQ250OyB9Cm5zcmVmY250IG5zRXZlbnRMaXN0ZW5lclRoaXNU cmFuc2xhdG9yOjpSZWxlYXNlKHZvaWQpIHsgOyAoKHZvaWQpMCk7IC0tbVJlZkNudDsgOyBpZiAo bVJlZkNudCA9PSAwKSB7IG1SZWZDbnQgPSAxOyBkbyB7IDsgZGVsZXRlICh0aGlzKTsgfSB3aGls ZSAoMCk7IHJldHVybiAwOyB9IHJldHVybiBtUmVmQ250OyB9CgoKbnNyZXN1bHQKbnNFdmVudExp c3RlbmVyVGhpc1RyYW5zbGF0b3I6OlRyYW5zbGF0ZVRoaXMobnNJU3VwcG9ydHMgKmFJbml0aWFs VGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJSW50 ZXJmYWNlSW5mbyAqYUludGVyZmFjZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBSVWludDE2IGFNZXRob2RJbmRleCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sICphSGlkZUZpcnN0UGFyYW1Gcm9tSlMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUlEICogKmFJ SURPZlJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJU3VwcG9ydHMgKipfcmV0dmFsKQp7CiAgKmFIaWRlRmlyc3RQYXJhbUZyb21KUyA9IDA7CiAg KmFJSURPZlJlc3VsdCA9IDA7CgogIG5zQ09NUHRyPG5zSURPTUV2ZW50PiBldmVudChkb19RdWVy eUludGVyZmFjZShhSW5pdGlhbFRoaXMpKTsKICBkbyB7IGlmICghKGV2ZW50KSkgeyA7IHJldHVy biAoKG5zcmVzdWx0KSAweDgwMDBmZmZmTCk7IH0gfSB3aGlsZSAoMCk7CgogIG5zQ09NUHRyPG5z SURPTUV2ZW50VGFyZ2V0PiB0YXJnZXQ7CgogIGV2ZW50LT5HZXRDdXJyZW50VGFyZ2V0KGdldHRl cl9BZGRSZWZzKHRhcmdldCkpOwoKICAqX3JldHZhbCA9IHRhcmdldDsKICBuc19pZl9hZGRyZWYo Kl9yZXR2YWwpOwoKICByZXR1cm4gMDsKfQo=
Synopsis: ICE: unrecognized symbol type "" State-Changed-From-To: open->feedback State-Changed-By: bangerth State-Changed-When: Tue May 20 00:37:41 2003 State-Changed-Why: This compiles just fine for me. What do you mean by your statement that it "Does not crash when only the one file is compiled"? If you don't provide us with something with which we can reproduce the problem, we can't fix it. If this is something that you _can_ reproduce, can you try to check what happens if you omit -pipe from the command line? I wouldn't be surprised if this is just a kind of out-of-memory problem, and that might be curable by not using -pipe. Thanks Wolfgang http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10874
The following reply was made to PR c++/10874; it has been noted by GNATS. From: "Paul Jones" <pajones57@hotmail.com> To: bangerth@dealii.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, pajones57@hotmail.com, gcc-gnats@gcc.gnu.org Cc: Subject: Re: c++/10874: ICE: unrecognized symbol type "" Date: Tue, 20 May 2003 17:07:03 +0000 > This compiles just fine for me. What do you mean by your > statement that it "Does not crash when only the one file is > compiled"? If you don't provide us with something with which > we can reproduce the problem, we can't fix it. > > If this is something that you _can_ reproduce, can you > try to check what happens if you omit -pipe from the > command line? I wouldn't be surprised if this is just a > kind of out-of-memory problem, and that might be curable > by not using -pipe. Thanks for your help. For some reason my swap partition was not enabled, so it ran out of physical memory (96M). I mounted swap partition and it works like a charm. Is it possible to have an out of memory error message? Thanks Again Paul _________________________________________________________________ Help STOP SPAM with the new MSN 8 and get 2 months FREE* http://join.msn.com/?page=features/junkmail
Synopsis: ICE: unrecognized symbol type "" State-Changed-From-To: feedback->closed State-Changed-By: bangerth State-Changed-When: Tue May 20 19:08:56 2003 State-Changed-Why: Not a gcc problem http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10874
The following reply was made to PR c++/10874; it has been noted by GNATS. From: Wolfgang Bangerth <bangerth@ices.utexas.edu> To: Paul Jones <pajones57@hotmail.com> Cc: gcc-bugs@gcc.gnu.org, <gcc-gnats@gcc.gnu.org> Subject: Re: c++/10874: ICE: unrecognized symbol type "" Date: Tue, 20 May 2003 14:08:58 -0500 (CDT) > Thanks for your help. For some reason my swap partition was not enabled, so > it ran out of physical memory (96M). I mounted swap partition and it works > like a charm. Is it possible to have an out of memory error message? That's pretty hard, since if the operating system overcommits memory (which most do these days), then an application will not get an out-of-memory status from malloc, but just a page fault or something when it actually uses this memory. It's hard to detect what exactly caused this, then. Thanks for the feedback W. ------------------------------------------------------------------------- Wolfgang Bangerth email: bangerth@ices.utexas.edu www: http://www.ices.utexas.edu/~bangerth/