From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23882 invoked by alias); 25 Feb 2003 17:26:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 23861 invoked by uid 71); 25 Feb 2003 17:26:00 -0000 Resent-Date: 25 Feb 2003 17:26:00 -0000 Resent-Message-ID: <20030225172600.23860.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, kaplun@inwind.it Received: (qmail 19845 invoked by uid 48); 25 Feb 2003 17:21:05 -0000 Message-Id: <20030225172105.19844.qmail@sources.redhat.com> Date: Tue, 25 Feb 2003 17:26:00 -0000 From: kaplun@inwind.it Reply-To: kaplun@inwind.it To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c/9850: Segmentation Fault X-SW-Source: 2003-02/txt/msg01330.txt.bz2 List-Id: >Number: 9850 >Category: c >Synopsis: Segmentation Fault >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue Feb 25 17:26:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: gcc -DHAVE_CONFIG_H -I. -I. -I../../../.. -I../../../.. -I../../../../include -I../../../../include -I../../../../src -I../../../../src/xine-engine -I../../../../src/xine-engine -I../../../../src/xine-utils -I../../../../src/video_out/vi >Release: gcc-3.2.2 >Organization: >Environment: linux 2.5.61 glibc 2.2.5 >Description: It segfaults! Gcc was compiled using the only the --prefix=/usr option in configure... Well also I used "-march=athlon-xp -mcpu=athlon-xp -mmmx -msse -m3dnow -mfpmath=sse" options to optimize its compilation >How-To-Repeat: Using gcc -DHAVE_CONFIG_H -I. -I. -I../../../.. -I../../../.. -I../../../../include -I../../../../include -I../../../../src -I../../../../src/xine-engine -I../../../../src/xine-engine -I../../../../src/xine-utils -I../../../../src/video_out/vidix -I../../../../src/video_out/libdha -march=athlon-xp -mcpu=athlon-xp -msse -mmmx -m3dnow -mfpmath=sse -Wall -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DXINE_COMPILE -O3 -pipe -fomit-frame-pointer -falign-functions=4 -falign-loops=4 -falign-jumps=4 -mpreferred-stack-boundary=2 -fexpensive-optimizations -fschedule-insns2 -fno-strict-aliasing -ffast-math -funroll-loops -finline-functions -mcpu=athlon -I/opt/kde3.1.0/include/artsc -DRAGE128 -c rage128_vid.c -MT rage128_vid.lo -MD -MP -MF .deps/rage128_vid.TPlo -DPIC -o rage128_vid.lo >Fix: Well, when I tried adding the -save-temps as you suggested to get the .i file, it compiled well... It's strange... >Release-Note: >Audit-Trail: >Unformatted: dix -I../../../../src/video_out/libdha -march=athlon-xp -mcpu=athlon-xp -msse -mmmx -m3dnow -mfpmath=sse -Wall -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DXINE_COMPILE -O3 -pipe -fomit-frame-pointer -falign-functions=4 -falign-loops=4 -falign-jumps=4 -mpreferr ed-stack-boundary=2 -fexpensive-optimizations -fschedule-insns2 -fno-strict-aliasing -ffast-math -funroll-loops -finline-functions -mcpu=athlon -I/opt/kde3.1.0/include/artsc -DRAGE128 -c rage128_vid.c -MT rage128_vid.lo -MD -MP -MF .deps/rage128_vid.TPlo -DPIC -o rage128_vid.lo ----gnatsweb-attachment---- Content-Type: text/x-csrc; name="rage128_vid.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="rage128_vid.i" IyAxICJyYWdlMTI4X3ZpZC5jIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4i CiMgMSAicmFnZTEyOF92aWQuYyIKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEg MwojIDI5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAxIDMKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyODQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMK IyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9z dHVicy5oIiAxIDMKIyAzMTMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMCAiL3Vz ci9pbmNsdWRlL2Vycm5vLmgiIDIgMwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5v LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIg MSAzCiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1 ZGUvYml0cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpl eHRlcm4gaW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIg MwojIDU5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwoKIyA5ICJyYWdlMTI4X3ZpZC5jIiAyCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlv LmgiIDEgMwojIDM5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2lu Y2x1ZGUvc3RkaW8uaCIgMwoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIxMyAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWdu ZWQgaW50IHNpemVfdDsKIyA0NCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5o IiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3IvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAg Ii91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBf X3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5z aW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5z aW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUv Yml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5z aWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGlu dCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lv bl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9f IHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1 YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191 X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBf X2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5r X3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsK dHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9s b25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3Vf aW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19m c2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsK dHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25k c190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19z d2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9j a2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90 OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxv bmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBl ZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRf dDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcg X19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRl ZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0 eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBf X3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBl cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2No ZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5 OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1 Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5s b2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVh ZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19k ZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBf X3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVf dCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRy OwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1 Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNj ciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGlu dCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBw dGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwog IGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2lu ZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90 OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhh dHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwojIDE0MCAiL3Vzci9pbmNsdWRl L2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFk X3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyA0NiAiL3Vzci9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDU0 ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8u aCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0ICIvdXNyL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVj dCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEg MwojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25m aWcuaCIgMSAzCiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MzI1ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90OwojIDM1NCAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5z aWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAy NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi IDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3Iv aW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAz CiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFy LmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2lu dF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90 OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewog IF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVk ZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBf R19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2djb252LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAx ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVm LmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgMjkgIi91c3IvaW5jbHVk ZS9nY29udi5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9nY29udi5oIiAy IDMKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dD T05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dD T05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09N UExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5U RVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9f R0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpz dHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0 cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChz dHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg KiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0 KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0 KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5z X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25l ZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoK CnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25z dCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRl ZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0 IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNv bnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQg Kik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190 cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0 OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRh OwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2Nv bnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7 CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9f ZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19n Y29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoK CiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQg X19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1 bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVu c2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgog IGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19p bnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0 YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVk ZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2dj b252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2Rh dGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcu aCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1 Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9z dGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBp bnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRl ZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18g KChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMg NTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYg X19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9saWJp by5oIiAyIDMKIyAxNjAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90 OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTcwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVm IHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19t YXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMg MTkzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7 CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwK ICBfX2NvZGVjdnRfbm9jb252Cn07CiMgMjYxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1 Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBj aGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3Jp dGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAg Y2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2 ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7Cgog IHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47 CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoK CgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zm c2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAi L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQg Kl9fcGFkMTsKICB2b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsx NSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgp0eXBlZGVmIHN0 cnVjdCBfSU9fRklMRSBfSU9fRklMRTsKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBz dHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklM RV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18y XzFfc3RkZXJyXzsKIyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6 ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19u Ynl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19j b29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpf X2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19j bG9zZV9mbiAodm9pZCAqX19jb29raWUpOwojIDM5NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK ZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fdWZsb3cg KF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIDsK ZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBf X3d1ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklM RSAqLCB3aW50X3QpIDsKIyA0MjYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQg X0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2Ms IF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSA7 CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIDsKCmV4dGVybiBpbnQgX0lP X3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIDsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxv Y2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJ TEUgKikgOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIDsKIyA0NTYg Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxF ICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIDsKZXh0ZXJuIGludCBfSU9f dmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIDsKZXh0ZXJuIF9fc3NpemVf dCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIDsKZXh0ZXJuIHNpemVfdCBf SU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90KSA7CgpleHRlcm4gX19vZmY2NF90 IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSA7CmV4dGVybiBf X29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSA7CgpleHRl cm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgOwojIDc1ICIvdXNyL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMg OTEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRp by5oIiAzCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvc190OwojIDEzOCAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTM5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBGSUxFICpz dGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsKCgoKCgoKZXh0 ZXJuIGludCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgOwoKZXh0ZXJuIGludCBy ZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIDsKCgoKCgoK CmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSBfX2FzbV9fICgiIiAidG1wZmlsZTY0Iik7CiMg MTcwICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk aW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCgoKCmV4dGVybiBjaGFy ICp0bXBuYW1fciAoY2hhciAqX19zKSA7CiMgMTg3ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAo X19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFt KSA7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBm Zmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CiMgMjE4ICIvdXNyL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAq Zm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19tb2RlcykgX19hc21fXyAoIiIgImZvcGVuNjQiKTsKCgpleHRlcm4gRklM RSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSBfX2Fz bV9fICgiIiAiZnJlb3BlbjY0Iik7CiMgMjQwICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQg X19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CiMgMjYzICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBzZXRi dWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsK CgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpf X3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3Qg X19uKSA7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fc2l6ZSkgOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSA7CgoK CgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4 dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg OwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCmV4dGVy biBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJn KSA7CgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hh ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIDsKCgoKZXh0ZXJuIGludCBz bnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4g aW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n bnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJp bnRmX18sIDMsIDApKSk7CiMgMzM0ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikgOwojIDM2MCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19z dHJlYW0pIDsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQg Z2V0Y2hhciAodm9pZCkgOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpf X3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKCgoKCmV4dGVy biBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZw dXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2Ms IEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSA7CgoKCgoK CgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoK CgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpl eHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIDsKCgoKCgpleHRlcm4gaW50IGdl dHcgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpf X3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywg aW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICA7CiMgNDI2ICIvdXNyL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl cm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSA7CiMgNDUwICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZwdXRzIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQog ICAgIDsKIyA0NjAgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5j bHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoK ZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBz aXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsK CmV4dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNp emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jl c3RyaWN0IF9fcykgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jl c3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CmV4dGVybiBzaXplX3Qg ZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBf X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVh bSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxs IChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkg OwojIDUxNiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRl L3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt LCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpIF9fYXNtX18gKCIiICJmZ2V0cG9zNjQiKTsKCmV4 dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3Bvcykg X19hc21fXyAoIiIgImZzZXRwb3M2NCIpOwojIDU0MCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgY2xlYXJlcnIg KEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSA7Cgpl eHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJl cnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAo RklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry ZWFtKSA7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSA7CgoKCgpl eHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJs aXN0W107CiMgNTcxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIDsKCgoK CmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCgpleHRl cm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9f bW9kZXMpIDsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRl cm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSA7CiMgNjE4ICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBmbG9j a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxF ICpfX3N0cmVhbSkgOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkg OwojIDYzOSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRl L3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIyAzMyAiL3Vz ci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnZwcmludGYgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCnsKICBy ZXR1cm4gdmZwcmludGYgKHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmV4dGVybiBfX2lubGlu ZSBpbnQKZ2V0Y2hhciAodm9pZCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgpl eHRlcm4gX19pbmxpbmUgaW50CmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApCnsKICByZXR1cm4g KChfX2ZwKS0+X0lPX3JlYWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAo X19mcCkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgpl eHRlcm4gX19pbmxpbmUgaW50CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQpCnsKICByZXR1cm4gKChz dGRpbiktPl9JT19yZWFkX3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChz dGRpbikgOiAqKHVuc2lnbmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoK CgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXIgKGludCBfX2MpCnsKICByZXR1cm4gX0lPX3B1 dGMgKF9fYywgc3Rkb3V0KTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGludApmcHV0Y191bmxvY2tl ZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9f d3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19z dHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJl YW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lIGlu dApwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChf X3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBf X292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBj aGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgpleHRlcm4g X19pbmxpbmUgaW50CnB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpCnsKICByZXR1cm4gKCgoc3Rk b3V0KS0+X0lPX3dyaXRlX3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJm bG93IChzdGRvdXQsICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCoo c3Rkb3V0KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQojIDExMSAiL3Vzci9pbmNsdWRl L2JpdHMvc3RkaW8uaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CmZlb2ZfdW5sb2NrZWQgKEZJTEUg Kl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgxMCkgIT0gMCk7 Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p CnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsKfQojIDY0MCAi L3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgi IDIgMwoKCgojIDEwICJyYWdlMTI4X3ZpZC5jIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsK CgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVt OwogIH0gbGRpdl90OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXpl X3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgOwoKCgpleHRlcm4gZG91YmxlIGF0b2Yg KF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy biBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGlu dCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp IDsKIyAxNjMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gbG9uZyBpbnQgc3RydG9s IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKZXh0ZXJuIHVuc2ln bmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp bnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7 CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAg IDsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25f XwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsKIyAyNTAgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpl eHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9s ZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7CgpleHRl cm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz ZSwgaW50IF9fZ3JvdXApIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9p bnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Us IGludCBfX2dyb3VwKSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9f c3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxv bmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgOwoKCgoKCgoKZXh0 ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3RydG9kX2ludGVy bmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKc3Ry dG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sX2ludGVybmFs IChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGluZSB1bnNpZ25l ZCBsb25nIGludApzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBf X3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KIyAzMjUg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBs b25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBf X3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChf X25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f aW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsK ICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAp Owp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQK c3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b3Vs bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lu bGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9k IChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAph dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0 ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50 CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvbCAoX19ucHRyLCAo Y2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s aW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJu IHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0KIyAzODQgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSA7 CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjgg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hh cjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBl ZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191 X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9f bG9mZl90IGxvZmZfdDsKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm9fdDsKIyA2MSAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYg X19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBf X25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgoKCnR5cGVk ZWYgX19vZmY2NF90IG9mZl90OwojIDk5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlw ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYg X19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRl ZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMK IyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyA4 MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsK IyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90Owoj IDEzMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKIyAxNDYgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4y LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVk IHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkwICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18g KChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18g KChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18g KChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18g KChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1 X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5z aWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKF9fd29yZF9fKSkpOwojIDIxMiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUv ZW5kaWFuLmgiIDIgMwojIDIxMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEg Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3Nl bGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNy L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3Nl dC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQg X19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcg aW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9 IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBl ZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAx IDMKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRpbWVzcGVjCiAgewogICAg X190aW1lX3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwojIDQ1ICIvdXNyL2lu Y2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAx IDMKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0aW1ldmFsCiAgewog ICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDcg Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBz dXNlY29uZHNfdDsKCgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoKCnR5cGVk ZWYgc3RydWN0CiAgewoKCgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNbMTAyNCAvICg4ICog c2l6ZW9mIChfX2ZkX21hc2spKV07CgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21h c2sgZmRfbWFzazsKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKCgoKCgoKZXh0 ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMs CiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAg ICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAg ICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgOwojIDExOCAiL3Vz ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKIyAyMTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTkgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCiMgMjQzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2Nu dDY0X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudF90Owoj IDI2MiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgojIDM5MSAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgOwoKCmV4dGVy biB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIDsKCgoKCgpleHRlcm4gY2hhciAq aW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgOwoKCgpleHRlcm4gY2hhciAqc2V0 c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIDsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsK ICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7 CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwog ICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJh bmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90 ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQg aW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgOwoKZXh0ZXJuIGludCBpbml0 c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVm LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgpleHRl cm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoK CgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIDsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBp bnQgX19zZWVkKSA7CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkg OwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBkb3VibGUgZXJh bmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIDsKCgpleHRlcm4gbG9uZyBpbnQg bHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQg aW50IF9feHN1YmlbM10pIDsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgOwpleHRl cm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIDsKCgpl eHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIDsKZXh0ZXJuIHVuc2lnbmVk IHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSA7CmV4 dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSA7CgoKCgoK c3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hbM107CiAg ICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBf X2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQgbG9uZyBsb25n IGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0 YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19y ZXN0cmljdCBfX3Jlc3VsdCkgOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQg aW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRh ICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGlu dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQg c2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0 OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0 IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1 bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9y IChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAg IDsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10s CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7Cgpl eHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgOwojIDUyNyAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3Np emUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChz aXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxs b2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9f c2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZv aWQgKl9fcHRyKSA7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgOwoKCgojIDEg Ii91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIg MwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKCgoKCgpleHRl cm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSA7CgoKCgoKCiMgNTQ3ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkg X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyA1NjEgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f XykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSA7CgoKCgpl eHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9f YXJnKSwgdm9pZCAqX19hcmcpCiAgICAgOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0 YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwojIDU4NyAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7 CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7 CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSA7CgoKCgoKZXh0ZXJuIGlu dCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGlu dCBfX3JlcGxhY2UpCiAgICAgOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAq X19uYW1lKSA7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIDsKIyA2MjMgIi91c3Iv aW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRl KSA7CiMgNjM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBta3N0ZW1wIChj aGFyICpfX3RlbXBsYXRlKSBfX2FzbV9fICgiIiAibWtzdGVtcDY0Iik7CiMgNjUwICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUp IDsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgOwojIDY3 MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpf X3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIDsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90 KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKIyA2ODkgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19j b25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwg c2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFz b3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAg ICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChp bnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJz IChsb25nIGludCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MTAgIi91c3Iv aW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9f ZGVub20pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxk aXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwojIDcyOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj aGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg X19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKCgoK CmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9f cmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Np Z24pIDsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LCBjaGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f ZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25n IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKZXh0ZXJuIGNoYXIg KnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSA7 CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbGVuKSA7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBz aXplX3QgX19sZW4pIDsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwg aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0 LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz dHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91 YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAg ICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKCgoKCgoKZXh0ZXJuIGlu dCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1i dG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHdjdG9t YiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIDsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3dj cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIDsKCmV4dGVybiBzaXplX3Qg d2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIDsKCgoK CgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSA7CiMgODU4 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUg X19sb2FkYXZnW10sIGludCBfX25lbGVtKSA7CgoKCgoKCiMgMTEgInJhZ2UxMjhfdmlkLmMiIDIK IyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5n LmgiIDMKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoK CmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsK CgpleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3Jj LCBzaXplX3QgX19uKQogICAgIDsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19y ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKZXh0ZXJuIHZvaWQg Km1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBt ZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19u KQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIg KF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKIyA3NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBj aGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMpCiAgICAgOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJp Y3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0 cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRl cm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIDsKCgpl eHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9f Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbikgOwojIDEyMCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpz dHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoj IDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29u c3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy biBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CiMgMTY3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIHNp emVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAo X19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpf X3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29u c3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMTg3 ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19y ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIDsKCgoK ZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSA7CgpleHRlcm4g Y2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X3NhdmVfcHRyKSA7CiMgMjE4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIHNpemVf dCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK IyAyMjkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGlu dCBfX2Vycm51bSkgOwoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBj aGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSA7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2 b2lkICpfX3MsIHNpemVfdCBfX24pIDsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9p ZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkIGJ6ZXJv ICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9p ZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3Ms IGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5k ZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKIyAyNzIgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IHN0cmNhc2VjbXAg KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAq X19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwojIDI5NCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFy ICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIDsKIyAzNTcgIi91c3IvaW5jbHVk ZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZy5oIiAxIDMKIyAzNTgg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdHJp bmcyLmgiIDEgMwojIDM3NyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiB2 b2lkICpfX3Jhd21lbWNociAoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKTsKIyA0MDUgIi91c3Iv aW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJjcHlf c21hbGwgKGNoYXIgKiwgX191aW50MTZfdCwgX191aW50MTZfdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3VpbnQzMl90LCBfX3VpbnQzMl90LCBzaXplX3QpOwpleHRl cm4gX19pbmxpbmUgY2hhciAqCl9fc3RyY3B5X3NtYWxsIChjaGFyICpfX2Rlc3QsCiAgICAgICAg ICAgICAgICBfX3VpbnQxNl90IF9fc3JjMF8yLCBfX3VpbnQxNl90IF9fc3JjNF8yLAogICAgICAg ICAgICAgICAgX191aW50MzJfdCBfX3NyYzBfNCwgX191aW50MzJfdCBfX3NyYzRfNCwKICAgICAg ICAgICAgICAgIHNpemVfdCBfX3NyY2xlbikKewogIHVuaW9uIHsKICAgIF9fdWludDMyX3QgX191 aTsKICAgIF9fdWludDE2X3QgX191c2k7CiAgICB1bnNpZ25lZCBjaGFyIF9fdWM7CiAgfSAqX191 ID0gKHZvaWQgKikgX19kZXN0OwogIHN3aXRjaCAoKHVuc2lnbmVkIGludCkgX19zcmNsZW4pCiAg ICB7CiAgICBjYXNlIDE6CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAgICAgIGJyZWFrOwogICAg Y2FzZSAyOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIGJyZWFrOwogICAgY2Fz ZSAzOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9u X18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVh azsKICAgIGNhc2UgNDoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIGJyZWFrOwog ICAgY2FzZSA1OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRl bnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAgICAg IGJyZWFrOwogICAgY2FzZSA2OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191 ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191c2kgPSBf X3NyYzRfMjsKICAgICAgYnJlYWs7CiAgICBjYXNlIDc6CiAgICAgIF9fdS0+X191aSA9IF9fc3Jj MF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAg X191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAq KSBfX3UgKyAyKTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNl IDg6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9f ICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VpID0gX19zcmM0XzQ7CiAgICAgIGJy ZWFrOwogICAgfQogIHJldHVybiBfX2Rlc3Q7Cn0KIyA4OTMgIi91c3IvaW5jbHVkZS9iaXRzL3N0 cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMSAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX3JlamVjdCk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3Bu X2MxIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgc2l6ZV90 IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jl c3VsdF0gIT0gX19yZWplY3QpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoK ZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19yZWplY3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f cmVqZWN0Mik7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MyIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIHNpemVf dCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19y ZXN1bHRdICE9IF9fcmVqZWN0MQogICAgICAgICAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0 MikKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUg c2l6ZV90IF9fc3RyY3Nwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19yZWplY3QyLCBpbnQgX19y ZWplY3QzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzMgKF9fY29uc3QgY2hh ciAqX19zLCBpbnQgX19yZWplY3QxLCBpbnQgX19yZWplY3QyLAogICAgICAgICAgICAgIGludCBf X3JlamVjdDMpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3Nb X19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDEKICAgICAgICAg JiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVj dDMpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQojIDk1MCAiL3Vzci9pbmNs dWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzEg KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90 Cl9fc3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0KQp7CiAgcmVnaXN0 ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2Nl cHQpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5l IHNpemVfdCBfX3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpleHRlcm4g X19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNj ZXB0MSwgaW50IF9fYWNjZXB0MikKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7Cgog IHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9f YWNjZXB0MikKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19p bmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0 MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0MiwgaW50 IF9fYWNjZXB0Myk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzMgKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQzKQp7 CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0g PT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQyCiAgICAgICAgIHx8IF9f c1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQzKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1 bHQ7Cn0KIyAxMDA3ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5s aW5lIGNoYXIgKl9fc3RycGJya19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyKTsKZXh0 ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19hY2NlcHQxLCBpbnQgX19hY2NlcHQyKQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9f cyAhPSBfX2FjY2VwdDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIpCiAgICArK19fczsKICByZXR1cm4g Kl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAqKSAoc2l6ZV90KSBfX3M7Cn0KCmV4 dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNj ZXB0MiwgaW50IF9fYWNjZXB0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2Mz IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MiwKICAgICAg ICAgICAgICBpbnQgX19hY2NlcHQzKQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAh PSBfX2FjY2VwdDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIKICAgICAgICAgJiYgKl9fcyAhPSBfX2Fj Y2VwdDMpCiAgICArK19fczsKICByZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAo Y2hhciAqKSAoc2l6ZV90KSBfX3M7Cn0KIyAxMDU5ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcy LmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RydG9rX3JfMWMgKGNoYXIgKl9fcywgY2hh ciBfX3NlcCwgY2hhciAqKl9fbmV4dHApOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RydG9r X3JfMWMgKGNoYXIgKl9fcywgY2hhciBfX3NlcCwgY2hhciAqKl9fbmV4dHApCnsKICBjaGFyICpf X3Jlc3VsdDsKICBpZiAoX19zID09ICgodm9pZCAqKTApKQogICAgX19zID0gKl9fbmV4dHA7CiAg d2hpbGUgKCpfX3MgPT0gX19zZXApCiAgICArK19fczsKICBfX3Jlc3VsdCA9ICgodm9pZCAqKTAp OwogIGlmICgqX19zICE9ICdcMCcpCiAgICB7CiAgICAgIF9fcmVzdWx0ID0gX19zKys7CiAgICAg IHdoaWxlICgqX19zICE9ICdcMCcpCiAgICAgICAgaWYgKCpfX3MrKyA9PSBfX3NlcCkKICAgICAg ICAgIHsKICAgICAgICAgICAgX19zWy0xXSA9ICdcMCc7CiAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgfQogICAgICAqX19uZXh0cCA9IF9fczsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0K IyAxMDkxICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIGNoYXIgKl9fc3Ry c2VwX2cgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19kZWxpbSk7CiMgMTEwOSAi L3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0 cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCk7CmV4dGVybiBfX2lubGluZSBjaGFy ICoKX19zdHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpCnsKICByZWdpc3RlciBj aGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApICYmICgq X19zID0gKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX3JlamVjdCkgJiYg KF9fcmVqZWN0KSA9PSAnXDAnID8gKGNoYXIgKikgX19yYXdtZW1jaHIgKF9fcmV0dmFsLCBfX3Jl amVjdCkgOiBzdHJjaHIgKF9fcmV0dmFsLCBfX3JlamVjdCkpKSkgIT0gKCh2b2lkICopMCkpCiAg ICAqKCpfX3MpKysgPSAnXDAnOwogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5l IGNoYXIgKl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3Jl amVjdDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBj aGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZh bCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApKQogICAgewogICAgICByZWdp c3RlciBjaGFyICpfX2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAg ICAgICAgIGlmICgqX19jcCA9PSAnXDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19j cCA9ICgodm9pZCAqKTApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAg IGlmICgqX19jcCA9PSBfX3JlamVjdDEgfHwgKl9fY3AgPT0gX19yZWplY3QyKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgKl9fY3ArKyA9ICdcMCc7CiAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgIH0KICAgICAgICAgICsrX19jcDsKICAgICAgICB9CiAgICAgICpfX3MgPSBfX2Nw OwogICAgfQogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ry c2VwXzNjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX3JlamVjdDMpOwpleHRlcm4gX19p bmxpbmUgY2hhciAqCl9fc3Ryc2VwXzNjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hh ciBfX3JlamVjdDIsIGNoYXIgX19yZWplY3QzKQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwg PSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAgcmVnaXN0 ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAgICB3aGlsZSAoMSkKICAgICAgICB7CiAgICAg ICAgICBpZiAoKl9fY3AgPT0gJ1wwJykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fY3Ag PSAoKHZvaWQgKikwKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBp ZiAoKl9fY3AgPT0gX19yZWplY3QxIHx8ICpfX2NwID09IF9fcmVqZWN0MiB8fCAqX19jcCA9PSBf X3JlamVjdDMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19jcCsrID0gJ1wwJzsKICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgKytfX2NwOwogICAgICAg IH0KICAgICAgKl9fcyA9IF9fY3A7CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9CiMgMTE5MCAi L3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBjaGFyICpfX3N0cmR1cCAoX19j b25zdCBjaGFyICpfX3N0cmluZykgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxMjA5 ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIGNoYXIgKl9fc3RybmR1cCAo X19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgo X19tYWxsb2NfXykpOwojIDM2MSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKCiMgMTIg InJhZ2UxMjhfdmlkLmMiIDIKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyOSAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5o IiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCgoKCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvbWF0aGRlZi5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMg NjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs bHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBk b3VibGUgYWNvcyAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYWNvcyAoZG91YmxlIF9f eCkgOwoKZXh0ZXJuIGRvdWJsZSBhc2luIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19h c2luIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRv dWJsZSBfX3ksIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChkb3VibGUgX195 LCBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIDsgZXh0ZXJu IGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSB0 YW4gKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCkgOwojIDc4 ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGNvc2ggKGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBk b3VibGUgc2luaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9f eCkgOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX190 YW5oIChkb3VibGUgX194KSA7CgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIDsg ZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGFzaW5o IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9feCkgOwoKZXh0 ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRv dWJsZSBfX3gpIDsKCgoKCgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCkgOyBleHRlcm4g ZG91YmxlIF9fZXhwIChkb3VibGUgX194KSA7CiMgMTA2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo Y2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25l bnQpIDsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQp IDsKCgpleHRlcm4gZG91YmxlIGxkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgOyBl eHRlcm4gZG91YmxlIF9fbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7CgoKZXh0 ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZyAoZG91Ymxl IF9feCkgOwoKCmV4dGVybiBkb3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJs ZSBfX2xvZzEwIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBtb2RmIChkb3VibGUgX194 LCBkb3VibGUgKl9faXB0cikgOyBleHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9feCwgZG91 YmxlICpfX2lwdHIpIDsKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgOyBleHRl cm4gZG91YmxlIF9fZXhwbTEgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChk b3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgOwoKCmV4dGVy biBkb3VibGUgbG9nYiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fbG9nYiAoZG91Ymxl IF9feCkgOwojIDE0MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRv dWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX3BvdyAo ZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCmV4dGVybiBkb3VibGUgc3FydCAoZG91YmxlIF9f eCkgOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgOwoKCgpleHRlcm4gZG91Ymxl IGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19oeXBvdCAo ZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUg X194KSA7IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KSA7CgoKCgoKCmV4dGVybiBk b3VibGUgY2VpbCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9f eCkgOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChk b3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19mbW9kIChkb3VibGUgX194 LCBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gaW50IF9faXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91Ymxl IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNp bmYgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu IGludCBmaW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBk b3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKCmV4dGVybiBkb3VibGUg c2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3NpZ25pZmljYW5kIChk b3VibGUgX194KSA7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3Vi bGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5 c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwojIDIwOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGludCBfX2lz bmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl cm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCmV4dGVybiBkb3VibGUgajAgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fajAgKGRvdWJs ZSkgOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2oxIChkb3Vi bGUpIDsKZXh0ZXJuIGRvdWJsZSBqbiAoaW50LCBkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2pu IChpbnQsIGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIHkwIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJs ZSBfX3kwIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKSA7IGV4dGVybiBkb3Vi bGUgX195MSAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91YmxlKSA7IGV4dGVy biBkb3VibGUgX195biAoaW50LCBkb3VibGUpIDsKCgoKCgpleHRlcm4gZG91YmxlIGVyZiAoZG91 YmxlKSA7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIGVyZmMg KGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fZXJmYyAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUg bGdhbW1hIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSA7CiMgMjM4 ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGdhbW1hIChk b3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3VibGUpIDsKCgoKCgoKZXh0ZXJuIGRv dWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIDsgZXh0ZXJuIGRvdWJsZSBf X2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgOwoKCgoKCgpleHRlcm4gZG91Ymxl IHJpbnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3JpbnQgKGRvdWJsZSBfX3gpIDsK CgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUg X194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJu IGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJs ZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgpleHRlcm4gZG91Ymxl IHNjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSA7IGV4dGVybiBkb3VibGUgX19zY2FsYiAo ZG91YmxlIF9feCwgZG91YmxlIF9fbikgOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJs ZSBfX3gsIGludCBfX24pIDsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91YmxlIF9feCwgaW50 IF9fbikgOwoKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KSA7IGV4dGVybiBpbnQgX19p bG9nYiAoZG91YmxlIF9feCkgOwojIDY0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4MiAi L3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5o IiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0 IGFjb3NmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgOwoK ZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZs b2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0 IF9fYXRhbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBm bG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkg OwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fY29zZiAo ZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgc2luZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9h dCBfX3NpbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgOyBl eHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpIDsKIyA3OCAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGNvc2hmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZs b2F0IF9fY29zaGYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gp IDsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IHRhbmhm IChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgOwoKCgpleHRl cm4gZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9h dCBfX3gpIDsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQg X19hc2luaGYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSA7 IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoZmxvYXQgX194KSA7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4 cGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIDsKIyAxMDYg Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZs b2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSA7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQg X194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpleHRlcm4gZmxvYXQgbGRleHBmIChmbG9hdCBfX3gs IGludCBfX2V4cG9uZW50KSA7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQg X19leHBvbmVudCkgOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZs b2F0IF9fbG9nZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194 KSA7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IG1v ZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIDsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZs b2F0IF9feCwgZmxvYXQgKl9faXB0cikgOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBf X3gpIDsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQg bG9nMXBmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBfX3gpIDsK CgpleHRlcm4gZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19sb2diZiAo ZmxvYXQgX194KSA7CiMgMTQzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRl cm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fcG93 ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9f eCkgOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCBo eXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIDsKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KSA7 IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNl aWxmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgOwoKCmV4 dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9f Zmxvb3JmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxv YXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoK CgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1 ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxv YXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBk cmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fZHJlbWYgKGZsb2F0 IF9feCwgZmxvYXQgX195KSA7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2FuZGYgKGZsb2F0IF9f eCkgOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgOwoKCgoKZXh0ZXJu IGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDIwOSAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGludCBfX2lzbmFuZiAoZmxvYXQgX192YWx1ZSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1 ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0 KSA7IGV4dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQp IDsgZXh0ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZs b2F0KSA7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkgOwpleHRlcm4gZmxvYXQgeTBm IChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCB5MWYg KGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IHluZiAo aW50LCBmbG9hdCkgOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpIDsKCgoKCgpleHRl cm4gZmxvYXQgZXJmZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIDsKZXh0 ZXJuIGZsb2F0IGVyZmNmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpIDsK ZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKGZs b2F0KSA7CiMgMjM4ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxv YXQgZ2FtbWFmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0KSA7CgoKCgoK CmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIDsgZXh0ZXJu IGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSA7CgoKCgoKCmV4dGVy biBmbG9hdCByaW50ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3JpbnRmIChmbG9hdCBf X3gpIDsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRl cm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0 IF9fcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgoKZXh0ZXJuIGZsb2F0IHNj YWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIDsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9h dCBfX3gsIGZsb2F0IF9fbikgOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0IF9feCwg aW50IF9fbikgOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIDsK CgoKZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCkgOyBleHRlcm4gaW50IF9faWxvZ2JmIChm bG9hdCBfX3gpIDsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgOTkgIi91c3IvaW5j bHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMg NTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBh Y29zbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NsIChsb25n IGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194 KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVy biBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2F0YW5sIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwg KGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBf X2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9u ZyBkb3VibGUgY29zbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nv c2wgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91 YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpIDsK CmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fdGFubCAobG9uZyBkb3VibGUgX194KSA7CiMgNzggIi91c3IvaW5jbHVkZS9iaXRz L21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194 KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVy biBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJs ZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5obCAo bG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsIChsb25nIGRvdWJs ZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSA7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSA7CgpleHRlcm4g bG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwg KGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKGxvbmcgZG91 YmxlIF9feCkgOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBfX3gp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUgX194KSA7CiMgMTA2ICIv dXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBs IChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgOyBleHRlcm4gbG9uZyBkb3VibGUg X19mcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSA7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgOyBleHRl cm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQp IDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBs b25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxMGwg KGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX21vZGZs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIDsKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4 cG0xbCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9u ZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFwbCAobG9uZyBkb3VibGUg X194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOwojIDE0MyAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxv bmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxv bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUg Y2JydGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9u ZyBkb3VibGUgX194KSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3Vi bGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIDsK CgpleHRlcm4gbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUg X194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZs b29ybCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zsb29ybCAobG9u ZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxv bmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g aW50IF9fZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91Ymxl IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3Vi bGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25n IGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCgpl eHRlcm4gbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCmV4dGVy biBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlz aWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKIyAyMDkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVy biBpbnQgX19pc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChsb25nIGRv dWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMGwgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBs b25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAo bG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGpubCAoaW50LCBsb25nIGRvdWJsZSkg OyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxv bmcgZG91YmxlIHkwbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTBsIChs b25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgOyBleHRl cm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSB5 bmwgKGludCwgbG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQsIGxv bmcgZG91YmxlKSA7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSA7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRv dWJsZSBlcmZjbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wgKGxv bmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsIChsb25nIGRvdWJsZSkgOyBl eHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgOwojIDIzOCAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9u ZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgOwoK CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3Np Z25nYW1wKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAobG9uZyBkb3VibGUsIGlu dCAqX19zaWduZ2FtcCkgOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91 YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSA7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX25leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBf X3JlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCmV4dGVy biBsb25nIGRvdWJsZSBzY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSA7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX24pIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5sIChsb25nIGRvdWJsZSBfX3gs IGludCBfX24pIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3VibGUgX194 LCBpbnQgX19uKSA7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGludCBfX2lsb2dibCAobG9uZyBkb3VibGUgX194KSA7CiMgMTAwICIvdXNyL2luY2x1ZGUv bWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBzaWdu Z2FtOwojIDI0MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVmIGVudW0KewogIF9JRUVF XyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9W RVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOwoj IDI2NSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgZXhjZXB0aW9uCgogIHsKICAgIGlu dCB0eXBlOwogICAgY2hhciAqbmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7 CiAgICBkb3VibGUgcmV0dmFsOwogIH07CgoKCgpleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBl eGNlcHRpb24gKl9fZXhjKTsKIyAzNTAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDEgMwojIDI5MSAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSkgOyBl eHRlcm4gX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUgX194KSB7IHJldHVybiBfX3ggPT0g MC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IGV4dGVybiBfX2lubGluZSBm bG9hdCBfX3NnbmYgKGZsb2F0KSA7IGV4dGVybiBfX2lubGluZSBmbG9hdCBfX3NnbmYgKGZsb2F0 IF9feCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4w KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25nIGRvdWJsZSkgOyBl eHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25nIGRvdWJsZSBfX3gpIHsgcmV0 dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0KCgoKCmV4 dGVybiBfX2lubGluZSBkb3VibGUgX19wb3cyIChkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGRv dWJsZSBfX3BvdzIgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcg aW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3g7IGlmIChfX3ggPT0gKGxvbmcgZG91YmxlKSBf X3ApIHsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAi ICgxLjApLCAidSIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmbGQJJSVzdCgwKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeClcblx0IiAiZnhjaFxuXHQiICJm c3ViCSUlc3QoMSkJCSMgZnJhY3QoeClcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFc blx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9f dmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0g ZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fcG93MmYgKGZsb2F0KSA7IGV4dGVybiBfX2lubGluZSBm bG9hdCBfX3BvdzJmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcg aW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3g7IGlmIChfX3ggPT0gKGxvbmcgZG91YmxlKSBf X3ApIHsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAi ICgxLjApLCAidSIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmbGQJJSVzdCgwKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeClcblx0IiAiZnhjaFxuXHQiICJm c3ViCSUlc3QoMSkJCSMgZnJhY3QoeClcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFc blx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9f dmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0g ZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fcG93MmwgKGxvbmcgZG91YmxlKSA7IGV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSBfX3BvdzJsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsg X19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3g7IGlm IChfX3ggPT0gKGxvbmcgZG91YmxlKSBfX3ApIHsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxl IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiICgxLjApLCAidSIgKF9feCkpOyByZXR1cm4gX192YWx1 ZTsgfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQJJSVzdCgwKVxuXHQiICJmcm5kaW50CQkJIyBp bnQoeClcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeClcblx0IiAiZjJ4 bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4 cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25l bnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyAzODUgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxp bmUuaCIgMwpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91Ymxl IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX2V4cG9uZW50OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9fdm9sYXRp bGVfXyAoImZsZGwyZQkJCSMgZV54IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0IiAiZm11 bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJ CQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJh Y3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0g MVxuXHQiICJmc2NhbGUJCQkjIDJeKHggKiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkp XG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBf X2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxuXHQiIDog Ij10IiAoX190ZW1wKSA6ICIwIiAoMS4wKSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVtcCAtPSAx LjA7IHJldHVybiBfX3RlbXAgKyBfX3ZhbHVlID86IF9feDsgfQojIDQwNSAiL3Vzci9pbmNsdWRl L2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgZXhwIChkb3VibGUg X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fZXhwb25lbnQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54ID0gMl4oeCAq IGxvZzIoZSkpXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVz dCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAi ZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJh Y3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9u ZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm c2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQp KTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGV4cGYgKGZsb2F0IF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBf X2V4cG9uZW50OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBs b2cyKGUpKVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3Qo MSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZz dWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0 KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVu dCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNj YWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7 IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBleHBsIChsb25n IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXngg PSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIg ImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhj aFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJ IyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIg KF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRp bGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19l eHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUg X19leHBsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxk bDJlCQkJIyBlXnggPSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBs b2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihl KSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5c dCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192 YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1 ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfQoKCmV4dGVybiBfX2lubGlu ZSBkb3VibGUgdGFuIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9f KSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFuIiA6ICI9dCIgKF9fdmFsdWUyKSwgIj11IiAo X192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUg ZmxvYXQgdGFuZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7 IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFuIiA6ICI9dCIgKF9fdmFsdWUyKSwgIj11IiAoX192 YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9u ZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmlidXRlX18gKChfX3Vu dXNlZF9fKSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFuIiA6ICI9dCIgKF9fdmFsdWUyKSwg Ij11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfQojIDQyNSAiL3Vz ci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXRh bjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1 ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChf X3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5s aW5lIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFs dWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0g ZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25n IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xh dGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkg OiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl IF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAo X192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1 ZTsgfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9f eSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIx OglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIg KF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9f dmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIx OglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIg KF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9f dmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5c dCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgi LCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA0NDAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhp bmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHsgcmVn aXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQi IChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5s aW5lIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7 IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgc3FydGwgKGxv bmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192 b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJu IF9fcmVzdWx0OyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRv dWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRp bGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jl c3VsdDsgfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgeyByZXR1 cm4gX19idWlsdGluX2ZhYnMgKF9feCk7IH0KZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZhYnNmIChm bG9hdCBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAoX194KTsgfQpleHRlcm4gX19pbmxp bmUgbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGlu X2ZhYnNsIChfX3gpOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25n IGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQoKCgoKCgoKZXh0 ZXJuIF9faW5saW5lIGRvdWJsZSBzaW4gKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9f cmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2luIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIw IiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgc2luZiAo ZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmc2luIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsg fSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3VibGUgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2luIiA6 ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQoKZXh0ZXJu IF9faW5saW5lIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVz dWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmY29zIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAo X194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgY29zZiAoZmxv YXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm Y29zIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBl eHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmY29zIiA6ICI9 dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQoKZXh0ZXJuIF9f aW5saW5lIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0 OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVz dWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9f aW5saW5lIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsg X19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yOyBmeGNoOyBmeWwyeCIgOiAiPXQiIChfX3Jlc3Vs dCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lu bGluZSBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMjsgZnhjaDsgZnlsMngi IDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3Vs dDsgfQpleHRlcm4gX19pbmxpbmUgZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB7IHJlZ2lzdGVy IGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbGcyOyBmeGNoOyBmeWwy eCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVz dWx0OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgeyByZWdpc3Rl ciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbGcyOyBmeGNoOyBmeWwy eCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVz dWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgi ZmxkbGcyOyBmeGNoOyBmeWwyeCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3Qo MSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGFzaW4gKGRv dWJsZSBfX3gpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9f eCkpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhc2luZiAoZmxvYXQgX194KSB7IHJldHVybiBf X2F0YW4ybCAoX194LCBfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpKTsgfSBleHRlcm4gX19pbmxp bmUgbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19hdGFuMmwg KF9feCwgX19zcXJ0bCAoMS4wIC0gX194ICogX194KSk7IH0KZXh0ZXJuIF9faW5saW5lIGRvdWJs ZSBhY29zIChkb3VibGUgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX19zcXJ0bCAoMS4wIC0gX194 ICogX194KSwgX194KTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkg eyByZXR1cm4gX19hdGFuMmwgKF9fc3FydGwgKDEuMCAtIF9feCAqIF9feCksIF9feCk7IH0gZXh0 ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu IF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBfX3gpOyB9CgoKZXh0ZXJuIF9f aW5saW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3Vs dDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6 ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5l IGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNt IF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9f eCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVz dWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQp IDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfQoKZXh0ZXJuIF9faW5s aW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBfX2lubGluZSBs b25nIGRvdWJsZSBfX3NnbjFsIChsb25nIGRvdWJsZSBfX3gpIHsgX19leHRlbnNpb25fXyB1bmlv biB7IGxvbmcgZG91YmxlIF9feGxkOyB1bnNpZ25lZCBpbnQgX194aVszXTsgfSBfX24gPSB7IF9f eGxkOiBfX3ggfTsgX19uLl9feGlbMl0gPSAoX19uLl9feGlbMl0gJiAweDgwMDApIHwgMHgzZmZm OyBfX24uX194aVsxXSA9IDB4ODAwMDAwMDA7IF9fbi5fX3hpWzBdID0gMDsgcmV0dXJuIF9fbi5f X3hsZDsgfQojIDQ3OSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBf X2lubGluZSBkb3VibGUgc2luaCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf X2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVybiAwLjUgKiAoX19leG0xIC8g KF9fZXhtMSArIDEuMCkgKyBfX2V4bTEpICogX19zZ24xbCAoX194KTsgfSBleHRlcm4gX19pbmxp bmUgZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEg PSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXht MSArIDEuMCkgKyBfX2V4bTEpICogX19zZ24xbCAoX194KTsgfSBleHRlcm4gX19pbmxpbmUgbG9u ZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf X2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVybiAwLjUgKiAoX19leG0xIC8g KF9fZXhtMSArIDEuMCkgKyBfX2V4bTEpICogX19zZ24xbCAoX194KTsgfQoKCgpleHRlcm4gX19p bmxpbmUgZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19l eCA9IF9fZXhwbCAoX194KTsgcmV0dXJuIDAuNSAqIChfX2V4ICsgMS4wIC8gX19leCk7IH0gZXh0 ZXJuIF9faW5saW5lIGZsb2F0IGNvc2hmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19leCA9IF9fZXhwbCAoX194KTsgcmV0dXJuIDAuNSAqIChfX2V4ICsgMS4wIC8gX19leCk7 IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leCA9IF9fZXhwbCAoX194KTsgcmV0dXJuIDAuNSAqIChf X2V4ICsgMS4wIC8gX19leCk7IH0KCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB0YW5oIChkb3Vi bGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsICgtX19mYWJz bCAoX194ICsgX194KSk7IHJldHVybiBfX2V4bTEgLyAoX19leG0xICsgMi4wKSAqIF9fc2duMWwg KC1fX3gpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsICgtX19mYWJzbCAoX194ICsgX194KSk7 IHJldHVybiBfX2V4bTEgLyAoX19leG0xICsgMi4wKSAqIF9fc2duMWwgKC1fX3gpOyB9IGV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsICgtX19mYWJzbCAoX194ICsgX194KSk7IHJl dHVybiBfX2V4bTEgLyAoX19leG0xICsgMi4wKSAqIF9fc2duMWwgKC1fX3gpOyB9CgoKCgpleHRl cm4gX19pbmxpbmUgZG91YmxlIGZsb29yIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cg JTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBf X2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192 b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBf X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0g ZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0 Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAw OyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20g X192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7 IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg aW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9f dm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAw eGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9f Y3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsg cmV0dXJuIF9fdmFsdWU7IH0KIyA1MDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg MwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZu c3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4 MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9f YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1 ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBf X3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgi Zm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4 MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9f YXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsg X19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3Zh bHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194 KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hv cnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNt IF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cg JiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIg KF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkg OiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cp KTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MjEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUu aCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlCmxkZXhwIChkb3VibGUgX194LCBpbnQgX195KQp7 CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNj YWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195 KSk7IHJldHVybiBfX3ZhbHVlOwp9CgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZXhwbTEg KGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5c dCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJm cm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEp CQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIo ZSkpKSAtIDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxv ZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChf X3gpKTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlc blx0IiA6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3Rl bXAgLT0gMS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZSA/OiBfX3g7IH0gZXh0ZXJuIF9faW5s aW5lIGZsb2F0IGV4cG0xZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdGVtcDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXnggLSAxID0gMl4oeCAq IGxvZzIoZSkpIC0gMVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0 CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5c dCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJe KGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgImZzY2FsZQkJCSMgMl4oeCAqIGxvZzIoZSkp IC0gMl4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4 cG9uZW50KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZQkJCSMgMl5p bnQoeCAqIGxvZzIoZSkpXG5cdCIgOiAiPXQiIChfX3RlbXApIDogIjAiICgxLjApLCAidSIgKF9f ZXhwb25lbnQpKTsgX190ZW1wIC09IDEuMDsgcmV0dXJuIF9fdGVtcCArIF9fdmFsdWUgPzogX194 OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4 cG9uZW50OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZsZGwyZQkJCSMgZV54IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0IiAiZm11bAklJXN0 KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGlu dCh4ICogbG9nMihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAq IGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQi ICJmc2NhbGUJCQkjIDJeKHggKiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIg OiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmc2NhbGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxuXHQiIDogIj10IiAo X190ZW1wKSA6ICIwIiAoMS4wKSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVtcCAtPSAxLjA7IHJl dHVybiBfX3RlbXAgKyBfX3ZhbHVlID86IF9feDsgfQoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91 YmxlIGxvZzFwIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlm IChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBf X3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRs bjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gp IDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2cx cGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJz bCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9 IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIg ImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgx KSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBs IChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9f ZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFs dWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxu XHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAi c3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhp bmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChf X3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19z Z24xbCAoX194KSk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBs IChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICog X19zZ24xbCAoX194KSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGFzaW5obCAobG9u ZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7 IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSAr IDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0KCgoKCmV4dGVybiBfX2lubGluZSBkb3Vi bGUgYWNvc2ggKGRvdWJsZSBfX3gpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAt IDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYWNv c2hmIChmbG9hdCBfX3gpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkg KiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYWNv c2hsIChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAt IDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUg YXRhbmggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAo X194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAq IF9fc2duMWwgKF9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194 KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41 ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9 IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxv ZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfQoKCgoK ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyBy ZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfSBleHRlcm4gX19pbmxpbmUg ZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gX19zcXJ0bCAoX194 ICogX194ICsgX195ICogX195KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgaHlwb3Rs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1cm4gX19zcXJ0bCAoX194 ICogX194ICsgX195ICogX195KTsgfQoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBsb2diIChkb3Vi bGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19q dW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRl cm4gX19pbmxpbmUgZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVf XyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChf X3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2Js IChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIg OiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Zh bHVlOyB9CiMgNjUyICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9f aW5saW5lIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJlZ2lzdGVyIGRv dWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVf XyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDog Ij10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195 KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgZHJlbWYg KGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3Rl ciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJm c3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEi IChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192 YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgX195KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBp bnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3Rz dwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChf X2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1 ZTsgfQojIDY2NSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lu bGluZSBpbnQKX19maW5pdGUgKGRvdWJsZSBfX3gpCnsKICByZXR1cm4gKF9fZXh0ZW5zaW9uX18K ICAgICAgICAgICgoKCgodW5pb24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9KSB7X19kOiBf X3h9KS5fX2lbMV0KICAgICAgICAgICAgIHwgMHg4MDBmZmZmZnUpICsgMSkgPj4gMzEpKTsKfQoK CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fY29zaG0xIChkb3VibGUpIDsgZXh0ZXJuIF9faW5s aW5lIGRvdWJsZSBfX2Nvc2htMSAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf X2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVybiAwLjUgKiAoX19leG0xIC8g KF9fZXhtMSArIDEuMCkpICogX19leG0xOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBfX2Nvc2ht MWYgKGZsb2F0KSA7IGV4dGVybiBfX2lubGluZSBmbG9hdCBfX2Nvc2htMWYgKGZsb2F0IF9feCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7 IHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkpICogX19leG0xOyB9IGV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSBfX2Nvc2htMWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBf X2lubGluZSBsb25nIGRvdWJsZSBfX2Nvc2htMWwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVybiAw LjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkpICogX19leG0xOyB9CgoKCmV4dGVybiBfX2lu bGluZSBkb3VibGUgX19hY29zaDFwIChkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBf X2Fjb3NoMXAgKGRvdWJsZSBfX3gpIHsgcmV0dXJuIGxvZzFwbCAoX194ICsgX19zcXJ0bCAoX194 KSAqIF9fc3FydGwgKF9feCArIDIuMCkpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBfX2Fjb3No MXBmIChmbG9hdCkgOyBleHRlcm4gX19pbmxpbmUgZmxvYXQgX19hY29zaDFwZiAoZmxvYXQgX194 KSB7IHJldHVybiBsb2cxcGwgKF9feCArIF9fc3FydGwgKF9feCkgKiBfX3NxcnRsIChfX3ggKyAy LjApKTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19hY29zaDFwbCAobG9uZyBkb3Vi bGUpIDsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fYWNvc2gxcGwgKGxvbmcgZG91Ymxl IF9feCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0bCAoX194 ICsgMi4wKSk7IH0KIyAzNTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDQxMSAiL3Vzci9p bmNsdWRlL21hdGguaCIgMwoKIyAxMyAicmFnZTEyOF92aWQuYyIgMgojIDEgIi91c3IvaW5jbHVk ZS9pbnR0eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2ludHR5cGVzLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvc3RkaW50LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRl L3N0ZGludC5oIiAyIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgdW5z aWduZWQgY2hhciB1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50MTZfdDsK CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwoKCgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRl ZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnQ2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBj aGFyIGludF9sZWFzdDhfdDsKdHlwZWRlZiBzaG9ydCBpbnQgaW50X2xlYXN0MTZfdDsKdHlwZWRl ZiBpbnQgaW50X2xlYXN0MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBp bnQgaW50X2xlYXN0NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfbGVhc3Q4X3Q7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnRfbGVhc3QxNl90Owp0eXBlZGVmIHVuc2ln bmVkIGludCB1aW50X2xlYXN0MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgdWludF9sZWFzdDY0X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIg aW50X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiBpbnQgaW50X2Zhc3QxNl90Owp0eXBlZGVmIGludCBp bnRfZmFzdDMyX3Q7Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9mYXN0 NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfZmFzdDhfdDsKCgoKCgp0eXBlZGVm IHVuc2lnbmVkIGludCB1aW50X2Zhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2Zh c3QzMl90OwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50 X2Zhc3Q2NF90OwojIDEyNiAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgaW50IGlu dHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsKIyAxMzggIi91c3IvaW5j bHVkZS9zdGRpbnQuaCIgMwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRt YXhfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludG1h eF90OwojIDI5ICIvdXNyL2luY2x1ZGUvaW50dHlwZXMuaCIgMiAzCgoKCgoKCnR5cGVkZWYgbG9u ZyBpbnQgX19nd2NoYXJfdDsKIyAyNzQgIi91c3IvaW5jbHVkZS9pbnR0eXBlcy5oIiAzCgojIDI4 OCAiL3Vzci9pbmNsdWRlL2ludHR5cGVzLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25n IGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGltYXhkaXZfdDsKCgoK CgpleHRlcm4gaW50bWF4X3QgaW1heGFicyAoaW50bWF4X3QgX19uKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGltYXhkaXZfdCBpbWF4ZGl2IChpbnRtYXhfdCBfX251bWVy LCBpbnRtYXhfdCBfX2Rlbm9tKQogICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK ZXh0ZXJuIGludG1heF90IHN0cnRvaW1heCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2Jhc2UpIDsKCgpleHRlcm4gdWludG1heF90IHN0cnRvdW1heCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiog X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKCmV4dGVybiBpbnRtYXhfdCB3Y3N0 b2ltYXggKF9fY29uc3QgX19nd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZ3djaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlKQogICAgIDsKCgpleHRlcm4gdWludG1heF90IHdjc3RvdW1heCAoX19jb25zdCBfX2d3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3dj aGFyX3QgKiogX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CiMgMzk2ICIv dXNyL2luY2x1ZGUvaW50dHlwZXMuaCIgMwpleHRlcm4gX19pbmxpbmUgaW50bWF4X3QKc3RydG9p bWF4IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgZW5k cHRyLAogICAgICAgICAgIGludCBiYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAo bnB0ciwgZW5kcHRyLCBiYXNlLCAwKTsKfQojIDQxNCAiL3Vzci9pbmNsdWRlL2ludHR5cGVzLmgi IDMKZXh0ZXJuIF9faW5saW5lIHVpbnRtYXhfdApzdHJ0b3VtYXggKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBucHRyLCBjaGFyICoqX19yZXN0cmljdCBlbmRwdHIsCiAgICAgICAgICAgaW50IGJh c2UpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAobnB0ciwgZW5kcHRyLCBiYXNlLCAw KTsKfQoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRl cm5hbCAoX19jb25zdCBfX2d3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2d3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg OwoKCmV4dGVybiBfX2lubGluZSBpbnRtYXhfdAp3Y3N0b2ltYXggKF9fY29uc3QgX19nd2NoYXJf dCAqX19yZXN0cmljdCBucHRyLCBfX2d3Y2hhcl90ICoqX19yZXN0cmljdCBlbmRwdHIsCiAgICAg ICAgICAgaW50IGJhc2UpCnsKICByZXR1cm4gX193Y3N0b2xsX2ludGVybmFsIChucHRyLCBlbmRw dHIsIGJhc2UsIDApOwp9CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxv bmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3QgX19nd2NoYXJfdCAqCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2d3Y2hhcl90ICoqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7CgoKZXh0ZXJuIF9faW5s aW5lIHVpbnRtYXhfdAp3Y3N0b3VtYXggKF9fY29uc3QgX19nd2NoYXJfdCAqX19yZXN0cmljdCBu cHRyLCBfX2d3Y2hhcl90ICoqX19yZXN0cmljdCBlbmRwdHIsCiAgICAgICAgICAgaW50IGJhc2Up CnsKICByZXR1cm4gX193Y3N0b3VsbF9pbnRlcm5hbCAobnB0ciwgZW5kcHRyLCBiYXNlLCAwKTsK fQoKCgoKCiMgMTQgInJhZ2UxMjhfdmlkLmMiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9tbWFu LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL21tYW4uaCIgMwojIDEgIi91c3IvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjcg Ii91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAyIDMKIyA0MiAiL3Vzci9pbmNsdWRlL3N5cy9tbWFu LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tbWFuLmgiIDEgMwojIDQzICIvdXNyL2luY2x1 ZGUvc3lzL21tYW4uaCIgMiAzCgoKCgoKIyA2MiAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDMK ZXh0ZXJuIHZvaWQgKiBtbWFwICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fcHJv dCwgaW50IF9fZmxhZ3MsIGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQpIF9fYXNtX18gKCIi ICJtbWFwNjQiKTsKIyA3NyAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDMKZXh0ZXJuIGludCBt dW5tYXAgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuKSA7CgoKCgpleHRlcm4gaW50IG1wcm90 ZWN0ICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fcHJvdCkgOwoKCgoKZXh0ZXJu IGludCBtc3luYyAodm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4sIGludCBfX2ZsYWdzKSA7CgoK CgpleHRlcm4gaW50IG1hZHZpc2UgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19h ZHZpY2UpIDsKIyAxMDEgIi91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAzCmV4dGVybiBpbnQgbWxv Y2sgKF9fY29uc3Qgdm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4pIDsKCgpleHRlcm4gaW50IG11 bmxvY2sgKF9fY29uc3Qgdm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4pIDsKCgoKCmV4dGVybiBp bnQgbWxvY2thbGwgKGludCBfX2ZsYWdzKSA7CgoKCmV4dGVybiBpbnQgbXVubG9ja2FsbCAodm9p ZCkgOwoKCgoKCmV4dGVybiB2b2lkICptcmVtYXAgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fb2xk X2xlbiwgc2l6ZV90IF9fbmV3X2xlbiwKICAgICAgICAgICAgICAgICAgICAgaW50IF9fbWF5X21v dmUpIDsKCgoKCgoKZXh0ZXJuIGludCBtaW5jb3JlICh2b2lkICpfX3N0YXJ0LCBzaXplX3QgX19s ZW4sIHVuc2lnbmVkIGNoYXIgKl9fdmVjKTsKCgoKCmV4dGVybiBpbnQgc2htX29wZW4gKF9fY29u c3QgY2hhciAqX19uYW1lLCBpbnQgX19vZmxhZywgbW9kZV90IF9fbW9kZSk7CgoKZXh0ZXJuIGlu dCBzaG1fdW5saW5rIChfX2NvbnN0IGNoYXIgKl9fbmFtZSk7CgoKIyAxNiAicmFnZTEyOF92aWQu YyIgMgojIDEgIi4uLy4uLy4uLy4uL3NyYy94aW5lLWVuZ2luZS9ic3dhcC5oIiAxCgoKCgoKIyAx ICIuLi8uLi8uLi8uLi9jb25maWcuaCIgMQojIDcgIi4uLy4uLy4uLy4uL3NyYy94aW5lLWVuZ2lu ZS9ic3dhcC5oIiAyCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2J5dGVzd2FwLmgiIDEgMwojIDIzICIv dXNyL2luY2x1ZGUvYnl0ZXN3YXAuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2J5dGVzd2Fw LmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvYnl0ZXN3YXAuaCIgMiAzCiMgMTEgIi4uLy4uLy4u Ly4uL3NyYy94aW5lLWVuZ2luZS9ic3dhcC5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5o IiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCgoKCmV4dGVybiB2b2lkIF9fYXNz ZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxl LAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0 IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK CmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3Qg Y2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19mdW5jdGlvbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpl eHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIg Kl9fZmlsZSwgaW50IF9fbGluZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7 CgoKCiMgMTIgIi4uLy4uLy4uLy4uL3NyYy94aW5lLWVuZ2luZS9ic3dhcC5oIiAyCiMgMTcgInJh Z2UxMjhfdmlkLmMiIDIKIyAxICIuLi8uLi8uLi8uLi9zcmMvdmlkZW9fb3V0L2xpYmRoYS9wY2lf aWRzLmgiIDEKCgoKCgoKCiMgMSAiLi4vLi4vLi4vLi4vc3JjL3ZpZGVvX291dC9saWJkaGEvcGNp X3ZlbmRvcnMuaCIgMQojIDkgIi4uLy4uLy4uLy4uL3NyYy92aWRlb19vdXQvbGliZGhhL3BjaV9p ZHMuaCIgMgojIDE4ICJyYWdlMTI4X3ZpZC5jIiAyCiMgMSAiLi4vLi4vLi4vLi4vc3JjL3ZpZGVv X291dC9saWJkaGEvcGNpX25hbWVzLmgiIDEKIyAxMiAiLi4vLi4vLi4vLi4vc3JjL3ZpZGVvX291 dC9saWJkaGEvcGNpX25hbWVzLmgiCnN0cnVjdCBkZXZpY2VfaWRfcwp7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgaWQ7CiAgICAgICAgY29uc3QgY2hhciAqIG5hbWU7Cn07CgpzdHJ1Y3QgdmVuZG9y X2lkX3MKewogICAgICAgIHVuc2lnbmVkIHNob3J0IGlkOwogICAgICAgIGNvbnN0IGNoYXIgKiBu YW1lOwogICAgICAgIGNvbnN0IHN0cnVjdCBkZXZpY2VfaWRfcyAqIGRldl9saXN0Owp9OwpleHRl cm4gY29uc3QgY2hhciAqcGNpX3ZlbmRvcl9uYW1lKHVuc2lnbmVkIHNob3J0IGlkKTsKZXh0ZXJu IGNvbnN0IGNoYXIgKnBjaV9kZXZpY2VfbmFtZSh1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQsIHVu c2lnbmVkIHNob3J0IGRldmljZV9pZCk7CiMgMTkgInJhZ2UxMjhfdmlkLmMiIDIKIyAxICIuLi8u Li8uLi8uLi9zcmMvdmlkZW9fb3V0L3ZpZGl4L3ZpZGl4LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4v c3JjL3ZpZGVvX291dC92aWRpeC92aWRpeC5oIgpleHRlcm4gdW5zaWduZWQgdml4R2V0VmVyc2lv biggdm9pZCApOwojIDM1ICIuLi8uLi8uLi8uLi9zcmMvdmlkZW9fb3V0L3ZpZGl4L3ZpZGl4Lmgi CmV4dGVybiBpbnQgdml4UHJvYmUoIGludCB2ZXJib3NlLCBpbnQgZm9yY2UgKTsKCgoKZXh0ZXJu IGludCB2aXhJbml0KCBjb25zdCBjaGFyICphcmdzICk7CgpleHRlcm4gdm9pZCB2aXhEZXN0cm95 KCB2b2lkICk7Cgp0eXBlZGVmIHN0cnVjdCB2aWRpeF9jYXBhYmlsaXR5X3MKewogICAgICAgIGNo YXIgbmFtZVs2NF07CiAgICAgICAgY2hhciBhdXRob3JbNjRdOwoKCgoKICAgICAgICBpbnQgdHlw ZTsKICAgICAgICB1bnNpZ25lZCByZXNlcnZlZDBbNF07CiAgICAgICAgaW50IG1heHdpZHRoOwog ICAgICAgIGludCBtYXhoZWlnaHQ7CiAgICAgICAgaW50IG1pbndpZHRoOwogICAgICAgIGludCBt aW5oZWlnaHQ7CiAgICAgICAgaW50IG1heGZyYW1lcmF0ZTsKCgoKCgoKCiAgICAgICAgdW5zaWdu ZWQgZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkOwogICAgICAgIHVuc2ln bmVkIHNob3J0IGRldmljZV9pZDsKICAgICAgICB1bnNpZ25lZCByZXNlcnZlZDFbNF07Cn12aWRp eF9jYXBhYmlsaXR5X3Q7CgoKCmV4dGVybiBpbnQgdml4R2V0Q2FwYWJpbGl0eSh2aWRpeF9jYXBh YmlsaXR5X3QgKik7Cgp0eXBlZGVmIHN0cnVjdCB2aWRpeF9mb3VyY2Nfcwp7CiAgICAgICAgdW5z aWduZWQgZm91cmNjOwogICAgICAgIHVuc2lnbmVkIHNyY3c7CiAgICAgICAgdW5zaWduZWQgc3Jj aDsKIyA5MCAiLi4vLi4vLi4vLi4vc3JjL3ZpZGVvX291dC92aWRpeC92aWRpeC5oIgogICAgICAg IHVuc2lnbmVkIGRlcHRoOwojIDEwMyAiLi4vLi4vLi4vLi4vc3JjL3ZpZGVvX291dC92aWRpeC92 aWRpeC5oIgogICAgICAgIHVuc2lnbmVkIGZsYWdzOwp9dmlkaXhfZm91cmNjX3Q7CgoKZXh0ZXJu IGludCB2aXhRdWVyeUZvdXJjYyh2aWRpeF9mb3VyY2NfdCAqKTsKCnR5cGVkZWYgc3RydWN0IHZp ZGl4X3l1dl9zCnsKICAgICAgICB1bnNpZ25lZCB5LHUsdjsKfXZpZGl4X3l1dl90OwoKdHlwZWRl ZiBzdHJ1Y3QgdmlkaXhfcmVjdF9zCnsKICAgICAgICB1bnNpZ25lZCB4LHksdyxoOwogICAgICAg IHZpZGl4X3l1dl90IHBpdGNoOwp9dmlkaXhfcmVjdF90OwoKdHlwZWRlZiBzdHJ1Y3QgdmlkaXhf Y29sb3Jfa2V5X3MKewoKCgoKICAgICAgICB1bnNpZ25lZCBvcDsKICAgICAgICB1bnNpZ25lZCBj aGFyIHJlZDsKICAgICAgICB1bnNpZ25lZCBjaGFyIGdyZWVuOwogICAgICAgIHVuc2lnbmVkIGNo YXIgYmx1ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkOwp9dmlkaXhfY2tleV90OwoK dHlwZWRlZiBzdHJ1Y3QgdmlkaXhfdmlkZW9fa2V5X3MKewoKCgoKICAgICAgICB1bnNpZ25lZCBv cDsKICAgICAgICB1bnNpZ25lZCBjaGFyIGtleVs4XTsKfXZpZGl4X3ZrZXlfdDsKCnR5cGVkZWYg c3RydWN0IHZpZGl4X3BsYXliYWNrX3MKewogICAgICAgIHVuc2lnbmVkIGZvdXJjYzsKICAgICAg ICB1bnNpZ25lZCBjYXBhYmlsaXR5OwogICAgICAgIHVuc2lnbmVkIGJsZW5kX2ZhY3RvcjsKICAg ICAgICB2aWRpeF9yZWN0X3Qgc3JjOwogICAgICAgIHZpZGl4X3JlY3RfdCBkZXN0OwoKCgogICAg ICAgIGludCBmbGFnczsKCiAgICAgICAgdW5zaWduZWQgZnJhbWVfc2l6ZTsKICAgICAgICB1bnNp Z25lZCBudW1fZnJhbWVzOwoKICAgICAgICB1bnNpZ25lZCBvZmZzZXRzWzEwMjRdOwogICAgICAg IHZpZGl4X3l1dl90IG9mZnNldDsKICAgICAgICB2b2lkKiBkZ2FfYWRkcjsKfXZpZGl4X3BsYXli YWNrX3Q7CgoKZXh0ZXJuIGludCB2aXhDb25maWdQbGF5YmFjayh2aWRpeF9wbGF5YmFja190ICop OwoKCmV4dGVybiBpbnQgdml4UGxheWJhY2tPbiggdm9pZCApOwoKCmV4dGVybiBpbnQgdml4UGxh eWJhY2tPZmYoIHZvaWQgKTsKCgpleHRlcm4gaW50IHZpeFBsYXliYWNrRnJhbWVTZWxlY3QoIHVu c2lnbmVkIGZyYW1lX2lkeCApOwoKdHlwZWRlZiBzdHJ1Y3QgdmlkaXhfZ3JrZXlfcwp7CiAgICAg ICAgdmlkaXhfY2tleV90IGNrZXk7CiAgICAgICAgdmlkaXhfdmtleV90IHZrZXk7CgoKCgogICAg ICAgIHVuc2lnbmVkIGtleV9vcDsKfXZpZGl4X2dya2V5X3Q7CgoKZXh0ZXJuIGludCB2aXhHZXRH cktleXMoIHZpZGl4X2dya2V5X3QgKiApOwoKCmV4dGVybiBpbnQgdml4U2V0R3JLZXlzKCBjb25z dCB2aWRpeF9ncmtleV90ICogKTsKCgp0eXBlZGVmIHN0cnVjdCB2aWRpeF92aWRlb19lcV9zCnsK CgoKCgoKICAgICAgICBpbnQgY2FwOwoKCiAgICAgICAgaW50IGJyaWdodG5lc3M7CiAgICAgICAg aW50IGNvbnRyYXN0OwogICAgICAgIGludCBzYXR1cmF0aW9uOwogICAgICAgIGludCBodWU7CiAg ICAgICAgaW50IHJlZF9pbnRlbnNpdHk7CiAgICAgICAgaW50IGdyZWVuX2ludGVuc2l0eTsKICAg ICAgICBpbnQgYmx1ZV9pbnRlbnNpdHk7CgoKCiAgICAgICAgaW50IGZsYWdzOwp9dmlkaXhfdmlk ZW9fZXFfdDsKCgpleHRlcm4gaW50IHZpeFBsYXliYWNrR2V0RXEoIHZpZGl4X3ZpZGVvX2VxX3Qg KiApOwoKCmV4dGVybiBpbnQgdml4UGxheWJhY2tTZXRFcSggY29uc3QgdmlkaXhfdmlkZW9fZXFf dCAqICk7Cgp0eXBlZGVmIHN0cnVjdCB2aWRpeF9kZWludGVybGFjZV9zCnsKCgoKCgoKICAgICAg ICB1bnNpZ25lZCBmbGFnczsKICAgICAgICB1bnNpZ25lZCBkZWludGVybGFjZV9wYXR0ZXJuOwp9 dmlkaXhfZGVpbnRlcmxhY2VfdDsKCgpleHRlcm4gaW50IHZpeFBsYXliYWNrR2V0RGVpbnQoIHZp ZGl4X2RlaW50ZXJsYWNlX3QgKiApOwoKCmV4dGVybiBpbnQgdml4UGxheWJhY2tTZXREZWludCgg Y29uc3QgdmlkaXhfZGVpbnRlcmxhY2VfdCAqICk7Cgp0eXBlZGVmIHN0cnVjdCB2aWRpeF9zbGlj ZV9zCnsKICAgICAgICB2b2lkKiBhZGRyZXNzOwogICAgICAgIHVuc2lnbmVkIHNpemU7CiAgICAg ICAgdmlkaXhfcmVjdF90IHNsaWNlOwp9dmlkaXhfc2xpY2VfdDsKCnR5cGVkZWYgc3RydWN0IHZp ZGl4X2RtYV9zCnsKICAgICAgICB2b2lkICogc3JjOwogICAgICAgIHVuc2lnbmVkIGRlc3Rfb2Zm c2V0OwogICAgICAgIHVuc2lnbmVkIHNpemU7CgoKCiAgICAgICAgdW5zaWduZWQgZmxhZ3M7CiAg ICAgICAgdW5zaWduZWQgaWR4OwogICAgICAgIHZvaWQgKiBpbnRlcm5hbFsxMDI0XTsKfXZpZGl4 X2RtYV90OwoKCmV4dGVybiBpbnQgdml4UGxheWJhY2tDb3B5RnJhbWUoIHZpZGl4X2RtYV90ICog KTsKCgpleHRlcm4gaW50IHZpeFF1ZXJ5RE1BU3RhdHVzKCB2b2lkICk7CiMgMjc2ICIuLi8uLi8u Li8uLi9zcmMvdmlkZW9fb3V0L3ZpZGl4L3ZpZGl4LmgiCnR5cGVkZWYgc3RydWN0IHZpZGl4X29l bV9meF9zCnsKCgogICAgICAgIGludCB0eXBlOwogICAgICAgIGludCBudW07CiAgICAgICAgaW50 IG1pbnZhbHVlOwogICAgICAgIGludCBtYXh2YWx1ZTsKICAgICAgICBpbnQgdmFsdWU7CiAgICAg ICAgY2hhciAqIG5hbWVbODBdOwp9dmlkaXhfb2VtX2Z4X3Q7CgoKZXh0ZXJuIGludCB2aXhRdWVy eU51bU9lbUVmZmVjdHMoIHVuc2lnbmVkICogbnVtYmVyICk7CgoKZXh0ZXJuIGludCB2aXhHZXRP ZW1FZmZlY3QoIHZpZGl4X29lbV9meF90ICogKTsKCgpleHRlcm4gaW50IHZpeFNldE9lbUVmZmVj dCggY29uc3QgdmlkaXhfb2VtX2Z4X3QgKiApOwojIDIwICJyYWdlMTI4X3ZpZC5jIiAyCiMgMSAi Li4vLi4vLi4vLi4vc3JjL3ZpZGVvX291dC92aWRpeC9mb3VyY2MuaCIgMQojIDIxICJyYWdlMTI4 X3ZpZC5jIiAyCiMgMSAiLi4vLi4vLi4vLi4vc3JjL3ZpZGVvX291dC9saWJkaGEvbGliZGhhLmgi IDEKIyAzNCAiLi4vLi4vLi4vLi4vc3JjL3ZpZGVvX291dC9saWJkaGEvbGliZGhhLmgiCnR5cGVk ZWYgc3RydWN0IHBjaWluZm9fcwp7CiAgaW50IGJ1cyxjYXJkLGZ1bmM7CiAgdW5zaWduZWQgc2hv cnQgdmVuZG9yLGRldmljZTsKICB1bnNpZ25lZCBiYXNlMCxiYXNlMSxiYXNlMixiYXNlcm9tOwog IHVuc2lnbmVkIGJhc2UzLGJhc2U0LGJhc2U1OwogIHVuc2lnbmVkIGNoYXIgaXJxLGlwaW4sZ250 LGxhdDsKCn1wY2lpbmZvX3Q7CgpleHRlcm4gaW50IHBjaV9jb25maWdfcmVhZCh1bnNpZ25lZCBj aGFyIGJ1cywgdW5zaWduZWQgY2hhciBkZXYsIHVuc2lnbmVkIGNoYXIgZnVuYywKICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjbWQsIGludCBsZW4sIHVuc2lnbmVkIGxvbmcg KnZhbCk7CmV4dGVybiBpbnQgcGNpX2NvbmZpZ193cml0ZSh1bnNpZ25lZCBjaGFyIGJ1cywgdW5z aWduZWQgY2hhciBkZXYsIHVuc2lnbmVkIGNoYXIgZnVuYywKICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgY2hhciBjbWQsIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgdmFsKTsKCgpleHRl cm4gaW50IHBjaV9zY2FuKHBjaWluZm9fdCAqcGNpX2xpc3QsdW5zaWduZWQgKm51bV9jYXJkKTsK CgoKZXh0ZXJuIGludCBlbmFibGVfYXBwX2lvKCB2b2lkICk7CmV4dGVybiBpbnQgZGlzYWJsZV9h cHBfaW8oIHZvaWQgKTsKCmV4dGVybiB1bnNpZ25lZCBjaGFyIElOUE9SVDgodW5zaWduZWQgaWR4 KTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IElOUE9SVDE2KHVuc2lnbmVkIGlkeCk7CmV4dGVybiB1 bnNpZ25lZCBJTlBPUlQzMih1bnNpZ25lZCBpZHgpOwoKZXh0ZXJuIHZvaWQgT1VUUE9SVDgodW5z aWduZWQgaWR4LHVuc2lnbmVkIGNoYXIgdmFsKTsKZXh0ZXJuIHZvaWQgT1VUUE9SVDE2KHVuc2ln bmVkIGlkeCx1bnNpZ25lZCBzaG9ydCB2YWwpOwpleHRlcm4gdm9pZCBPVVRQT1JUMzIodW5zaWdu ZWQgaWR4LHVuc2lnbmVkIHZhbCk7CgoKZXh0ZXJuIHZvaWQgKiBtYXBfcGh5c19tZW0odW5zaWdu ZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOwpleHRlcm4gdm9pZCB1bm1hcF9waHlz X21lbSh2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CgoKCgoKCgpleHRlcm4gaW50IG10 cnJfc2V0X3R5cGUodW5zaWduZWQgYmFzZSx1bnNpZ25lZCBzaXplLGludCB0eXBlKTsKCgoKZXh0 ZXJuIGludCBibV9vcGVuKCB2b2lkICk7CmV4dGVybiB2b2lkIGJtX2Nsb3NlKCB2b2lkICk7CiMg OTMgIi4uLy4uLy4uLy4uL3NyYy92aWRlb19vdXQvbGliZGhhL2xpYmRoYS5oIgpleHRlcm4gaW50 IGJtX3ZpcnRfdG9fcGh5cyggdm9pZCAqIHZpcnRfYWRkciwgdW5zaWduZWQgbG9uZyBsZW5ndGgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICogcGFycmF5ICk7CgoK ZXh0ZXJuIGludCBibV92aXJ0X3RvX2J1cyggdm9pZCAqIHZpcnRfYWRkciwgdW5zaWduZWQgbG9u ZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICogYmFy cmF5ICk7CgpleHRlcm4gdm9pZCAqIGJtX2FsbG9jX3BhKCB1bnNpZ25lZCBsb25nIGxlbmd0aCAp OwpleHRlcm4gdm9pZCBibV9mcmVlX3BhKCB2b2lkICogdmlydF9hZGRyLCB1bnNpZ25lZCBsb25n IGxlbmd0aCApOwpleHRlcm4gaW50IGJtX2xvY2tfbWVtKCBjb25zdCB2b2lkICogYWRkciwgdW5z aWduZWQgbG9uZyBsZW5ndGggKTsKZXh0ZXJuIGludCBibV91bmxvY2tfbWVtKCBjb25zdCB2b2lk ICogYWRkciwgdW5zaWduZWQgbG9uZyBsZW5ndGggKTsKCgoKZXh0ZXJuIGludCBod2lycV9pbnN0 YWxsKGludCBidXMsIGludCBkZXYsIGludCBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgYXJlZywgdW5zaWduZWQgbG9uZyBhb2ZmLCB1aW50MzJfdCBhZGF0YSk7CmV4dGVy biBpbnQgaHdpcnFfd2FpdCh1bnNpZ25lZCBpcnFudW0pOwpleHRlcm4gaW50IGh3aXJxX3VuaW5z dGFsbChpbnQgYnVzLCBpbnQgZGV2LCBpbnQgZnVuYyk7CgoKZXh0ZXJuIHZvaWQgY3B1X2ZsdXNo KHZvaWQgKnZhLHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKIyAyMiAicmFnZTEyOF92aWQuYyIgMgoj IDEgInJhZGVvbi5oIiAxCiMgMjMgInJhZ2UxMjhfdmlkLmMiIDIKIyA0NyAicmFnZTEyOF92aWQu YyIKc3RhdGljIHZvaWQgKiByYWRlb25fZG1hX2Rlc2NfYmFzZSA9IDA7CnN0YXRpYyB1bnNpZ25l ZCBsb25nIGJ1c19hZGRyX2RtYV9kZXNjID0gMDsKc3RhdGljIHVuc2lnbmVkIGxvbmcgKmRtYV9w aHlzX2FkZHJzID0gMDsKI3ByYWdtYSBwYWNrKDEpCnR5cGVkZWYgc3RydWN0CnsKICAgICAgICB1 aW50MzJfdCBmcmFtZWJ1Zl9vZmZzZXQ7CiAgICAgICAgdWludDMyX3Qgc3lzX2FkZHI7CiAgICAg ICAgdWludDMyX3QgY29tbWFuZDsKICAgICAgICB1aW50MzJfdCByZXNlcnZlZDsKfSBibV9saXN0 X2Rlc2NyaXB0b3I7CiNwcmFnbWEgcGFjaygpCgoKCnN0YXRpYyBpbnQgX192ZXJib3NlID0gMDsK CgoKdHlwZWRlZiBzdHJ1Y3QgYmVzX3JlZ2lzdGVyc19zCnsKCiAgdWludDMyX3QgeXV2X2Jhc2U7 CiAgdWludDMyX3QgZm91cmNjOwogIHVpbnQzMl90IHN1cmZfaWQ7CiAgaW50IGxvYWRfcHJnX3N0 YXJ0OwogIGludCBob3J6X3BpY2tfbmVhcmVzdDsKICBpbnQgdmVydF9waWNrX25lYXJlc3Q7CiAg aW50IHN3YXBfdXY7CiAgdWludDMyX3QgZGVzdF9icHA7CgogIHVpbnQzMl90IHJlZ19sb2FkX2Nu dGw7CiAgdWludDMyX3QgaF9pbmM7CiAgdWludDMyX3Qgc3RlcF9ieTsKICB1aW50MzJfdCB5X3hf c3RhcnQ7CiAgdWludDMyX3QgeV94X2VuZDsKICB1aW50MzJfdCB2X2luYzsKICB1aW50MzJfdCBw MV9ibGFua19saW5lc19hdF90b3A7CiAgdWludDMyX3QgcDIzX2JsYW5rX2xpbmVzX2F0X3RvcDsK ICB1aW50MzJfdCB2aWRfYnVmX3BpdGNoMF92YWx1ZTsKICB1aW50MzJfdCB2aWRfYnVmX3BpdGNo MV92YWx1ZTsKICB1aW50MzJfdCBwMV94X3N0YXJ0X2VuZDsKICB1aW50MzJfdCBwMl94X3N0YXJ0 X2VuZDsKICB1aW50MzJfdCBwM194X3N0YXJ0X2VuZDsKICB1aW50MzJfdCBiYXNlX2FkZHI7CiAg dWludDMyX3QgdmlkX2J1Zl9iYXNlX2FkcnNfeVsxMDI0XTsKICB1aW50MzJfdCB2aWRfYnVmX2Jh c2VfYWRyc191WzEwMjRdOwogIHVpbnQzMl90IHZpZF9idWZfYmFzZV9hZHJzX3ZbMTAyNF07CiAg dWludDMyX3QgdmlkX25idWZzOwoKICB1aW50MzJfdCBwMV92X2FjY3VtX2luaXQ7CiAgdWludDMy X3QgcDFfaF9hY2N1bV9pbml0OwogIHVpbnQzMl90IHAyM192X2FjY3VtX2luaXQ7CiAgdWludDMy X3QgcDIzX2hfYWNjdW1faW5pdDsKICB1aW50MzJfdCBzY2FsZV9jbnRsOwogIHVpbnQzMl90IGV4 Y2x1c2l2ZV9ob3J6OwogIHVpbnQzMl90IGF1dG9fZmxpcF9jbnRsOwogIHVpbnQzMl90IGZpbHRl cl9jbnRsOwogIHVpbnQzMl90IGZvdXJfdGFwX2NvZWZmWzVdOwogIHVpbnQzMl90IGtleV9jbnRs OwogIHVpbnQzMl90IHRlc3Q7CgogIGludCBkb3VibGVfYnVmZjsKCiAgaW50IGJyaWdodG5lc3M7 CiAgaW50IHNhdHVyYXRpb247CgogIGludCBja2V5X29uOwogIHVpbnQzMl90IGdyYXBoaWNzX2tl eV9jbHI7CiAgdWludDMyX3QgZ3JhcGhpY3Nfa2V5X21zazsKICB1aW50MzJfdCBja2V5X2NudGw7 CgogIGludCBkZWludGVybGFjZV9vbjsKICB1aW50MzJfdCBkZWludGVybGFjZV9wYXR0ZXJuOwoK fSBiZXNfcmVnaXN0ZXJzX3Q7Cgp0eXBlZGVmIHN0cnVjdCB2aWRlb19yZWdpc3RlcnNfcwp7CiAg Y29uc3QgY2hhciAqIHNuYW1lOwogIHVpbnQzMl90IG5hbWU7CiAgdWludDMyX3QgdmFsdWU7Cn12 aWRlb19yZWdpc3RlcnNfdDsKCnN0YXRpYyBiZXNfcmVnaXN0ZXJzX3QgYmVzcjsKCgoKCnN0YXRp YyB2aWRlb19yZWdpc3RlcnNfdCB2cmVnc1tdID0KewogIHsgIlZJREVPTVVYX0NOVEwiLCAweDAx OTAsIDAgfSwKICB7ICJWSVBQQURfTUFTSyIsIDB4MDE5OCwgMCB9LAogIHsgIlZJUFBBRDFfQSIs IDB4MDFBQywgMCB9LAogIHsgIlZJUFBBRDFfRU4iLCAweDAxQjAsIDAgfSwKICB7ICJWSVBQQUQx X1kiLCAweDAxQjQsIDAgfSwKICB7ICJPVjBfWV9YX1NUQVJUIiwgMHgwNDAwLCAwIH0sCiAgeyAi T1YwX1lfWF9FTkQiLCAweDA0MDQsIDAgfSwKICB7ICJPVjBfUElQRUxJTkVfQ05UTCIsIDB4MDQw OCwgMCB9LAogIHsgIk9WMF9FWENMVVNJVkVfSE9SWiIsIDB4MDQwOCwgMCB9LAogIHsgIk9WMF9F WENMVVNJVkVfVkVSVCIsIDB4MDQwQywgMCB9LAogIHsgIk9WMF9SRUdfTE9BRF9DTlRMIiwgMHgw NDEwLCAwIH0sCiAgeyAiT1YwX1NDQUxFX0NOVEwiLCAweDA0MjAsIDAgfSwKICB7ICJPVjBfVl9J TkMiLCAweDA0MjQsIDAgfSwKICB7ICJPVjBfUDFfVl9BQ0NVTV9JTklUIiwgMHgwNDI4LCAwIH0s CiAgeyAiT1YwX1AyM19WX0FDQ1VNX0lOSVQiLCAweDA0MkMsIDAgfSwKICB7ICJPVjBfUDFfQkxB TktfTElORVNfQVRfVE9QIiwgMHgwNDMwLCAwIH0sCiAgeyAiT1YwX1AyM19CTEFOS19MSU5FU19B VF9UT1AiLCAweDA0MzQsIDAgfSwKCgoKICB7ICJPVjBfVklEX0JVRjBfQkFTRV9BRFJTIiwgMHgw NDQwLCAwIH0sCiAgeyAiT1YwX1ZJRF9CVUYxX0JBU0VfQURSUyIsIDB4MDQ0NCwgMCB9LAogIHsg Ik9WMF9WSURfQlVGMl9CQVNFX0FEUlMiLCAweDA0NDgsIDAgfSwKICB7ICJPVjBfVklEX0JVRjNf QkFTRV9BRFJTIiwgMHgwNDRDLCAwIH0sCiAgeyAiT1YwX1ZJRF9CVUY0X0JBU0VfQURSUyIsIDB4 MDQ1MCwgMCB9LAogIHsgIk9WMF9WSURfQlVGNV9CQVNFX0FEUlMiLCAweDA0NTQsIDAgfSwKICB7 ICJPVjBfVklEX0JVRl9QSVRDSDBfVkFMVUUiLCAweDA0NjAsIDAgfSwKICB7ICJPVjBfVklEX0JV Rl9QSVRDSDFfVkFMVUUiLCAweDA0NjQsIDAgfSwKICB7ICJPVjBfQVVUT19GTElQX0NOVEwiLCAw eDA0NzAsIDAgfSwKICB7ICJPVjBfREVJTlRFUkxBQ0VfUEFUVEVSTiIsIDB4MDQ3NCwgMCB9LAog IHsgIk9WMF9TVUJNSVRfSElTVE9SWSIsIDB4MDQ3OCwgMCB9LAogIHsgIk9WMF9IX0lOQyIsIDB4 MDQ4MCwgMCB9LAogIHsgIk9WMF9TVEVQX0JZIiwgMHgwNDg0LCAwIH0sCiAgeyAiT1YwX1AxX0hf QUNDVU1fSU5JVCIsIDB4MDQ4OCwgMCB9LAogIHsgIk9WMF9QMjNfSF9BQ0NVTV9JTklUIiwgMHgw NDhDLCAwIH0sCiAgeyAiT1YwX1AxX1hfU1RBUlRfRU5EIiwgMHgwNDk0LCAwIH0sCiAgeyAiT1Yw X1AyX1hfU1RBUlRfRU5EIiwgMHgwNDk4LCAwIH0sCiAgeyAiT1YwX1AzX1hfU1RBUlRfRU5EIiwg MHgwNDlDLCAwIH0sCiAgeyAiT1YwX0ZJTFRFUl9DTlRMIiwgMHgwNEEwLCAwIH0sCiAgeyAiT1Yw X0ZPVVJfVEFQX0NPRUZfMCIsIDB4MDRCMCwgMCB9LAogIHsgIk9WMF9GT1VSX1RBUF9DT0VGXzEi LCAweDA0QjQsIDAgfSwKICB7ICJPVjBfRk9VUl9UQVBfQ09FRl8yIiwgMHgwNEI4LCAwIH0sCiAg eyAiT1YwX0ZPVVJfVEFQX0NPRUZfMyIsIDB4MDRCQywgMCB9LAogIHsgIk9WMF9GT1VSX1RBUF9D T0VGXzQiLCAweDA0QzAsIDAgfSwKICB7ICJPVjBfRkxBR19DTlRMIiwgMHgwNERDLCAwIH0sCgog IHsgIk9WMF9DT0xPVVJfQ05UTCIsIDB4MDRFMCwgMCB9LAoKCgogIHsgIk9WMF9WSURfS0VZX0NM UiIsIDB4MDRFNCwgMCB9LAogIHsgIk9WMF9WSURfS0VZX01TSyIsIDB4MDRFOCwgMCB9LAogIHsg Ik9WMF9HUkFQSElDU19LRVlfQ0xSIiwgMHgwNEVDLCAwIH0sCiAgeyAiT1YwX0dSQVBISUNTX0tF WV9NU0siLCAweDA0RjAsIDAgfSwKICB7ICJPVjBfS0VZX0NOVEwiLCAweDA0RjQsIDAgfSwKICB7 ICJPVjBfVEVTVCIsIDB4MDRGOCwgMCB9LAogIHsgIk9WMF9MSU5fVFJBTlNfQSIsIDB4MEQyMCwg MCB9LAogIHsgIk9WMF9MSU5fVFJBTlNfQiIsIDB4MEQyNCwgMCB9LAogIHsgIk9WMF9MSU5fVFJB TlNfQyIsIDB4MEQyOCwgMCB9LAogIHsgIk9WMF9MSU5fVFJBTlNfRCIsIDB4MEQyQywgMCB9LAog IHsgIk9WMF9MSU5fVFJBTlNfRSIsIDB4MEQzMCwgMCB9LAogIHsgIk9WMF9MSU5fVFJBTlNfRiIs IDB4MEQzNCwgMCB9LAogIHsgIk9WMF9HQU1NQV8wX0YiLCAweDBENDAsIDAgfSwKICB7ICJPVjBf R0FNTUFfMTBfMUYiLCAweDBENDQsIDAgfSwKICB7ICJPVjBfR0FNTUFfMjBfM0YiLCAweDBENDgs IDAgfSwKICB7ICJPVjBfR0FNTUFfNDBfN0YiLCAweDBENEMsIDAgfSwKICB7ICJPVjBfR0FNTUFf MzgwXzNCRiIsIDB4MEQ1MCwgMCB9LAogIHsgIk9WMF9HQU1NQV8zQzBfM0ZGIiwgMHgwRDU0LCAw IH0sCiAgeyAiU1VCUElDX0NOVEwiLCAweDA1NDAsIDAgfSwKICB7ICJTVUJQSUNfREVGQ09MQ09O IiwgMHgwNTQ0LCAwIH0sCiAgeyAiU1VCUElDX1lfWF9TVEFSVCIsIDB4MDU0QywgMCB9LAogIHsg IlNVQlBJQ19ZX1hfRU5EIiwgMHgwNTUwLCAwIH0sCiAgeyAiU1VCUElDX1ZfSU5DIiwgMHgwNTU0 LCAwIH0sCiAgeyAiU1VCUElDX0hfSU5DIiwgMHgwNTU4LCAwIH0sCiAgeyAiU1VCUElDX0JVRjBf T0ZGU0VUIiwgMHgwNTVDLCAwIH0sCiAgeyAiU1VCUElDX0JVRjFfT0ZGU0VUIiwgMHgwNTYwLCAw IH0sCiAgeyAiU1VCUElDX0xDMF9PRkZTRVQiLCAweDA1NjQsIDAgfSwKICB7ICJTVUJQSUNfTEMx X09GRlNFVCIsIDB4MDU2OCwgMCB9LAogIHsgIlNVQlBJQ19QSVRDSCIsIDB4MDU2QywgMCB9LAog IHsgIlNVQlBJQ19CVE5fSExJX0NPTENPTiIsIDB4MDU3MCwgMCB9LAogIHsgIlNVQlBJQ19CVE5f SExJX1lfWF9TVEFSVCIsIDB4MDU3NCwgMCB9LAogIHsgIlNVQlBJQ19CVE5fSExJX1lfWF9FTkQi LCAweDA1NzgsIDAgfSwKICB7ICJTVUJQSUNfUEFMRVRURV9JTkRFWCIsIDB4MDU3QywgMCB9LAog IHsgIlNVQlBJQ19QQUxFVFRFX0RBVEEiLCAweDA1ODAsIDAgfSwKICB7ICJTVUJQSUNfSF9BQ0NV TV9JTklUIiwgMHgwNTg0LCAwIH0sCiAgeyAiU1VCUElDX1ZfQUNDVU1fSU5JVCIsIDB4MDU4OCwg MCB9LAogIHsgIklEQ1RfUlVOUyIsIDB4MUY4MCwgMCB9LAogIHsgIklEQ1RfTEVWRUxTIiwgMHgx Rjg0LCAwIH0sCiAgeyAiSURDVF9BVVRIX0NPTlRST0wiLCAweDFGODgsIDAgfSwKICB7ICJJRENU X0FVVEgiLCAweDFGOEMsIDAgfSwKICB7ICJJRENUX0NPTlRST0wiLCAweDFGQkMsIDAgfSwKCiAg eyAiQk1fRlJBTUVfQlVGX09GRlNFVCIsIDB4QTAwLCAwIH0sCiAgeyAiQk1fU1lTVEVNX01FTV9B RERSIiwgMHhBMDQsIDAgfSwKICB7ICJCTV9DT01NQU5EIiwgMHhBMDgsIDAgfSwKICB7ICJCTV9T VEFUVVMiLCAweEEwYywgMCB9LAogIHsgIkJNX1FVRVVFX1NUQVRVUyIsIDB4QTEwLCAwIH0sCiAg eyAiQk1fUVVFVUVfRlJFRV9TVEFUVVMiLCAweEExNCwgMCB9LAogIHsgIkJNX0NIVU5LXzBfVkFM IiwgMHhBMTgsIDAgfSwKICB7ICJCTV9DSFVOS18xX1ZBTCIsIDB4QTFDLCAwIH0sCiAgeyAiQk1f VklQMF9CVUYiLCAweEEyMCwgMCB9LAogIHsgIkJNX1ZJUDBfQUNUSVZFIiwgMHhBMjQsIDAgfSwK ICB7ICJCTV9WSVAxX0JVRiIsIDB4QTMwLCAwIH0sCiAgeyAiQk1fVklQMV9BQ1RJVkUiLCAweEEz NCwgMCB9LAogIHsgIkJNX1ZJUDJfQlVGIiwgMHhBNDAsIDAgfSwKICB7ICJCTV9WSVAyX0FDVElW RSIsIDB4QTQ0LCAwIH0sCiAgeyAiQk1fVklQM19CVUYiLCAweEE1MCwgMCB9LAogIHsgIkJNX1ZJ UDNfQUNUSVZFIiwgMHhBNTQsIDAgfSwKICB7ICJCTV9WSURDQVBfQlVGMCIsIDB4QTYwLCAwIH0s CiAgeyAiQk1fVklEQ0FQX0JVRjEiLCAweEE2NCwgMCB9LAogIHsgIkJNX1ZJRENBUF9CVUYyIiwg MHhBNjgsIDAgfSwKICB7ICJCTV9WSURDQVBfQUNUSVZFIiwgMHhBNmMsIDAgfSwKICB7ICJCTV9H VUkiLCAweEE4MCwgMCB9LAogIHsgIkJNX0FCT1JUIiwgMHhBODgsIDAgfQojIDI2NSAicmFnZTEy OF92aWQuYyIKfTsKCnN0YXRpYyB2b2lkICogcmFkZW9uX21taW9fYmFzZSA9IDA7CnN0YXRpYyB2 b2lkICogcmFkZW9uX21lbV9iYXNlID0gMDsKc3RhdGljIGludDMyX3QgcmFkZW9uX292ZXJsYXlf b2ZmID0gMDsKc3RhdGljIHVpbnQzMl90IHJhZGVvbl9yYW1fc2l6ZSA9IDA7CgoKCgoKCnN0YXRp YyBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKSB1aW50MzJfdCBJTlJFRyAodWlu dDMyX3QgYWRkcikgewogICAgdWludDMyX3QgdG1wID0gKCooKHZvbGF0aWxlIHVpbnQzMl90Kiko KCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKyhhZGRyKSkpKTsKICAgIHJldHVybiAodG1w KTsKfQojIDI5MSAicmFnZTEyOF92aWQuYyIKc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgSU5Q TEwodWludDMyX3QgYWRkcikKewogICAgICAgICgqKCh2b2xhdGlsZSB1aW50OF90KikoKCh1aW50 MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDAwMDgpKSkpPWFkZHIgJiAweDAwMDAwMDFmOwog ICAgICAgIHJldHVybiAoSU5SRUcoMHgwMDBDKSk7Cn0KIyAzMDcgInJhZ2UxMjhfdmlkLmMiCnN0 YXRpYyB1aW50MzJfdCByYWRlb25fdmlkX2dldF9kYnBwKCB2b2lkICkKewogIHVpbnQzMl90IGRi cHAscmV0dmFsOwogIGRicHAgPSAoSU5SRUcoMHgwMDUwKT4+OCkmIDB4RjsKICBzd2l0Y2goZGJw cCkKICB7CiAgICBjYXNlIDB4MDAwMDAwMDI6IHJldHZhbCA9IDg7IGJyZWFrOwogICAgY2FzZSAw eDAwMDAwMDAzOiByZXR2YWwgPSAxNTsgYnJlYWs7CiAgICBjYXNlIDB4MDAwMDAwMDQ6IHJldHZh bCA9IDE2OyBicmVhazsKICAgIGNhc2UgMHgwMDAwMDAwNTogcmV0dmFsID0gMjQ7IGJyZWFrOwog ICAgZGVmYXVsdDogcmV0dmFsPTMyOyBicmVhazsKICB9CiAgcmV0dXJuIHJldHZhbDsKfQoKc3Rh dGljIGludCByYWRlb25faXNfZGJsX3NjYW4oIHZvaWQgKQp7CiAgcmV0dXJuIChJTlJFRygweDAw NTApKSYweDAwMDAwMDAxOwp9CgpzdGF0aWMgaW50IHJhZGVvbl9pc19pbnRlcmxhY2UoIHZvaWQg KQp7CiAgcmV0dXJuIChJTlJFRygweDAwNTApKSYoMSA8PCAxKTsKfQoKc3RhdGljIHVpbnQzMl90 IHJhZGVvbl9nZXRfeHJlcyggdm9pZCApCnsKCiAgdWludDMyX3QgeHJlcyxoX3RvdGFsOwogIGhf dG90YWwgPSBJTlJFRygweDAyMDApOwogIHhyZXMgPSAoaF90b3RhbCA+PiAxNikgJiAweGZmZmY7 CiAgcmV0dXJuICh4cmVzICsgMSkqODsKfQoKc3RhdGljIHVpbnQzMl90IHJhZGVvbl9nZXRfeXJl cyggdm9pZCApCnsKCiAgdWludDMyX3QgeXJlcyx2X3RvdGFsOwogIHZfdG90YWwgPSBJTlJFRygw eDAyMDgpOwogIHlyZXMgPSAodl90b3RhbCA+PiAxNikgJiAweGZmZmY7CiAgcmV0dXJuIHlyZXMg KyAxOwp9CgpzdGF0aWMgdm9pZCByYWRlb25fd2FpdF92c3luYyh2b2lkKQp7CiAgICBpbnQgaTsK CiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNl KSkrKDB4MDA0NCkpKSk9KCgxIDw8IDIpKTsKICAgIGZvciAoaSA9IDA7IGkgPCAyMDAwMDAwOyBp KyspCiAgICB7CiAgICAgICAgaWYgKElOUkVHKDB4MDA0NCkgJiAoMSA8PCAyKSkgYnJlYWs7CiAg ICB9Cn0KCgpzdGF0aWMgdm9pZCBfcmFkZW9uX2VuZ2luZV9pZGxlKHZvaWQpOwpzdGF0aWMgdm9p ZCBfcmFkZW9uX2ZpZm9fd2FpdCh1bnNpZ25lZCk7CgoKCnN0YXRpYyBfX2lubGluZV9fIHZvaWQg cmFkZW9uX2VuZ2luZV9mbHVzaCAoIHZvaWQgKQp7CiAgICB1bnNpZ25lZCBpOwoKICAgIGRvIHsg dW5zaWduZWQgaW50IF90bXAgPSBJTlJFRygweDAxODQpOyBfdG1wICY9ICh+MHgwMGZmKTsgX3Rt cCB8PSAoMHgwMGZmKTsgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9u X21taW9fYmFzZSkpKygweDAxODQpKSkpPShfdG1wKTsgfSB3aGlsZSAoMCk7CiAgICBmb3IgKGkg PSAwOyBpIDwgMjAwMDAwMDsgaSsrKSB7CiAgICAgICAgaWYgKCEoSU5SRUcoMHgwMTg0KSAmICgx IDw8IDMxKSkpIGJyZWFrOwogICAgfQp9CgoKc3RhdGljIHZvaWQgcmFkZW9uX2VuZ2luZV9yZXNl dCggdm9pZCApCnsKICAgIHVpbnQzMl90IGNsb2NrX2NudGxfaW5kZXg7CiAgICB1aW50MzJfdCBt Y2xrX2NudGw7CiAgICB1aW50MzJfdCBnZW5fcmVzZXRfY250bDsKCiAgICByYWRlb25fZW5naW5l X2ZsdXNoKCk7CgogICAgY2xvY2tfY250bF9pbmRleCA9IElOUkVHKDB4MDAwOCk7CiAgICBtY2xr X2NudGwgPSBJTlBMTCgweDAwMGYpOwoKICAgICgqKCh2b2xhdGlsZSB1aW50OF90KikoKCh1aW50 MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDAwMDgpKSkpPSgweDAwMGYgJiAweDAwMDAwMDFm KSB8IDB4MDAwMDAwODA7ICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVv bl9tbWlvX2Jhc2UpKSsoMHgwMDBDKSkpKT0obWNsa19jbnRsIHwgKDEgPDwgMTYpIHwgKDEgPDwg MTcpKTsKCiAgICBnZW5fcmVzZXRfY250bCA9IElOUkVHKDB4MDBmMCk7CgogICAgKCooKHZvbGF0 aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDAwZjApKSkp PShnZW5fcmVzZXRfY250bCB8IDB4MDAwMDAwMDEpOwogICAgSU5SRUcoMHgwMGYwKTsKICAgICgq KCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgw MGYwKSkpKT0oZ2VuX3Jlc2V0X2NudGwgJiAodWludDMyX3QpKH4weDAwMDAwMDAxKSk7CgogICAg SU5SRUcoMHgwMGYwKTsKCiAgICAoKigodm9sYXRpbGUgdWludDhfdCopKCgodWludDMyX3QpKHJh ZGVvbl9tbWlvX2Jhc2UpKSsoMHgwMDA4KSkpKT0oMHgwMDBmICYgMHgwMDAwMDAxZikgfCAweDAw MDAwMDgwOyAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19i YXNlKSkrKDB4MDAwQykpKSk9KG1jbGtfY250bCk7CiAgICAoKigodm9sYXRpbGUgdWludDMyX3Qq KSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDAwOCkpKSk9KGNsb2NrX2NudGxf aW5kZXgpOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21t aW9fYmFzZSkpKygweDAwZjApKSkpPShnZW5fcmVzZXRfY250bCk7Cn0KIyA0NzAgInJhZ2UxMjhf dmlkLmMiCnN0YXRpYyB2b2lkIHJhZGVvbl9lbmdpbmVfcmVzdG9yZSggdm9pZCApCnsKIyA1MTUg InJhZ2UxMjhfdmlkLmMiCn0KCnN0YXRpYyB2b2lkIF9yYWRlb25fZmlmb193YWl0ICh1bnNpZ25l ZCBlbnRyaWVzKQp7CiAgICB1bnNpZ25lZCBpOwoKICAgIGZvcig7OykKICAgIHsKICAgICAgICBm b3IgKGk9MDsgaTwyMDAwMDAwOyBpKyspCiAgICAgICAgICAgICAgICBpZiAoKElOUkVHKDB4MTc0 MCkgJiAweDBmZmYpID49IGVudHJpZXMpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK ICAgICAgICByYWRlb25fZW5naW5lX3Jlc2V0KCk7CiAgICAgICAgcmFkZW9uX2VuZ2luZV9yZXN0 b3JlKCk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIF9yYWRlb25fZW5naW5lX2lkbGUgKCB2b2lkICkK ewogICAgdW5zaWduZWQgaTsKCgogICAgX3JhZGVvbl9maWZvX3dhaXQoNjQpOwogICAgZm9yKDs7 KQogICAgewogICAgICAgIGZvciAoaT0wOyBpPDIwMDAwMDA7IGkrKykgewogICAgICAgICAgICAg ICAgaWYgKChJTlJFRygweDE3NDApICYgKDEgPDwgMzEpKSA9PSAwKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHJhZGVvbl9lbmdpbmVfZmx1c2ggKCk7CiAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmFkZW9uX2VuZ2lu ZV9yZXNldCgpOwogICAgICAgIHJhZGVvbl9lbmdpbmVfcmVzdG9yZSgpOwogICAgfQp9CiMgODAx ICJyYWdlMTI4X3ZpZC5jIgpzdGF0aWMgdm9pZCByYWRlb25fdmlkX21ha2VfZGVmYXVsdCh2b2lk KQp7CgogIGJlc3Iuc2F0dXJhdGlvbiA9IDB4MEY7CiAgYmVzci5icmlnaHRuZXNzID0gMDsKICAo Kigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4 MDRFMCkpKSk9KDB4MDAwRjBGMDBVTCk7CgoKCiAgYmVzci5kZWludGVybGFjZV9wYXR0ZXJuID0g MHg5MDBBQUFBQTsKICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25f bW1pb19iYXNlKSkrKDB4MDQ3NCkpKSk9KGJlc3IuZGVpbnRlcmxhY2VfcGF0dGVybik7CiAgYmVz ci5kZWludGVybGFjZV9vbj0xOwogIGJlc3IuZG91YmxlX2J1ZmY9MTsKICBiZXNyLmNrZXlfb249 MDsKICBiZXNyLmdyYXBoaWNzX2tleV9tc2s9MDsKICBiZXNyLmdyYXBoaWNzX2tleV9jbHI9MDsK ICBiZXNyLmNrZXlfY250bCA9IDB4MDAwMDAwMDFMfDB4MDAwMDAwMTBMfDB4MDAwMDAxMDBMOwp9 CgoKdW5zaWduZWQgdml4R2V0VmVyc2lvbiggdm9pZCApIHsgcmV0dXJuIDEwMDsgfQoKc3RhdGlj IHVuc2lnbmVkIHNob3J0IGF0aV9jYXJkX2lkc1tdID0KewojIDgzNyAicmFnZTEyOF92aWQuYyIK IDB4NTA0MSwKIDB4NTA0MiwKIDB4NTA0MywKIDB4NTA0NCwKIDB4NTA0NSwKIDB4NTA0NiwKCiAw eDUwNDcsCiAweDUwNDgsCiAweDUwNDksCiAweDUwNGEsCiAweDUwNGIsCiAweDUwNGMsCiAweDUw NGQsCiAweDUwNGUsCiAweDUwNGYsCiAweDUwNTAsCiAweDUwNTEsCiAweDUwNTIsCiAweDUwNTMs CiAweDUwNTQsCiAweDUwNTUsCiAweDUwNTYsCiAweDUwNTcsCiAweDUwNTgsCgogMHg1MjQ1LAog MHg1MjQ2LAogMHg1MjQ3LAogMHg1MjRiLAogMHg1MjRjLAogMHg1MzQ1LAogMHg1MzQ2LAogMHg1 MzQ3LAogMHg1MzQ4LAogMHg1MzRiLAogMHg1MzRjLAogMHg1MzRkLAogMHg1MzRlLAogMHg1NDQ2 LAogMHg1NDRjLAogMHg1NDUyLAoKIDB4NGM0NSwKIDB4NGM0NgojIDkxOSAicmFnZTEyOF92aWQu YyIKfTsKCnN0YXRpYyBpbnQgZmluZF9jaGlwKHVuc2lnbmVkIGNoaXBfaWQpCnsKICB1bnNpZ25l ZCBpOwogIGZvcihpID0gMDtpIDwgc2l6ZW9mKGF0aV9jYXJkX2lkcykvc2l6ZW9mKHVuc2lnbmVk IHNob3J0KTtpKyspCiAgewogICAgaWYoY2hpcF9pZCA9PSBhdGlfY2FyZF9pZHNbaV0pIHJldHVy biBpOwogIH0KICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBwY2lpbmZvX3QgcGNpX2luZm87CnN0YXRp YyBpbnQgcHJvYmVkPTA7Cgp2aWRpeF9jYXBhYmlsaXR5X3QgZGVmX2NhcCA9CnsKCiAgICAiQkVT IGRyaXZlciBmb3IgcmFnZTEyOCBjYXJkcyIsCgoKCiAgICAiTmljayBLdXJzaGV2IiwKICAgIDB4 MDAwMDAwMDAgfCAweDAwMDAwMDA0LAogICAgeyAwLCAwLCAwLCAwIH0sCiAgICAyMDQ4LAogICAg MjA0OCwKICAgIDQsCiAgICA0LAogICAgLTEsCiAgICAweDAwMDAwMDEwIHwgMHgwMDAwMDAyMCB8 IDB4MDAwMDIwMDAsCiAgICAweDEwMDIsCiAgICAwLAogICAgeyAwLCAwLCAwLCAwfQp9OwoKCmlu dCB2aXhQcm9iZSggaW50IHZlcmJvc2UsaW50IGZvcmNlICkKewogIHBjaWluZm9fdCBsc3RbNjRd OwogIHVuc2lnbmVkIGksbnVtX3BjaTsKICBpbnQgZXJyOwogIF9fdmVyYm9zZSA9IHZlcmJvc2U7 CiAgZXJyID0gcGNpX3NjYW4obHN0LCZudW1fcGNpKTsKICBpZihlcnIpCiAgewogICAgcHJpbnRm KCJyYWdlMTI4X3ZpZDoiIiBFcnJvciBvY2N1cmVkIGR1cmluZyBwY2kgc2NhbjogJXNcbiIsc3Ry ZXJyb3IoZXJyKSk7CiAgICByZXR1cm4gZXJyOwogIH0KICBlbHNlCiAgewogICAgZXJyID0gNjsK ICAgIGZvcihpPTA7aTxudW1fcGNpO2krKykKICAgIHsKICAgICAgaWYobHN0W2ldLnZlbmRvciA9 PSAweDEwMDIpCiAgICAgIHsKICAgICAgICBpbnQgaWR4OwogICAgICAgIGNvbnN0IGNoYXIgKmRu YW1lOwogICAgICAgIGlkeCA9IGZpbmRfY2hpcChsc3RbaV0uZGV2aWNlKTsKICAgICAgICBpZihp ZHggPT0gLTEgJiYgZm9yY2UgPT0gMCkgY29udGludWU7CiAgICAgICAgZG5hbWUgPSBwY2lfZGV2 aWNlX25hbWUoMHgxMDAyLGxzdFtpXS5kZXZpY2UpOwogICAgICAgIGRuYW1lID0gZG5hbWUgPyBk bmFtZSA6ICJVbmtub3duIGNoaXAiOwogICAgICAgIHByaW50ZigicmFnZTEyOF92aWQ6IiIgRm91 bmQgY2hpcDogJXNcbiIsZG5hbWUpOwojIDEwNDggInJhZ2UxMjhfdmlkLmMiCiAgICAgICAgaWYo Zm9yY2UgPiAwKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCJyYWdlMTI4X3ZpZDoiIiBE cml2ZXIgd2FzIGZvcmNlZC4gV2FzIGZvdW5kICVza25vd24gY2hpcFxuIixpZHggPT0gLTEgPyAi dW4iIDogIiIpOwogICAgICAgICAgICBpZihpZHggPT0gLTEpCgogICAgICAgICAgICAgICAgcHJp bnRmKCJyYWdlMTI4X3ZpZDoiIiBBc3N1bWluZyBpdCBhcyBSYWdlMTI4XG4iKTsKCgoKICAgICAg ICB9CiAgICAgICAgZGVmX2NhcC5kZXZpY2VfaWQgPSBsc3RbaV0uZGV2aWNlOwogICAgICAgIGVy ciA9IDA7CiAgICAgICAgbWVtY3B5KCZwY2lfaW5mbywmbHN0W2ldLHNpemVvZihwY2lpbmZvX3Qp KTsKICAgICAgICBwcm9iZWQ9MTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KICBp ZihlcnIgJiYgdmVyYm9zZSkgcHJpbnRmKCJyYWdlMTI4X3ZpZDoiIiBDYW4ndCBmaW5kIGNoaXBc biIpOwogIHJldHVybiBlcnI7Cn0KIyAxMTQ5ICJyYWdlMTI4X3ZpZC5jIgp0eXBlZGVmIHN0cnVj dCBzYXZlZF9yZWdzX3MKewogICAgdWludDMyX3Qgb3YwX3ZpZF9rZXlfY2xyOwogICAgdWludDMy X3Qgb3YwX3ZpZF9rZXlfbXNrOwogICAgdWludDMyX3Qgb3YwX2dyYXBoaWNzX2tleV9jbHI7CiAg ICB1aW50MzJfdCBvdjBfZ3JhcGhpY3Nfa2V5X21zazsKICAgIHVpbnQzMl90IG92MF9rZXlfY250 bDsKfXNhdmVkX3JlZ3NfdDsKc3RhdGljIHNhdmVkX3JlZ3NfdCBzYXZyZWc7CgpzdGF0aWMgdm9p ZCBzYXZlX3JlZ3MoIHZvaWQgKQp7CiAgICBfcmFkZW9uX2ZpZm9fd2FpdCg2KTsKICAgIHNhdnJl Zy5vdjBfdmlkX2tleV9jbHIgPSBJTlJFRygweDA0RTQpOwogICAgc2F2cmVnLm92MF92aWRfa2V5 X21zayA9IElOUkVHKDB4MDRFOCk7CiAgICBzYXZyZWcub3YwX2dyYXBoaWNzX2tleV9jbHIgPSBJ TlJFRygweDA0RUMpOwogICAgc2F2cmVnLm92MF9ncmFwaGljc19rZXlfbXNrID0gSU5SRUcoMHgw NEYwKTsKICAgIHNhdnJlZy5vdjBfa2V5X2NudGwgPSBJTlJFRygweDA0RjQpOwp9CgpzdGF0aWMg dm9pZCByZXN0b3JlX3JlZ3MoIHZvaWQgKQp7CiAgICBfcmFkZW9uX2ZpZm9fd2FpdCg2KTsKICAg ICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSso MHgwNEU0KSkpKT0oc2F2cmVnLm92MF92aWRfa2V5X2Nscik7CiAgICAoKigodm9sYXRpbGUgdWlu dDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDRFOCkpKSk9KHNhdnJl Zy5vdjBfdmlkX2tleV9tc2spOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJf dCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0RUMpKSkpPShzYXZyZWcub3YwX2dyYXBoaWNzX2tl eV9jbHIpOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21t aW9fYmFzZSkpKygweDA0RjApKSkpPShzYXZyZWcub3YwX2dyYXBoaWNzX2tleV9tc2spOwogICAg KCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygw eDA0RjQpKSkpPShzYXZyZWcub3YwX2tleV9jbnRsKTsKfQoKaW50IHZpeEluaXQoIGNvbnN0IGNo YXIgKmFyZ3MgKQp7CiAgaW50IGVycjsKICBpZighcHJvYmVkKQogIHsKICAgIHByaW50ZigicmFn ZTEyOF92aWQ6IiIgRHJpdmVyIHdhcyBub3QgcHJvYmVkIGJ1dCBpcyBiZWluZyBpbml0aWFsaXpp bmdcbiIpOwogICAgcmV0dXJuIDQ7CiAgfQogIGlmKChyYWRlb25fbW1pb19iYXNlID0gbWFwX3Bo eXNfbWVtKHBjaV9pbmZvLmJhc2UyLDB4RkZGRikpPT0odm9pZCAqKS0xKSByZXR1cm4gMTI7CiAg cmFkZW9uX3JhbV9zaXplID0gSU5SRUcoMHgwMEY4KTsKCiAgcmFkZW9uX3JhbV9zaXplICY9IDB4 MWYwMDAwMDA7CiAgaWYoKHJhZGVvbl9tZW1fYmFzZSA9IG1hcF9waHlzX21lbShwY2lfaW5mby5i YXNlMCxyYWRlb25fcmFtX3NpemUpKT09KHZvaWQgKiktMSkgcmV0dXJuIDEyOwogIChfX2V4dGVu c2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6ZW9mKGJlc19yZWdpc3RlcnNfdCkpICYm IChzaXplb2YoYmVzX3JlZ2lzdGVyc190KSkgPD0gMTYgPyAoKHNpemVvZihiZXNfcmVnaXN0ZXJz X3QpKSA9PSAxID8gKHsgdm9pZCAqX19zID0gKCZiZXNyKTsgKigoX191aW50OF90ICopIF9fcykg PSAoX191aW50OF90KSAwOyBfX3M7IH0pIDogKHsgdm9pZCAqX19zID0gKCZiZXNyKTsgdW5pb24g eyB1bnNpZ25lZCBpbnQgX191aTsgdW5zaWduZWQgc2hvcnQgaW50IF9fdXNpOyB1bnNpZ25lZCBj aGFyIF9fdWM7IH0gKl9fdSA9IF9fczsgX191aW50OF90IF9fYyA9IChfX3VpbnQ4X3QpICgwKTsg c3dpdGNoICgodW5zaWduZWQgaW50KSAoc2l6ZW9mKGJlc19yZWdpc3RlcnNfdCkpKSB7IGNhc2Ug MTU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2 b2lkICopIF9fdSArIDQpOyBjYXNlIDExOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBf X3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA3OiBfX3UtPl9fdWkg PSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0 KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAx OyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsgX191LT5fX3VjID0gKHVu c2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEw MTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDEwOiBf X3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAq KSBfX3UgKyA0KTsgY2FzZSA2OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0gKHVu c2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBicmVhazsgY2FzZSAxMzogX191LT5fX3Vp ID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsg NCk7IGNhc2UgOTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNp b25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNTogX191LT5fX3VpID0gX19jICogMHgwMTAx MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTogX191 LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9 IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQp OyBjYXNlIDEyOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lv bl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA4OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEw MTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA0OiBfX3Ut Pl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBjYXNlIDA6IGJyZWFrOyB9IF9fczsgfSkpIDogKF9f YnVpbHRpbl9jb25zdGFudF9wICgwKSAmJiAoMCkgPT0gJ1wwJyA/ICh7IHZvaWQgKl9fcyA9ICgm YmVzcik7IF9fYnVpbHRpbl9tZW1zZXQgKF9fcywgJ1wwJywgc2l6ZW9mKGJlc19yZWdpc3RlcnNf dCkpOyBfX3M7IH0pIDogbWVtc2V0ICgmYmVzciwgMCwgc2l6ZW9mKGJlc19yZWdpc3RlcnNfdCkp KSkpOwogIHJhZGVvbl92aWRfbWFrZV9kZWZhdWx0KCk7CiAgcHJpbnRmKCJyYWdlMTI4X3ZpZDoi IiBWaWRlbyBtZW1vcnkgPSAldU1iXG4iLHJhZGVvbl9yYW1fc2l6ZS8weDEwMDAwMCk7CiAgZXJy ID0gbXRycl9zZXRfdHlwZShwY2lfaW5mby5iYXNlMCxyYWRlb25fcmFtX3NpemUsMSk7CiAgaWYo IWVycikgcHJpbnRmKCJyYWdlMTI4X3ZpZDoiIiBTZXQgd3JpdGUtY29tYmluaW5nIHR5cGUgb2Yg dmlkZW8gbWVtb3J5XG4iKTsKIyAxMjIzICJyYWdlMTI4X3ZpZC5jIgogIGlmKGJtX29wZW4oKSA9 PSAwKQogIHsKICAgICAgICBpZigoZG1hX3BoeXNfYWRkcnMgPSBtYWxsb2MocmFkZW9uX3JhbV9z aXplKnNpemVvZih1bnNpZ25lZCBsb25nKS80MDk2KSkgIT0gMCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZfY2FwLmZsYWdzIHw9IDB4MDAwMDAwMDEgfCAw eDAwMDAwMDAyOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHByaW50ZigicmFnZTEyOF92 aWQ6IiIgQ2FuJ3QgYWxsb2NhdGUgdGVtb3BhcnkgYnVmZmVyIGZvciBETUFcbiIpOwogIH0KICBl bHNlCiAgICBpZihfX3ZlcmJvc2UpIHByaW50ZigicmFnZTEyOF92aWQ6IiIgQ2FuJ3QgaW5pdGlh bGl6ZSBidXNtYXN0ZXJpbmc6ICVzXG4iLHN0cmVycm9yKCgqX19lcnJub19sb2NhdGlvbiAoKSkp KTsKCiAgc2F2ZV9yZWdzKCk7CiAgcmV0dXJuIDA7Cn0KCnZvaWQgdml4RGVzdHJveSggdm9pZCAp CnsKICByZXN0b3JlX3JlZ3MoKTsKICB1bm1hcF9waHlzX21lbShyYWRlb25fbWVtX2Jhc2UscmFk ZW9uX3JhbV9zaXplKTsKICB1bm1hcF9waHlzX21lbShyYWRlb25fbW1pb19iYXNlLDB4RkZGRik7 CiAgYm1fY2xvc2UoKTsKfQoKaW50IHZpeEdldENhcGFiaWxpdHkodmlkaXhfY2FwYWJpbGl0eV90 ICp0bykKewogIG1lbWNweSh0bywmZGVmX2NhcCxzaXplb2YodmlkaXhfY2FwYWJpbGl0eV90KSk7 CiAgcmV0dXJuIDA7Cn0KCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgZm91cmNjX2Rlc2Nfcwp7CiAgICB1 aW50MzJfdCBmb3VyY2M7CiAgICB1bnNpZ25lZCBtYXhfc3JjdzsKfWZvdXJjY19kZXNjX3Q7Cgpm b3VyY2NfZGVzY190IHN1cHBvcnRlZF9mb3VyY2NbXSA9CnsKICB7ICgoKHVuc2lnbmVkKSgnWScp PDwwKXwoKHVuc2lnbmVkKSgnOCcpPDw4KXwoKHVuc2lnbmVkKSgnMCcpPDwxNil8KCh1bnNpZ25l ZCkoJzAnKTw8MjQpKSwgMTU2NyB9LAogIHsgKCgodW5zaWduZWQpKCdZJyk8PDApfCgodW5zaWdu ZWQpKCdWJyk8PDgpfCgodW5zaWduZWQpKCdVJyk8PDE2KXwoKHVuc2lnbmVkKSgnOScpPDwyNCkp LCAxNTY3IH0sCiAgeyAoKCh1bnNpZ25lZCkoJ0knKTw8MCl8KCh1bnNpZ25lZCkoJ0YnKTw8OCl8 KCh1bnNpZ25lZCkoJzAnKTw8MTYpfCgodW5zaWduZWQpKCc5Jyk8PDI0KSksIDE1NjcgfSwKICB7 ICgoKHVuc2lnbmVkKSgnWScpPDwwKXwoKHVuc2lnbmVkKSgnVicpPDw4KXwoKHVuc2lnbmVkKSgn MScpPDwxNil8KCh1bnNpZ25lZCkoJzInKTw8MjQpKSwgMTU2NyB9LAogIHsgKCgodW5zaWduZWQp KCdJJyk8PDApfCgodW5zaWduZWQpKCc0Jyk8PDgpfCgodW5zaWduZWQpKCcyJyk8PDE2KXwoKHVu c2lnbmVkKSgnMCcpPDwyNCkpLCAxNTY3IH0sCiAgeyAoKCh1bnNpZ25lZCkoJ0knKTw8MCl8KCh1 bnNpZ25lZCkoJ1knKTw8OCl8KCh1bnNpZ25lZCkoJ1UnKTw8MTYpfCgodW5zaWduZWQpKCdWJyk8 PDI0KSksIDE1NjcgfSwKICB7ICgoKHVuc2lnbmVkKSgnVScpPDwwKXwoKHVuc2lnbmVkKSgnWScp PDw4KXwoKHVuc2lnbmVkKSgnVicpPDwxNil8KCh1bnNpZ25lZCkoJ1knKTw8MjQpKSwgMTU1MSB9 LAogIHsgKCgodW5zaWduZWQpKCdZJyk8PDApfCgodW5zaWduZWQpKCdVJyk8PDgpfCgodW5zaWdu ZWQpKCdZJyk8PDE2KXwoKHVuc2lnbmVkKSgnMicpPDwyNCkpLCAxNTUxIH0sCiAgeyAoKCh1bnNp Z25lZCkoJ1knKTw8MCl8KCh1bnNpZ25lZCkoJ1YnKTw8OCl8KCh1bnNpZ25lZCkoJ1knKTw8MTYp fCgodW5zaWduZWQpKCdVJyk8PDI0KSksIDE1NTEgfSwKICB7ICgoKHVuc2lnbmVkKSgnUicpPDww KXwoKHVuc2lnbmVkKSgnRycpPDw4KXwoKHVuc2lnbmVkKSgnQicpPDwxNil8KCh1bnNpZ25lZCko MTUpPDwyNCkpLCAxNTUxIH0sCiAgeyAoKCh1bnNpZ25lZCkoJ0InKTw8MCl8KCh1bnNpZ25lZCko J0cnKTw8OCl8KCh1bnNpZ25lZCkoJ1InKTw8MTYpfCgodW5zaWduZWQpKDE1KTw8MjQpKSwgMTU1 MSB9LAogIHsgKCgodW5zaWduZWQpKCdSJyk8PDApfCgodW5zaWduZWQpKCdHJyk8PDgpfCgodW5z aWduZWQpKCdCJyk8PDE2KXwoKHVuc2lnbmVkKSgxNik8PDI0KSksIDE1NTEgfSwKICB7ICgoKHVu c2lnbmVkKSgnQicpPDwwKXwoKHVuc2lnbmVkKSgnRycpPDw4KXwoKHVuc2lnbmVkKSgnUicpPDwx Nil8KCh1bnNpZ25lZCkoMTYpPDwyNCkpLCAxNTUxIH0sCiAgeyAoKCh1bnNpZ25lZCkoJ1InKTw8 MCl8KCh1bnNpZ25lZCkoJ0cnKTw8OCl8KCh1bnNpZ25lZCkoJ0InKTw8MTYpfCgodW5zaWduZWQp KDMyKTw8MjQpKSwgNzc1IH0sCiAgeyAoKCh1bnNpZ25lZCkoJ0InKTw8MCl8KCh1bnNpZ25lZCko J0cnKTw8OCl8KCh1bnNpZ25lZCkoJ1InKTw8MTYpfCgodW5zaWduZWQpKDMyKTw8MjQpKSwgNzc1 IH0KfTsKCl9faW5saW5lX18gc3RhdGljIGludCBpc19zdXBwb3J0ZWRfZm91cmNjKHVpbnQzMl90 IGZvdXJjYyx1bnNpZ25lZCBzcmN3KQp7CiAgdW5zaWduZWQgaTsKICBmb3IoaT0wO2k8c2l6ZW9m KHN1cHBvcnRlZF9mb3VyY2MpL3NpemVvZihmb3VyY2NfZGVzY190KTtpKyspCiAgewogICAgaWYo Zm91cmNjPT1zdXBwb3J0ZWRfZm91cmNjW2ldLmZvdXJjYyAmJgogICAgICAgIHNyY3cgPD1zdXBw b3J0ZWRfZm91cmNjW2ldLm1heF9zcmN3KSByZXR1cm4gMTsKICB9CiAgcmV0dXJuIDA7Cn0KCmlu dCB2aXhRdWVyeUZvdXJjYyh2aWRpeF9mb3VyY2NfdCAqdG8pCnsKICAgIGlmKGlzX3N1cHBvcnRl ZF9mb3VyY2ModG8tPmZvdXJjYyx0by0+c3JjdykpCiAgICB7CiAgICAgICAgdG8tPmRlcHRoID0g MHgwMDAxIHwgMHgwMDAyIHwKICAgICAgICAgICAgICAgICAgICAweDAwMDQgfCAweDAwMDggfAog ICAgICAgICAgICAgICAgICAgIDB4MDAxMHwgMHgwMDIwfAogICAgICAgICAgICAgICAgICAgIDB4 MDA0MHwgMHgwMDgwfAogICAgICAgICAgICAgICAgICAgIDB4MDEwMDsKICAgICAgICB0by0+Zmxh Z3MgPSAweDAwMDEgfCAweDAwMDIgfCAweDAwMDg7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAg ICBlbHNlIHRvLT5kZXB0aCA9IHRvLT5mbGFncyA9IDA7CiAgICByZXR1cm4gMzg7Cn0KCnN0YXRp YyBkb3VibGUgSF9zY2FsZV9yYXRpbzsKc3RhdGljIHZvaWQgcmFkZW9uX3ZpZF9kdW1wX3JlZ3Mo IHZvaWQgKQp7CiAgc2l6ZV90IGk7CiAgcHJpbnRmKCJyYWdlMTI4X3ZpZDoiIioqKiBCZWdpbiBv ZiBEUklWRVIgdmFyaWFibGVzIGR1bXAgKioqXG4iKTsKICBwcmludGYoInJhZ2UxMjhfdmlkOiIi cmFkZW9uX21taW9fYmFzZT0lcFxuIixyYWRlb25fbW1pb19iYXNlKTsKICBwcmludGYoInJhZ2Ux MjhfdmlkOiIicmFkZW9uX21lbV9iYXNlPSVwXG4iLHJhZGVvbl9tZW1fYmFzZSk7CiAgcHJpbnRm KCJyYWdlMTI4X3ZpZDoiInJhZGVvbl9vdmVybGF5X29mZj0lMDhYXG4iLHJhZGVvbl9vdmVybGF5 X29mZik7CiAgcHJpbnRmKCJyYWdlMTI4X3ZpZDoiInJhZGVvbl9yYW1fc2l6ZT0lMDhYXG4iLHJh ZGVvbl9yYW1fc2l6ZSk7CiAgcHJpbnRmKCJyYWdlMTI4X3ZpZDoiInZpZGVvIG1vZGU6ICV1eCV1 QCV1XG4iLHJhZGVvbl9nZXRfeHJlcygpLHJhZGVvbl9nZXRfeXJlcygpLHJhZGVvbl92aWRfZ2V0 X2RicHAoKSk7CiAgcHJpbnRmKCJyYWdlMTI4X3ZpZDoiIkhfc2NhbGVfcmF0aW89JTguMmZcbiIs SF9zY2FsZV9yYXRpbyk7CiAgcHJpbnRmKCJyYWdlMTI4X3ZpZDoiIioqKiBCZWdpbiBvZiBPVjAg cmVnaXN0ZXJzIGR1bXAgKioqXG4iKTsKICBmb3IoaT0wO2k8c2l6ZW9mKHZyZWdzKS9zaXplb2Yo dmlkZW9fcmVnaXN0ZXJzX3QpO2krKykKICAgICAgICBwcmludGYoInJhZ2UxMjhfdmlkOiIiJXMg PSAlMDhYXG4iLHZyZWdzW2ldLnNuYW1lLElOUkVHKHZyZWdzW2ldLm5hbWUpKTsKICBwcmludGYo InJhZ2UxMjhfdmlkOiIiKioqIEVuZCBvZiBPVjAgcmVnaXN0ZXJzIGR1bXAgKioqXG4iKTsKfQoK c3RhdGljIHZvaWQgcmFkZW9uX3ZpZF9zdG9wX3ZpZGVvKCB2b2lkICkKewogICAgX3JhZGVvbl9l bmdpbmVfaWRsZSgpOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFk ZW9uX21taW9fYmFzZSkpKygweDA0MjApKSkpPSgweDgwMDAwMDAwTCk7CiAgICAoKigodm9sYXRp bGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDQwOCkpKSk9 KDApOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9f YmFzZSkpKygweDA0NzApKSkpPSgwKTsKICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWlu dDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNEEwKSkpKT0oMHgwMDAwMDAwRik7CgogICAg KCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygw eDA0RjQpKSkpPSgweDAwMDAwMDUwTCk7CgoKCiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgo KHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDRGOCkpKSk9KDApOwp9CgpzdGF0aWMg dm9pZCByYWRlb25fdmlkX2Rpc3BsYXlfdmlkZW8oIHZvaWQgKQp7CiAgICBpbnQgYmVzX2ZsYWdz OwogICAgX3JhZGVvbl9maWZvX3dhaXQoMik7CiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgo KHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDQxMCkpKSk9KDB4MDAwMDAwMDFMKTsK ICAgIF9yYWRlb25fZW5naW5lX2lkbGUoKTsKICAgIHdoaWxlKCEoSU5SRUcoMHgwNDEwKSYweDAw MDAwMDA4TCkpOwogICAgX3JhZGVvbl9maWZvX3dhaXQoMTUpOwoKCiAgICAoKigodm9sYXRpbGUg dWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDkxMCkpKSk9KDQp OwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFz ZSkpKygweDA5NTApKSkpPSgwKTsKCiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQz Ml90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDkwMCkpKSk9KCgxPDwxNikgfCAweDAxKTsKICAg ICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSso MHgwRDEwKSkpKT0oMCk7CgogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCko cmFkZW9uX21taW9fYmFzZSkpKygweDA0NzApKSkpPSgweDAwMDAwMDEwKTsKCiAgICBpZihiZXNy LmRlaW50ZXJsYWNlX29uKSAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRl b25fbW1pb19iYXNlKSkrKDB4MDQ3NCkpKSk9KGJlc3IuZGVpbnRlcmxhY2VfcGF0dGVybik7Cgog ICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkp KygweDA0RTApKSkpPSgoYmVzci5icmlnaHRuZXNzICYgMHg3ZikgfCAoYmVzci5zYXR1cmF0aW9u IDw8IDgpIHwgKGJlc3Iuc2F0dXJhdGlvbiA8PCAxNikpOwoKCgogICAgX3JhZGVvbl9maWZvX3dh aXQoMik7CiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1p b19iYXNlKSkrKDB4MDRGMCkpKSk9KGJlc3IuZ3JhcGhpY3Nfa2V5X21zayk7CiAgICAoKigodm9s YXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDRFQykp KSk9KGJlc3IuZ3JhcGhpY3Nfa2V5X2Nscik7CiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgo KHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDRGNCkpKSk9KGJlc3IuY2tleV9jbnRs KTsKCiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19i YXNlKSkrKDB4MDQ4MCkpKSk9KGJlc3IuaF9pbmMpOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90 KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0ODQpKSkpPShiZXNyLnN0ZXBf YnkpOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9f YmFzZSkpKygweDA0MDApKSkpPShiZXNyLnlfeF9zdGFydCk7CiAgICAoKigodm9sYXRpbGUgdWlu dDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDQwNCkpKSk9KGJlc3Iu eV94X2VuZCk7CiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25f bW1pb19iYXNlKSkrKDB4MDQyNCkpKSk9KGJlc3Iudl9pbmMpOwogICAgKCooKHZvbGF0aWxlIHVp bnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0MzApKSkpPShiZXNy LnAxX2JsYW5rX2xpbmVzX2F0X3RvcCk7CiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVp bnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDQzNCkpKSk9KGJlc3IucDIzX2JsYW5rX2xp bmVzX2F0X3RvcCk7CiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRl b25fbW1pb19iYXNlKSkrKDB4MDQ2MCkpKSk9KGJlc3IudmlkX2J1Zl9waXRjaDBfdmFsdWUpOwog ICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkp KygweDA0NjQpKSkpPShiZXNyLnZpZF9idWZfcGl0Y2gxX3ZhbHVlKTsKICAgICgqKCh2b2xhdGls ZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNDk0KSkpKT0o YmVzci5wMV94X3N0YXJ0X2VuZCk7CiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQz Ml90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDQ5OCkpKSk9KGJlc3IucDJfeF9zdGFydF9lbmQp OwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFz ZSkpKygweDA0OUMpKSkpPShiZXNyLnAzX3hfc3RhcnRfZW5kKTsKCgoKICAgICgqKCh2b2xhdGls ZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNDQwKSkpKT0o YmVzci52aWRfYnVmX2Jhc2VfYWRyc195WzBdKTsKICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCop KCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNDQ0KSkpKT0oYmVzci52aWRfYnVm X2Jhc2VfYWRyc192WzBdKTsKICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3Qp KHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNDQ4KSkpKT0oYmVzci52aWRfYnVmX2Jhc2VfYWRyc191 WzBdKTsKICAgIF9yYWRlb25fZmlmb193YWl0KDkpOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90 KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0NEMpKSkpPShiZXNyLnZpZF9i dWZfYmFzZV9hZHJzX3lbMF0pOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJf dCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0NTApKSkpPShiZXNyLnZpZF9idWZfYmFzZV9hZHJz X3ZbMF0pOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21t aW9fYmFzZSkpKygweDA0NTQpKSkpPShiZXNyLnZpZF9idWZfYmFzZV9hZHJzX3VbMF0pOwogICAg KCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygw eDA0MjgpKSkpPShiZXNyLnAxX3ZfYWNjdW1faW5pdCk7CiAgICAoKigodm9sYXRpbGUgdWludDMy X3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDQ4OCkpKSk9KGJlc3IucDFf aF9hY2N1bV9pbml0KTsKICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJh ZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNDhDKSkpKT0oYmVzci5wMjNfaF9hY2N1bV9pbml0KTsKICAg ICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSso MHgwNDJDKSkpKT0oYmVzci5wMjNfdl9hY2N1bV9pbml0KTsKCiAgICBiZXNfZmxhZ3MgPSAweDQw MDAwMDAwTCB8CiAgICAgICAgICAgICAgICAweDAwMDA4MDAwTCB8CiAgICAgICAgICAgICAgICAw eDAwMDAwMDAyTCB8CiAgICAgICAgICAgICAgICAweDAwMDAwMDAxTDsKICAgIGlmKGJlc3IuZG91 YmxlX2J1ZmYpIGJlc19mbGFncyB8PSAweDAxMDAwMDAwTDsKICAgIGlmKGJlc3IuZGVpbnRlcmxh Y2Vfb24pIGJlc19mbGFncyB8PSAweDAwMDAxMDAwTDsKICAgIGlmKGJlc3IuaG9yel9waWNrX25l YXJlc3QpIGJlc19mbGFncyB8PSAweDAwMDAwMDAzTDsKICAgIGlmKGJlc3IudmVydF9waWNrX25l YXJlc3QpIGJlc19mbGFncyB8PSAweDAwMDAwMDA0TDsKCiAgICBiZXNfZmxhZ3MgfD0gMHgwMGZm MDAwMEw7CgogICAgYmVzX2ZsYWdzIHw9IChiZXNyLnN1cmZfaWQgPDwgOCkgJiAweDAwMDAwZjAw TDsKICAgIGlmKGJlc3IubG9hZF9wcmdfc3RhcnQpIGJlc19mbGFncyB8PSAweDEwMDAwMDAwTDsK ICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2Up KSsoMHgwNDIwKSkpKT0oYmVzX2ZsYWdzKTsKCgoKCgoKCiAgICBfcmFkZW9uX2ZpZm9fd2FpdCg2 KTsKICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jh c2UpKSsoMHgwNEEwKSkpKT0oYmVzci5maWx0ZXJfY250bCk7CiAgICAoKigodm9sYXRpbGUgdWlu dDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDRCMCkpKSk9KGJlc3Iu Zm91cl90YXBfY29lZmZbMF0pOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJf dCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0QjQpKSkpPShiZXNyLmZvdXJfdGFwX2NvZWZmWzFd KTsKICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jh c2UpKSsoMHgwNEI4KSkpKT0oYmVzci5mb3VyX3RhcF9jb2VmZlsyXSk7CiAgICAoKigodm9sYXRp bGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDRCQykpKSk9 KGJlc3IuZm91cl90YXBfY29lZmZbM10pOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1 aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0QzApKSkpPShiZXNyLmZvdXJfdGFwX2Nv ZWZmWzRdKTsKICAgIGlmKGJlc3Iuc3dhcF91dikgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1 aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0RjgpKSkpPShJTlJFRygweDA0RjgpfDB4 MDAwMDAwMjBMKTsKICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVv bl9tbWlvX2Jhc2UpKSsoMHgwNDEwKSkpKT0oMCk7CiAgICBpZihfX3ZlcmJvc2UgPiAwKSBwcmlu dGYoInJhZ2UxMjhfdmlkOiIid2Ugd2FudGVkOiBzY2FsZXI9JTA4WFxuIixiZXNfZmxhZ3MpOwog ICAgaWYoX192ZXJib3NlID4gMCkgcmFkZW9uX3ZpZF9kdW1wX3JlZ3MoKTsKfQoKCgoKCnN0YXRp YyB2b2lkIHJhZGVvbl92aWRfZXhjbHVzaXZlKCB2b2lkICkKewoKCiAgICB1bnNpZ25lZCBzY3Jl ZW53LHNjcmVlbmg7CiAgICBzY3JlZW53ID0gcmFkZW9uX2dldF94cmVzKCk7CiAgICBzY3JlZW5o ID0gcmFkZW9uX2dldF95cmVzKCk7CiAgICBfcmFkZW9uX2ZpZm9fd2FpdCgyKTsKICAgICgqKCh2 b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNDBD KSkpKT0oKCgoc2NyZWVuaC0xKTw8MTYpJjB4MDNmZjAwMDApKTsKICAgICgqKCh2b2xhdGlsZSB1 aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNDA4KSkpKT0oKCgo c2NyZWVudy84KzEpPDw4KSYweDAwMDBmZjAwKXwweDgwMDAwMDAwKTsKfQoKc3RhdGljIHZvaWQg cmFkZW9uX3ZpZF9ub25fZXhjbHVzaXZlKCB2b2lkICkKewogICAgKCooKHZvbGF0aWxlIHVpbnQz Ml90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0MDgpKSkpPSgwKTsKfQoK CnN0YXRpYyB1bnNpZ25lZCByYWRlb25fcXVlcnlfcGl0Y2godW5zaWduZWQgZm91cmNjLGNvbnN0 IHZpZGl4X3l1dl90ICpzcGl0Y2gpCnsKICB1bnNpZ25lZCBwaXRjaCxzcHksc3B2LHNwdTsKICBz cHkgPSBzcHYgPSBzcHUgPSAwOwogIHN3aXRjaChzcGl0Y2gtPnkpCiAgewogICAgY2FzZSAxNjoK ICAgIGNhc2UgMzI6CiAgICBjYXNlIDY0OgogICAgY2FzZSAxMjg6CiAgICBjYXNlIDI1Njogc3B5 ID0gc3BpdGNoLT55OyBicmVhazsKICAgIGRlZmF1bHQ6IGJyZWFrOwogIH0KICBzd2l0Y2goc3Bp dGNoLT51KQogIHsKICAgIGNhc2UgMTY6CiAgICBjYXNlIDMyOgogICAgY2FzZSA2NDoKICAgIGNh c2UgMTI4OgogICAgY2FzZSAyNTY6IHNwdSA9IHNwaXRjaC0+dTsgYnJlYWs7CiAgICBkZWZhdWx0 OiBicmVhazsKICB9CiAgc3dpdGNoKHNwaXRjaC0+dikKICB7CiAgICBjYXNlIDE2OgogICAgY2Fz ZSAzMjoKICAgIGNhc2UgNjQ6CiAgICBjYXNlIDEyODoKICAgIGNhc2UgMjU2OiBzcHYgPSBzcGl0 Y2gtPnY7IGJyZWFrOwogICAgZGVmYXVsdDogYnJlYWs7CiAgfQogIHN3aXRjaChmb3VyY2MpCiAg ewoKICAgICAgICBjYXNlICgoKHVuc2lnbmVkKSgnSScpPDwwKXwoKHVuc2lnbmVkKSgnWScpPDw4 KXwoKHVuc2lnbmVkKSgnVScpPDwxNil8KCh1bnNpZ25lZCkoJ1YnKTw8MjQpKToKICAgICAgICBj YXNlICgoKHVuc2lnbmVkKSgnWScpPDwwKXwoKHVuc2lnbmVkKSgnVicpPDw4KXwoKHVuc2lnbmVk KSgnMScpPDwxNil8KCh1bnNpZ25lZCkoJzInKTw8MjQpKToKICAgICAgICBjYXNlICgoKHVuc2ln bmVkKSgnSScpPDwwKXwoKHVuc2lnbmVkKSgnNCcpPDw4KXwoKHVuc2lnbmVkKSgnMicpPDwxNil8 KCh1bnNpZ25lZCkoJzAnKTw8MjQpKToKICAgICAgICAgICAgICAgIGlmKHNweSA+IDE2ICYmIHNw dSA9PSBzcHkvMiAmJiBzcHYgPT0gc3B5LzIpIHBpdGNoID0gc3B5OwogICAgICAgICAgICAgICAg ZWxzZSBwaXRjaCA9IDMyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAoKCh1 bnNpZ25lZCkoJ0knKTw8MCl8KCh1bnNpZ25lZCkoJ0YnKTw8OCl8KCh1bnNpZ25lZCkoJzAnKTw8 MTYpfCgodW5zaWduZWQpKCc5Jyk8PDI0KSk6CiAgICAgICAgY2FzZSAoKCh1bnNpZ25lZCkoJ1kn KTw8MCl8KCh1bnNpZ25lZCkoJ1YnKTw8OCl8KCh1bnNpZ25lZCkoJ1UnKTw8MTYpfCgodW5zaWdu ZWQpKCc5Jyk8PDI0KSk6CiAgICAgICAgICAgICAgICBpZihzcHkgPj0gNjQgJiYgc3B1ID09IHNw eS80ICYmIHNwdiA9PSBzcHkvNCkgcGl0Y2ggPSBzcHk7CiAgICAgICAgICAgICAgICBlbHNlIHBp dGNoID0gNjQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAg ICAgICAgICAgaWYoc3B5ID49IDE2KSBwaXRjaCA9IHNweTsKICAgICAgICAgICAgICAgIGVsc2Ug cGl0Y2ggPSAxNjsKICAgICAgICAgICAgICAgIGJyZWFrOwogIH0KICByZXR1cm4gcGl0Y2g7Cn0K CnN0YXRpYyB2b2lkIENhbGNfSF9JTkNfU1RFUF9CWSAoCiAgICAgICAgaW50IGZpZWxkdmFsdWVf T1YwX1NVUkZBQ0VfRk9STUFULAogICAgICAgIGRvdWJsZSBIX3NjYWxlX3JhdGlvLAogICAgICAg IGludCBEaXNhbGxvd0ZvdXJUYXBWZXJ0RmlsdGVyaW5nLAogICAgICAgIGludCBEaXNhbGxvd0Zv dXJUYXBVVlZlcnRGaWx0ZXJpbmcsCiAgICAgICAgdWludDMyX3QgKnZhbF9PVjBfUDFfSF9JTkMs CiAgICAgICAgdWludDMyX3QgKnZhbF9PVjBfUDFfSF9TVEVQX0JZLAogICAgICAgIHVpbnQzMl90 ICp2YWxfT1YwX1AyM19IX0lOQywKICAgICAgICB1aW50MzJfdCAqdmFsX09WMF9QMjNfSF9TVEVQ X0JZLAogICAgICAgIGludCAqUDFHcm91cFNpemUsCiAgICAgICAgaW50ICpQMVN0ZXBTaXplLAog ICAgICAgIGludCAqUDIzU3RlcFNpemUgKQp7CgogICAgZG91YmxlIENsb2Nrc05lZWRlZEZvcjE2 UGl4ZWxzOwoKICAgIHN3aXRjaCAoZmllbGR2YWx1ZV9PVjBfU1VSRkFDRV9GT1JNQVQpCiAgICB7 CiAgICAgICAgY2FzZSAzOgogICAgICAgIGNhc2UgNDoKCiAgICAgICAgICAgICpQMUdyb3VwU2l6 ZSA9IDI7CgoKICAgICAgICAgICAgaWYgKEhfc2NhbGVfcmF0aW8+PS41KQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9z Y2FsZV9yYXRpbykpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBf UDFfSF9TVEVQX0JZID0gMTsKICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1 aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8pKSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAg ICAgICAgICp2YWxfT1YwX1AyM19IX1NURVBfQlkgPSAxOwogICAgICAgICAgICAgICAgKlAxU3Rl cFNpemUgPSAxOwogICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXplID0gMTsKICAgICAgICAgICAg fQogICAgICAgICAgICBlbHNlIGlmIChIX3NjYWxlX3JhdGlvPj0uMjUpCiAgICAgICAgICAgIHsK CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2Nh bGVfcmF0aW8qMikpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBf UDFfSF9TVEVQX0JZID0gMjsKICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1 aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMikpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAg ICAgICAgICAgKnZhbF9PVjBfUDIzX0hfU1RFUF9CWSA9IDI7CiAgICAgICAgICAgICAgICAqUDFT dGVwU2l6ZSA9IDI7CiAgICAgICAgICAgICAgICAqUDIzU3RlcFNpemUgPSAyOwogICAgICAgICAg ICB9CiAgICAgICAgICAgIGVsc2UgaWYgKEhfc2NhbGVfcmF0aW8+PS4xMjUpCiAgICAgICAgICAg IHsKCiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhf c2NhbGVfcmF0aW8qNCkpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9P VjBfUDFfSF9TVEVQX0JZID0gMzsKICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9 ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qNCkpICogKDE8PDB4YykgKyAwLjUpOwogICAg ICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfU1RFUF9CWSA9IDM7CiAgICAgICAgICAgICAgICAq UDFTdGVwU2l6ZSA9IDQ7CiAgICAgICAgICAgICAgICAqUDIzU3RlcFNpemUgPSA0OwogICAgICAg ICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKEhfc2NhbGVfcmF0aW8+PS4wNjI1KQogICAgICAg ICAgICB7CgogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWludDE2X3QpKCgx LyhIX3NjYWxlX3JhdGlvKjgpKSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAgICAgICAgICp2 YWxfT1YwX1AxX0hfU1RFUF9CWSA9IDQ7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9J TkMgPSAodWludDE2X3QpKCgxLyhIX3NjYWxlX3JhdGlvKjgpKSAqICgxPDwweGMpICsgMC41KTsK ICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX1NURVBfQlkgPSA0OwogICAgICAgICAgICAg ICAgKlAxU3RlcFNpemUgPSA4OwogICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXplID0gODsKICAg ICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChIX3NjYWxlX3JhdGlvPj0wLjAzMTI1KQog ICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWludDE2 X3QpKCgxLyhIX3NjYWxlX3JhdGlvKjE2KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAg ICAgICAqdmFsX09WMF9QMV9IX1NURVBfQlkgPSA1OwogICAgICAgICAgICAgICAgKnZhbF9PVjBf UDIzX0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyoxNikpICogKDE8PDB4Yykg KyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfU1RFUF9CWSA9IDU7CiAgICAg ICAgICAgICAgICAqUDFTdGVwU2l6ZSA9IDE2OwogICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXpl ID0gMTY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICBIX3NjYWxlX3JhdGlvPTAuMDMxMjU7CiAgICAgICAgICAgICAgICAqdmFsX09W MF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMTYpKSAqICgxPDwweGMp ICsgMC41KTsKICAgICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfU1RFUF9CWSA9IDU7CiAgICAg ICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9JTkMgPSAodWludDE2X3QpKCgxLyhIX3NjYWxlX3Jh dGlvKjE2KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNf SF9TVEVQX0JZID0gNTsKICAgICAgICAgICAgICAgICpQMVN0ZXBTaXplID0gMTY7CiAgICAgICAg ICAgICAgICAqUDIzU3RlcFNpemUgPSAxNjsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVh azsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGlmIChIX3NjYWxlX3JhdGlvPj0xLjUgJiYg IURpc2FsbG93Rm91clRhcFZlcnRGaWx0ZXJpbmcpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAg ICAgICAqUDFHcm91cFNpemUgPSAyOwoKCiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX0lO QyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8pKSAqICgxPDwweGMpICsgMC41KTsKICAg ICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfU1RFUF9CWSA9IDA7CiAgICAgICAgICAgICAgICAq dmFsX09WMF9QMjNfSF9JTkMgPSAodWludDE2X3QpKCgxLyhIX3NjYWxlX3JhdGlvKSkgKiAoMTw8 MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0gMDsK ICAgICAgICAgICAgICAgICpQMVN0ZXBTaXplID0gMTsKICAgICAgICAgICAgICAgICpQMjNTdGVw U2l6ZSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoSF9zY2FsZV9yYXRp bz49MC43NSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICpQMUdyb3VwU2l6ZSA9IDQ7 CgoKCiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhf c2NhbGVfcmF0aW8pKSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAgICAgICAgICp2YWxfT1Yw X1AxX0hfU1RFUF9CWSA9IDE7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9JTkMgPSAo dWludDE2X3QpKCgxLyhIX3NjYWxlX3JhdGlvKSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAg ICAgICAgICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0gMTsKICAgICAgICAgICAgICAgICpQMVN0 ZXBTaXplID0gMTsKICAgICAgICAgICAgICAgICpQMjNTdGVwU2l6ZSA9IDE7CiAgICAgICAgICAg IH0KICAgICAgICAgICAgZWxzZSBpZiAoSF9zY2FsZV9yYXRpbz49MC4zNzUpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgICAgKlAxR3JvdXBTaXplID0gNDsKCiAgICAgICAgICAgICAgICAq dmFsX09WMF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMikpICogKDE8 PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9TVEVQX0JZID0gMjsK ICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2Nh bGVfcmF0aW8qMikpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBf UDIzX0hfU1RFUF9CWSA9IDI7CiAgICAgICAgICAgICAgICAqUDFTdGVwU2l6ZSA9IDI7CiAgICAg ICAgICAgICAgICAqUDIzU3RlcFNpemUgPSAyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVs c2UgaWYgKEhfc2NhbGVfcmF0aW8+PTAuMjUpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg ICAgKlAxR3JvdXBTaXplID0gNDsKCiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX0lOQyA9 ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMikpICogKDE8PDB4YykgKyAwLjUpOwogICAg ICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9TVEVQX0JZID0gMjsKICAgICAgICAgICAgICAgICp2 YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qNCkpICogKDE8 PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfU1RFUF9CWSA9IDM7 CiAgICAgICAgICAgICAgICAqUDFTdGVwU2l6ZSA9IDI7CiAgICAgICAgICAgICAgICAqUDIzU3Rl cFNpemUgPSA0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKEhfc2NhbGVfcmF0 aW8+PTAuMTg3NSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgICAqUDFHcm91cFNpemUg PSA0OwoKICAgICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfSU5DID0gKHVpbnQxNl90KSgoMS8o SF9zY2FsZV9yYXRpbyo0KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAqdmFs X09WMF9QMV9IX1NURVBfQlkgPSAzOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfSU5D ID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyo0KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAg ICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0gMzsKICAgICAgICAgICAgICAg ICpQMVN0ZXBTaXplID0gNDsKICAgICAgICAgICAgICAgICpQMjNTdGVwU2l6ZSA9IDQ7CiAgICAg ICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoSF9zY2FsZV9yYXRpbz49MC4xMjUpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgICAgKlAxR3JvdXBTaXplID0gNDsKCiAgICAgICAgICAg ICAgICAqdmFsX09WMF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qNCkp ICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9TVEVQX0JZ ID0gMzsKICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50MTZfdCkoKDEv KEhfc2NhbGVfcmF0aW8qOCkpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZh bF9PVjBfUDIzX0hfU1RFUF9CWSA9IDQ7CiAgICAgICAgICAgICAgICAqUDFTdGVwU2l6ZSA9IDQ7 CiAgICAgICAgICAgICAgICAqUDIzU3RlcFNpemUgPSA4OwogICAgICAgICAgICB9CiAgICAgICAg ICAgIGVsc2UgaWYgKEhfc2NhbGVfcmF0aW8+PTAuMDkzNzUpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgICAgKlAxR3JvdXBTaXplID0gNDsKCiAgICAgICAgICAgICAgICAqdmFsX09WMF9Q MV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qOCkpICogKDE8PDB4YykgKyAw LjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9TVEVQX0JZID0gNDsKICAgICAgICAg ICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8q OCkpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfU1RF UF9CWSA9IDQ7CiAgICAgICAgICAgICAgICAqUDFTdGVwU2l6ZSA9IDg7CiAgICAgICAgICAgICAg ICAqUDIzU3RlcFNpemUgPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKEhf c2NhbGVfcmF0aW8+PTAuMDYyNSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgICAqUDFH cm91cFNpemUgPSA0OwoKICAgICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfSU5DID0gKHVpbnQx Nl90KSgoMS8oSF9zY2FsZV9yYXRpbyoxNikpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAg ICAgICAgKnZhbF9PVjBfUDFfSF9TVEVQX0JZID0gNTsKICAgICAgICAgICAgICAgICp2YWxfT1Yw X1AyM19IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMTYpKSAqICgxPDwweGMp ICsgMC41KTsKICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX1NURVBfQlkgPSA1OwogICAg ICAgICAgICAgICAgKlAxU3RlcFNpemUgPSAxNjsKICAgICAgICAgICAgICAgICpQMjNTdGVwU2l6 ZSA9IDE2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgSF9zY2FsZV9yYXRpbz0wLjA2MjU7CiAgICAgICAgICAgICAgICAqUDFHcm91 cFNpemUgPSA0OwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWludDE2X3Qp KCgxLyhIX3NjYWxlX3JhdGlvKjE2KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAg ICAqdmFsX09WMF9QMV9IX1NURVBfQlkgPSA1OwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIz X0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyoxNikpICogKDE8PDB4YykgKyAw LjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfU1RFUF9CWSA9IDU7CiAgICAgICAg ICAgICAgICAqUDFTdGVwU2l6ZSA9IDE2OwogICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXplID0g MTY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA5OgoKCiAg ICAgICAgICAgIGlmICgoSF9zY2FsZV9yYXRpbz49KENsb2Nrc05lZWRlZEZvcjE2UGl4ZWxzPTgr MisyKSAvIDE2LjApICYmCiAgICAgICAgICAgICAgICgodWludDE2X3QpKCgxLyhIX3NjYWxlX3Jh dGlvKSkgKiAoMTw8MHhjKSArIDAuNSk8PTB4MzAwMCkgJiYKICAgICAgICAgICAgICAgKCh1aW50 MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qNCkpICogKDE8PDB4YykgKyAwLjUpPD0weDIwMDApICYm CiAgICAgICAgICAgICAgICFEaXNhbGxvd0ZvdXJUYXBWZXJ0RmlsdGVyaW5nICYmICFEaXNhbGxv d0ZvdXJUYXBVVlZlcnRGaWx0ZXJpbmcpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAq UDFHcm91cFNpemUgPSAyOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWlu dDE2X3QpKCgxLyhIX3NjYWxlX3JhdGlvKSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAg ICAgICAqdmFsX09WMF9QMV9IX1NURVBfQlkgPSAwOwogICAgICAgICAgICAgICAgKnZhbF9PVjBf UDIzX0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyo0KSkgKiAoMTw8MHhjKSAr IDAuNSk7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0gMDsKICAgICAg ICAgICAgICAgICpQMVN0ZXBTaXplID0gMTsKICAgICAgICAgICAgICAgICpQMjNTdGVwU2l6ZSA9 IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgaWYgKChIX3NjYWxlX3JhdGlvPj0o Q2xvY2tzTmVlZGVkRm9yMTZQaXhlbHM9NCsyKzIpIC8gMTYuMCkgJiYKICAgICAgICAgICAgICAg ICAgICAoKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbykpICogKDE8PDB4YykgKyAwLjUpPD0w eDMwMDApICYmCiAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0 aW8qNCkpICogKDE8PDB4YykgKyAwLjUpPD0weDIwMDApICYmCiAgICAgICAgICAgICAgICAgICAg RGlzYWxsb3dGb3VyVGFwVmVydEZpbHRlcmluZyAmJiAhRGlzYWxsb3dGb3VyVGFwVVZWZXJ0Rmls dGVyaW5nKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqUDFHcm91cFNpemUgPSA0Owog ICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWludDE2X3QpKCgxLyhIX3NjYWxl X3JhdGlvKSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9I X1NURVBfQlkgPSAxOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfSU5DID0gKHVpbnQx Nl90KSgoMS8oSF9zY2FsZV9yYXRpbyo0KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAg ICAgICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0gMDsKICAgICAgICAgICAgICAgICpQMVN0ZXBT aXplID0gMTsKICAgICAgICAgICAgICAgICpQMjNTdGVwU2l6ZSA9IDE7CiAgICAgICAgICAgIH0K CgogICAgICAgICAgICBlbHNlIGlmICgoSF9zY2FsZV9yYXRpbz49KENsb2Nrc05lZWRlZEZvcjE2 UGl4ZWxzPTgrMSsxKSAvIDE2LjApICYmCiAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCko KDEvKEhfc2NhbGVfcmF0aW8pKSAqICgxPDwweGMpICsgMC41KTw9MHgzMDAwKSAmJgogICAgICAg ICAgICAgICAgICAgICgodWludDE2X3QpKCgxLyhIX3NjYWxlX3JhdGlvKjQpKSAqICgxPDwweGMp ICsgMC41KTw9MHgyMDAwKSAmJgogICAgICAgICAgICAgICAgICAgICFEaXNhbGxvd0ZvdXJUYXBW ZXJ0RmlsdGVyaW5nKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqUDFHcm91cFNpemUg PSAyOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWludDE2X3QpKCgxLyhI X3NjYWxlX3JhdGlvKSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAqdmFsX09W MF9QMV9IX1NURVBfQlkgPSAwOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfSU5DID0g KHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyo0KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAg ICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0gMTsKICAgICAgICAgICAgICAgICpQ MVN0ZXBTaXplID0gMTsKICAgICAgICAgICAgICAgICpQMjNTdGVwU2l6ZSA9IDE7CiAgICAgICAg ICAgIH0KCiAgICAgICAgICAgIGVsc2UgaWYgKChIX3NjYWxlX3JhdGlvPj0oQ2xvY2tzTmVlZGVk Rm9yMTZQaXhlbHM9NCsxKzEpIC8gMTYuMCkgJiYKICAgICAgICAgICAgICAgICAgICAoKHVpbnQx Nl90KSgoMS8oSF9zY2FsZV9yYXRpbykpICogKDE8PDB4YykgKyAwLjUpPD0weDMwMDApICYmCiAg ICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qNCkpICogKDE8 PDB4YykgKyAwLjUpPD0weDIwMDApKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqUDFH cm91cFNpemUgPSA0OwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWludDE2 X3QpKCgxLyhIX3NjYWxlX3JhdGlvKSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAg ICAqdmFsX09WMF9QMV9IX1NURVBfQlkgPSAxOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIz X0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyo0KSkgKiAoMTw8MHhjKSArIDAu NSk7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0gMTsKICAgICAgICAg ICAgICAgICpQMVN0ZXBTaXplID0gMTsKICAgICAgICAgICAgICAgICpQMjNTdGVwU2l6ZSA9IDE7 CiAgICAgICAgICAgIH0KCgogICAgICAgICAgICBlbHNlIGlmICgoSF9zY2FsZV9yYXRpbz49KENs b2Nrc05lZWRlZEZvcjE2UGl4ZWxzPTQrLjUrLjUpIC8gMTYuMCkgJiYKICAgICAgICAgICAgICAg ICAgICAoKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbykpICogKDE8PDB4YykgKyAwLjUpPD0w eDMwMDApICYmCiAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0 aW8qNCoyKSkgKiAoMTw8MHhjKSArIDAuNSk8PTB4MjAwMCkpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICpQMUdyb3VwU2l6ZSA9IDQ7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9I X0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8pKSAqICgxPDwweGMpICsgMC41KTsK ICAgICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfU1RFUF9CWSA9IDE7CiAgICAgICAgICAgICAg ICAqdmFsX09WMF9QMjNfSF9JTkMgPSAodWludDE2X3QpKCgxLyhIX3NjYWxlX3JhdGlvKjQqMikp ICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfU1RFUF9C WSA9IDI7CiAgICAgICAgICAgICAgICAqUDFTdGVwU2l6ZSA9IDE7CiAgICAgICAgICAgICAgICAq UDIzU3RlcFNpemUgPSAyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIGlmICgoSF9z Y2FsZV9yYXRpbz49KENsb2Nrc05lZWRlZEZvcjE2UGl4ZWxzPTIrLjUrLjUpIC8gMTYuMCkgJiYK ICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyoyKSkgKiAo MTw8MHhjKSArIDAuNSk8PTB4MzAwMCkgJiYKICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90 KSgoMS8oSF9zY2FsZV9yYXRpbyo0KjIpKSAqICgxPDwweGMpICsgMC41KTw9MHgyMDAwKSkKICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgKlAxR3JvdXBTaXplID0gNDsKICAgICAgICAgICAg ICAgICp2YWxfT1YwX1AxX0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyoyKSkg KiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX1NURVBfQlkg PSAyOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfSU5DID0gKHVpbnQxNl90KSgoMS8o SF9zY2FsZV9yYXRpbyo0KjIpKSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAgICAgICAgICp2 YWxfT1YwX1AyM19IX1NURVBfQlkgPSAyOwogICAgICAgICAgICAgICAgKlAxU3RlcFNpemUgPSAy OwogICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXplID0gMjsKICAgICAgICAgICAgfQoKICAgICAg ICAgICAgZWxzZSBpZiAoKEhfc2NhbGVfcmF0aW8+PShDbG9ja3NOZWVkZWRGb3IxNlBpeGVscz0y Ky4yNSsuMjUpIC8gMTYuMCkgJiYKICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KSgoMS8o SF9zY2FsZV9yYXRpbykpICogKDE8PDB4YykgKyAwLjUpPD0weDMwMDApICYmCiAgICAgICAgICAg ICAgICAgICAgKCh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qNCo0KSkgKiAoMTw8MHhjKSAr IDAuNSk8PTB4MjAwMCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICpQMUdyb3VwU2l6 ZSA9IDQ7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEv KEhfc2NhbGVfcmF0aW8qMikpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZh bF9PVjBfUDFfSF9TVEVQX0JZID0gMjsKICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lO QyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qNCo0KSkgKiAoMTw8MHhjKSArIDAuNSk7 CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0gMzsKICAgICAgICAgICAg ICAgICpQMVN0ZXBTaXplID0gMjsKICAgICAgICAgICAgICAgICpQMjNTdGVwU2l6ZSA9IDQ7CiAg ICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgaWYgKChIX3NjYWxlX3JhdGlvPj0oQ2xvY2tz TmVlZGVkRm9yMTZQaXhlbHM9MSsuMjUrLjI1KSAvIDE2LjApICYmCiAgICAgICAgICAgICAgICAg ICAgKCh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qNCkpICogKDE8PDB4YykgKyAwLjUpPD0w eDMwMDApICYmCiAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0 aW8qNCo0KSkgKiAoMTw8MHhjKSArIDAuNSk8PTB4MjAwMCkpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICpQMUdyb3VwU2l6ZSA9IDQ7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9I X0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qNCkpICogKDE8PDB4YykgKyAwLjUp OwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9TVEVQX0JZID0gMzsKICAgICAgICAgICAg ICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qNCo0 KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9TVEVQ X0JZID0gMzsKICAgICAgICAgICAgICAgICpQMVN0ZXBTaXplID0gNDsKICAgICAgICAgICAgICAg ICpQMjNTdGVwU2l6ZSA9IDQ7CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgICAgZWxzZSBpZiAo KEhfc2NhbGVfcmF0aW8+PShDbG9ja3NOZWVkZWRGb3IxNlBpeGVscz0uNSsuMTI1Ky4xMjUpIC8g MTYuMCkgJiYKICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRp byo4KSkgKiAoMTw8MHhjKSArIDAuNSk8PTB4MzAwMCkgJiYKICAgICAgICAgICAgICAgICAgICAo KHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyo0KjgpKSAqICgxPDwweGMpICsgMC41KTw9MHgy MDAwKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKlAxR3JvdXBTaXplID0gNDsKICAg ICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9y YXRpbyo4KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9I X1NURVBfQlkgPSA0OwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfSU5DID0gKHVpbnQx Nl90KSgoMS8oSF9zY2FsZV9yYXRpbyo0KjgpKSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAg ICAgICAgICp2YWxfT1YwX1AyM19IX1NURVBfQlkgPSA0OwogICAgICAgICAgICAgICAgKlAxU3Rl cFNpemUgPSA4OwogICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXplID0gODsKICAgICAgICAgICAg fQoKICAgICAgICAgICAgZWxzZSBpZiAoKEhfc2NhbGVfcmF0aW8+PShDbG9ja3NOZWVkZWRGb3Ix NlBpeGVscz0uNSsuMDYyNSsuMDYyNSkgLyAxNi4wKSAmJgogICAgICAgICAgICAoKHVpbnQxNl90 KSgoMS8oSF9zY2FsZV9yYXRpbyo4KSkgKiAoMTw8MHhjKSArIDAuNSk8PTB4MzAwMCkgJiYKICAg ICAgICAgICAgKCh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qNCoxNikpICogKDE8PDB4Yykg KyAwLjUpPD0weDIwMDApKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqUDFHcm91cFNp emUgPSA0OwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWludDE2X3QpKCgx LyhIX3NjYWxlX3JhdGlvKjgpKSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAgICAgICAgICp2 YWxfT1YwX1AxX0hfU1RFUF9CWSA9IDQ7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9J TkMgPSAodWludDE2X3QpKCgxLyhIX3NjYWxlX3JhdGlvKjQqMTYpKSAqICgxPDwweGMpICsgMC41 KTsKICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX1NURVBfQlkgPSA1OwogICAgICAgICAg ICAgICAgKlAxU3RlcFNpemUgPSA4OwogICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXplID0gMTY7 CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgaWYgKChIX3NjYWxlX3JhdGlvPj0oQ2xv Y2tzTmVlZGVkRm9yMTZQaXhlbHM9LjI1Ky4wNjI1Ky4wNjI1KSAvIDE2LjApICYmCiAgICAgICAg ICAgICAgICAgICAgKCh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMTYpKSAqICgxPDwweGMp ICsgMC41KTw9MHgzMDAwKSAmJgogICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpKCgxLyhI X3NjYWxlX3JhdGlvKjQqMTYpKSAqICgxPDwweGMpICsgMC41KTw9MHgyMDAwKSkKICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgKlAxR3JvdXBTaXplID0gNDsKICAgICAgICAgICAgICAgICp2 YWxfT1YwX1AxX0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyoxNikpICogKDE8 PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9TVEVQX0JZID0gNTsK ICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2Nh bGVfcmF0aW8qNCoxNikpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgKnZhbF9P VjBfUDIzX0hfU1RFUF9CWSA9IDU7CiAgICAgICAgICAgICAgICAqUDFTdGVwU2l6ZSA9IDE2Owog ICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXplID0gMTY7CiAgICAgICAgICAgIH0KICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBIX3NjYWxlX3JhdGlvPShDbG9j a3NOZWVkZWRGb3IxNlBpeGVscz0uMjUrLjA2MjUrLjA2MjUpIC8gMTY7CiAgICAgICAgICAgICAg ICAqUDFHcm91cFNpemUgPSA0OwogICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAo dWludDE2X3QpKCgxLyhIX3NjYWxlX3JhdGlvKjE2KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAg ICAgICAgICAgICAqdmFsX09WMF9QMV9IX1NURVBfQlkgPSA1OwogICAgICAgICAgICAgICAgKnZh bF9PVjBfUDIzX0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyo0KjE2KSkgKiAo MTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0g NTsKICAgICAgICAgICAgICAgICpQMVN0ZXBTaXplID0gMTY7CiAgICAgICAgICAgICAgICAqUDIz U3RlcFNpemUgPSAxNjsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBj YXNlIDEwOgogICAgICAgIGNhc2UgMTE6CiAgICAgICAgY2FzZSAxMjoKICAgICAgICBjYXNlIDEz OgogICAgICAgIGNhc2UgMTQ6CgoKICAgICAgICAgICAgICAgIGlmICgoSF9zY2FsZV9yYXRpbz49 KENsb2Nrc05lZWRlZEZvcjE2UGl4ZWxzPTgrNCs0KSAvIDE2LjApICYmCiAgICAgICAgICAgICAg ICAgICAgIURpc2FsbG93Rm91clRhcFZlcnRGaWx0ZXJpbmcgJiYgIURpc2FsbG93Rm91clRhcFVW VmVydEZpbHRlcmluZykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAqUDFH cm91cFNpemUgPSAyOwogICAgICAgICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfSU5DID0gKHVp bnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbykpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAg ICAgICAgICAgICp2YWxfT1YwX1AxX0hfU1RFUF9CWSA9IDA7CiAgICAgICAgICAgICAgICAgICAg KnZhbF9PVjBfUDIzX0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyoyKSkgKiAo MTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfU1RFUF9C WSA9IDA7CiAgICAgICAgICAgICAgICAgICAgKlAxU3RlcFNpemUgPSAxOwogICAgICAgICAgICAg ICAgICAgICpQMjNTdGVwU2l6ZSA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg ICAgZWxzZSBpZiAoKEhfc2NhbGVfcmF0aW8+PShDbG9ja3NOZWVkZWRGb3IxNlBpeGVscz00KzQr NCkgLyAxNi4wKSAmJgogICAgICAgICAgICAgICAgICAgICAgICBEaXNhbGxvd0ZvdXJUYXBWZXJ0 RmlsdGVyaW5nICYmICFEaXNhbGxvd0ZvdXJUYXBVVlZlcnRGaWx0ZXJpbmcpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgKlAxR3JvdXBTaXplID0gNDsKICAgICAgICAgICAg ICAgICAgICAqdmFsX09WMF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8p KSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX1NU RVBfQlkgPSAxOwogICAgICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50 MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMikpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAg ICAgICAgICAgICp2YWxfT1YwX1AyM19IX1NURVBfQlkgPSAwOwogICAgICAgICAgICAgICAgICAg ICpQMVN0ZXBTaXplID0gMTsKICAgICAgICAgICAgICAgICAgICAqUDIzU3RlcFNpemUgPSAxOwog ICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICBlbHNlIGlmICgoSF9zY2FsZV9yYXRp bz49KENsb2Nrc05lZWRlZEZvcjE2UGl4ZWxzPTgrMisyKSAvIDE2LjApICYmCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIURpc2FsbG93Rm91clRhcFZlcnRGaWx0ZXJpbmcpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgKlAxR3JvdXBTaXplID0gMjsKICAgICAgICAgICAg ICAgICAgICAqdmFsX09WMF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8p KSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX1NU RVBfQlkgPSAwOwogICAgICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50 MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMikpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAg ICAgICAgICAgICp2YWxfT1YwX1AyM19IX1NURVBfQlkgPSAxOwogICAgICAgICAgICAgICAgICAg ICpQMVN0ZXBTaXplID0gMTsKICAgICAgICAgICAgICAgICAgICAqUDIzU3RlcFNpemUgPSAxOwog ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhfc2NhbGVfcmF0aW8+ PShDbG9ja3NOZWVkZWRGb3IxNlBpeGVscz00KzIrMikgLyAxNi4wKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICpQMUdyb3VwU2l6ZSA9IDQ7CiAgICAgICAgICAgICAgICAg ICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWludDE2X3QpKCgxLyhIX3NjYWxlX3JhdGlvKSkgKiAo MTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9TVEVQX0JZ ID0gMTsKICAgICAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9JTkMgPSAodWludDE2X3Qp KCgxLyhIX3NjYWxlX3JhdGlvKjIpKSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAgICAgICAg ICAgICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0gMTsKICAgICAgICAgICAgICAgICAgICAqUDFT dGVwU2l6ZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXplID0gMTsKICAgICAg ICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgZWxzZSBpZiAoSF9zY2FsZV9yYXRpbz49KENs b2Nrc05lZWRlZEZvcjE2UGl4ZWxzPTQrMSsxKSAvIDE2LjApCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgKlAxR3JvdXBTaXplID0gNDsKICAgICAgICAgICAgICAgICAgICAq dmFsX09WMF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8pKSAqICgxPDww eGMpICsgMC41KTsKICAgICAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX1NURVBfQlkgPSAx OwogICAgICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50MTZfdCkoKDEv KEhfc2NhbGVfcmF0aW8qMioyKSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAg ICAgKnZhbF9PVjBfUDIzX0hfU1RFUF9CWSA9IDI7CiAgICAgICAgICAgICAgICAgICAgKlAxU3Rl cFNpemUgPSAxOwogICAgICAgICAgICAgICAgICAgICpQMjNTdGVwU2l6ZSA9IDI7CiAgICAgICAg ICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzZSBpZiAoSF9zY2FsZV9yYXRpbz49KENsb2Nr c05lZWRlZEZvcjE2UGl4ZWxzPTIrMSsxKSAvIDE2LjApCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgKlAxR3JvdXBTaXplID0gNDsKICAgICAgICAgICAgICAgICAgICAqdmFs X09WMF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMikpICogKDE8PDB4 YykgKyAwLjUpOwogICAgICAgICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfU1RFUF9CWSA9IDI7 CiAgICAgICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfSU5DID0gKHVpbnQxNl90KSgoMS8o SF9zY2FsZV9yYXRpbyoyKjIpKSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAgICAgICAgICAg ICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0gMjsKICAgICAgICAgICAgICAgICAgICAqUDFTdGVw U2l6ZSA9IDI7CiAgICAgICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXplID0gMjsKICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICBlbHNlIGlmIChIX3NjYWxlX3JhdGlvPj0oQ2xvY2tz TmVlZGVkRm9yMTZQaXhlbHM9MisuNSsuNSkgLyAxNi4wKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICpQMUdyb3VwU2l6ZSA9IDQ7CiAgICAgICAgICAgICAgICAgICAgKnZh bF9PVjBfUDFfSF9JTkMgPSAodWludDE2X3QpKCgxLyhIX3NjYWxlX3JhdGlvKjIpKSAqICgxPDww eGMpICsgMC41KTsKICAgICAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX1NURVBfQlkgPSAy OwogICAgICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50MTZfdCkoKDEv KEhfc2NhbGVfcmF0aW8qMio0KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAg ICAgKnZhbF9PVjBfUDIzX0hfU1RFUF9CWSA9IDM7CiAgICAgICAgICAgICAgICAgICAgKlAxU3Rl cFNpemUgPSAyOwogICAgICAgICAgICAgICAgICAgICpQMjNTdGVwU2l6ZSA9IDQ7CiAgICAgICAg ICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzZSBpZiAoSF9zY2FsZV9yYXRpbz49KENsb2Nr c05lZWRlZEZvcjE2UGl4ZWxzPTErLjUrLjUpIC8gMTYuMCkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAqUDFHcm91cFNpemUgPSA0OwogICAgICAgICAgICAgICAgICAgICp2 YWxfT1YwX1AxX0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyo0KSkgKiAoMTw8 MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9TVEVQX0JZID0g MzsKICAgICAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9JTkMgPSAodWludDE2X3QpKCgx LyhIX3NjYWxlX3JhdGlvKjIqNCkpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAg ICAgICp2YWxfT1YwX1AyM19IX1NURVBfQlkgPSAzOwogICAgICAgICAgICAgICAgICAgICpQMVN0 ZXBTaXplID0gNDsKICAgICAgICAgICAgICAgICAgICAqUDIzU3RlcFNpemUgPSA0OwogICAgICAg ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2UgaWYgKChIX3NjYWxlX3JhdGlvPj0oQ2xv Y2tzTmVlZGVkRm9yMTZQaXhlbHM9MSsuMjUrLjI1KSAvIDE2LjApICYmCiAgICAgICAgICAgICAg ICAgICAgICAgICAoZmllbGR2YWx1ZV9PVjBfU1VSRkFDRV9GT1JNQVQ9PTEwKSkKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAqUDFHcm91cFNpemUgPSA0OwoKICAgICAgICAg ICAgICAgICAgICAqdmFsX09WMF9QMV9IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0 aW8qNCkpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgICAgICp2YWxfT1YwX1Ax X0hfU1RFUF9CWSA9IDM7CiAgICAgICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfSU5DID0g KHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyoyKjgpKSAqICgxPDwweGMpICsgMC41KTsKICAg ICAgICAgICAgICAgICAgICAqdmFsX09WMF9QMjNfSF9TVEVQX0JZID0gNDsKICAgICAgICAgICAg ICAgICAgICAqUDFTdGVwU2l6ZSA9IDQ7CiAgICAgICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXpl ID0gODsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlbHNlIGlmIChIX3NjYWxl X3JhdGlvPj0oQ2xvY2tzTmVlZGVkRm9yMTZQaXhlbHM9LjUrLjI1Ky4yNSkgLyAxNi4wKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICpQMUdyb3VwU2l6ZSA9IDQ7CiAgICAg ICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWludDE2X3QpKCgxLyhIX3NjYWxl X3JhdGlvKjgpKSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAgICAgICAgICAgICAqdmFsX09W MF9QMV9IX1NURVBfQlkgPSA0OwogICAgICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lO QyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMio4KSkgKiAoMTw8MHhjKSArIDAuNSk7 CiAgICAgICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfU1RFUF9CWSA9IDQ7CiAgICAgICAg ICAgICAgICAgICAgKlAxU3RlcFNpemUgPSA4OwogICAgICAgICAgICAgICAgICAgICpQMjNTdGVw U2l6ZSA9IDg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzZSBpZiAoKEhf c2NhbGVfcmF0aW8+PShDbG9ja3NOZWVkZWRGb3IxNlBpeGVscz0uNSsuMTI1Ky4xMjUpIC8gMTYu MCkgJiYgKGZpZWxkdmFsdWVfT1YwX1NVUkZBQ0VfRk9STUFUPT0xMCkpCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgKlAxR3JvdXBTaXplID0gNDsKCiAgICAgICAgICAgICAg ICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWludDE2X3QpKCgxLyhIX3NjYWxlX3JhdGlvKjgp KSAqICgxPDwweGMpICsgMC41KTsKICAgICAgICAgICAgICAgICAgICAqdmFsX09WMF9QMV9IX1NU RVBfQlkgPSA0OwogICAgICAgICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50 MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMioxNikpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAg ICAgICAgICAgICAgICp2YWxfT1YwX1AyM19IX1NURVBfQlkgPSA1OwogICAgICAgICAgICAgICAg ICAgICpQMVN0ZXBTaXplID0gODsKICAgICAgICAgICAgICAgICAgICAqUDIzU3RlcFNpemUgPSAx NjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlbHNlIGlmICgoSF9zY2FsZV9y YXRpbz49KENsb2Nrc05lZWRlZEZvcjE2UGl4ZWxzPS4yNSsuMTI1Ky4xMjUpIC8gMTYuMCkgJiYK ICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHZhbHVlX09WMF9TVVJGQUNFX0ZPUk1BVD09 MTApKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICpQMUdyb3VwU2l6ZSA9 IDQ7CgogICAgICAgICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfSU5DID0gKHVpbnQxNl90KSgo MS8oSF9zY2FsZV9yYXRpbyoxNikpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAg ICAgICp2YWxfT1YwX1AxX0hfU1RFUF9CWSA9IDU7CiAgICAgICAgICAgICAgICAgICAgKnZhbF9P VjBfUDIzX0hfSU5DID0gKHVpbnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyoyKjE2KSkgKiAoMTw8 MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAgICAgKnZhbF9PVjBfUDIzX0hfU1RFUF9CWSA9 IDU7CiAgICAgICAgICAgICAgICAgICAgKlAxU3RlcFNpemUgPSAxNjsKICAgICAgICAgICAgICAg ICAgICAqUDIzU3RlcFNpemUgPSAxNjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGR2YWx1 ZV9PVjBfU1VSRkFDRV9GT1JNQVQ9PTEwKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgSF9zY2FsZV9yYXRpbz0oQ2xvY2tzTmVlZGVkRm9yMTZQaXhlbHM9LjI1 Ky4xMjUrLjEyNSkgLyAxNjsKICAgICAgICAgICAgICAgICAgICAgICAgKlAxR3JvdXBTaXplID0g NDsKICAgICAgICAgICAgICAgICAgICAgICAgKnZhbF9PVjBfUDFfSF9JTkMgPSAodWludDE2X3Qp KCgxLyhIX3NjYWxlX3JhdGlvKjE2KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAg ICAgICAgICAgICp2YWxfT1YwX1AxX0hfU1RFUF9CWSA9IDU7CiAgICAgICAgICAgICAgICAgICAg ICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0aW8qMiox NikpICogKDE8PDB4YykgKyAwLjUpOwogICAgICAgICAgICAgICAgICAgICAgICAqdmFsX09WMF9Q MjNfSF9TVEVQX0JZID0gNTsKICAgICAgICAgICAgICAgICAgICAgICAgKlAxU3RlcFNpemUgPSAx NjsKICAgICAgICAgICAgICAgICAgICAgICAgKlAyM1N0ZXBTaXplID0gMTY7CiAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgIEhfc2NhbGVfcmF0aW89KENsb2Nrc05lZWRlZEZvcjE2 UGl4ZWxzPS41Ky4yNSsuMjUpIC8gMTY7CiAgICAgICAgICAgICAgICAgICAgICAgICpQMUdyb3Vw U2l6ZSA9IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfSU5DID0gKHVp bnQxNl90KSgoMS8oSF9zY2FsZV9yYXRpbyo4KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICp2YWxfT1YwX1AxX0hfU1RFUF9CWSA9IDQ7CiAgICAgICAgICAgICAg ICAgICAgICAgICp2YWxfT1YwX1AyM19IX0lOQyA9ICh1aW50MTZfdCkoKDEvKEhfc2NhbGVfcmF0 aW8qMio4KSkgKiAoMTw8MHhjKSArIDAuNSk7CiAgICAgICAgICAgICAgICAgICAgICAgICp2YWxf T1YwX1AyM19IX1NURVBfQlkgPSA0OwogICAgICAgICAgICAgICAgICAgICAgICAqUDFTdGVwU2l6 ZSA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICpQMjNTdGVwU2l6ZSA9IDg7CiAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgZGVmYXVsdDogYnJlYWs7CgogICAgfQogICAgYmVzci5oX2luYyA9ICgqKHZhbF9PVjBf UDFfSF9JTkMpJjB4M2ZmZikgfCAoKCoodmFsX09WMF9QMjNfSF9JTkMpJjB4M2ZmZik8PDE2KTsK ICAgIGJlc3Iuc3RlcF9ieSA9ICgqKHZhbF9PVjBfUDFfSF9TVEVQX0JZKSYweDcpIHwgKCgqKHZh bF9PVjBfUDIzX0hfU1RFUF9CWSkmMHg3KTw8OCk7Cn0KCgoKCgpzdGF0aWMgdm9pZCBDb21wdXRl Qm9yZGVycyggdmlkaXhfcGxheWJhY2tfdCAqY29uZmlnLCBpbnQgVmVydFVWU3ViU2FtcGxlICkK ewogICAgICAgIGRvdWJsZSB0ZW1wQkxBTktfTElORVNfQVRfVE9QOwogICAgICAgIHVuc2lnbmVk IFRvcExpbmUsQm90dG9tTGluZSxTb3VyY2VMaW5lc1VzZWQsVG9wVVZMaW5lLEJvdHRvbVVWTGlu ZSxTb3VyY2VVVkxpbmVzVXNlZDsKICAgICAgICB1aW50MzJfdCB2YWxfT1YwX1AxX0FDVElWRV9M SU5FU19NMSx2YWxfT1YwX1AxX0JMTktfTE5fQVRfVE9QX00xOwogICAgICAgIHVpbnQzMl90IHZh bF9PVjBfUDIzX0FDVElWRV9MSU5FU19NMSx2YWxfT1YwX1AyM19CTE5LX0xOX0FUX1RPUF9NMTsK CiAgICAgICAgaWYgKGZsb29yKGNvbmZpZy0+c3JjLnkpPDApIHsKICAgICAgICAgICAgdGVtcEJM QU5LX0xJTkVTX0FUX1RPUCA9IC1mbG9vcihjb25maWctPnNyYy55KTsKICAgICAgICAgICAgVG9w TGluZSA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0ZW1wQkxBTktf TElORVNfQVRfVE9QID0gMDsKICAgICAgICAgICAgVG9wTGluZSA9IChpbnQpZmxvb3IoY29uZmln LT5zcmMueSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY2VpbChjb25maWctPnNyYy55K2NvbmZp Zy0+c3JjLmgpID4gY29uZmlnLT5zcmMuaCkKICAgICAgICB7CiAgICAgICAgICAgIEJvdHRvbUxp bmUgPSBjb25maWctPnNyYy5oIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgICAgQm90dG9tTGluZSA9IChpbnQpY2VpbChjb25maWctPnNyYy55K2NvbmZpZy0+ c3JjLmgpIC0gMTsKICAgICAgICB9CgogICAgICAgIGlmIChCb3R0b21MaW5lID49IFRvcExpbmUp CiAgICAgICAgewogICAgICAgICAgICBTb3VyY2VMaW5lc1VzZWQgPSBCb3R0b21MaW5lIC0gVG9w TGluZSArIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgICBT b3VyY2VMaW5lc1VzZWQgPSAxOwogICAgICAgIH0KCiAgICAgICAgewogICAgICAgICAgICBpbnQg U291cmNlSGVpZ2h0SW5QaXhlbHM7CiAgICAgICAgICAgIFNvdXJjZUhlaWdodEluUGl4ZWxzID0g Qm90dG9tTGluZSAtIFRvcExpbmUgKyAxOwogICAgICAgIH0KCiAgICAgICAgdmFsX09WMF9QMV9B Q1RJVkVfTElORVNfTTEgPSBTb3VyY2VMaW5lc1VzZWQgLSAxOwogICAgICAgIHZhbF9PVjBfUDFf QkxOS19MTl9BVF9UT1BfTTEgPSAoKGludCl0ZW1wQkxBTktfTElORVNfQVRfVE9QLTEpICYgMHhm ZmY7CgogICAgICAgIFRvcFVWTGluZSA9ICgoaW50KShjb25maWctPnNyYy55L1ZlcnRVVlN1YlNh bXBsZSkgPCAwKSA/IDA6IChpbnQpKGNvbmZpZy0+c3JjLnkvVmVydFVWU3ViU2FtcGxlKTsKICAg ICAgICBCb3R0b21VVkxpbmUgPSAoY2VpbCgoKGNvbmZpZy0+c3JjLnkrY29uZmlnLT5zcmMuaCkv VmVydFVWU3ViU2FtcGxlKSkgPiAoY29uZmlnLT5zcmMuaC9WZXJ0VVZTdWJTYW1wbGUpKQogICAg ICAgID8gKGNvbmZpZy0+c3JjLmgvVmVydFVWU3ViU2FtcGxlKS0xIDogKGludCljZWlsKCgoY29u ZmlnLT5zcmMueStjb25maWctPnNyYy5oKS9WZXJ0VVZTdWJTYW1wbGUpKS0xOwoKICAgICAgICBp ZiAoQm90dG9tVVZMaW5lID49IFRvcFVWTGluZSkKICAgICAgICB7CiAgICAgICAgICAgIFNvdXJj ZVVWTGluZXNVc2VkID0gQm90dG9tVVZMaW5lIC0gVG9wVVZMaW5lICsgMTsKICAgICAgICB9CiAg ICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICAgIFNvdXJjZVVWTGluZXNVc2VkID0gMTsK ICAgICAgICB9CiAgICAgICAgdmFsX09WMF9QMjNfQUNUSVZFX0xJTkVTX00xID0gU291cmNlVVZM aW5lc1VzZWQgLSAxOwogICAgICAgIHZhbF9PVjBfUDIzX0JMTktfTE5fQVRfVE9QX00xID0gKChp bnQpKHRlbXBCTEFOS19MSU5FU19BVF9UT1AvVmVydFVWU3ViU2FtcGxlKS0xKSAmIDB4N2ZmOwog ICAgICAgIGJlc3IucDFfYmxhbmtfbGluZXNfYXRfdG9wID0gKHZhbF9PVjBfUDFfQkxOS19MTl9B VF9UT1BfTTEgJiAweGZmZikgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KCh2YWxfT1YwX1AxX0FDVElWRV9MSU5FU19NMSAmIDB4ZmZmKSA8PCAxNik7CiAgICAgICAgYmVz ci5wMjNfYmxhbmtfbGluZXNfYXRfdG9wID0gKHZhbF9PVjBfUDIzX0JMTktfTE5fQVRfVE9QX00x ICYgMHg3ZmYpIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodmFsX09W MF9QMjNfQUNUSVZFX0xJTkVTX00xICYgMHg3ZmYpIDw8IDE2KTsKfQoKCnN0YXRpYyB2b2lkIENv bXB1dGVYU3RhcnRFbmQoCiAgICAgICAgICAgIGludCBpc180MDAsCiAgICAgICAgICAgIHVpbnQz Ml90IExlZnRQaXhlbCx1aW50MzJfdCBMZWZ0VVZQaXhlbCwKICAgICAgICAgICAgdWludDMyX3Qg TWVtV29yZHNJbkJ5dGVzLHVpbnQzMl90IEJ5dGVzUGVyUGl4ZWwsCiAgICAgICAgICAgIHVpbnQz Ml90IFNvdXJjZVdpZHRoSW5QaXhlbHMsIHVpbnQzMl90IFAxU3RlcFNpemUsCiAgICAgICAgICAg IHVpbnQzMl90IEJ5dGVzUGVyVVZQaXhlbCx1aW50MzJfdCBTb3VyY2VVVldpZHRoSW5QaXhlbHMs CiAgICAgICAgICAgIHVpbnQzMl90IFAyM1N0ZXBTaXplLCB1aW50MzJfdCAqcDFfeF9zdGFydCwg dWludDMyX3QgKnAyX3hfc3RhcnQgKQp7CiAgICB1aW50MzJfdCB2YWxfT1YwX1AxX1hfU1RBUlQs dmFsX09WMF9QMl9YX1NUQVJULHZhbF9PVjBfUDNfWF9TVEFSVDsKICAgIHVpbnQzMl90IHZhbF9P VjBfUDFfWF9FTkQsdmFsX09WMF9QMl9YX0VORCx2YWxfT1YwX1AzX1hfRU5EOwoKCiAgICB2YWxf T1YwX1AxX1hfU1RBUlQgPSAoaW50KUxlZnRQaXhlbCAlIChNZW1Xb3Jkc0luQnl0ZXMvQnl0ZXNQ ZXJQaXhlbCk7CiAgICB2YWxfT1YwX1AxX1hfRU5EID0gKGludCkoKHZhbF9PVjBfUDFfWF9TVEFS VCArIFNvdXJjZVdpZHRoSW5QaXhlbHMgLSAxKSAvIFAxU3RlcFNpemUpICogUDFTdGVwU2l6ZTsK CiAgICB2YWxfT1YwX1AyX1hfU1RBUlQgPSB2YWxfT1YwX1AyX1hfRU5EID0gMDsKICAgIHN3aXRj aCAoYmVzci5zdXJmX2lkKQogICAgewogICAgICAgIGNhc2UgOToKICAgICAgICBjYXNlIDEwOgog ICAgICAgIGNhc2UgMTM6CiAgICAgICAgY2FzZSAxNDoKCiAgICAgICAgICAgICAgICAgICAgdmFs X09WMF9QMl9YX1NUQVJUID0gKGludClMZWZ0VVZQaXhlbCAlCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKE1lbVdvcmRzSW5CeXRlcy9CeXRlc1BlclVWUGl4ZWwp OwogICAgICAgICAgICAgICAgICAgIHZhbF9PVjBfUDJfWF9FTkQgPSAoaW50KSgodmFsX09WMF9Q Ml9YX1NUQVJUICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlVVZXaWR0aElu UGl4ZWxzIC0gMSkgLyBQMjNTdGVwU2l6ZSkgKiBQMjNTdGVwU2l6ZTsKICAgICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICBjYXNlIDExOgogICAgICAgIGNhc2UgMTI6IHZhbF9PVjBfUDJf WF9TVEFSVCA9IChpbnQpTGVmdFVWUGl4ZWwgJSAoTWVtV29yZHNJbkJ5dGVzLyhCeXRlc1BlclBp eGVsKjIpKTsKICAgICAgICAgICAgICAgICAgICB2YWxfT1YwX1AyX1hfRU5EID0gKGludCkoKHZh bF9PVjBfUDJfWF9TVEFSVCArIFNvdXJjZVVWV2lkdGhJblBpeGVscyAtIDEpIC8gUDIzU3RlcFNp emUpICogUDIzU3RlcFNpemU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2Fz ZSAzOgogICAgICAgIGNhc2UgNDogdmFsX09WMF9QMl9YX1NUQVJUID0gdmFsX09WMF9QMV9YX1NU QVJUOwoKCgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNjogdmFsX09W MF9QMl9YX1NUQVJUID0gKGludClMZWZ0UGl4ZWwgJSAoTWVtV29yZHNJbkJ5dGVzL0J5dGVzUGVy UGl4ZWwpOwogICAgICAgICAgICAgICAgICAgIHZhbF9PVjBfUDJfWF9FTkQgPSAoaW50KSgodmFs X09WMF9QMV9YX1NUQVJUICsgU291cmNlV2lkdGhJblBpeGVscyAtIDEpIC8gUDIzU3RlcFNpemUp ICogUDIzU3RlcFNpemU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVs dDoKICAgICAgICAgICAgICAgICAgICBwcmludGYoInJhZ2UxMjhfdmlkOiIiIyMjIyMjIyMjIyMj IyMjIyMgRkFUQUw6IiJ1bmtub3duIGZvdXJjY1xuIik7OwogICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgfQogICAgdmFsX09WMF9QM19YX1NUQVJUID0gdmFsX09WMF9QMl9YX1NUQVJUOwog ICAgdmFsX09WMF9QM19YX0VORCA9IHZhbF9PVjBfUDJfWF9FTkQ7CgogICAgYmVzci5wMV94X3N0 YXJ0X2VuZCA9ICh2YWxfT1YwX1AxX1hfRU5EJjB4N2ZmKSB8ICgodmFsX09WMF9QMV9YX1NUQVJU JjB4N2ZmKTw8MTYpOwogICAgYmVzci5wMl94X3N0YXJ0X2VuZCA9ICh2YWxfT1YwX1AyX1hfRU5E JjB4N2ZmKSB8ICgodmFsX09WMF9QMl9YX1NUQVJUJjB4N2ZmKTw8MTYpOwogICAgYmVzci5wM194 X3N0YXJ0X2VuZCA9ICh2YWxfT1YwX1AzX1hfRU5EJjB4N2ZmKSB8ICgodmFsX09WMF9QM19YX1NU QVJUJjB4N2ZmKTw8MTYpOwogICAgaWYoaXNfNDAwKQogICAgewogICAgICAgIGJlc3IucDJfeF9z dGFydF9lbmQgPSAwOwogICAgICAgIGJlc3IucDNfeF9zdGFydF9lbmQgPSAwOwogICAgfQogICAg KnAxX3hfc3RhcnQgPSB2YWxfT1YwX1AxX1hfU1RBUlQ7CiAgICAqcDJfeF9zdGFydCA9IHZhbF9P VjBfUDJfWF9TVEFSVDsKfQoKc3RhdGljIHZvaWQgQ29tcHV0ZUFjY3VtSW5pdCgKICAgICAgICAg ICAgdWludDMyX3QgdmFsX09WMF9QMV9YX1NUQVJULHVpbnQzMl90IHZhbF9PVjBfUDJfWF9TVEFS VCwKICAgICAgICAgICAgdWludDMyX3QgdmFsX09WMF9QMV9IX0lOQyx1aW50MzJfdCB2YWxfT1Yw X1AyM19IX0lOQywKICAgICAgICAgICAgdWludDMyX3QgdmFsX09WMF9QMV9IX1NURVBfQlksdWlu dDMyX3QgdmFsX09WMF9QMjNfSF9TVEVQX0JZLAogICAgICAgICAgICB1aW50MzJfdCBDUlRfVl9J TkMsCiAgICAgICAgICAgIHVpbnQzMl90IFAxR3JvdXBTaXplLCB1aW50MzJfdCBQMjNHcm91cFNp emUsCiAgICAgICAgICAgIHVpbnQzMl90IHZhbF9PVjBfUDFfTUFYX0xOX0lOX1BFUl9MTl9PVVQs CiAgICAgICAgICAgIHVpbnQzMl90IHZhbF9PVjBfUDIzX01BWF9MTl9JTl9QRVJfTE5fT1VUKQp7 CiAgICB1aW50MzJfdCB2YWxfT1YwX1AxX0hfQUNDVU1fSU5JVCx2YWxfT1YwX1BSRVNISUZUX1Ax X1RPOwogICAgdWludDMyX3QgdmFsX09WMF9QMjNfSF9BQ0NVTV9JTklULHZhbF9PVjBfUFJFU0hJ RlRfUDIzX1RPOwogICAgdWludDMyX3QgdmFsX09WMF9QMV9WX0FDQ1VNX0lOSVQsdmFsX09WMF9Q MjNfVl9BQ0NVTV9JTklUOwojIDIyMDUgInJhZ2UxMjhfdmlkLmMiCiAgICAgICAgewogICAgICAg ICAgICBkb3VibGUgRXh0cmFIYWxmUGl4ZWw7CiAgICAgICAgICAgIGRvdWJsZSB0ZW1wQWRkaXRp b25hbFNoaWZ0OwogICAgICAgICAgICBkb3VibGUgdGVtcFAxSFN0YXJ0UG9pbnQ7CiAgICAgICAg ICAgIGRvdWJsZSB0ZW1wUDIzSFN0YXJ0UG9pbnQ7CiAgICAgICAgICAgIGRvdWJsZSB0ZW1wUDFJ bml0OwogICAgICAgICAgICBkb3VibGUgdGVtcFAyM0luaXQ7CgogICAgICAgICAgICBpZiAoYmVz ci5ob3J6X3BpY2tfbmVhcmVzdCkgRXh0cmFIYWxmUGl4ZWwgPSAwLjU7CiAgICAgICAgICAgIGVs c2UgRXh0cmFIYWxmUGl4ZWwgPSAwLjA7CiAgICAgICAgICAgIHRlbXBBZGRpdGlvbmFsU2hpZnQg PSB2YWxfT1YwX1AxX1hfU1RBUlQgJSBQMUdyb3VwU2l6ZSArIEV4dHJhSGFsZlBpeGVsOwogICAg ICAgICAgICB0ZW1wUDFIU3RhcnRQb2ludCA9IHRlbXBBZGRpdGlvbmFsU2hpZnQgKyAyLjUgKyAo KGZsb2F0KXZhbF9PVjBfUDFfSF9JTkMgLyAoMTw8MHhkKSk7CiAgICAgICAgICAgIHRlbXBQMUlu aXQgPSAoZG91YmxlKSgoaW50KSh0ZW1wUDFIU3RhcnRQb2ludCAqICgxPDwweDUpICsgMC41KSkg LyAoMTw8MHg1KTsKIyAyMjI3ICJyYWdlMTI4X3ZpZC5jIgogICAgICAgICAgICB0ZW1wQWRkaXRp b25hbFNoaWZ0ID0gdmFsX09WMF9QMl9YX1NUQVJUICUgUDIzR3JvdXBTaXplICsgRXh0cmFIYWxm UGl4ZWw7CiAgICAgICAgICAgIHRlbXBQMjNIU3RhcnRQb2ludCA9IHRlbXBBZGRpdGlvbmFsU2hp ZnQgKyAyLjUgKyAoKGZsb2F0KXZhbF9PVjBfUDIzX0hfSU5DIC8gKDE8PDB4ZCkpOwogICAgICAg ICAgICB0ZW1wUDIzSW5pdCA9IChkb3VibGUpKChpbnQpKHRlbXBQMjNIU3RhcnRQb2ludCAqICgx PDwweDUpICsgMC41KSkgLyAoMSA8PCAweDUpOwogICAgICAgICAgICB2YWxfT1YwX1AxX0hfQUND VU1fSU5JVCA9IChpbnQpKCh0ZW1wUDFJbml0IC0gKGludCl0ZW1wUDFJbml0KSAqICgxPDwweDUp KTsKICAgICAgICAgICAgdmFsX09WMF9QUkVTSElGVF9QMV9UTyA9IChpbnQpdGVtcFAxSW5pdDsK ICAgICAgICAgICAgdmFsX09WMF9QMjNfSF9BQ0NVTV9JTklUID0gKGludCkoKHRlbXBQMjNJbml0 IC0gKGludCl0ZW1wUDIzSW5pdCkgKiAoMTw8MHg1KSk7CiAgICAgICAgICAgIHZhbF9PVjBfUFJF U0hJRlRfUDIzX1RPID0gKGludCl0ZW1wUDIzSW5pdDsKICAgICAgICB9CgoKCgoKICAgICAgICB7 CiAgICAgICAgICAgIGRvdWJsZSBFeHRyYUhhbGZMaW5lOwogICAgICAgICAgICBkb3VibGUgRXh0 cmFGdWxsTGluZTsKICAgICAgICAgICAgZG91YmxlIHRlbXBQMVZTdGFydFBvaW50OwogICAgICAg ICAgICBkb3VibGUgdGVtcFAyM1ZTdGFydFBvaW50OwoKICAgICAgICAgICAgaWYgKGJlc3IudmVy dF9waWNrX25lYXJlc3QpIEV4dHJhSGFsZkxpbmUgPSAwLjU7CiAgICAgICAgICAgIGVsc2UgRXh0 cmFIYWxmTGluZSA9IDAuMDsKCiAgICAgICAgICAgIGlmICh2YWxfT1YwX1AxX0hfU1RFUF9CWT09 MClFeHRyYUZ1bGxMaW5lID0gMS4wOwogICAgICAgICAgICBlbHNlIEV4dHJhRnVsbExpbmUgPSAw LjA7CgogICAgICAgICAgICB0ZW1wUDFWU3RhcnRQb2ludCA9IDEuNSArIEV4dHJhRnVsbExpbmUg KyBFeHRyYUhhbGZMaW5lICsgKChmbG9hdClDUlRfVl9JTkMgLyAoMTw8MHhkKSk7CiAgICAgICAg ICAgIGlmICh0ZW1wUDFWU3RhcnRQb2ludD4yLjUgKyAyKkV4dHJhRnVsbExpbmUpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIHRlbXBQMVZTdGFydFBvaW50ID0gMi41ICsgMipFeHRyYUZ1 bGxMaW5lOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhbF9PVjBfUDFfVl9BQ0NVTV9JTklU ID0gKGludCkodGVtcFAxVlN0YXJ0UG9pbnQgKiAoMTw8MHg1KSArIDAuNSk7CgogICAgICAgICAg ICBpZiAodmFsX09WMF9QMjNfSF9TVEVQX0JZPT0wKUV4dHJhRnVsbExpbmUgPSAxLjA7CiAgICAg ICAgICAgIGVsc2UgRXh0cmFGdWxsTGluZSA9IDAuMDsKCiAgICAgICAgICAgIHN3aXRjaCAoYmVz ci5zdXJmX2lkKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjYXNlIDEwOgogICAgICAg ICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgICAgIGNhc2UgMTQ6IHRlbXBQMjNWU3RhcnRQ b2ludCA9IDEuNSArIEV4dHJhRnVsbExpbmUgKyBFeHRyYUhhbGZMaW5lICsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChmbG9hdClDUlRfVl9JTkMgLyAo MTw8MHhlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgIGNhc2UgOTogdGVtcFAyM1ZTdGFydFBvaW50ID0gMS41ICsgRXh0cmFGdWxsTGluZSArIEV4 dHJhSGFsZkxpbmUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKGZsb2F0KUNSVF9WX0lOQyAvICgxPDwweGYpKTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgY2Fz ZSA0OgogICAgICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgY2FzZSAxMToKICAg ICAgICAgICAgICAgIGNhc2UgMTI6IHRlbXBQMjNWU3RhcnRQb2ludCA9IDA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRlbXBQMjNW U3RhcnRQb2ludCA9IDB4RkZGRjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAodGVtcFAyM1ZTdGFydFBvaW50PjIuNSArIDIq RXh0cmFGdWxsTGluZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGVtcFAyM1ZTdGFy dFBvaW50ID0gMi41ICsgMipFeHRyYUZ1bGxMaW5lOwogICAgICAgICAgICB9CgogICAgICAgICAg ICB2YWxfT1YwX1AyM19WX0FDQ1VNX0lOSVQgPSAoaW50KSh0ZW1wUDIzVlN0YXJ0UG9pbnQgKiAo MTw8MHg1KSArIDAuNSk7CiAgICAgICAgfQogICAgYmVzci5wMV9oX2FjY3VtX2luaXQgPSAoKHZh bF9PVjBfUDFfSF9BQ0NVTV9JTklUJjB4MWYpPDwxNSkgfCgodmFsX09WMF9QUkVTSElGVF9QMV9U TyYweGYpPDwyOCk7CiAgICBiZXNyLnAxX3ZfYWNjdW1faW5pdCA9ICh2YWxfT1YwX1AxX01BWF9M Tl9JTl9QRVJfTE5fT1VUJjB4MykgfCgodmFsX09WMF9QMV9WX0FDQ1VNX0lOSVQmMHg3ZmYpPDwx NSk7CiAgICBiZXNyLnAyM19oX2FjY3VtX2luaXQ9ICgodmFsX09WMF9QMjNfSF9BQ0NVTV9JTklU JjB4MWYpPDwxNSkgfCgodmFsX09WMF9QUkVTSElGVF9QMjNfVE8mMHhmKTw8MjgpOwogICAgYmVz ci5wMjNfdl9hY2N1bV9pbml0PSAodmFsX09WMF9QMjNfTUFYX0xOX0lOX1BFUl9MTl9PVVQmMHgz KXwoKHZhbF9PVjBfUDIzX1ZfQUNDVU1fSU5JVCYweDNmZik8PDE1KTsKfQoKdHlwZWRlZiBzdHJ1 Y3QgUmFuZ2VBbmRDb2VmU2V0IHsKICAgIGRvdWJsZSBSYW5nZTsKICAgIHNpZ25lZCBjaGFyIENv ZWZTZXRbNV1bNF07Cn0gUkFOR0VBTkRDT0VGU0VUOwoKCnN0YXRpYyB2b2lkIEZpbHRlclNldHVw ICggdWludDMyX3QgdmFsX09WMF9QMV9IX0lOQyApCnsKICAgIHN0YXRpYyBSQU5HRUFORENPRUZT RVQgQXJyYXlPZlNldHNbXSA9IHsKICAgICAgICB7MC4yNSwge3sgNywgMTYsIDksIDB9LCB7IDcs IDE2LCA5LCAwfSwgeyA1LCAxNSwgMTEsIDF9LCB7IDQsIDE1LCAxMiwgMX0sIHsgMywgMTMsIDEz LCAzfSwgfX0sCiAgICAgICAgezAuMjYsIHt7IDcsIDE2LCA5LCAwfSwgeyA3LCAxNiwgOSwgMH0s IHsgNSwgMTUsIDExLCAxfSwgeyA0LCAxNSwgMTIsIDF9LCB7IDMsIDEzLCAxMywgM30sIH19LAog ICAgICAgIHswLjI3LCB7eyA3LCAxNiwgOSwgMH0sIHsgNywgMTYsIDksIDB9LCB7IDUsIDE1LCAx MSwgMX0sIHsgNCwgMTUsIDEyLCAxfSwgeyAzLCAxMywgMTMsIDN9LCB9fSwKICAgICAgICB7MC4y OCwge3sgNywgMTYsIDksIDB9LCB7IDcsIDE2LCA5LCAwfSwgeyA1LCAxNSwgMTEsIDF9LCB7IDQs IDE1LCAxMiwgMX0sIHsgMywgMTMsIDEzLCAzfSwgfX0sCiAgICAgICAgezAuMjksIHt7IDcsIDE2 LCA5LCAwfSwgeyA3LCAxNiwgOSwgMH0sIHsgNSwgMTUsIDExLCAxfSwgeyA0LCAxNSwgMTIsIDF9 LCB7IDMsIDEzLCAxMywgM30sIH19LAogICAgICAgIHswLjMwLCB7eyA3LCAxNiwgOSwgMH0sIHsg NywgMTYsIDksIDB9LCB7IDUsIDE1LCAxMSwgMX0sIHsgNCwgMTUsIDEyLCAxfSwgeyAzLCAxMywg MTMsIDN9LCB9fSwKICAgICAgICB7MC4zMSwge3sgNywgMTYsIDksIDB9LCB7IDcsIDE2LCA5LCAw fSwgeyA1LCAxNSwgMTEsIDF9LCB7IDQsIDE1LCAxMiwgMX0sIHsgMywgMTMsIDEzLCAzfSwgfX0s CiAgICAgICAgezAuMzIsIHt7IDcsIDE2LCA5LCAwfSwgeyA3LCAxNiwgOSwgMH0sIHsgNSwgMTUs IDExLCAxfSwgeyA0LCAxNSwgMTIsIDF9LCB7IDMsIDEzLCAxMywgM30sIH19LAogICAgICAgIHsw LjMzLCB7eyA3LCAxNiwgOSwgMH0sIHsgNywgMTYsIDksIDB9LCB7IDUsIDE1LCAxMSwgMX0sIHsg NCwgMTUsIDEyLCAxfSwgeyAzLCAxMywgMTMsIDN9LCB9fSwKICAgICAgICB7MC4zNCwge3sgNywg MTYsIDksIDB9LCB7IDcsIDE2LCA5LCAwfSwgeyA1LCAxNSwgMTEsIDF9LCB7IDQsIDE1LCAxMiwg MX0sIHsgMywgMTMsIDEzLCAzfSwgfX0sCiAgICAgICAgezAuMzUsIHt7IDcsIDE2LCA5LCAwfSwg eyA3LCAxNiwgOSwgMH0sIHsgNSwgMTUsIDExLCAxfSwgeyA0LCAxNSwgMTIsIDF9LCB7IDMsIDEz LCAxMywgM30sIH19LAogICAgICAgIHswLjM2LCB7eyA3LCAxNiwgOSwgMH0sIHsgNywgMTYsIDks IDB9LCB7IDUsIDE1LCAxMSwgMX0sIHsgNCwgMTUsIDEyLCAxfSwgeyAzLCAxMywgMTMsIDN9LCB9 fSwKICAgICAgICB7MC4zNywge3sgNywgMTYsIDksIDB9LCB7IDcsIDE2LCA5LCAwfSwgeyA1LCAx NSwgMTEsIDF9LCB7IDQsIDE1LCAxMiwgMX0sIHsgMywgMTMsIDEzLCAzfSwgfX0sCiAgICAgICAg ezAuMzgsIHt7IDcsIDE2LCA5LCAwfSwgeyA3LCAxNiwgOSwgMH0sIHsgNSwgMTUsIDExLCAxfSwg eyA0LCAxNSwgMTIsIDF9LCB7IDMsIDEzLCAxMywgM30sIH19LAogICAgICAgIHswLjM5LCB7eyA3 LCAxNiwgOSwgMH0sIHsgNywgMTYsIDksIDB9LCB7IDUsIDE1LCAxMSwgMX0sIHsgNCwgMTUsIDEy LCAxfSwgeyAzLCAxMywgMTMsIDN9LCB9fSwKICAgICAgICB7MC40MCwge3sgNywgMTYsIDksIDB9 LCB7IDcsIDE2LCA5LCAwfSwgeyA1LCAxNSwgMTEsIDF9LCB7IDQsIDE1LCAxMiwgMX0sIHsgMywg MTMsIDEzLCAzfSwgfX0sCiAgICAgICAgezAuNDEsIHt7IDcsIDE2LCA5LCAwfSwgeyA3LCAxNiwg OSwgMH0sIHsgNSwgMTUsIDExLCAxfSwgeyA0LCAxNSwgMTIsIDF9LCB7IDMsIDEzLCAxMywgM30s IH19LAogICAgICAgIHswLjQyLCB7eyA3LCAxNiwgOSwgMH0sIHsgNywgMTYsIDksIDB9LCB7IDUs IDE1LCAxMSwgMX0sIHsgNCwgMTUsIDEyLCAxfSwgeyAzLCAxMywgMTMsIDN9LCB9fSwKICAgICAg ICB7MC40Mywge3sgNywgMTYsIDksIDB9LCB7IDcsIDE2LCA5LCAwfSwgeyA1LCAxNSwgMTEsIDF9 LCB7IDQsIDE1LCAxMiwgMX0sIHsgMywgMTMsIDEzLCAzfSwgfX0sCiAgICAgICAgezAuNDQsIHt7 IDcsIDE2LCA5LCAwfSwgeyA3LCAxNiwgOSwgMH0sIHsgNSwgMTUsIDExLCAxfSwgeyA0LCAxNSwg MTIsIDF9LCB7IDMsIDEzLCAxMywgM30sIH19LAogICAgICAgIHswLjQ1LCB7eyA3LCAxNiwgOSwg MH0sIHsgNywgMTYsIDksIDB9LCB7IDUsIDE1LCAxMSwgMX0sIHsgNCwgMTUsIDEyLCAxfSwgeyAz LCAxMywgMTMsIDN9LCB9fSwKICAgICAgICB7MC40Niwge3sgNywgMTYsIDksIDB9LCB7IDcsIDE2 LCA5LCAwfSwgeyA1LCAxNSwgMTEsIDF9LCB7IDQsIDE1LCAxMiwgMX0sIHsgMywgMTMsIDEzLCAz fSwgfX0sCiAgICAgICAgezAuNDcsIHt7IDcsIDE2LCA5LCAwfSwgeyA3LCAxNiwgOSwgMH0sIHsg NSwgMTUsIDExLCAxfSwgeyA0LCAxNSwgMTIsIDF9LCB7IDMsIDEzLCAxMywgM30sIH19LAogICAg ICAgIHswLjQ4LCB7eyA3LCAxNiwgOSwgMH0sIHsgNywgMTYsIDksIDB9LCB7IDUsIDE1LCAxMSwg MX0sIHsgNCwgMTUsIDEyLCAxfSwgeyAzLCAxMywgMTMsIDN9LCB9fSwKICAgICAgICB7MC40OSwg e3sgNywgMTYsIDksIDB9LCB7IDcsIDE2LCA5LCAwfSwgeyA1LCAxNSwgMTEsIDF9LCB7IDQsIDE1 LCAxMiwgMX0sIHsgMywgMTMsIDEzLCAzfSwgfX0sCiAgICAgICAgezAuNTAsIHt7IDcsIDE2LCA5 LCAwfSwgeyA3LCAxNiwgOSwgMH0sIHsgNSwgMTUsIDExLCAxfSwgeyA0LCAxNSwgMTIsIDF9LCB7 IDMsIDEzLCAxMywgM30sIH19LAogICAgICAgIHswLjUxLCB7eyA3LCAxNywgOCwgMH0sIHsgNiwg MTcsIDksIDB9LCB7IDUsIDE1LCAxMSwgMX0sIHsgNCwgMTUsIDEyLCAxfSwgeyAyLCAxNCwgMTQs IDJ9LCB9fSwKICAgICAgICB7MC41Miwge3sgNywgMTcsIDgsIDB9LCB7IDYsIDE3LCA5LCAwfSwg eyA1LCAxNiwgMTEsIDB9LCB7IDMsIDE1LCAxMywgMX0sIHsgMiwgMTQsIDE0LCAyfSwgfX0sCiAg ICAgICAgezAuNTMsIHt7IDcsIDE3LCA4LCAwfSwgeyA2LCAxNywgOSwgMH0sIHsgNSwgMTYsIDEx LCAwfSwgeyAzLCAxNSwgMTMsIDF9LCB7IDIsIDE0LCAxNCwgMn0sIH19LAogICAgICAgIHswLjU0 LCB7eyA3LCAxNywgOCwgMH0sIHsgNiwgMTcsIDksIDB9LCB7IDQsIDE3LCAxMSwgMH0sIHsgMywg MTUsIDEzLCAxfSwgeyAyLCAxNCwgMTQsIDJ9LCB9fSwKICAgICAgICB7MC41NSwge3sgNywgMTgs IDcsIDB9LCB7IDYsIDE3LCA5LCAwfSwgeyA0LCAxNywgMTEsIDB9LCB7IDMsIDE1LCAxMywgMX0s IHsgMSwgMTUsIDE1LCAxfSwgfX0sCiAgICAgICAgezAuNTYsIHt7IDcsIDE4LCA3LCAwfSwgeyA1 LCAxOCwgOSwgMH0sIHsgNCwgMTcsIDExLCAwfSwgeyAyLCAxNywgMTMsIDB9LCB7IDEsIDE1LCAx NSwgMX0sIH19LAogICAgICAgIHswLjU3LCB7eyA3LCAxOCwgNywgMH0sIHsgNSwgMTgsIDksIDB9 LCB7IDQsIDE3LCAxMSwgMH0sIHsgMiwgMTcsIDEzLCAwfSwgeyAxLCAxNSwgMTUsIDF9LCB9fSwK ICAgICAgICB7MC41OCwge3sgNywgMTgsIDcsIDB9LCB7IDUsIDE4LCA5LCAwfSwgeyA0LCAxNywg MTEsIDB9LCB7IDIsIDE3LCAxMywgMH0sIHsgMSwgMTUsIDE1LCAxfSwgfX0sCiAgICAgICAgezAu NTksIHt7IDcsIDE4LCA3LCAwfSwgeyA1LCAxOCwgOSwgMH0sIHsgNCwgMTcsIDExLCAwfSwgeyAy LCAxNywgMTMsIDB9LCB7IDEsIDE1LCAxNSwgMX0sIH19LAogICAgICAgIHswLjYwLCB7eyA3LCAx OCwgOCwgLTF9LCB7IDYsIDE3LCAxMCwgLTF9LCB7IDQsIDE3LCAxMSwgMH0sIHsgMiwgMTcsIDEz LCAwfSwgeyAxLCAxNSwgMTUsIDF9LCB9fSwKICAgICAgICB7MC42MSwge3sgNywgMTgsIDgsIC0x fSwgeyA2LCAxNywgMTAsIC0xfSwgeyA0LCAxNywgMTEsIDB9LCB7IDIsIDE3LCAxMywgMH0sIHsg MSwgMTUsIDE1LCAxfSwgfX0sCiAgICAgICAgezAuNjIsIHt7IDcsIDE4LCA4LCAtMX0sIHsgNiwg MTcsIDEwLCAtMX0sIHsgNCwgMTcsIDExLCAwfSwgeyAyLCAxNywgMTMsIDB9LCB7IDEsIDE1LCAx NSwgMX0sIH19LAogICAgICAgIHswLjYzLCB7eyA3LCAxOCwgOCwgLTF9LCB7IDYsIDE3LCAxMCwg LTF9LCB7IDQsIDE3LCAxMSwgMH0sIHsgMiwgMTcsIDEzLCAwfSwgeyAxLCAxNSwgMTUsIDF9LCB9 fSwKICAgICAgICB7MC42NCwge3sgNywgMTgsIDgsIC0xfSwgeyA2LCAxNywgMTAsIC0xfSwgeyA0 LCAxNywgMTIsIC0xfSwgeyAyLCAxNywgMTMsIDB9LCB7IDEsIDE1LCAxNSwgMX0sIH19LAogICAg ICAgIHswLjY1LCB7eyA3LCAxOCwgOCwgLTF9LCB7IDYsIDE3LCAxMCwgLTF9LCB7IDQsIDE3LCAx MiwgLTF9LCB7IDIsIDE3LCAxMywgMH0sIHsgMCwgMTYsIDE2LCAwfSwgfX0sCiAgICAgICAgezAu NjYsIHt7IDcsIDE4LCA4LCAtMX0sIHsgNiwgMTgsIDEwLCAtMn0sIHsgNCwgMTcsIDEyLCAtMX0s IHsgMiwgMTcsIDEzLCAwfSwgeyAwLCAxNiwgMTYsIDB9LCB9fSwKICAgICAgICB7MC42Nywge3sg NywgMjAsIDcsIC0yfSwgeyA1LCAxOSwgMTAsIC0yfSwgeyAzLCAxOCwgMTIsIC0xfSwgeyAyLCAx NywgMTMsIDB9LCB7IDAsIDE2LCAxNiwgMH0sIH19LAogICAgICAgIHswLjY4LCB7eyA3LCAyMCwg NywgLTJ9LCB7IDUsIDE5LCAxMCwgLTJ9LCB7IDMsIDE5LCAxMiwgLTJ9LCB7IDEsIDE4LCAxNCwg LTF9LCB7IDAsIDE2LCAxNiwgMH0sIH19LAogICAgICAgIHswLjY5LCB7eyA3LCAyMCwgNywgLTJ9 LCB7IDUsIDE5LCAxMCwgLTJ9LCB7IDMsIDE5LCAxMiwgLTJ9LCB7IDEsIDE4LCAxNCwgLTF9LCB7 IDAsIDE2LCAxNiwgMH0sIH19LAogICAgICAgIHswLjcwLCB7eyA3LCAyMCwgNywgLTJ9LCB7IDUs IDIwLCA5LCAtMn0sIHsgMywgMTksIDEyLCAtMn0sIHsgMSwgMTgsIDE0LCAtMX0sIHsgMCwgMTYs IDE2LCAwfSwgfX0sCiAgICAgICAgezAuNzEsIHt7IDcsIDIwLCA3LCAtMn0sIHsgNSwgMjAsIDks IC0yfSwgeyAzLCAxOSwgMTIsIC0yfSwgeyAxLCAxOCwgMTQsIC0xfSwgeyAwLCAxNiwgMTYsIDB9 LCB9fSwKICAgICAgICB7MC43Miwge3sgNywgMjAsIDcsIC0yfSwgeyA1LCAyMCwgOSwgLTJ9LCB7 IDIsIDIwLCAxMiwgLTJ9LCB7IDAsIDE5LCAxNSwgLTJ9LCB7LTEsIDE3LCAxNywgLTF9LCB9fSwK ICAgICAgICB7MC43Mywge3sgNywgMjAsIDcsIC0yfSwgeyA0LCAyMSwgOSwgLTJ9LCB7IDIsIDIw LCAxMiwgLTJ9LCB7IDAsIDE5LCAxNSwgLTJ9LCB7LTEsIDE3LCAxNywgLTF9LCB9fSwKICAgICAg ICB7MC43NCwge3sgNiwgMjIsIDYsIC0yfSwgeyA0LCAyMSwgOSwgLTJ9LCB7IDIsIDIwLCAxMiwg LTJ9LCB7IDAsIDE5LCAxNSwgLTJ9LCB7LTEsIDE3LCAxNywgLTF9LCB9fSwKICAgICAgICB7MC43 NSwge3sgNiwgMjIsIDYsIC0yfSwgeyA0LCAyMSwgOSwgLTJ9LCB7IDEsIDIxLCAxMiwgLTJ9LCB7 IDAsIDE5LCAxNSwgLTJ9LCB7LTEsIDE3LCAxNywgLTF9LCB9fSwKICAgICAgICB7MC43Niwge3sg NiwgMjIsIDYsIC0yfSwgeyA0LCAyMSwgOSwgLTJ9LCB7IDEsIDIxLCAxMiwgLTJ9LCB7IDAsIDE5 LCAxNSwgLTJ9LCB7LTEsIDE3LCAxNywgLTF9LCB9fSwKICAgICAgICB7MC43Nywge3sgNiwgMjIs IDYsIC0yfSwgeyAzLCAyMiwgOSwgLTJ9LCB7IDEsIDIyLCAxMiwgLTN9LCB7IDAsIDE5LCAxNSwg LTJ9LCB7LTIsIDE4LCAxOCwgLTJ9LCB9fSwKICAgICAgICB7MC43OCwge3sgNiwgMjEsIDYsIC0x fSwgeyAzLCAyMiwgOSwgLTJ9LCB7IDEsIDIyLCAxMiwgLTN9LCB7IDAsIDE5LCAxNSwgLTJ9LCB7 LTIsIDE4LCAxOCwgLTJ9LCB9fSwKICAgICAgICB7MC43OSwge3sgNSwgMjMsIDUsIC0xfSwgeyAz LCAyMiwgOSwgLTJ9LCB7IDAsIDIzLCAxMiwgLTN9LCB7LTEsIDIxLCAxNSwgLTN9LCB7LTIsIDE4 LCAxOCwgLTJ9LCB9fSwKICAgICAgICB7MC44MCwge3sgNSwgMjMsIDUsIC0xfSwgeyAzLCAyMywg OCwgLTJ9LCB7IDAsIDIzLCAxMiwgLTN9LCB7LTEsIDIxLCAxNSwgLTN9LCB7LTIsIDE4LCAxOCwg LTJ9LCB9fSwKICAgICAgICB7MC44MSwge3sgNSwgMjMsIDUsIC0xfSwgeyAyLCAyNCwgOCwgLTJ9 LCB7IDAsIDIzLCAxMiwgLTN9LCB7LTEsIDIxLCAxNSwgLTN9LCB7LTIsIDE4LCAxOCwgLTJ9LCB9 fSwKICAgICAgICB7MC44Miwge3sgNSwgMjMsIDUsIC0xfSwgeyAyLCAyNCwgOCwgLTJ9LCB7IDAs IDIzLCAxMiwgLTN9LCB7LTEsIDIxLCAxNSwgLTN9LCB7LTMsIDE5LCAxOSwgLTN9LCB9fSwKICAg ICAgICB7MC44Mywge3sgNSwgMjMsIDUsIC0xfSwgeyAyLCAyNCwgOCwgLTJ9LCB7IDAsIDIzLCAx MSwgLTJ9LCB7LTIsIDIyLCAxNSwgLTN9LCB7LTMsIDE5LCAxOSwgLTN9LCB9fSwKICAgICAgICB7 MC44NCwge3sgNCwgMjUsIDQsIC0xfSwgeyAxLCAyNSwgOCwgLTJ9LCB7IDAsIDIzLCAxMSwgLTJ9 LCB7LTIsIDIyLCAxNSwgLTN9LCB7LTMsIDE5LCAxOSwgLTN9LCB9fSwKICAgICAgICB7MC44NSwg e3sgNCwgMjUsIDQsIC0xfSwgeyAxLCAyNSwgOCwgLTJ9LCB7IDAsIDIzLCAxMSwgLTJ9LCB7LTIs IDIyLCAxNSwgLTN9LCB7LTMsIDE5LCAxOSwgLTN9LCB9fSwKICAgICAgICB7MC44Niwge3sgNCwg MjQsIDQsIDB9LCB7IDEsIDI1LCA3LCAtMX0sIHstMSwgMjQsIDExLCAtMn0sIHstMiwgMjIsIDE1 LCAtM30sIHstMywgMTksIDE5LCAtM30sIH19LAogICAgICAgIHswLjg3LCB7eyA0LCAyNCwgNCwg MH0sIHsgMSwgMjUsIDcsIC0xfSwgey0xLCAyNCwgMTEsIC0yfSwgey0yLCAyMiwgMTUsIC0zfSwg ey0zLCAxOSwgMTksIC0zfSwgfX0sCiAgICAgICAgezAuODgsIHt7IDMsIDI2LCAzLCAwfSwgeyAw LCAyNiwgNywgLTF9LCB7LTEsIDI0LCAxMSwgLTJ9LCB7LTMsIDIzLCAxNSwgLTN9LCB7LTMsIDE5 LCAxOSwgLTN9LCB9fSwKICAgICAgICB7MC44OSwge3sgMywgMjYsIDMsIDB9LCB7IDAsIDI2LCA3 LCAtMX0sIHstMSwgMjQsIDExLCAtMn0sIHstMywgMjMsIDE1LCAtM30sIHstMywgMTksIDE5LCAt M30sIH19LAogICAgICAgIHswLjkwLCB7eyAzLCAyNiwgMywgMH0sIHsgMCwgMjYsIDcsIC0xfSwg ey0yLCAyNSwgMTEsIC0yfSwgey0zLCAyMywgMTUsIC0zfSwgey0zLCAxOSwgMTksIC0zfSwgfX0s CiAgICAgICAgezAuOTEsIHt7IDMsIDI2LCAzLCAwfSwgeyAwLCAyNywgNiwgLTF9LCB7LTIsIDI1 LCAxMSwgLTJ9LCB7LTMsIDIzLCAxNSwgLTN9LCB7LTMsIDE5LCAxOSwgLTN9LCB9fSwKICAgICAg ICB7MC45Miwge3sgMiwgMjgsIDIsIDB9LCB7IDAsIDI3LCA2LCAtMX0sIHstMiwgMjUsIDExLCAt Mn0sIHstMywgMjMsIDE1LCAtM30sIHstMywgMTksIDE5LCAtM30sIH19LAogICAgICAgIHswLjkz LCB7eyAyLCAyOCwgMiwgMH0sIHsgMCwgMjYsIDYsIDB9LCB7LTIsIDI1LCAxMCwgLTF9LCB7LTMs IDIzLCAxNSwgLTN9LCB7LTMsIDE5LCAxOSwgLTN9LCB9fSwKICAgICAgICB7MC45NCwge3sgMiwg MjgsIDIsIDB9LCB7IDAsIDI2LCA2LCAwfSwgey0yLCAyNSwgMTAsIC0xfSwgey0zLCAyMywgMTUs IC0zfSwgey0zLCAxOSwgMTksIC0zfSwgfX0sCiAgICAgICAgezAuOTUsIHt7IDEsIDMwLCAxLCAw fSwgey0xLCAyOCwgNSwgMH0sIHstMywgMjYsIDEwLCAtMX0sIHstMywgMjMsIDE0LCAtMn0sIHst MywgMTksIDE5LCAtM30sIH19LAogICAgICAgIHswLjk2LCB7eyAxLCAzMCwgMSwgMH0sIHstMSwg MjgsIDUsIDB9LCB7LTMsIDI2LCAxMCwgLTF9LCB7LTMsIDIzLCAxNCwgLTJ9LCB7LTMsIDE5LCAx OSwgLTN9LCB9fSwKICAgICAgICB7MC45Nywge3sgMSwgMzAsIDEsIDB9LCB7LTEsIDI4LCA1LCAw fSwgey0zLCAyNiwgMTAsIC0xfSwgey0zLCAyMywgMTQsIC0yfSwgey0zLCAxOSwgMTksIC0zfSwg fX0sCiAgICAgICAgezAuOTgsIHt7IDEsIDMwLCAxLCAwfSwgey0yLCAyOSwgNSwgMH0sIHstMywg MjcsIDksIC0xfSwgey0zLCAyMywgMTQsIC0yfSwgey0zLCAxOSwgMTksIC0zfSwgfX0sCiAgICAg ICAgezAuOTksIHt7IDAsIDMyLCAwLCAwfSwgey0yLCAyOSwgNSwgMH0sIHstMywgMjcsIDksIC0x fSwgey00LCAyNCwgMTQsIC0yfSwgey0zLCAxOSwgMTksIC0zfSwgfX0sCiAgICAgICAgezEuMDAs IHt7IDAsIDMyLCAwLCAwfSwgey0yLCAyOSwgNSwgMH0sIHstMywgMjcsIDksIC0xfSwgey00LCAy NCwgMTQsIC0yfSwgey0zLCAxOSwgMTksIC0zfSwgfX0KICAgIH07CgogICAgZG91YmxlIERTUjsK CiAgICB1bnNpZ25lZCBBcnJheUVsZW1lbnQ7CgogICAgRFNSID0gKGRvdWJsZSkoMTw8MHhjKS92 YWxfT1YwX1AxX0hfSU5DOwogICAgaWYgKERTUjwuMjUpIERTUj0uMjU7CiAgICBpZiAoRFNSPjEp IERTUj0xOwoKICAgIEFycmF5RWxlbWVudCA9IChpbnQpKChEU1ItMC4yNSkgKiAxMDApOwogICAg YmVzci5mb3VyX3RhcF9jb2VmZlswXSA9IChBcnJheU9mU2V0c1tBcnJheUVsZW1lbnRdLkNvZWZT ZXRbMF1bMF0gJiAweGYpIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFycmF5 T2ZTZXRzW0FycmF5RWxlbWVudF0uQ29lZlNldFswXVsxXSAmIDB4N2YpPDw4KSB8CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKChBcnJheU9mU2V0c1tBcnJheUVsZW1lbnRdLkNvZWZT ZXRbMF1bMl0gJiAweDdmKTw8MTYpIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KEFycmF5T2ZTZXRzW0FycmF5RWxlbWVudF0uQ29lZlNldFswXVszXSAmIDB4Zik8PDI0KTsKICAg IGJlc3IuZm91cl90YXBfY29lZmZbMV0gPSAoQXJyYXlPZlNldHNbQXJyYXlFbGVtZW50XS5Db2Vm U2V0WzFdWzBdICYgMHhmKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBcnJh eU9mU2V0c1tBcnJheUVsZW1lbnRdLkNvZWZTZXRbMV1bMV0gJiAweDdmKTw8OCkgfAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgoQXJyYXlPZlNldHNbQXJyYXlFbGVtZW50XS5Db2Vm U2V0WzFdWzJdICYgMHg3Zik8PDE2KSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KChBcnJheU9mU2V0c1tBcnJheUVsZW1lbnRdLkNvZWZTZXRbMV1bM10gJiAweGYpPDwyNCk7CiAg ICBiZXNyLmZvdXJfdGFwX2NvZWZmWzJdID0gKEFycmF5T2ZTZXRzW0FycmF5RWxlbWVudF0uQ29l ZlNldFsyXVswXSAmIDB4ZikgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQXJy YXlPZlNldHNbQXJyYXlFbGVtZW50XS5Db2VmU2V0WzJdWzFdICYgMHg3Zik8PDgpIHwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFycmF5T2ZTZXRzW0FycmF5RWxlbWVudF0uQ29l ZlNldFsyXVsyXSAmIDB4N2YpPDwxNikgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgoQXJyYXlPZlNldHNbQXJyYXlFbGVtZW50XS5Db2VmU2V0WzJdWzNdICYgMHhmKTw8MjQpOwog ICAgYmVzci5mb3VyX3RhcF9jb2VmZlszXSA9IChBcnJheU9mU2V0c1tBcnJheUVsZW1lbnRdLkNv ZWZTZXRbM11bMF0gJiAweGYpIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFy cmF5T2ZTZXRzW0FycmF5RWxlbWVudF0uQ29lZlNldFszXVsxXSAmIDB4N2YpPDw4KSB8CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBcnJheU9mU2V0c1tBcnJheUVsZW1lbnRdLkNv ZWZTZXRbM11bMl0gJiAweDdmKTw8MTYpIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKEFycmF5T2ZTZXRzW0FycmF5RWxlbWVudF0uQ29lZlNldFszXVszXSAmIDB4Zik8PDI0KTsK ICAgIGJlc3IuZm91cl90YXBfY29lZmZbNF0gPSAoQXJyYXlPZlNldHNbQXJyYXlFbGVtZW50XS5D b2VmU2V0WzRdWzBdICYgMHhmKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChB cnJheU9mU2V0c1tBcnJheUVsZW1lbnRdLkNvZWZTZXRbNF1bMV0gJiAweDdmKTw8OCkgfAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQXJyYXlPZlNldHNbQXJyYXlFbGVtZW50XS5D b2VmU2V0WzRdWzJdICYgMHg3Zik8PDE2KSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKChBcnJheU9mU2V0c1tBcnJheUVsZW1lbnRdLkNvZWZTZXRbNF1bM10gJiAweGYpPDwyNCk7 CgoKCn0KCgoKCmNvbnN0IGRvdWJsZSBNaW5IU2NhbGVIYXJkPTAuNzU7CgpzdGF0aWMgaW50IHJh ZGVvbl92aWRfaW5pdF92aWRlbyggdmlkaXhfcGxheWJhY2tfdCAqY29uZmlnICkKewogICAgZG91 YmxlIFZfc2NhbGVfcmF0aW87CiAgICB1aW50MzJfdCBpLHNyY193LHNyY19oLGRlc3RfdyxkZXN0 X2gscGl0Y2gsbGVmdCxsZWZ0VVYsdG9wLGhfaW5jOwogICAgdWludDMyX3QgdmFsX09WMF9QMV9I X0lOQyx2YWxfT1YwX1AxX0hfU1RFUF9CWSx2YWxfT1YwX1AyM19IX0lOQyx2YWxfT1YwX1AyM19I X1NURVBfQlk7CiAgICB1aW50MzJfdCB2YWxfT1YwX1AxX1hfU1RBUlQsdmFsX09WMF9QMl9YX1NU QVJUOwogICAgdWludDMyX3QgdmFsX09WMF9QMV9NQVhfTE5fSU5fUEVSX0xOX09VVCx2YWxfT1Yw X1AyM19NQVhfTE5fSU5fUEVSX0xOX09VVDsKICAgIHVpbnQzMl90IENSVF9WX0lOQzsKICAgIHVp bnQzMl90IEJ5dGVzUGVyT2N0V29yZCxMb2dNZW1Xb3Jkc0luQnl0ZXMsTWVtV29yZHNJbkJ5dGVz LExvZ1RpbGVXaWR0aEluTWVtV29yZHM7CiAgICB1aW50MzJfdCBUaWxlV2lkdGhJbk1lbVdvcmRz LFRpbGVXaWR0aEluQnl0ZXMsTG9nVGlsZUhlaWdodCxUaWxlSGVpZ2h0OwogICAgdWludDMyX3Qg UGFnZVNpemVJbkJ5dGVzLE9WMExCX1Jvd3M7CiAgICB1aW50MzJfdCBTb3VyY2VXaWR0aEluTWVt V29yZHMsU291cmNlVVZXaWR0aEluTWVtV29yZHM7CiAgICB1aW50MzJfdCBTb3VyY2VXaWR0aElu UGl4ZWxzLFNvdXJjZVVWV2lkdGhJblBpeGVsczsKICAgIHVpbnQzMl90IFJpZ2h0UGl4ZWwsUmln aHRVVlBpeGVsLExlZnRQaXhlbCxMZWZ0VVZQaXhlbDsKICAgIGludCBpc180MDAsaXNfNDEwLGlz XzQyMCxiZXN0X3BpdGNoLG1waXRjaDsKICAgIGludCBob3J6X3JlcGxfZmFjdG9yLGludGVybGFj ZV9mYWN0b3I7CiAgICBpbnQgQnl0ZXNQZXJQaXhlbCxCeXRlc1BlclVWUGl4ZWwsSG9yelVWU3Vi U2FtcGxlLFZlcnRVVlN1YlNhbXBsZTsKICAgIGludCBEaXNhbGxvd0ZvdXJUYXBWZXJ0RmlsdGVy aW5nLERpc2FsbG93Rm91clRhcFVWVmVydEZpbHRlcmluZzsKCiAgICByYWRlb25fdmlkX3N0b3Bf dmlkZW8oKTsKICAgIGxlZnQgPSBjb25maWctPnNyYy54IDw8IDE2OwogICAgdG9wID0gY29uZmln LT5zcmMueSA8PCAxNjsKICAgIHNyY19oID0gY29uZmlnLT5zcmMuaDsKICAgIHNyY193ID0gY29u ZmlnLT5zcmMudzsKICAgIGlzXzQwMCA9IGlzXzQxMCA9IGlzXzQyMCA9IDA7CiAgICBpZihjb25m aWctPmZvdXJjYyA9PSAoKCh1bnNpZ25lZCkoJ1knKTw8MCl8KCh1bnNpZ25lZCkoJ1YnKTw8OCl8 KCh1bnNpZ25lZCkoJzEnKTw8MTYpfCgodW5zaWduZWQpKCcyJyk8PDI0KSkgfHwKICAgICAgIGNv bmZpZy0+Zm91cmNjID09ICgoKHVuc2lnbmVkKSgnSScpPDwwKXwoKHVuc2lnbmVkKSgnNCcpPDw4 KXwoKHVuc2lnbmVkKSgnMicpPDwxNil8KCh1bnNpZ25lZCkoJzAnKTw8MjQpKSB8fAogICAgICAg Y29uZmlnLT5mb3VyY2MgPT0gKCgodW5zaWduZWQpKCdJJyk8PDApfCgodW5zaWduZWQpKCdZJyk8 PDgpfCgodW5zaWduZWQpKCdVJyk8PDE2KXwoKHVuc2lnbmVkKSgnVicpPDwyNCkpKSBpc180MjAg PSAxOwogICAgaWYoY29uZmlnLT5mb3VyY2MgPT0gKCgodW5zaWduZWQpKCdZJyk8PDApfCgodW5z aWduZWQpKCdWJyk8PDgpfCgodW5zaWduZWQpKCdVJyk8PDE2KXwoKHVuc2lnbmVkKSgnOScpPDwy NCkpIHx8CiAgICAgICBjb25maWctPmZvdXJjYyA9PSAoKCh1bnNpZ25lZCkoJ0knKTw8MCl8KCh1 bnNpZ25lZCkoJ0YnKTw8OCl8KCh1bnNpZ25lZCkoJzAnKTw8MTYpfCgodW5zaWduZWQpKCc5Jyk8 PDI0KSkpIGlzXzQxMCA9IDE7CiAgICBpZihjb25maWctPmZvdXJjYyA9PSAoKCh1bnNpZ25lZCko J1knKTw8MCl8KCh1bnNpZ25lZCkoJzgnKTw8OCl8KCh1bnNpZ25lZCkoJzAnKTw8MTYpfCgodW5z aWduZWQpKCcwJyk8PDI0KSkpIGlzXzQwMCA9IDE7CiAgICBiZXN0X3BpdGNoID0gcmFkZW9uX3F1 ZXJ5X3BpdGNoKGNvbmZpZy0+Zm91cmNjLCZjb25maWctPnNyYy5waXRjaCk7CiAgICBtcGl0Y2gg PSBiZXN0X3BpdGNoLTE7CiAgICBCeXRlc1Blck9jdFdvcmQgPSAxNjsKICAgIExvZ01lbVdvcmRz SW5CeXRlcyA9IDQ7CiAgICBNZW1Xb3Jkc0luQnl0ZXMgPSAxPDxMb2dNZW1Xb3Jkc0luQnl0ZXM7 CiAgICBMb2dUaWxlV2lkdGhJbk1lbVdvcmRzID0gMjsKICAgIFRpbGVXaWR0aEluTWVtV29yZHMg PSAxPDxMb2dUaWxlV2lkdGhJbk1lbVdvcmRzOwogICAgVGlsZVdpZHRoSW5CeXRlcyA9IDE8PChM b2dUaWxlV2lkdGhJbk1lbVdvcmRzK0xvZ01lbVdvcmRzSW5CeXRlcyk7CiAgICBMb2dUaWxlSGVp Z2h0ID0gNDsKICAgIFRpbGVIZWlnaHQgPSAxPDxMb2dUaWxlSGVpZ2h0OwogICAgUGFnZVNpemVJ bkJ5dGVzID0gNjQqTWVtV29yZHNJbkJ5dGVzOwogICAgT1YwTEJfUm93cyA9IDk2OwogICAgaF9p bmMgPSAxOwogICAgc3dpdGNoKGNvbmZpZy0+Zm91cmNjKQogICAgewoKICAgICAgICBjYXNlICgo KHVuc2lnbmVkKSgnWScpPDwwKXwoKHVuc2lnbmVkKSgnOCcpPDw4KXwoKHVuc2lnbmVkKSgnMCcp PDwxNil8KCh1bnNpZ25lZCkoJzAnKTw8MjQpKToKCiAgICAgICAgY2FzZSAoKCh1bnNpZ25lZCko J1knKTw8MCl8KCh1bnNpZ25lZCkoJ1YnKTw8OCl8KCh1bnNpZ25lZCkoJ1UnKTw8MTYpfCgodW5z aWduZWQpKCc5Jyk8PDI0KSk6CiAgICAgICAgY2FzZSAoKCh1bnNpZ25lZCkoJ0knKTw8MCl8KCh1 bnNpZ25lZCkoJ0YnKTw8OCl8KCh1bnNpZ25lZCkoJzAnKTw8MTYpfCgodW5zaWduZWQpKCc5Jyk8 PDI0KSk6CgogICAgICAgIGNhc2UgKCgodW5zaWduZWQpKCdJJyk8PDApfCgodW5zaWduZWQpKCdZ Jyk8PDgpfCgodW5zaWduZWQpKCdVJyk8PDE2KXwoKHVuc2lnbmVkKSgnVicpPDwyNCkpOgogICAg ICAgIGNhc2UgKCgodW5zaWduZWQpKCdZJyk8PDApfCgodW5zaWduZWQpKCdWJyk8PDgpfCgodW5z aWduZWQpKCcxJyk8PDE2KXwoKHVuc2lnbmVkKSgnMicpPDwyNCkpOgogICAgICAgIGNhc2UgKCgo dW5zaWduZWQpKCdJJyk8PDApfCgodW5zaWduZWQpKCc0Jyk8PDgpfCgodW5zaWduZWQpKCcyJyk8 PDE2KXwoKHVuc2lnbmVkKSgnMCcpPDwyNCkpOiBwaXRjaCA9IChzcmNfdyArIG1waXRjaCkgJiB+ bXBpdGNoOwogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+ZGVzdC5waXRjaC55ID0K ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmRlc3QucGl0Y2gudSA9CiAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uZmlnLT5kZXN0LnBpdGNoLnYgPSBiZXN0X3BpdGNoOwogICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICgoKHVuc2lnbmVkKSgn UicpPDwwKXwoKHVuc2lnbmVkKSgnRycpPDw4KXwoKHVuc2lnbmVkKSgnQicpPDwxNil8KCh1bnNp Z25lZCkoMzIpPDwyNCkpOgogICAgICAgIGNhc2UgKCgodW5zaWduZWQpKCdCJyk8PDApfCgodW5z aWduZWQpKCdHJyk8PDgpfCgodW5zaWduZWQpKCdSJyk8PDE2KXwoKHVuc2lnbmVkKSgzMik8PDI0 KSk6IHBpdGNoID0gKHNyY193KjQgKyBtcGl0Y2gpICYgfm1waXRjaDsKICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25maWctPmRlc3QucGl0Y2gueSA9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uZmlnLT5kZXN0LnBpdGNoLnUgPQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZp Zy0+ZGVzdC5waXRjaC52ID0gYmVzdF9waXRjaDsKICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKCgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2gg PSAoKHNyY193KjIpICsgbXBpdGNoKSAmIH5tcGl0Y2g7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uZmlnLT5kZXN0LnBpdGNoLnkgPQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZp Zy0+ZGVzdC5waXRjaC51ID0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmRlc3Qu cGl0Y2gudiA9IGJlc3RfcGl0Y2g7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICB9CiAgICBiZXNyLmxvYWRfcHJnX3N0YXJ0PTA7CiAgICBiZXNyLnN3YXBfdXY9MDsKICAgIHN3 aXRjaChjb25maWctPmZvdXJjYykKICAgIHsKICAgICAgICBjYXNlICgoKHVuc2lnbmVkKSgnUicp PDwwKXwoKHVuc2lnbmVkKSgnRycpPDw4KXwoKHVuc2lnbmVkKSgnQicpPDwxNil8KCh1bnNpZ25l ZCkoMTUpPDwyNCkpOgogICAgICAgICAgICAgICAgICAgICAgICAgICBiZXNyLnN3YXBfdXY9MTsK ICAgICAgICBjYXNlICgoKHVuc2lnbmVkKSgnQicpPDwwKXwoKHVuc2lnbmVkKSgnRycpPDw4KXwo KHVuc2lnbmVkKSgnUicpPDwxNil8KCh1bnNpZ25lZCkoMTUpPDwyNCkpOiBiZXNyLnN1cmZfaWQg PSAweDAwMDAwMzAwTD4+ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzci5sb2FkX3By Z19zdGFydCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNh c2UgKCgodW5zaWduZWQpKCdSJyk8PDApfCgodW5zaWduZWQpKCdHJyk8PDgpfCgodW5zaWduZWQp KCdCJyk8PDE2KXwoKHVuc2lnbmVkKSgxNik8PDI0KSk6CiAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJlc3Iuc3dhcF91dj0xOwogICAgICAgIGNhc2UgKCgodW5zaWduZWQpKCdCJyk8PDApfCgo dW5zaWduZWQpKCdHJyk8PDgpfCgodW5zaWduZWQpKCdSJyk8PDE2KXwoKHVuc2lnbmVkKSgxNik8 PDI0KSk6IGJlc3Iuc3VyZl9pZCA9IDB4MDAwMDA0MDBMPj44OwogICAgICAgICAgICAgICAgICAg ICAgICAgICBiZXNyLmxvYWRfcHJnX3N0YXJ0ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgY2FzZSAoKCh1bnNpZ25lZCkoJ1InKTw8MCl8KCh1bnNpZ25lZCko J0cnKTw8OCl8KCh1bnNpZ25lZCkoJ0InKTw8MTYpfCgodW5zaWduZWQpKDMyKTw8MjQpKToKICAg ICAgICAgICAgICAgICAgICAgICAgICAgYmVzci5zd2FwX3V2PTE7CiAgICAgICAgY2FzZSAoKCh1 bnNpZ25lZCkoJ0InKTw8MCl8KCh1bnNpZ25lZCkoJ0cnKTw8OCl8KCh1bnNpZ25lZCkoJ1InKTw8 MTYpfCgodW5zaWduZWQpKDMyKTw8MjQpKTogYmVzci5zdXJmX2lkID0gMHgwMDAwMDYwMEw+Pjg7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3IubG9hZF9wcmdfc3RhcnQgPSAxOwogICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAoKCh1bnNpZ25lZCko J0knKTw8MCl8KCh1bnNpZ25lZCkoJ0YnKTw8OCl8KCh1bnNpZ25lZCkoJzAnKTw8MTYpfCgodW5z aWduZWQpKCc5Jyk8PDI0KSk6CiAgICAgICAgY2FzZSAoKCh1bnNpZ25lZCkoJ1knKTw8MCl8KCh1 bnNpZ25lZCkoJ1YnKTw8OCl8KCh1bnNpZ25lZCkoJ1UnKTw8MTYpfCgodW5zaWduZWQpKCc5Jyk8 PDI0KSk6IGJlc3Iuc3VyZl9pZCA9IDB4MDAwMDA5MDBMPj44OwogICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAoKCh1bnNpZ25lZCkoJ1knKTw8MCl8KCh1bnNp Z25lZCkoJzgnKTw8OCl8KCh1bnNpZ25lZCkoJzAnKTw8MTYpfCgodW5zaWduZWQpKCcwJyk8PDI0 KSk6CgogICAgICAgIGNhc2UgKCgodW5zaWduZWQpKCdJJyk8PDApfCgodW5zaWduZWQpKCdZJyk8 PDgpfCgodW5zaWduZWQpKCdVJyk8PDE2KXwoKHVuc2lnbmVkKSgnVicpPDwyNCkpOgogICAgICAg IGNhc2UgKCgodW5zaWduZWQpKCdJJyk8PDApfCgodW5zaWduZWQpKCc0Jyk8PDgpfCgodW5zaWdu ZWQpKCcyJyk8PDE2KXwoKHVuc2lnbmVkKSgnMCcpPDwyNCkpOgogICAgICAgIGNhc2UgKCgodW5z aWduZWQpKCdZJyk8PDApfCgodW5zaWduZWQpKCdWJyk8PDgpfCgodW5zaWduZWQpKCcxJyk8PDE2 KXwoKHVuc2lnbmVkKSgnMicpPDwyNCkpOiBiZXNyLnN1cmZfaWQgPSAweDAwMDAwQTAwTD4+ODsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgKCgodW5zaWdu ZWQpKCdZJyk8PDApfCgodW5zaWduZWQpKCdWJyk8PDgpfCgodW5zaWduZWQpKCdZJyk8PDE2KXwo KHVuc2lnbmVkKSgnVScpPDwyNCkpOgogICAgICAgIGNhc2UgKCgodW5zaWduZWQpKCdVJyk8PDAp fCgodW5zaWduZWQpKCdZJyk8PDgpfCgodW5zaWduZWQpKCdWJyk8PDE2KXwoKHVuc2lnbmVkKSgn WScpPDwyNCkpOiBiZXNyLnN1cmZfaWQgPSAweDAwMDAwQzAwTD4+ODsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAoKCh1bnNpZ25lZCkoJ1knKTw8MCl8KCh1 bnNpZ25lZCkoJ1UnKTw8OCl8KCh1bnNpZ25lZCkoJ1knKTw8MTYpfCgodW5zaWduZWQpKCcyJyk8 PDI0KSk6CiAgICAgICAgZGVmYXVsdDogYmVzci5zdXJmX2lkID0gMHgwMDAwMEIwMEw+Pjg7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgc3dpdGNoIChiZXNyLnN1 cmZfaWQpCiAgICB7CiAgICAgICAgY2FzZSAzOgogICAgICAgIGNhc2UgNDoKICAgICAgICBjYXNl IDExOgogICAgICAgIGNhc2UgMTI6IEJ5dGVzUGVyUGl4ZWwgPSAyOwogICAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgIGNhc2UgNjogQnl0ZXNQZXJQaXhlbCA9IDQ7CiAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA5OgogICAgICAgIGNhc2UgMTA6CiAgICAgICAg Y2FzZSAxMzoKICAgICAgICBjYXNlIDE0OiBCeXRlc1BlclBpeGVsID0gMTsKICAgICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OiBCeXRlc1BlclBpeGVsID0gMDsKICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHN3aXRjaCAoYmVzci5zdXJmX2lkKQogICAg ewogICAgICAgIGNhc2UgMzoKICAgICAgICBjYXNlIDQ6IEJ5dGVzUGVyVVZQaXhlbCA9IDA7CiAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxMToKICAgICAgICBjYXNlIDEy OiBCeXRlc1BlclVWUGl4ZWwgPSAyOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg IGNhc2UgNjogQnl0ZXNQZXJVVlBpeGVsID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICBjYXNlIDk6CiAgICAgICAgY2FzZSAxMDogQnl0ZXNQZXJVVlBpeGVsID0gMTsKICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDEzOgogICAgICAgIGNhc2UgMTQ6 IEJ5dGVzUGVyVVZQaXhlbCA9IDI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ZGVmYXVsdDogQnl0ZXNQZXJVVlBpeGVsID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhazsK CiAgICB9CiAgICBzd2l0Y2ggKGJlc3Iuc3VyZl9pZCkKICAgIHsKICAgICAgICBjYXNlIDM6CiAg ICAgICAgY2FzZSA0OgogICAgICAgIGNhc2UgNjogSG9yelVWU3ViU2FtcGxlID0gMTsKICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDk6IEhvcnpVVlN1YlNhbXBsZSA9IDQ7 CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxMDoKICAgICAgICBjYXNl IDExOgogICAgICAgIGNhc2UgMTI6CiAgICAgICAgY2FzZSAxMzoKICAgICAgICBjYXNlIDE0OiBI b3J6VVZTdWJTYW1wbGUgPSAyOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRl ZmF1bHQ6IEhvcnpVVlN1YlNhbXBsZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICB9CiAgICBzd2l0Y2ggKGJlc3Iuc3VyZl9pZCkKICAgIHsKICAgICAgICBjYXNlIDM6CiAgICAg ICAgY2FzZSA0OgogICAgICAgIGNhc2UgNjoKICAgICAgICBjYXNlIDExOgogICAgICAgIGNhc2Ug MTI6IFZlcnRVVlN1YlNhbXBsZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgY2FzZSA5OiBWZXJ0VVZTdWJTYW1wbGUgPSA0OwogICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgIGNhc2UgMTA6CiAgICAgICAgY2FzZSAxMzoKICAgICAgICBjYXNlIDE0OiBWZXJ0 VVZTdWJTYW1wbGUgPSAyOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1 bHQ6IFZlcnRVVlN1YlNhbXBsZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICB9 CiAgICBEaXNhbGxvd0ZvdXJUYXBWZXJ0RmlsdGVyaW5nID0gMDsKICAgIERpc2FsbG93Rm91clRh cFVWVmVydEZpbHRlcmluZyA9IDA7CiAgICBMZWZ0UGl4ZWwgPSBjb25maWctPnNyYy54OwogICAg UmlnaHRQaXhlbCA9IGNvbmZpZy0+c3JjLnctMTsKICAgIGlmKGZsb29yKGNvbmZpZy0+c3JjLngv SG9yelVWU3ViU2FtcGxlKTwwKSBMZWZ0VVZQaXhlbCA9IDA7CiAgICBlbHNlIExlZnRVVlBpeGVs ID0gKGludClmbG9vcihjb25maWctPnNyYy54L0hvcnpVVlN1YlNhbXBsZSk7CiAgICBpZihjZWls KChjb25maWctPnNyYy54K2NvbmZpZy0+c3JjLncpL0hvcnpVVlN1YlNhbXBsZSkgPiBjb25maWct PnNyYy53L0hvcnpVVlN1YlNhbXBsZSkKICAgICAgICAgICAgICAgIFJpZ2h0VVZQaXhlbCA9IGNv bmZpZy0+c3JjLncvSG9yelVWU3ViU2FtcGxlIC0gMTsKICAgIGVsc2UgUmlnaHRVVlBpeGVsID0g KGludCljZWlsKChjb25maWctPnNyYy54K2NvbmZpZy0+c3JjLncpL0hvcnpVVlN1YlNhbXBsZSkg LSAxOwoKCiAgICBTb3VyY2VXaWR0aEluUGl4ZWxzID0gKGludCkoY29uZmlnLT5zcmMudyArIDEp OwogICAgU291cmNlVVZXaWR0aEluUGl4ZWxzID0gKGludCkoUmlnaHRVVlBpeGVsIC0gTGVmdFVW UGl4ZWwgKyAxKTsKCiAgICBTb3VyY2VXaWR0aEluTWVtV29yZHMgPSAoaW50KShjZWlsKFJpZ2h0 UGl4ZWwqQnl0ZXNQZXJQaXhlbCAvIE1lbVdvcmRzSW5CeXRlcykgLQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmxvb3IoTGVmdFBpeGVsKkJ5dGVzUGVyUGl4ZWwgLyBNZW1Xb3Jkc0luQnl0 ZXMpICsgMSk7CgogICAgU291cmNlVVZXaWR0aEluTWVtV29yZHMgPSAoaW50KShjZWlsKFJpZ2h0 VVZQaXhlbCpCeXRlc1BlclVWUGl4ZWwgLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN ZW1Xb3Jkc0luQnl0ZXMpIC0gZmxvb3IoTGVmdFVWUGl4ZWwqQnl0ZXNQZXJVVlBpeGVsIC8KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtV29yZHNJbkJ5dGVzKSArIDEpOwoKICAgIHN3 aXRjaCAoYmVzci5zdXJmX2lkKQogICAgewogICAgICAgIGNhc2UgOToKICAgICAgICBjYXNlIDEw OiBpZiAoKGNlaWwoU291cmNlV2lkdGhJbk1lbVdvcmRzLzIpLTEpICogMiA+IE9WMExCX1Jvd3Mt MSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi cmFnZTEyOF92aWQ6IiIjIyMjIyMjIyMjIyMjIyMjIyBGQVRBTDoiImNlaWwoU291cmNlV2lkdGhJ bk1lbVdvcmRzLzIpLTEpICogMiA+IE9WMExCX1Jvd3MtMVxuIik7OwogICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoU291cmNlV2lkdGhJbk1lbVdvcmRz LTEpICogMiA+IE9WMExCX1Jvd3MtMSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgIERpc2FsbG93Rm91clRhcFZlcnRGaWx0ZXJpbmcgPSAxOwogICAgICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKChjZWlsKFNvdXJjZVVWV2lkdGhJ bk1lbVdvcmRzLzIpLTEpICogNCArIDEgPiBPVjBMQl9Sb3dzLTEpCiAgICAgICAgICAgICAgICAg ICAgewoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo KFNvdXJjZVVWV2lkdGhJbk1lbVdvcmRzLTEpICogNCArIDEgPiBPVjBMQl9Sb3dzLTEpCiAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBEaXNhbGxvd0ZvdXJUYXBV VlZlcnRGaWx0ZXJpbmcgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg ICAgICAgaWYgKChjZWlsKFNvdXJjZVVWV2lkdGhJbk1lbVdvcmRzLzIpLTEpICogNCArIDMgPiBP VjBMQl9Sb3dzLTEpCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKFNvdXJjZVVWV2lkdGhJbk1lbVdvcmRzLTEp ICogNCArIDMgPiBPVjBMQl9Sb3dzLTEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICBEaXNhbGxvd0ZvdXJUYXBVVlZlcnRGaWx0ZXJpbmcgPSAxOwogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDEz OgogICAgICAgIGNhc2UgMTQ6IGlmICgoY2VpbChTb3VyY2VXaWR0aEluTWVtV29yZHMvMiktMSkg KiAyID4gT1YwTEJfUm93cy0xKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJyYWdlMTI4X3ZpZDoiIiMjIyMjIyMjIyMjIyMjIyMjIEZBVEFMOiIi Y2VpbChTb3VyY2VXaWR0aEluTWVtV29yZHMvMiktMSkgKiAyID4gT1YwTEJfUm93cy0xXG4iKTs7 CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChTb3Vy Y2VXaWR0aEluTWVtV29yZHMtMSkgKiAyID4gT1YwTEJfUm93cy0xKQogICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWxsb3dGb3VyVGFwVmVydEZpbHRlcmlu ZyA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoKGNl aWwoU291cmNlVVZXaWR0aEluTWVtV29yZHMvMiktMSkgKiAyICsgMSA+IE9WMExCX1Jvd3MtMSkK ICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICBlbHNlIGlmICgoU291cmNlVVZXaWR0aEluTWVtV29yZHMtMSkgKiAyICsgMSA+IE9W MExCX1Jvd3MtMSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg IERpc2FsbG93Rm91clRhcFVWVmVydEZpbHRlcmluZyA9IDE7CiAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICBjYXNl IDQ6CiAgICAgICAgY2FzZSA2OgogICAgICAgIGNhc2UgMTE6CiAgICAgICAgY2FzZSAxMjogaWYg KChjZWlsKFNvdXJjZVdpZHRoSW5NZW1Xb3Jkcy8yKS0xKSA+IE9WMExCX1Jvd3MtMSkKICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigicmFnZTEyOF92 aWQ6IiIjIyMjIyMjIyMjIyMjIyMjIyBGQVRBTDoiIihjZWlsKFNvdXJjZVdpZHRoSW5NZW1Xb3Jk cy8yKS0xKSA+IE9WMExCX1Jvd3MtMVxuIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgIGVsc2UgaWYgKChTb3VyY2VXaWR0aEluTWVtV29yZHMtMSkgPiBPVjBMQl9S b3dzLTEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBEaXNh bGxvd0ZvdXJUYXBWZXJ0RmlsdGVyaW5nID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAg ICBicmVhazsKICAgIH0KICAgIGRlc3RfdyA9IGNvbmZpZy0+ZGVzdC53OwogICAgZGVzdF9oID0g Y29uZmlnLT5kZXN0Lmg7CiAgICBpZihyYWRlb25faXNfZGJsX3NjYW4oKSkgZGVzdF9oICo9IDI7 CiAgICBiZXNyLmRlc3RfYnBwID0gcmFkZW9uX3ZpZF9nZXRfZGJwcCgpOwogICAgYmVzci5mb3Vy Y2MgPSBjb25maWctPmZvdXJjYzsKICAgIGlmKHJhZGVvbl9pc19pbnRlcmxhY2UoKSkgaW50ZXJs YWNlX2ZhY3RvciA9IDI7CiAgICBlbHNlIGludGVybGFjZV9mYWN0b3IgPSAxOwoKICAgIGhvcnpf cmVwbF9mYWN0b3IgPSAxIDw8ICh1aW50MzJfdCkoKElOUExMKDB4MDAwOCkgJiAweDMwMCkgPj4g OCk7CiAgICBIX3NjYWxlX3JhdGlvID0gKGRvdWJsZSljZWlsKCgoZG91YmxlKWRlc3RfdysxKS9o b3J6X3JlcGxfZmFjdG9yKS9zcmNfdzsKICAgIFZfc2NhbGVfcmF0aW8gPSAoZG91YmxlKShkZXN0 X2grMSkvc3JjX2g7CiAgICBpZihIX3NjYWxlX3JhdGlvIDwgMC41ICYmIFZfc2NhbGVfcmF0aW8g PCAwLjUpCiAgICB7CiAgICAgICAgdmFsX09WMF9QMV9NQVhfTE5fSU5fUEVSX0xOX09VVCA9IDM7 CiAgICAgICAgdmFsX09WMF9QMjNfTUFYX0xOX0lOX1BFUl9MTl9PVVQgPSAyOwogICAgfQogICAg ZWxzZQogICAgaWYoSF9zY2FsZV9yYXRpbyA8IDEgJiYgVl9zY2FsZV9yYXRpbyA8IDEpCiAgICB7 CiAgICAgICAgdmFsX09WMF9QMV9NQVhfTE5fSU5fUEVSX0xOX09VVCA9IDI7CiAgICAgICAgdmFs X09WMF9QMjNfTUFYX0xOX0lOX1BFUl9MTl9PVVQgPSAxOwogICAgfQogICAgZWxzZQogICAgewog ICAgICAgIHZhbF9PVjBfUDFfTUFYX0xOX0lOX1BFUl9MTl9PVVQgPSAxOwogICAgICAgIHZhbF9P VjBfUDIzX01BWF9MTl9JTl9QRVJfTE5fT1VUID0gMTsKICAgIH0KCiAgICBiZXNyLnZfaW5jID0g KHVpbnQxNl90KSgoMS4vVl9zY2FsZV9yYXRpbykqKDE8PDEyKSppbnRlcmxhY2VfZmFjdG9yKzAu NSk7CiAgICBDUlRfVl9JTkMgPSBiZXNyLnZfaW5jL2ludGVybGFjZV9mYWN0b3I7CiAgICBiZXNy LnZfaW5jIDw8PSA4OwogICAgewogICAgICAgIGludCBUaGVyZUlzVHdvVGFwVmVydGljYWxGaWx0 ZXJpbmcsRG9Ob3RVc2VNb3N0UmVjZW50bHlGZXRjaGVkTGluZTsKICAgICAgICBpbnQgUDFHcm91 cFNpemU7CiAgICAgICAgaW50IFAyM0dyb3VwU2l6ZTsKICAgICAgICBpbnQgUDFTdGVwU2l6ZTsK ICAgICAgICBpbnQgUDIzU3RlcFNpemU7CgogICAgICAgIENhbGNfSF9JTkNfU1RFUF9CWSgKICAg ICAgICAgICAgYmVzci5zdXJmX2lkLAogICAgICAgICAgICBIX3NjYWxlX3JhdGlvLAogICAgICAg ICAgICBEaXNhbGxvd0ZvdXJUYXBWZXJ0RmlsdGVyaW5nLAogICAgICAgICAgICBEaXNhbGxvd0Zv dXJUYXBVVlZlcnRGaWx0ZXJpbmcsCiAgICAgICAgICAgICZ2YWxfT1YwX1AxX0hfSU5DLAogICAg ICAgICAgICAmdmFsX09WMF9QMV9IX1NURVBfQlksCiAgICAgICAgICAgICZ2YWxfT1YwX1AyM19I X0lOQywKICAgICAgICAgICAgJnZhbF9PVjBfUDIzX0hfU1RFUF9CWSwKICAgICAgICAgICAgJlAx R3JvdXBTaXplLAogICAgICAgICAgICAmUDFTdGVwU2l6ZSwKICAgICAgICAgICAgJlAyM1N0ZXBT aXplKTsKCiAgICAgICAgaWYoSF9zY2FsZV9yYXRpbyA+IE1pbkhTY2FsZUhhcmQpCiAgICAgICAg ewogICAgICAgICAgICBoX2luYyA9IChzcmNfdyA8PCAxMikgLyBkZXN0X3c7CiAgICAgICAgICAg IGJlc3Iuc3RlcF9ieSA9IDB4MDEwMTsKICAgICAgICAgICAgc3dpdGNoIChiZXNyLnN1cmZfaWQp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgIGNh c2UgNDoKICAgICAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgICAgICAgICAgICAgYmVz ci5oX2luYyA9IChoX2luYyl8KGhfaW5jPDwxNik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICAgICAgICAgICAgICBiZXNy LmhfaW5jID0gaF9pbmMgfCAoKGhfaW5jID4+IDIpIDw8IDE2KTsKICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAg ICAgICBiZXNyLmhfaW5jID0gaF9pbmMgfCAoKGhfaW5jID4+IDEpIDw8IDE2KTsKICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIFAy M0dyb3VwU2l6ZSA9IDI7CgogICAgICAgIGJlc3IuaG9yel9waWNrX25lYXJlc3Q9MDsKICAgICAg ICBEb05vdFVzZU1vc3RSZWNlbnRseUZldGNoZWRMaW5lPTA7CiAgICAgICAgVGhlcmVJc1R3b1Rh cFZlcnRpY2FsRmlsdGVyaW5nID0gKHZhbF9PVjBfUDFfSF9TVEVQX0JZIT0wKSB8fCAodmFsX09W MF9QMjNfSF9TVEVQX0JZIT0wKTsKICAgICAgICBpZiAoVGhlcmVJc1R3b1RhcFZlcnRpY2FsRmls dGVyaW5nICYmIERvTm90VXNlTW9zdFJlY2VudGx5RmV0Y2hlZExpbmUpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYmVzci52ZXJ0X3BpY2tfbmVhcmVzdCA9IDE7CiAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3IudmVydF9waWNrX25lYXJlc3Qg PSAwOwoKICAgICAgICBDb21wdXRlWFN0YXJ0RW5kKGlzXzQwMCxMZWZ0UGl4ZWwsTGVmdFVWUGl4 ZWwsTWVtV29yZHNJbkJ5dGVzLEJ5dGVzUGVyUGl4ZWwsCiAgICAgICAgICAgICAgICAgICAgIFNv dXJjZVdpZHRoSW5QaXhlbHMsUDFTdGVwU2l6ZSxCeXRlc1BlclVWUGl4ZWwsCiAgICAgICAgICAg ICAgICAgICAgIFNvdXJjZVVWV2lkdGhJblBpeGVscyxQMjNTdGVwU2l6ZSwmdmFsX09WMF9QMV9Y X1NUQVJULCZ2YWxfT1YwX1AyX1hfU1RBUlQpOwoKICAgICAgICBpZihIX3NjYWxlX3JhdGlvID4g TWluSFNjYWxlSGFyZCkKICAgICAgICB7CiAgICAgICAgICAgIHVuc2lnbmVkIHRtcDsKICAgICAg ICAgICAgdG1wID0gKGxlZnQgJiAweDAwMDNmZmZmKSArIDB4MDAwMjgwMDAgKyAoaF9pbmMgPDwg Myk7CiAgICAgICAgICAgIGJlc3IucDFfaF9hY2N1bV9pbml0ID0gKCh0bXAgPDwgNCkgJiAweDAw MGY4MDAwKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodG1wIDw8IDEy KSAmIDB4ZjAwMDAwMDApOwoKICAgICAgICAgICAgdG1wID0gKHRvcCAmIDB4MDAwMGZmZmYpICsg MHgwMDAxODAwMDsKICAgICAgICAgICAgYmVzci5wMV92X2FjY3VtX2luaXQgPSAoKHRtcCA8PCA0 KSAmIDB4MDFmZjgwMDBMKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KDB4 MDAwMDAwMDNMICYgMSk7CiAgICAgICAgICAgIHRtcCA9ICgobGVmdCA+PiAxKSAmIDB4MDAwMWZm ZmYpICsgMHgwMDAyODAwMCArIChoX2luYyA8PCAyKTsKICAgICAgICAgICAgYmVzci5wMjNfaF9h Y2N1bV9pbml0ID0gKCh0bXAgPDwgNCkgJiAweDAwMGY4MDAwKSB8CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgodG1wIDw8IDEyKSAmIDB4NzAwMDAwMDApOwoKICAgICAgICAg ICAgdG1wID0gKCh0b3AgPj4gMSkgJiAweDAwMDBmZmZmKSArIDB4MDAwMTgwMDA7CiAgICAgICAg ICAgIGJlc3IucDIzX3ZfYWNjdW1faW5pdCA9IChpc180MjB8fGlzXzQxMCkgPwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKHRtcCA8PCA0KSAmIDB4MDFmZjgwMDBMKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KDB4MDAwMDAwMDNMICYgMSkgOiAwOwog ICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgIENvbXB1dGVBY2N1bUluaXQoIHZhbF9P VjBfUDFfWF9TVEFSVCx2YWxfT1YwX1AyX1hfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmFsX09WMF9QMV9IX0lOQyx2YWxfT1YwX1AyM19IX0lOQywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2YWxfT1YwX1AxX0hfU1RFUF9CWSx2YWxfT1YwX1AyM19IX1NU RVBfQlksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JUX1ZfSU5DLFAxR3JvdXBT aXplLFAyM0dyb3VwU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxfT1Yw X1AxX01BWF9MTl9JTl9QRVJfTE5fT1VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZhbF9PVjBfUDIzX01BWF9MTl9JTl9QRVJfTE5fT1VUKTsKICAgIH0KCgogICAgYmVzci5iYXNl X2FkZHIgPSBJTlJFRygweDAyM0MpOwogICAgY29uZmlnLT5vZmZzZXRzWzBdID0gMDsKICAgIGZv cihpPTE7aTxiZXNyLnZpZF9uYnVmcztpKyspCiAgICAgICAgICAgIGNvbmZpZy0+b2Zmc2V0c1tp XSA9IGNvbmZpZy0+b2Zmc2V0c1tpLTFdK2NvbmZpZy0+ZnJhbWVfc2l6ZTsKICAgIGlmKGlzXzQy MCB8fCBpc180MTAgfHwgaXNfNDAwKQogICAgewogICAgICAgIHVpbnQzMl90IGQxbGluZSxkMmxp bmUsZDNsaW5lOwogICAgICAgIGQxbGluZSA9IHRvcCpwaXRjaDsKICAgICAgICBpZihpc180MjAp CiAgICAgICAgewogICAgICAgICAgICBkMmxpbmUgPSBzcmNfaCpwaXRjaCsoZDFsaW5lPj4yKTsK ICAgICAgICAgICAgZDNsaW5lID0gZDJsaW5lKygoc3JjX2gqcGl0Y2gpPj4yKTsKICAgICAgICB9 CiAgICAgICAgZWxzZQogICAgICAgIGlmKGlzXzQxMCkKICAgICAgICB7CiAgICAgICAgICAgIGQy bGluZSA9IHNyY19oKnBpdGNoKyhkMWxpbmU+PjQpOwogICAgICAgICAgICBkM2xpbmUgPSBkMmxp bmUrKChzcmNfaCpwaXRjaCk+PjQpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewog ICAgICAgICAgICBkMmxpbmUgPSAwOwogICAgICAgICAgICBkM2xpbmUgPSAwOwogICAgICAgIH0K ICAgICAgICBkMWxpbmUgKz0gKGxlZnQgPj4gMTYpICYgfjE1OwogICAgICAgIGlmKGlzXzQyMCkK ICAgICAgICB7CiAgICAgICAgICAgIGQybGluZSArPSAobGVmdCA+PiAxNykgJiB+MTU7CiAgICAg ICAgICAgIGQzbGluZSArPSAobGVmdCA+PiAxNykgJiB+MTU7CiAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICB7CiAgICAgICAgICAgIGQybGluZSArPSAobGVmdCA+PiAxOCkgJiB+MTU7CiAg ICAgICAgICAgIGQzbGluZSArPSAobGVmdCA+PiAxOCkgJiB+MTU7CiAgICAgICAgfQogICAgICAg IGNvbmZpZy0+b2Zmc2V0LnkgPSBkMWxpbmUgJiAweDAzZmZmZmYwTDsKICAgICAgICBpZihpc180 MDApCiAgICAgICAgewogICAgICAgICAgICBjb25maWctPm9mZnNldC52ID0gMDsKICAgICAgICAg ICAgY29uZmlnLT5vZmZzZXQudSA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7 CiAgICAgICAgICAgIGNvbmZpZy0+b2Zmc2V0LnYgPSBkMmxpbmUgJiAweDAzZmZmZmYwTDsKICAg ICAgICAgICAgY29uZmlnLT5vZmZzZXQudSA9IGQzbGluZSAmIDB4MDNmZmZmZjBMOwogICAgICAg IH0KICAgICAgICBmb3IoaT0wO2k8YmVzci52aWRfbmJ1ZnM7aSsrKQogICAgICAgIHsKICAgICAg ICAgICAgYmVzci52aWRfYnVmX2Jhc2VfYWRyc195W2ldPSgocmFkZW9uX292ZXJsYXlfb2ZmK2Nv bmZpZy0+b2Zmc2V0c1tpXStjb25maWctPm9mZnNldC55KSYweDAzZmZmZmYwTCk7CiAgICAgICAg ICAgIGlmKGlzXzQwMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYmVzci52aWRfYnVm X2Jhc2VfYWRyc192W2ldPTA7CiAgICAgICAgICAgICAgICBiZXNyLnZpZF9idWZfYmFzZV9hZHJz X3VbaV09MDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgIGJlc3IudmlkX2J1Zl9iYXNlX2FkcnNfdltpXT0oKHJhZGVvbl9vdmVybGF5 X29mZitjb25maWctPm9mZnNldHNbaV0rY29uZmlnLT5vZmZzZXQudikmMHgwM2ZmZmZmMEwpfDB4 MDAwMDAwMDFMOwogICAgICAgICAgICAgICAgYmVzci52aWRfYnVmX2Jhc2VfYWRyc191W2ldPSgo cmFkZW9uX292ZXJsYXlfb2ZmK2NvbmZpZy0+b2Zmc2V0c1tpXStjb25maWctPm9mZnNldC51KSYw eDAzZmZmZmYwTCl8MHgwMDAwMDAwMUw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg Y29uZmlnLT5vZmZzZXQueSA9ICgoYmVzci52aWRfYnVmX2Jhc2VfYWRyc195WzBdKSYweDAzZmZm ZmYwTCkgLSByYWRlb25fb3ZlcmxheV9vZmY7CiAgICAgICAgaWYoaXNfNDAwKQogICAgICAgIHsK ICAgICAgICAgICAgY29uZmlnLT5vZmZzZXQudiA9IDA7CiAgICAgICAgICAgIGNvbmZpZy0+b2Zm c2V0LnUgPSAwOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBj b25maWctPm9mZnNldC52ID0gKChiZXNyLnZpZF9idWZfYmFzZV9hZHJzX3ZbMF0pJjB4MDNmZmZm ZjBMKSAtIHJhZGVvbl9vdmVybGF5X29mZjsKICAgICAgICAgICAgY29uZmlnLT5vZmZzZXQudSA9 ICgoYmVzci52aWRfYnVmX2Jhc2VfYWRyc191WzBdKSYweDAzZmZmZmYwTCkgLSByYWRlb25fb3Zl cmxheV9vZmY7CiAgICAgICAgfQogICAgICAgIGlmKGJlc3IuZm91cmNjID09ICgoKHVuc2lnbmVk KSgnSScpPDwwKXwoKHVuc2lnbmVkKSgnNCcpPDw4KXwoKHVuc2lnbmVkKSgnMicpPDwxNil8KCh1 bnNpZ25lZCkoJzAnKTw8MjQpKSB8fCBiZXNyLmZvdXJjYyA9PSAoKCh1bnNpZ25lZCkoJ0knKTw8 MCl8KCh1bnNpZ25lZCkoJ1knKTw8OCl8KCh1bnNpZ25lZCkoJ1UnKTw8MTYpfCgodW5zaWduZWQp KCdWJyk8PDI0KSkpCiAgICAgICAgewogICAgICAgICAgdWludDMyX3QgdG1wOwogICAgICAgICAg dG1wID0gY29uZmlnLT5vZmZzZXQudTsKICAgICAgICAgIGNvbmZpZy0+b2Zmc2V0LnUgPSBjb25m aWctPm9mZnNldC52OwogICAgICAgICAgY29uZmlnLT5vZmZzZXQudiA9IHRtcDsKICAgICAgICB9 CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGNvbmZpZy0+b2Zmc2V0LnkgPSBjb25maWctPm9m ZnNldC51ID0gY29uZmlnLT5vZmZzZXQudiA9ICgobGVmdCAmIH43KSA8PCAxKSYweDAzZmZmZmYw TDsKICAgICAgZm9yKGk9MDtpPGJlc3IudmlkX25idWZzO2krKykKICAgICAgewogICAgICAgIGJl c3IudmlkX2J1Zl9iYXNlX2FkcnNfeVtpXSA9CiAgICAgICAgYmVzci52aWRfYnVmX2Jhc2VfYWRy c191W2ldID0KICAgICAgICBiZXNyLnZpZF9idWZfYmFzZV9hZHJzX3ZbaV0gPSByYWRlb25fb3Zl cmxheV9vZmYgKyBjb25maWctPm9mZnNldHNbaV0gKyBjb25maWctPm9mZnNldC55OwogICAgICB9 CiAgICB9CiAgICBsZWZ0VVYgPSAobGVmdCA+PiAoaXNfNDEwPzE4OjE3KSkgJiAxNTsKICAgIGxl ZnQgPSAobGVmdCA+PiAxNikgJiAxNTsKICAgIGJlc3IueV94X3N0YXJ0ID0gKGNvbmZpZy0+ZGVz dC54KzApIHwgKGNvbmZpZy0+ZGVzdC55IDw8IDE2KTsKICAgIGJlc3IueV94X2VuZCA9IChjb25m aWctPmRlc3QueCArIGRlc3RfdyswKSB8ICgoY29uZmlnLT5kZXN0LnkgKyBkZXN0X2gpIDw8IDE2 KTsKICAgIENvbXB1dGVCb3JkZXJzKGNvbmZpZyxWZXJ0VVZTdWJTYW1wbGUpOwogICAgYmVzci52 aWRfYnVmX3BpdGNoMF92YWx1ZSA9IHBpdGNoOwogICAgYmVzci52aWRfYnVmX3BpdGNoMV92YWx1 ZSA9IGlzXzQxMCA/IHBpdGNoPj4yIDogaXNfNDIwID8gcGl0Y2g+PjEgOiBwaXRjaDsKCgoKCgoK ICAgIGlmKEhfc2NhbGVfcmF0aW8gPiBNaW5IU2NhbGVIYXJkKSBiZXNyLmZpbHRlcl9jbnRsIHw9 IDB4MDAwMDAwMEY7CiAgICBlbHNlCiAgICB7CiAgICAgICAgRmlsdGVyU2V0dXAgKHZhbF9PVjBf UDFfSF9JTkMpOwoKCiAgICAgICAgYmVzci5maWx0ZXJfY250bCA9IDB4MDAwMDAwMDA7CiAgICAg ICAgaWYoRGlzYWxsb3dGb3VyVGFwVmVydEZpbHRlcmluZykKICAgICAgICAgICAgYmVzci5maWx0 ZXJfY250bCB8PSAweDAwMDAwMDA0OwogICAgICAgIGlmKERpc2FsbG93Rm91clRhcFVWVmVydEZp bHRlcmluZykKICAgICAgICAgICAgYmVzci5maWx0ZXJfY250bCB8PSAweDAwMDAwMDA4OwogICAg fQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkIHJhZGVvbl9jb21wdXRlX2ZyYW1lc2l6ZSh2 aWRpeF9wbGF5YmFja190ICppbmZvKQp7CiAgdW5zaWduZWQgcGl0Y2gsYXdpZHRoLGRicHA7CiAg cGl0Y2ggPSByYWRlb25fcXVlcnlfcGl0Y2goaW5mby0+Zm91cmNjLCZpbmZvLT5zcmMucGl0Y2gp OwogIGRicHAgPSByYWRlb25fdmlkX2dldF9kYnBwKCk7CiAgc3dpdGNoKGluZm8tPmZvdXJjYykK ICB7CiAgICBjYXNlICgoKHVuc2lnbmVkKSgnWScpPDwwKXwoKHVuc2lnbmVkKSgnOCcpPDw4KXwo KHVuc2lnbmVkKSgnMCcpPDwxNil8KCh1bnNpZ25lZCkoJzAnKTw8MjQpKToKICAgICAgICAgICAg ICAgIGF3aWR0aCA9IChpbmZvLT5zcmMudyArIChwaXRjaC0xKSkgJiB+KHBpdGNoLTEpOwogICAg ICAgICAgICAgICAgaW5mby0+ZnJhbWVfc2l6ZSA9IGF3aWR0aCppbmZvLT5zcmMuaDsKICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgY2FzZSAoKCh1bnNpZ25lZCkoJ1knKTw8MCl8KCh1bnNpZ25l ZCkoJ1YnKTw8OCl8KCh1bnNpZ25lZCkoJ1UnKTw8MTYpfCgodW5zaWduZWQpKCc5Jyk8PDI0KSk6 CiAgICBjYXNlICgoKHVuc2lnbmVkKSgnSScpPDwwKXwoKHVuc2lnbmVkKSgnRicpPDw4KXwoKHVu c2lnbmVkKSgnMCcpPDwxNil8KCh1bnNpZ25lZCkoJzknKTw8MjQpKToKICAgICAgICAgICAgICAg IGF3aWR0aCA9IChpbmZvLT5zcmMudyArIChwaXRjaC0xKSkgJiB+KHBpdGNoLTEpOwogICAgICAg ICAgICAgICAgaW5mby0+ZnJhbWVfc2l6ZSA9IGF3aWR0aCooaW5mby0+c3JjLmgraW5mby0+c3Jj LmgvOCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgIGNhc2UgKCgodW5zaWduZWQpKCdJJyk8 PDApfCgodW5zaWduZWQpKCc0Jyk8PDgpfCgodW5zaWduZWQpKCcyJyk8PDE2KXwoKHVuc2lnbmVk KSgnMCcpPDwyNCkpOgogICAgY2FzZSAoKCh1bnNpZ25lZCkoJ1knKTw8MCl8KCh1bnNpZ25lZCko J1YnKTw8OCl8KCh1bnNpZ25lZCkoJzEnKTw8MTYpfCgodW5zaWduZWQpKCcyJyk8PDI0KSk6CiAg ICBjYXNlICgoKHVuc2lnbmVkKSgnSScpPDwwKXwoKHVuc2lnbmVkKSgnWScpPDw4KXwoKHVuc2ln bmVkKSgnVScpPDwxNil8KCh1bnNpZ25lZCkoJ1YnKTw8MjQpKToKICAgICAgICAgICAgICAgIGF3 aWR0aCA9IChpbmZvLT5zcmMudyArIChwaXRjaC0xKSkgJiB+KHBpdGNoLTEpOwogICAgICAgICAg ICAgICAgaW5mby0+ZnJhbWVfc2l6ZSA9IGF3aWR0aCooaW5mby0+c3JjLmgraW5mby0+c3JjLmgv Mik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgIGNhc2UgKCgodW5zaWduZWQpKCdSJyk8PDAp fCgodW5zaWduZWQpKCdHJyk8PDgpfCgodW5zaWduZWQpKCdCJyk8PDE2KXwoKHVuc2lnbmVkKSgz Mik8PDI0KSk6CiAgICBjYXNlICgoKHVuc2lnbmVkKSgnQicpPDwwKXwoKHVuc2lnbmVkKSgnRycp PDw4KXwoKHVuc2lnbmVkKSgnUicpPDwxNil8KCh1bnNpZ25lZCkoMzIpPDwyNCkpOgogICAgICAg ICAgICAgICAgYXdpZHRoID0gKGluZm8tPnNyYy53KjQgKyAocGl0Y2gtMSkpICYgfihwaXRjaC0x KTsKICAgICAgICAgICAgICAgIGluZm8tPmZyYW1lX3NpemUgPSBhd2lkdGgqaW5mby0+c3JjLmg7 CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgYXdp ZHRoID0gKGluZm8tPnNyYy53KjIgKyAocGl0Y2gtMSkpICYgfihwaXRjaC0xKTsKICAgICAgICAg ICAgICAgIGluZm8tPmZyYW1lX3NpemUgPSBhd2lkdGgqaW5mby0+c3JjLmg7CiAgICAgICAgICAg ICAgICBicmVhazsKICB9CiAgaW5mby0+ZnJhbWVfc2l6ZSA9IChpbmZvLT5mcmFtZV9zaXplKzQw OTUpJn40MDk1Owp9CgppbnQgdml4Q29uZmlnUGxheWJhY2sodmlkaXhfcGxheWJhY2tfdCAqaW5m bykKewogIHVuc2lnbmVkIHJnYl9zaXplLG5mcjsKICB1aW50MzJfdCByYWRlb25fdmlkZW9fc2l6 ZTsKICBpZighaXNfc3VwcG9ydGVkX2ZvdXJjYyhpbmZvLT5mb3VyY2MsaW5mby0+c3JjLncpKSBy ZXR1cm4gMzg7CiAgaWYoaW5mby0+bnVtX2ZyYW1lcz4xMDI0KSBpbmZvLT5udW1fZnJhbWVzPTEw MjQ7CiAgaWYoaW5mby0+bnVtX2ZyYW1lcz09MSkgYmVzci5kb3VibGVfYnVmZj0wOwogIGVsc2Ug YmVzci5kb3VibGVfYnVmZj0xOwogIHJhZGVvbl9jb21wdXRlX2ZyYW1lc2l6ZShpbmZvKTsKCiAg cmdiX3NpemUgPSByYWRlb25fZ2V0X3hyZXMoKSpyYWRlb25fZ2V0X3lyZXMoKSooKHJhZGVvbl92 aWRfZ2V0X2RicHAoKSs3KS84KTsKICBuZnIgPSBpbmZvLT5udW1fZnJhbWVzOwogIHJhZGVvbl92 aWRlb19zaXplID0gcmFkZW9uX3JhbV9zaXplOwoKICBpZihkZWZfY2FwLmZsYWdzICYgMHgwMDAw MDAwMSkKICB7CgoKCiAgICAgICAgcmFkZW9uX3ZpZGVvX3NpemUgLT0gcmFkZW9uX3JhbV9zaXpl ICogc2l6ZW9mKGJtX2xpc3RfZGVzY3JpcHRvcikgLyA0MDk2OwogICAgICAgIHJhZGVvbl9kbWFf ZGVzY19iYXNlID0gKHZvaWQgKikgcGNpX2luZm8uYmFzZTAgKyByYWRlb25fdmlkZW9fc2l6ZTsK ICB9CgogIGZvcig7bmZyPjA7IG5mci0tKQogIHsKICAgICAgcmFkZW9uX292ZXJsYXlfb2ZmID0g cmFkZW9uX3ZpZGVvX3NpemUgLSBpbmZvLT5mcmFtZV9zaXplKm5mcjsKICAgICAgcmFkZW9uX292 ZXJsYXlfb2ZmICY9IDB4ZmZmZjAwMDA7CiAgICAgIGlmKHJhZGVvbl9vdmVybGF5X29mZiA+PSAo aW50KXJnYl9zaXplICkgYnJlYWs7CiAgfQogIGlmKG5mciA8PSAzKQogIHsKICAgbmZyID0gaW5m by0+bnVtX2ZyYW1lczsKICAgZm9yKDtuZnI+MDsgbmZyLS0pCiAgIHsKICAgICAgcmFkZW9uX292 ZXJsYXlfb2ZmID0gcmFkZW9uX3ZpZGVvX3NpemUgLSBpbmZvLT5mcmFtZV9zaXplKm5mcjsKICAg ICAgcmFkZW9uX292ZXJsYXlfb2ZmICY9IDB4ZmZmZjAwMDA7CiAgICAgIGlmKHJhZGVvbl9vdmVy bGF5X29mZiA+IDApIGJyZWFrOwogICB9CiAgfQogIGlmKG5mciA8PSAwKSByZXR1cm4gMjI7CiAg aW5mby0+bnVtX2ZyYW1lcyA9IG5mcjsKICBiZXNyLnZpZF9uYnVmcyA9IGluZm8tPm51bV9mcmFt ZXM7CiAgaW5mby0+ZGdhX2FkZHIgPSAoY2hhciAqKXJhZGVvbl9tZW1fYmFzZSArIHJhZGVvbl9v dmVybGF5X29mZjsKICByYWRlb25fdmlkX2luaXRfdmlkZW8oaW5mbyk7CiAgcmV0dXJuIDA7Cn0K CmludCB2aXhQbGF5YmFja09uKCB2b2lkICkKewoKICB1bnNpZ25lZCBkdyxkaDsKCiAgcmFkZW9u X3ZpZF9kaXNwbGF5X3ZpZGVvKCk7CgogIGRoID0gKGJlc3IueV94X2VuZCA+PiAxNikgLSAoYmVz ci55X3hfc3RhcnQgPj4gMTYpOwogIGR3ID0gKGJlc3IueV94X2VuZCAmIDB4RkZGRikgLSAoYmVz ci55X3hfc3RhcnQgJiAweEZGRkYpOwogIGlmKGR3ID09IHJhZGVvbl9nZXRfeHJlcygpIHx8IGRo ID09IHJhZGVvbl9nZXRfeXJlcygpKSByYWRlb25fdmlkX2V4Y2x1c2l2ZSgpOwogIGVsc2UgcmFk ZW9uX3ZpZF9ub25fZXhjbHVzaXZlKCk7CgogIHJldHVybiAwOwp9CgppbnQgdml4UGxheWJhY2tP ZmYoIHZvaWQgKQp7CiAgcmFkZW9uX3ZpZF9zdG9wX3ZpZGVvKCk7CiAgcmV0dXJuIDA7Cn0KCmlu dCB2aXhQbGF5YmFja0ZyYW1lU2VsZWN0KHVuc2lnbmVkIGZyYW1lKQp7CiAgICB1aW50MzJfdCBv ZmZbNl07CiAgICBpbnQgcHJldl9mcmFtZT0gKGZyYW1lLTErYmVzci52aWRfbmJ1ZnMpICUgYmVz ci52aWRfbmJ1ZnM7CgoKCgogICAgaWYoIWJlc3IuZG91YmxlX2J1ZmYpIHJldHVybiAwOwogICAg aWYoZnJhbWUgPiBiZXNyLnZpZF9uYnVmcykgZnJhbWUgPSBiZXNyLnZpZF9uYnVmcy0xOwogICAg aWYocHJldl9mcmFtZSA+IChpbnQpYmVzci52aWRfbmJ1ZnMpIHByZXZfZnJhbWUgPSBiZXNyLnZp ZF9uYnVmcy0xOwogICAgb2ZmWzBdID0gYmVzci52aWRfYnVmX2Jhc2VfYWRyc195W2ZyYW1lXTsK ICAgIG9mZlsxXSA9IGJlc3IudmlkX2J1Zl9iYXNlX2FkcnNfdltmcmFtZV07CiAgICBvZmZbMl0g PSBiZXNyLnZpZF9idWZfYmFzZV9hZHJzX3VbZnJhbWVdOwogICAgb2ZmWzNdID0gYmVzci52aWRf YnVmX2Jhc2VfYWRyc195W3ByZXZfZnJhbWVdOwogICAgb2ZmWzRdID0gYmVzci52aWRfYnVmX2Jh c2VfYWRyc192W3ByZXZfZnJhbWVdOwogICAgb2ZmWzVdID0gYmVzci52aWRfYnVmX2Jhc2VfYWRy c191W3ByZXZfZnJhbWVdOwogICAgX3JhZGVvbl9maWZvX3dhaXQoOCk7CiAgICAoKigodm9sYXRp bGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDQxMCkpKSk9 KDB4MDAwMDAwMDFMKTsKICAgIF9yYWRlb25fZW5naW5lX2lkbGUoKTsKICAgIHdoaWxlKCEoSU5S RUcoMHgwNDEwKSYweDAwMDAwMDA4TCkpOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1 aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0NDApKSkpPShvZmZbMF0pOwogICAgKCoo KHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0 NDQpKSkpPShvZmZbMV0pOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCko cmFkZW9uX21taW9fYmFzZSkpKygweDA0NDgpKSkpPShvZmZbMl0pOwogICAgKCooKHZvbGF0aWxl IHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0NEMpKSkpPShv ZmZbM10pOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21t aW9fYmFzZSkpKygweDA0NTApKSkpPShvZmZbNF0pOwogICAgKCooKHZvbGF0aWxlIHVpbnQzMl90 KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0NTQpKSkpPShvZmZbNV0pOwog ICAgKCooKHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkp KygweDA0MTApKSkpPSgwKTsKICAgIGlmKGJlc3IudmlkX25idWZzID09IDIpIHJhZGVvbl93YWl0 X3ZzeW5jKCk7CiAgICBpZihfX3ZlcmJvc2UgPiAwKSByYWRlb25fdmlkX2R1bXBfcmVncygpOwog ICAgcmV0dXJuIDA7Cn0KCnZpZGl4X3ZpZGVvX2VxX3QgZXF1YWwgPQp7CiAweDAwMDAwMDAxVUwg fCAweDAwMDAwMDA0VUwKCgoKICwKIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKCmludCB2aXhQ bGF5YmFja0dldEVxKCB2aWRpeF92aWRlb19lcV90ICogZXEpCnsKICBtZW1jcHkoZXEsJmVxdWFs LHNpemVvZih2aWRpeF92aWRlb19lcV90KSk7CiAgcmV0dXJuIDA7Cn0KIyAzMDgzICJyYWdlMTI4 X3ZpZC5jIgppbnQgdml4UGxheWJhY2tTZXRFcSggY29uc3QgdmlkaXhfdmlkZW9fZXFfdCAqIGVx KQp7CgogIGludCBicixzYXQ7CgoKCiAgICBpZihlcS0+Y2FwICYgMHgwMDAwMDAwMVVMKSBlcXVh bC5icmlnaHRuZXNzID0gZXEtPmJyaWdodG5lc3M7CiAgICBpZihlcS0+Y2FwICYgMHgwMDAwMDAw MlVMKSBlcXVhbC5jb250cmFzdCA9IGVxLT5jb250cmFzdDsKICAgIGlmKGVxLT5jYXAgJiAweDAw MDAwMDA0VUwpIGVxdWFsLnNhdHVyYXRpb24gPSBlcS0+c2F0dXJhdGlvbjsKICAgIGlmKGVxLT5j YXAgJiAweDAwMDAwMDA4VUwpIGVxdWFsLmh1ZSA9IGVxLT5odWU7CiAgICBpZihlcS0+Y2FwICYg MHgwMDAwMDAxMFVMKQogICAgewogICAgICBlcXVhbC5yZWRfaW50ZW5zaXR5ID0gZXEtPnJlZF9p bnRlbnNpdHk7CiAgICAgIGVxdWFsLmdyZWVuX2ludGVuc2l0eSA9IGVxLT5ncmVlbl9pbnRlbnNp dHk7CiAgICAgIGVxdWFsLmJsdWVfaW50ZW5zaXR5ID0gZXEtPmJsdWVfaW50ZW5zaXR5OwogICAg fQogICAgZXF1YWwuZmxhZ3MgPSBlcS0+ZmxhZ3M7CgogICAgYnIgPSBlcXVhbC5icmlnaHRuZXNz ICogNjQgLyAxMDAwOwogICAgaWYoYnIgPCAtNjQpIGJyID0gLTY0OyBpZihiciA+IDYzKSBiciA9 IDYzOwogICAgc2F0ID0gKGVxdWFsLnNhdHVyYXRpb24qMzEgKyAzMTAwMCkgLyAyMDAwOwogICAg aWYoc2F0IDwgMCkgc2F0ID0gMDsgaWYoc2F0ID4gMzEpIHNhdCA9IDMxOwogICAgKCooKHZvbGF0 aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0RTApKSkp PSgoYnIgJiAweDdmKSB8IChzYXQgPDwgOCkgfCAoc2F0IDw8IDE2KSk7CiMgMzEyNSAicmFnZTEy OF92aWQuYyIKICByZXR1cm4gMDsKfQoKaW50IHZpeFBsYXliYWNrU2V0RGVpbnQoIGNvbnN0IHZp ZGl4X2RlaW50ZXJsYWNlX3QgKiBpbmZvKQp7CiAgdW5zaWduZWQgc2ZsZzsKICBzd2l0Y2goaW5m by0+ZmxhZ3MpCiAgewogICAgZGVmYXVsdDoKICAgIGNhc2UgMHgwMDAwMDAwMDoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJlc3IuZGVpbnRlcmxhY2Vfb24gPSAwOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICBjYXNlIDB4MDAwMDAwMDI6CiAgICBjYXNlIDB4MDAw MDAwMDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXNyLmRlaW50ZXJsYWNlX29uID0g MTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3IuZGVpbnRlcmxhY2VfcGF0dGVybiA9 IDB4OTAwQUFBQUE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgIGNhc2Ug MHgwMDAwMDAwNDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3IuZGVpbnRlcmxhY2Vf b24gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzci5kZWludGVybGFjZV9wYXR0 ZXJuID0gMHgwMDA1NTU1NTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg Y2FzZSAweDAwMDAwMDA4OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzci5kZWludGVy bGFjZV9vbiA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXNyLmRlaW50ZXJsYWNl X3BhdHRlcm4gPSBpbmZvLT5kZWludGVybGFjZV9wYXR0ZXJuOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgfQogICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3Qp KHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNDEwKSkpKT0oMHgwMDAwMDAwMUwpOwogIF9yYWRlb25f ZW5naW5lX2lkbGUoKTsKICB3aGlsZSghKElOUkVHKDB4MDQxMCkmMHgwMDAwMDAwOEwpKTsKICBf cmFkZW9uX2ZpZm9fd2FpdCgxNSk7CiAgc2ZsZyA9IElOUkVHKDB4MDQyMCk7CiAgaWYoYmVzci5k ZWludGVybGFjZV9vbikKICB7CiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90 KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDQyMCkpKSk9KHNmbGcgfCAweDAwMDAxMDAwTCk7CiAg ICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkr KDB4MDQ3NCkpKSk9KGJlc3IuZGVpbnRlcmxhY2VfcGF0dGVybik7CiAgfQogIGVsc2UgKCooKHZv bGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweDA0MjAp KSkpPShzZmxnICYgKH4weDAwMDAxMDAwTCkpOwogICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgo dWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNDEwKSkpKT0oMCk7CiAgcmV0dXJuIDA7 Cn0KCmludCB2aXhQbGF5YmFja0dldERlaW50KCB2aWRpeF9kZWludGVybGFjZV90ICogaW5mbykK ewogIGlmKCFiZXNyLmRlaW50ZXJsYWNlX29uKSBpbmZvLT5mbGFncyA9IDB4MDAwMDAwMDA7CiAg ZWxzZQogIHsKICAgIGluZm8tPmZsYWdzID0gMHgwMDAwMDAwODsKICAgIGluZm8tPmRlaW50ZXJs YWNlX3BhdHRlcm4gPSBiZXNyLmRlaW50ZXJsYWNlX3BhdHRlcm47CiAgfQogIHJldHVybiAwOwp9 CgoKCnN0YXRpYyB2aWRpeF9ncmtleV90IHJhZGVvbl9ncmtleTsKCnN0YXRpYyB2b2lkIHNldF9n cl9rZXkoIHZvaWQgKQp7CiAgICBpZihyYWRlb25fZ3JrZXkuY2tleS5vcCA9PSAxKQogICAgewog ICAgICAgIGludCBkYnBwPXJhZGVvbl92aWRfZ2V0X2RicHAoKTsKICAgICAgICBiZXNyLmNrZXlf b249MTsKCiAgICAgICAgc3dpdGNoKGRicHApCiAgICAgICAgewogICAgICAgIGNhc2UgMTU6CiMg MzE5OSAicmFnZTEyOF92aWQuYyIKICAgICAgICAgICAgICAgIGJlc3IuZ3JhcGhpY3Nfa2V5X2Ns cj0KICAgICAgICAgICAgICAgICAgICAgICAgICAoKHJhZGVvbl9ncmtleS5ja2V5LmJsdWUgJjB4 RjgpPj4zKQogICAgICAgICAgICAgICAgICAgICAgICB8ICgocmFkZW9uX2dya2V5LmNrZXkuZ3Jl ZW4mMHhGOCk8PDIpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgKChyYWRlb25fZ3JrZXkuY2tl eS5yZWQgJjB4RjgpPDw3KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMTY6 CiMgMzIxNCAicmFnZTEyOF92aWQuYyIKICAgICAgICAgICAgICAgIGJlc3IuZ3JhcGhpY3Nfa2V5 X2Nscj0KICAgICAgICAgICAgICAgICAgICAgICAgICAoKHJhZGVvbl9ncmtleS5ja2V5LmJsdWUg JjB4RjgpPj4zKQogICAgICAgICAgICAgICAgICAgICAgICB8ICgocmFkZW9uX2dya2V5LmNrZXku Z3JlZW4mMHhGQyk8PDMpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgKChyYWRlb25fZ3JrZXku Y2tleS5yZWQgJjB4RjgpPDw4KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2Ug MjQ6CiAgICAgICAgICAgICAgICBiZXNyLmdyYXBoaWNzX2tleV9jbHI9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgKChyYWRlb25fZ3JrZXkuY2tleS5ibHVlICYweEZGKSkKICAgICAgICAgICAg ICAgICAgICAgICAgfCAoKHJhZGVvbl9ncmtleS5ja2V5LmdyZWVuJjB4RkYpPDw4KQogICAgICAg ICAgICAgICAgICAgICAgICB8ICgocmFkZW9uX2dya2V5LmNrZXkucmVkICYweEZGKTw8MTYpOwog ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzMjoKICAgICAgICAgICAgICAgIGJl c3IuZ3JhcGhpY3Nfa2V5X2Nscj0KICAgICAgICAgICAgICAgICAgICAgICAgICAoKHJhZGVvbl9n cmtleS5ja2V5LmJsdWUgJjB4RkYpKQogICAgICAgICAgICAgICAgICAgICAgICB8ICgocmFkZW9u X2dya2V5LmNrZXkuZ3JlZW4mMHhGRik8PDgpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgKChy YWRlb25fZ3JrZXkuY2tleS5yZWQgJjB4RkYpPDwxNik7CiAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgYmVzci5ja2V5X29uPTA7CiAgICAgICAg ICAgICAgICBiZXNyLmdyYXBoaWNzX2tleV9tc2s9MDsKICAgICAgICAgICAgICAgIGJlc3IuZ3Jh cGhpY3Nfa2V5X2Nscj0wOwogICAgICAgIH0KCiAgICAgICAgYmVzci5ncmFwaGljc19rZXlfbXNr PSgxPDxkYnBwKS0xOwogICAgICAgIGJlc3IuY2tleV9jbnRsID0gMHgwMDAwMDAwMUx8MHgwMDAw MDA1MEx8MHgwMDAwMDEwMEw7CgoKCgogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGJlc3Iu Y2tleV9vbj0wOwogICAgICAgIGJlc3IuZ3JhcGhpY3Nfa2V5X21zaz0wOwogICAgICAgIGJlc3Iu Z3JhcGhpY3Nfa2V5X2Nscj0wOwogICAgICAgIGJlc3IuY2tleV9jbnRsID0gMHgwMDAwMDAwMUx8 MHgwMDAwMDAxMEx8MHgwMDAwMDEwMEw7CiAgICB9CiAgICBfcmFkZW9uX2ZpZm9fd2FpdCgzKTsK ICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2Up KSsoMHgwNEYwKSkpKT0oYmVzci5ncmFwaGljc19rZXlfbXNrKTsKICAgICgqKCh2b2xhdGlsZSB1 aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNEVDKSkpKT0oYmVz ci5ncmFwaGljc19rZXlfY2xyKTsKICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMy X3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHgwNEY0KSkpKT0oYmVzci5ja2V5X2NudGwpOwp9Cgpp bnQgdml4R2V0R3JLZXlzKHZpZGl4X2dya2V5X3QgKmdya2V5KQp7CiAgICBtZW1jcHkoZ3JrZXks ICZyYWRlb25fZ3JrZXksIHNpemVvZih2aWRpeF9ncmtleV90KSk7CiAgICByZXR1cm4oMCk7Cn0K CmludCB2aXhTZXRHcktleXMoY29uc3QgdmlkaXhfZ3JrZXlfdCAqZ3JrZXkpCnsKICAgIG1lbWNw eSgmcmFkZW9uX2dya2V5LCBncmtleSwgc2l6ZW9mKHZpZGl4X2dya2V5X3QpKTsKICAgIHNldF9n cl9rZXkoKTsKICAgIHJldHVybigwKTsKfQoKCnN0YXRpYyBpbnQgcmFkZW9uX3NldHVwX2ZyYW1l KCB2aWRpeF9kbWFfdCAqIGRtYWkgKQp7CiAgICBibV9saXN0X2Rlc2NyaXB0b3IgKiBsaXN0ID0g KGJtX2xpc3RfZGVzY3JpcHRvciAqKXJhZGVvbl9kbWFfZGVzY19iYXNlOwogICAgdW5zaWduZWQg bG9uZyBkZXN0X3B0cjsKICAgIHVuc2lnbmVkIGksbixjb3VudDsKICAgIGludCByZXR2YWw7CiAg ICBpZihkbWFpLT5kZXN0X29mZnNldCArIGRtYWktPnNpemUgPiByYWRlb25fcmFtX3NpemUpIHJl dHVybiA3OwogICAgbiA9IGRtYWktPnNpemUgLyA0MDk2OwogICAgaWYoZG1haS0+c2l6ZSAlIDQw OTYpIG4rKzsKICAgIGlmKChyZXR2YWwgPSBibV92aXJ0X3RvX2J1cyhkbWFpLT5zcmMsZG1haS0+ c2l6ZSxkbWFfcGh5c19hZGRycykpICE9IDApIHJldHVybiByZXR2YWw7CiAgICBkZXN0X3B0ciA9 IGRtYWktPmRlc3Rfb2Zmc2V0OwogICAgY291bnQgPSBkbWFpLT5zaXplOwogICAgZm9yKGk9MDtp PG47aSsrKQogICAgewogICAgICAgIGxpc3RbaV0uZnJhbWVidWZfb2Zmc2V0ID0gcmFkZW9uX292 ZXJsYXlfb2ZmICsgZGVzdF9wdHI7CiAgICAgICAgbGlzdFtpXS5zeXNfYWRkciA9IGRtYV9waHlz X2FkZHJzW2ldOwoKICAgICAgICBsaXN0W2ldLmNvbW1hbmQgPSAoY291bnQgPiA0MDk2ID8gNDA5 NiA6IGNvdW50IHwgMHg4MDAwMDAwMCl8MHgyMDAwMDAwMDsKCgoKICAgICAgICBsaXN0W2ldLnJl c2VydmVkID0gMDsKcHJpbnRmKCJSQURFT05fRE1BX1RBQkxFWyVpXSAlWCAlWCAlWCAlWFxuIixp LGxpc3RbaV0uZnJhbWVidWZfb2Zmc2V0LGxpc3RbaV0uc3lzX2FkZHIsbGlzdFtpXS5jb21tYW5k LGxpc3RbaV0ucmVzZXJ2ZWQpOwogICAgICAgIGRlc3RfcHRyICs9IDQwOTY7CiAgICAgICAgY291 bnQgLT0gNDA5NjsKICAgIH0KICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50IHJhZGVvbl90cmFu c2Zlcl9mcmFtZSggdm9pZCApCnsKICAgIHVuc2lnbmVkIGk7CiAgICBfcmFkZW9uX2VuZ2luZV9p ZGxlKCk7CiAgICBmb3IoaT0wO2k8MTAwMDtpKyspIElOUkVHKDB4MDAzMCk7CiAgICAoKigodm9s YXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1pb19iYXNlKSkrKDB4MDAzMCkp KSk9KChJTlJFRygweDAwMzApIHwgMHgwMDAwMDAwOCkmKH4weDAwMDAwMDQwKSk7CgogICAgKCoo KHZvbGF0aWxlIHVpbnQzMl90KikoKCh1aW50MzJfdCkocmFkZW9uX21taW9fYmFzZSkpKygweEEx OCkpKSk9KDB4MDAwMDAwRkYgfCAweDAwODAwMDAwKTsKICAgICgqKCh2b2xhdGlsZSB1aW50MzJf dCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jhc2UpKSsoMHhBMUMpKSkpPSgweDBGMEYwRjBG KTsKICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCopKCgodWludDMyX3QpKHJhZGVvbl9tbWlvX2Jh c2UpKSsoMHhBMjApKSkpPShidXNfYWRkcl9kbWFfZGVzY3wweDApOwojIDMzMjIgInJhZ2UxMjhf dmlkLmMiCiAgICAoKigodm9sYXRpbGUgdWludDMyX3QqKSgoKHVpbnQzMl90KShyYWRlb25fbW1p b19iYXNlKSkrKDB4MDA0NCkpKSk9KElOUkVHKDB4MDA0NCl8MHgwMDAxMDAwMCk7CiAgICByZXR1 cm4gMDsKfQoKCmludCB2aXhQbGF5YmFja0NvcHlGcmFtZSggdmlkaXhfZG1hX3QgKiBkbWFpICkK ewogICAgaW50IHJldHZhbDsKICAgIGlmKG1sb2NrKGRtYWktPnNyYyxkbWFpLT5zaXplKSAhPSAw KSByZXR1cm4gKCpfX2Vycm5vX2xvY2F0aW9uICgpKTsKICAgIHJldHZhbCA9IHJhZGVvbl9zZXR1 cF9mcmFtZShkbWFpKTsKICAgIGlmKHJldHZhbCA9PSAwKSByZXR2YWwgPSByYWRlb25fdHJhbnNm ZXJfZnJhbWUoKTsKICAgIG11bmxvY2soZG1haS0+c3JjLGRtYWktPnNpemUpOwogICAgcmV0dXJu IHJldHZhbDsKfQoKaW50IHZpeFF1ZXJ5RE1BU3RhdHVzKCB2b2lkICkKewogICAgaW50IGJtX2Fj dGl2ZTsKCiAgICBibV9hY3RpdmU9KElOUkVHKDB4MDA0NCkmMHgwMDAxMDAwMCk9PTA/MTowOwoK CgogICAgcmV0dXJuIGJtX2FjdGl2ZT8xOjA7Cn0K