public inbox for gcc-prs@sourceware.org help / color / mirror / Atom feed
From: chr.breitkopf@magrathea.de To: gcc-gnats@gcc.gnu.org Subject: optimization/3226: Illegal code generated - fixed by -mno-push-args Date: Mon, 18 Jun 2001 08:26:00 -0000 [thread overview] Message-ID: <20010618151915.28268.qmail@sourceware.cygnus.com> (raw) >Number: 3226 >Category: optimization >Synopsis: Illegal code generated - fixed by -mno-push-args >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Mon Jun 18 08:26:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Christoph Breitkopf >Release: 3.0 >Organization: >Environment: Linux i386, glibc 2.1.3, kernel 2.4.5-pre1 >Description: gcc generates illegal code for the hint benchmark (my version, at least). The compiled executable generates a segmentation fault. Adding -mno-push-args generates correct code. Sorry, I've not been able to come up with a smaller test case. The problem seems to be that gcc jumbles the stack offset. Command line: gcc -v -save-temps -Wall -march=i686 -O3 -fomit-frame-pointer -ffast-math -DRESTRICT=__restrict__ -malign-double -fstrict-aliasing -fargument-noalias-global -Dunix -DDOUBLE -DIINT -o hint hint.c Output during compilation: Reading specs from /usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0/specs Configured with: ../configure --prefix=/tmp/gcc-20010618-root/usr/local --enable-shared --enable-threads --disable-checking i386-pc-linux-gnu Thread model: posix gcc version 3.0 /usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0/cpp0 -lang-c -v -iprefix /usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0/ -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__OPTIMIZE__ -D__FAST_MATH__ -D__STDC_HOSTED__=1 -Wall -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ -D__tune_i686__ -D__tune_pentiumpro__ -DRESTRICT=__restrict__ -Dunix -DDOUBLE -DIINT hint.c hint.i GNU CPP version 3.0 (cpplib) (i386 Linux/ELF) ignoring nonexistent directory "/usr/local/i386-pc-linux-gnu/include" ignoring nonexistent directory "/tmp/gcc-20010618-root/usr/local/lib/gcc-lib/i386-pc-linux-gnu/3.0/include" ignoring nonexistent directory "/tmp/gcc-20010618-root/usr/local/lib/gcc-lib/i386-pc-linux-gnu/3.0/../../../../i386-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/local/lib/gcc-lib/i386-pc-linux-gnu/3.0/include /usr/local/include /usr/include End of search list. /usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0/cc1 -fpreprocessed hint.i -quiet -dumpbase hint.c -march=i686 -malign-double -O3 -Wall -version -fomit-frame-pointer -ffast-math -fstrict-aliasing -fargument-noalias-global -o hint.s GNU CPP version 3.0 (cpplib) (i386 Linux/ELF) GNU C version 3.0 (i386-pc-linux-gnu) compiled by GNU C version 3.0. hint.c: In function `main': hint.c:334: warning: control reaches end of non-void function hint.c:86: warning: `tscout' might be used uninitialized in this function hint.c: In function `Run': hint.c:382: warning: passing arg 1 of `malloc_aligned' from incompatible pointer type hint.c:383: warning: passing arg 1 of `malloc_aligned' from incompatible pointer type hint.c:384: warning: passing arg 1 of `malloc_aligned' from incompatible pointer type In file included from hint.c:456: hkernel.c: In function `Hint': hkernel.c:33: warning: unused variable `tmerr' as --traditional-format -V -Qy -o hint.o hint.s GNU assembler version 2.9.5 (i386-redhat-linux) using BFD version 2.9.5.0.22 /usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o hint /usr/lib/crt1.o /usr/lib/crti.o /usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0/crtbegin.o -L/usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0 -L/usr/local/bin/../lib/gcc-lib -L/usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0/../../.. hint.o -lgcc -lc -lgcc /usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0/crtend.o /usr/lib/crtn.o Preprocessed source included as file attachment. >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="hint.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hint.i" IyAyMCAiaGludC5jIgojIDEgImhpbnQuaCIgMQojIDE2ICJoaW50LmgiCiMgMSAiL3Vzci9pbmNs dWRlL3N0ZGlvLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyNTEgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAyIDMKIyAyNzggIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAyNzkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAyIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCiMgMSAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMTk5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMC9pbmNs dWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzNCAiL3Vzci9p bmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYt cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBl ZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDM5ICIvdXNyL2luY2x1ZGUv c3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI2ICIv dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi IDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvbG9j YWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEg MwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVk IGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVm IHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7Cgpf X2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90Owpf X2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9p bmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBl ZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19p bnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNp Z25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19l eHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRl bnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVk ZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBl ZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191 X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQg X19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19s b2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRl ZiBsb25nIGludCBfX3JsaW1fdDsKdHlwZWRlZiBfX3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVm IF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAg fSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRk cl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtf dDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBp bnQgX19mZF9tYXNrOwojIDEwMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVm IHN0cnVjdAogIHsKCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRzWzEwMjQgLyAoOCAqIHNp emVvZiAoX19mZF9tYXNrKSldOwoKCiAgfSBfX2ZkX3NldDsKCgp0eXBlZGVmIGludCBfX2tleV90 OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgoKCnR5cGVkZWYg bG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlw ZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250 NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90 IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19pbm82NF90OwoKCnR5cGVkZWYg X19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRw dHJfdDsKIyA0MSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCgoKdHlwZWRlZiBzdHJ1 Y3QgX0lPX0ZJTEUgRklMRTsKIyA1NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmln LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAiL3Vzci9pbmNs dWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjg3ICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5 cGVkZWYgbG9uZyBpbnQgd2NoYXJfdDsKIyAzMTIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4 Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBp bnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDM1ICIvdXNy L2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWlu dDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwoj IDMxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNDggIi91c3IvaW5jbHVkZS9saWJpby5o IiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjAvaW5j bHVkZS9zdGRhcmcuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyAxNTQg Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3QgX0lPX0ZJ TEU7CiMgMTY0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIHZvaWQgX0lPX2xvY2tf dDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0Owog IHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTg3ICIvdXNyL2luY2x1 ZGUvbGliaW8uaCIgMwp9OwoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBj aGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFk X2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBj aGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVm X2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAg Y2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0 cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAg X19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBz aWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9f bG9ja190ICpfbG9jazsKIyAyMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90 IF9vZmZzZXQ7CgogIGludCBfdW51c2VkMlsxNl07Cgp9OwoKCnR5cGVkZWYgc3RydWN0IF9JT19G SUxFIF9JT19GSUxFOwoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwpleHRlcm4gc3RydWN0IF9JT19G SUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9f Ml8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87 CiMgMjYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3Jl YWRfZm4gKHZvaWQgKiBfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CiMg MjcxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRl X2ZuICh2b2lkICogX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsIHNpemVfdCBfX24pOwoj IDI4MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2 b2lkICogX19jb29raWUsIF9fb2ZmX3QgX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9f aW9fY2xvc2VfZm4gKHZvaWQgKiBfX2Nvb2tpZSk7CiMgMzE4ICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMwpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX191 ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGlu dCkgOwojIDMzNyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAo X0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUg Kl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGlu dCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9j a2VkIChfSU9fRklMRSAqX19mcCkgOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9J T19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4 dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwojIDM2MyAiL3Vzci9pbmNs dWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3Ry aWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0 cmljdCkgOwoKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBj b25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCkgOwoKZXh0ZXJuIF9fc3NpemVf dCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIDsKZXh0ZXJuIHNpemVfdCBf SU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90KSA7CgpleHRlcm4gX19vZmY2NF90 IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSA7CmV4dGVybiBf X29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSA7CgpleHRl cm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgOwojIDU4ICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMiAzCgoKCnR5cGVkZWYgX19vZmZfdCBmcG9zX3Q7CiMgMTEwICIvdXNy L2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAx IDMKIyAxMTEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGlu OwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgoKZXh0ZXJu IGludCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgOwoKZXh0ZXJuIGludCByZW5h bWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIDsKCgoKCmV4dGVy biBGSUxFICp0bXBmaWxlICh2b2lkKSA7CiMgMTQzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpl eHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1f ciAoY2hhciAqX19zKSA7CiMgMTYwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hh ciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkgOwoK CgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZmbHVz aCAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUg Kl9fc3RyZWFtKSA7CiMgMTgyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAq Zm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19tb2RlcykgOwoKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9k ZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKIyAyMTIgIi91c3IvaW5jbHVkZS9zdGRp by5oIiAzCmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9k ZXMpIDsKIyAyMzIgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiB2b2lkIHNldGJ1ZiAo RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgpl eHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVz dHJpY3QgX19idWYsIGludCBfX21vZGVzLCBzaXplX3QgX19uKSA7CgoKCgoKZXh0ZXJuIHZvaWQg c2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9f YnVmLCBzaXplX3QgX19zaXplKSA7CgoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9f c3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0sIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgoKZXh0ZXJuIGlu dCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRl cm4gaW50IHNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCgpleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICpfX3Jl c3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFf bGlzdCBfX2FyZykgOwoKCgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIDsKCgpleHRlcm4gaW50IHZzcHJp bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKCgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNo YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2Zvcm1hdCwgLi4uKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgX192c25wcmludGYgKGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBzaXplX3QgX19tYXhsZW4sIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf XyAoX19wcmludGZfXywgMywgMCkpKTsKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVz dHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKIyAzMTAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAz CmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNzY2FuZiAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LCAuLi4pIDsKIyAzMzggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQg ZmdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0YyAoRklMRSAqX19zdHJlYW0p IDsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIDsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191 bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2 b2lkKSA7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoK CgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGlu dCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAo aW50IF9fYykgOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklM RSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklM RSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSA7CgoK CgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0dyAo aW50IF9fdywgRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAq X19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKIyA0 MDQgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3Mp IDsKIyA0MjggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnB1dHMgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKIyA0 MzggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFy ICpfX3MpIDsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7 CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBf X3NpemUsIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgpleHRlcm4g c2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19z aXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgOwoKCgoKZXh0ZXJuIHNpemVf dCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwg c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKZXh0ZXJuIHNpemVfdCBm d3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9f c2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgoKCgpleHRl cm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5j ZSkgOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIHZv aWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgOwojIDQ3NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgi IDMKdHlwZWRlZiBfX29mZl90IG9mZl90OwojIDQ5OSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMK ZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9f cmVzdHJpY3QgX19wb3MpIDsKCgpleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBf X2NvbnN0IGZwb3NfdCAqX19wb3MpIDsKIyA1MzYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4 dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZW9mIChG SUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSA7CgoK CmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4g aW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVycm9yX3Vu bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0 IGNoYXIgKl9fcykgOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hh ciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwojIDU2NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMK ZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZpbGVu b191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChf X2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CgoKZXh0ZXJu IGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQg KGNoYXIgKl9fcykgOwojIDYxNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQg ZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAo RklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJl YW0pIDsKIyA2MzUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc3RkaW8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKZXh0ZXJu IF9faW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9f Z251Y192YV9saXN0IF9fYXJnKQp7CiAgcmV0dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBf X2FyZyk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNoYXIgKHZvaWQpCnsKICByZXR1cm4g X0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRjX3VubG9ja2Vk IChGSUxFICpfX2ZwKQp7CiAgcmV0dXJuICgoX19mcCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCkt Pl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9fZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfX2Zw KS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyX3VubG9j a2VkICh2b2lkKQp7CiAgcmV0dXJuICgoc3RkaW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+ X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3RkaW4pIDogKih1bnNpZ25lZCBjaGFyICopIChzdGRp biktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGludApwdXRjaGFyIChp bnQgX19jKQp7CiAgcmV0dXJuIF9JT19wdXRjIChfX2MsIHN0ZG91dCk7Cn0KCgoKCmV4dGVybiBf X2lubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAg cmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3Jp dGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDog KHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsK fQoKCgoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAq X19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0 cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBj aGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRy KysgPSAoX19jKSkpOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApwdXRjaGFyX3VubG9ja2VkIChp bnQgX19jKQp7CiAgcmV0dXJuICgoKHN0ZG91dCktPl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCkt Pl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoc3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9f YykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2Mp KSk7Cn0KIyAxMTAgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKZXh0ZXJuIF9faW5saW5l IGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVh bSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApmZXJyb3Jf dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdz ICYgMHgyMCkgIT0gMCk7Cn0KIyA2MzYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyAxNyAi aGludC5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL2kzODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50 IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAg bG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxkaXZfdDsKIyA4MCAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAo dm9pZCkgOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSA7Cgpl eHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSA7CgpleHRlcm4gbG9uZyBpbnQg YXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIDsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9u ZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIDsKCgoKZXh0ZXJuIGRvdWJs ZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyKSA7CiMgMTA5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGxv bmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp bnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs b25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCgpfX2V4dGVuc2lvbl9fCmV4 dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CiMg MTMyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBs b25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CiMgMTk2 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5h bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2dyb3VwKSA7CgoKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fZ3JvdXApIDsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwg KF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fZ3JvdXApIDsKCgoKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5h bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxv bmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg OwoKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50 ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgoKCl9fZXh0ZW5zaW9uX18K ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25z dCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKiogX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKIyAyNDIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MwpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsKICByZXR1cm4gX19zdHJ0b2Rf aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGlu dApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50 ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVu c2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0 dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoj IDI3NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s aW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0 dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpf X2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRv dXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJu YWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRl cm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFz ZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFz ZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25n IGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0 cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJu IF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBz dHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApKTsKfQpleHRlcm4gX19pbmxpbmUg aW50CmF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIChpbnQpIHN0cnRvbCAo X19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9u ZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sIChfX25w dHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRlcm4g X19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICBy ZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQojIDMz MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBf X24pIDsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIDsKCgojIDEg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAx IDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIF9fdV9jaGFy IHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50 Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVk ZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRl ZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKIyA1OCAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYg X19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBf X25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKIyA5NiAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYg X19pZF90IGlkX3Q7CgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9f ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9f a2V5X3Qga2V5X3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgNjggIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK IyA2OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7 CiMgMTIzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYg dW5zaWduZWQgaW50IHVpbnQ7CiMgMTY5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlw ZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBl ZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBl ZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBl ZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5 cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19R SV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2 NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVn aXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDE5MSAiL3Vz ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMK IyAyMiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1 ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzYg Ii91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMTkyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi91c3Iv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz CiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUv c3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMK IyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRv bWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFs WygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0 X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgojIDEgIi91c3IvaW5j bHVkZS90aW1lLmgiIDEgMwojIDgzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1l c3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsK IyAzOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCgoKCgpzdHJ1Y3QgdGltZXZh bDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKdHlwZWRlZiBfX2ZkX3NldCBmZF9zZXQ7 CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBfX3NlbGVjdCAo aW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9f ZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkgOwoKCmV4dGVy biBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRzLCBfX2ZkX3NldCAq X193cml0ZWZkcywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLCBzdHJ1Y3QgdGltZXZhbCAqX190aW1l b3V0KSA7CiMgMTk1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9p bmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMTk4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDIgMwoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKdHlwZWRlZiBfX2ZzYmxr Y250X3QgZnNibGtjbnRfdDsKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAzNDAg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBpbnQzMl90IHJhbmRvbSAo dm9pZCkgOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIDsKCgoK CgpleHRlcm4gdm9pZCAqIGluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqIF9f c3RhdGVidWYsIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCgpleHRlcm4gdm9pZCAqIHNldHN0YXRl ICh2b2lkICogX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAg aW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAg IGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBp bnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9t X2RhdGEgKl9fcmVzdHJpY3QgX19idWYsIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsK CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRv bV9kYXRhICpfX2J1ZikgOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9f c2VlZCwgdm9pZCAqIF9fcmVzdHJpY3QgX19zdGF0ZWJ1Ziwgc2l6ZV90IF9fc3RhdGVsZW4sIHN0 cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKZXh0ZXJuIGludCBzZXRz dGF0ZV9yICh2b2lkICogX19yZXN0cmljdCBfX3N0YXRlYnVmLCBzdHJ1Y3QgcmFuZG9tX2RhdGEg Kl9fcmVzdHJpY3QgX19idWYpIDsKCgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSA7CgpleHRl cm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgpleHRlcm4gaW50IHJhbmRf ciAodW5zaWduZWQgaW50ICpfX3NlZWQpIDsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAo dm9pZCkgOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp WzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50 IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcg aW50IG1yYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19z ZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hv cnQgaW50IF9fc2VlZDE2dlszXSkgOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9y dCBpbnQgX19wYXJhbVs3XSkgOwoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25l ZCBzaG9ydCBpbnQgeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwogICAgdW5zaWdu ZWQgc2hvcnQgaW50IGM7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hbM107CiAgICBpbnQg aW5pdDsKICB9OwoKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAq X19yZXN0cmljdCBfX2J1ZmZlciwgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgpleHRl cm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBk cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jl c3VsdCkgOwoKCgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f cmVzdHJpY3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgpleHRl cm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBk cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9f cmVzdWx0KSA7CgoKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAq X19yZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4 dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwgc3RydWN0 IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg X19yZXN1bHQpIDsKCgoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWws IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1 bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1 ZmZlcikgOwoKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJh bVs3XSwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKIyA0NzQgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgOwoKZXh0 ZXJuIHZvaWQgKiBjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKSA7CgoKCgoK ZXh0ZXJuIHZvaWQgKiByZWFsbG9jICh2b2lkICogX19wdHIsIHNpemVfdCBfX3NpemUpIDsKCmV4 dGVybiB2b2lkIGZyZWUgKHZvaWQgKiBfX3B0cikgOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9p ZCAqIF9fcHRyKSA7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyMiAiL3Vz ci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj IDIzICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2Nj LWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYgIi91 c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKCgoKCgpleHRlcm4gdm9pZCAqIGFsbG9jYSAoc2l6 ZV90IF9fc2l6ZSkgOwojIDQ5MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVy biB2b2lkICogdmFsbG9jIChzaXplX3QgX19zaXplKSA7CgoKCgpleHRlcm4gdm9pZCBhYm9ydCAo dm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhp dCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSA7CgoKCgpleHRlcm4gaW50IF9fb25fZXhpdCAodm9p ZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqIF9fYXJnKSwgdm9pZCAqIF9fYXJnKSA7 CgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQg KiBfX2FyZyksIHZvaWQgKiBfX2FyZykgOwoKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19z dGF0dXMpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA1MzAgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg OwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg OwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgOwoKCgoKCmV4dGVybiBp bnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBp bnQgX19yZXBsYWNlKSA7CgoKCmV4dGVybiB2b2lkIHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9f bmFtZSkgOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSA7CiMgNTY2ICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkg OwoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCmV4dGVy biBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgOwojIDU5NSAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbmFtZSwgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSA7CgoKCgoKCgp0eXBl ZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICop OwojIDYxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICogYnNlYXJjaCAo X19jb25zdCB2b2lkICogX19rZXksIF9fY29uc3Qgdm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1l bWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgoKCmV4dGVybiB2 b2lkIHFzb3J0ICh2b2lkICogX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwg X19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQg X194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNjM0ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19u dW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CiMgNjUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJs ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f cmVzdHJpY3QgX19zaWduKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVl LCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3Qg X19zaWduKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsIGNoYXIgKl9fYnVmKSA7CgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz dHJpY3QgX19zaWduKSA7CgpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBf X3NpZ24pIDsKCmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9f bmRpZ2l0LCBjaGFyICpfX2J1ZikgOwoKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192 YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry aWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CgoKZXh0 ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0 cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9f YnVmLCBzaXplX3QgX19sZW4pIDsKCgoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz dHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKCgpl eHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVz dHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwojIDY5NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSA7CgoK ZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIDsKCgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNo YXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSA7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdj aGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz aXplX3QgX19uKSA7CgoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBf X3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pIDsKIyA3 MTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3Qg Y2hhciAqX19yZXNwb25zZSkgOwojIDE4ICJoaW50LmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3Ry aW5nLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgoK CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVy biB2b2lkICogbWVtY3B5ICh2b2lkICogX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAq IF9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgoKZXh0ZXJuIHZvaWQgKiBtZW1tb3Zl ICh2b2lkICogX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3NyYywgc2l6ZV90IF9fbikgOwoKCgoK CgpleHRlcm4gdm9pZCAqIG1lbWNjcHkgKHZvaWQgKiBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9f c3JjLCBpbnQgX19jLCBzaXplX3QgX19uKSA7CgoKCgoKZXh0ZXJuIHZvaWQgKiBtZW1zZXQgKHZv aWQgKiBfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19j b25zdCB2b2lkICogX19zMSwgX19jb25zdCB2b2lkICogX19zMiwgc2l6ZV90IF9fbikgOwoKCgpl eHRlcm4gdm9pZCAqIG1lbWNociAoX19jb25zdCB2b2lkICogX19zLCBpbnQgX19jLCBzaXplX3Qg X19uKSA7CiMgNzEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY3B5 IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj KSA7CgoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgoKZXh0ZXJuIGNoYXIg KnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3NyYykgOwoKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKCmV4dGVy biBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgOwoK ZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z Miwgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIpIDsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19y ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f bikgOwojIDExMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpfX3N0cmR1 cCAoX19jb25zdCBjaGFyICpfX3MpIDsKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFy ICpfX3MpIDsKIyAxNDYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3Ry Y2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIg KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSA7CiMgMTU4ICIvdXNyL2luY2x1ZGUvc3RyaW5n LmgiIDMKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj aGFyICpfX3JlamVjdCkgOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9f cywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkgOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29u c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KSA7CgpleHRlcm4gY2hhciAqc3Ry c3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpIDsK IyAxNzYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RydG9rIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIDsKCgoK CmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsK CgoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsK IyAyMDcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19j b25zdCBjaGFyICpfX3MpIDsKIyAyMTcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4g Y2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgOwoKCgpleHRlcm4gY2hhciAqX19zdHJlcnJv cl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsKZXh0ZXJu IGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1 ZmxlbikgOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqIF9fcywgc2l6ZV90IF9fbikg OwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICogX19zcmMsIHZvaWQgKiBfX2Rl c3QsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqIF9fcywgc2l6ZV90 IF9fbikgOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICogX19zMSwgX19jb25zdCB2 b2lkICogX19zMiwgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX2MpIDsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIg Kl9fcywgaW50IF9fYykgOwoKCgpleHRlcm4gaW50IF9fZmZzIChpbnQgX19pKSBfX2F0dHJpYnV0 ZV9fICgoY29uc3QpKTsKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChj b25zdCkpOwojIDI2MSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQgX19zdHJj YXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgOwpleHRlcm4g aW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSA7 CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIsIHNpemVfdCBfX24pIDsKIyAyODIgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpl eHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2RlbGltKSA7CiMgMzQzICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcuaCIgMSAzCiMgMzQ0ICIvdXNyL2luY2x1 ZGUvc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAxIDMK IyA1MiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Vu ZGlhbi5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvc3Ry aW5nMi5oIiAyIDMKIyAzNzIgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4g dm9pZCAqIF9fcmF3bWVtY2hyIChjb25zdCB2b2lkICogX19zLCBpbnQgX19jKTsKIyAzOTYgIi91 c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJj cHlfc21hbGwgKGNoYXIgKiwgX191aW50MTZfdCwgX191aW50MTZfdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3VpbnQzMl90LCBfX3VpbnQzMl90LCBzaXplX3QpOwpl eHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RyY3B5X3NtYWxsIChjaGFyICpfX2Rlc3QsCiAgICAg ICAgICAgICAgICBfX3VpbnQxNl90IF9fc3JjMF8yLCBfX3VpbnQxNl90IF9fc3JjNF8yLAogICAg ICAgICAgICAgICAgX191aW50MzJfdCBfX3NyYzBfNCwgX191aW50MzJfdCBfX3NyYzRfNCwKICAg ICAgICAgICAgICAgIHNpemVfdCBfX3NyY2xlbikKewogIHVuaW9uIHsKICAgIF9fdWludDMyX3Qg X191aTsKICAgIF9fdWludDE2X3QgX191c2k7CiAgICB1bnNpZ25lZCBjaGFyIF9fdWM7CiAgfSAq X191ID0gKHZvaWQgKikgX19kZXN0OwogIHN3aXRjaCAoKHVuc2lnbmVkIGludCkgX19zcmNsZW4p CiAgICB7CiAgICBjYXNlIDE6CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAgICAgIGJyZWFrOwog ICAgY2FzZSAyOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIGJyZWFrOwogICAg Y2FzZSAzOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5z aW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBi cmVhazsKICAgIGNhc2UgNDoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIGJyZWFr OwogICAgY2FzZSA1OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19l eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAg ICAgIGJyZWFrOwogICAgY2FzZSA2OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAg X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191c2kg PSBfX3NyYzRfMjsKICAgICAgYnJlYWs7CiAgICBjYXNlIDc6CiAgICAgIF9fdS0+X191aSA9IF9f c3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAg ICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBj YXNlIDg6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lv bl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VpID0gX19zcmM0XzQ7CiAgICAg IGJyZWFrOwogICAgfQogIHJldHVybiBfX2Rlc3Q7Cn0KIyA4NzMgIi91c3IvaW5jbHVkZS9iaXRz L3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMSAoX19jb25z dCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ry Y3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QpCnsKICByZWdpc3RlciBz aXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19z W19fcmVzdWx0XSAhPSBfX3JlamVjdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0 Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpf X3MsIGNoYXIgX19yZWplY3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAoX19j b25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MikKewogIHJlZ2lz dGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAm JiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQogICAgICAgICAmJiBfX3NbX19yZXN1bHRdICE9 IF9fcmVqZWN0MikKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4g X19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19y ZWplY3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX3JlamVj dDIsIGNoYXIgX19yZWplY3QzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzMg KF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIsCiAgICAg ICAgICAgICAgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAw OwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3Jl amVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIgJiYgX19zW19fcmVz dWx0XSAhPSBfX3JlamVjdDMpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoj IDkyOCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBzaXpl X3QgX19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0KTsKZXh0ZXJu IF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19h Y2NlcHQpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19f cmVzdWx0XSA9PSBfX2FjY2VwdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9 CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywg Y2hhciBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg X19hY2NlcHQyKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMiAoX19jb25zdCBj aGFyICpfX3MsIGNoYXIgX19hY2NlcHQxLCBjaGFyIF9fYWNjZXB0MikKewogIHJlZ2lzdGVyIHNp emVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8 fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MikKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9f cmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MzIChfX2NvbnN0IGNo YXIgKl9fcywgY2hhciBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgX19hY2NlcHQyLCBjaGFyIF9fYWNjZXB0Myk7CmV4dGVybiBfX2lubGluZSBzaXpl X3QKX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0MSwgY2hhciBf X2FjY2VwdDIsIGNoYXIgX19hY2NlcHQzKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0g MDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0g PT0gX19hY2NlcHQyCiAgICAgICAgIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQzKQogICAg KytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA5ODMgIi91c3IvaW5jbHVkZS9iaXRz L3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJwYnJrX2MyIChfX2NvbnN0 IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyIF9fYWNjZXB0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJr X2MyIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsIGNoYXIgX19hY2NlcHQyKQp7 CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX2FjY2VwdDEgJiYgKl9fcyAhPSBf X2FjY2VwdDIpCiAgICArK19fczsKICByZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkg OiAoY2hhciAqKSAoc2l6ZV90KSBfX3M7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBi cmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19hY2NlcHQyLCBjaGFyIF9fYWNjZXB0Myk7CmV4 dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgY2hh ciBfX2FjY2VwdDEsIGNoYXIgX19hY2NlcHQyLAogICAgICAgICAgICAgIGNoYXIgX19hY2NlcHQz KQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX2FjY2VwdDEgJiYgKl9fcyAh PSBfX2FjY2VwdDIKICAgICAgICAgJiYgKl9fcyAhPSBfX2FjY2VwdDMpCiAgICArK19fczsKICBy ZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAqKSAoc2l6ZV90KSBfX3M7 Cn0KIyAxMDQ0ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5l IGNoYXIgKl9fc3RydG9rX3JfMWMgKGNoYXIgKl9fcywgY2hhciBfX3NlcCwgY2hhciAqKl9fbmV4 dHApOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RydG9rX3JfMWMgKGNoYXIgKl9fcywgY2hh ciBfX3NlcCwgY2hhciAqKl9fbmV4dHApCnsKICBjaGFyICpfX3Jlc3VsdDsKICBpZiAoX19zID09 ICgodm9pZCAqKTApKQogICAgX19zID0gKl9fbmV4dHA7CiAgd2hpbGUgKCpfX3MgPT0gX19zZXAp CiAgICArK19fczsKICBpZiAoKl9fcyA9PSAnXDAnKQogICAgX19yZXN1bHQgPSAoKHZvaWQgKikw KTsKICBlbHNlCiAgICB7CiAgICAgIF9fcmVzdWx0ID0gX19zOwogICAgICB3aGlsZSAoKl9fcyAh PSAnXDAnICYmICpfX3MgIT0gX19zZXApCiAgICAgICAgKytfX3M7CiAgICAgIGlmICgqX19zID09 ICdcMCcpCiAgICAgICAgKl9fbmV4dHAgPSBfX3M7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg ICAgICAqX19zID0gJ1wwJzsKICAgICAgICAgICpfX25leHRwID0gX19zICsgMTsKICAgICAgICB9 CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgMTA5NCAiL3Vzci9pbmNsdWRlL2JpdHMvc3Ry aW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywg Y2hhciBfX3JlamVjdCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfMWMgKGNoYXIg KipfX3MsIGNoYXIgX19yZWplY3QpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7 CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQg KikwKTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVqZWN0KQogICAgKigqX19zKSsrID0gJ1wwJzsK ICBlbHNlCiAgICBpZiAoKCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50 X3AgKF9fcmVqZWN0KSAmJiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNo ciAoX19yZXR2YWwsIF9fcmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAh PSAoKHZvaWQgKikwKSkKICAgICAgKigqX19zKSsrID0gJ1wwJzsKICAgIGVsc2UKICAgICAgKl9f cyA9ICgodm9pZCAqKTApOwogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNo YXIgKl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVj dDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFy IF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9 ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuICpfX3MgPSAo KHZvaWQgKikwKTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVqZWN0MSB8fCAqX19yZXR2YWwgPT0g X19yZWplY3QyKQogICAgKigqX19zKSsrID0gJ1wwJzsKICBlbHNlCiAgICB7CiAgICAgIHJlZ2lz dGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKCpfX2NwICE9ICdcMCcgJiYg Kl9fY3AgIT0gX19yZWplY3QxICYmICpfX2NwICE9IF9fcmVqZWN0MikKICAgICAgICArK19fY3A7 CiAgICAgIGlmICgqX19jcCAhPSAnXDAnKQogICAgICAgIHsKICAgICAgICAgICpfX3MgPSBfX2Nw OwogICAgICAgICAgKigqX19zKSsrID0gJ1wwJzsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg ICAqX19zID0gKCh2b2lkICopMCk7CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4g X19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBj aGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9f cmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3Ms IGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdp c3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTAp KQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVq ZWN0MSB8fCAqX19yZXR2YWwgPT0gX19yZWplY3QyCiAgICAgIHx8ICpfX3JldHZhbCA9PSBfX3Jl amVjdDMpCiAgICAqKCpfX3MpKysgPSAnXDAnOwogIGVsc2UKICAgIHsKICAgICAgcmVnaXN0ZXIg Y2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAgICB3aGlsZSAoKl9fY3AgIT0gJ1wwJyAmJiAqX19j cCAhPSBfX3JlamVjdDEgJiYgKl9fY3AgIT0gX19yZWplY3QyCiAgICAgICAgICAgICAmJiAqX19j cCAhPSBfX3JlamVjdDMpCiAgICAgICAgKytfX2NwOwogICAgICBpZiAoKl9fY3AgIT0gJ1wwJykK ICAgICAgICB7CiAgICAgICAgICAqX19zID0gX19jcDsKICAgICAgICAgICooKl9fcykrKyA9ICdc MCc7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgKl9fcyA9ICgodm9pZCAqKTApOwogICAg fQogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwX2cg KGNoYXIgKipfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgY2hh ciAqCl9fc3Ryc2VwX2cgKGNoYXIgKipfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCnsKICBy ZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAq KTApKQogICAgcmV0dXJuICgodm9pZCAqKTApOwogIGlmICgoKl9fcyA9IF9fZXh0ZW5zaW9uX18g KHsgY2hhciBfX2EwLCBfX2ExLCBfX2EyOyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0 KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoX19yZWplY3QpICsgMSkgLSAoc2l6ZV90KShj b25zdCB2b2lkICopKF9fcmVqZWN0KSA9PSAxKSA/ICgoX19hMCA9ICgoX19jb25zdCBjaGFyICop IChfX3JlamVjdCkpWzBdLCBfX2EwID09ICdcMCcpID8gKCh2b2lkICopMCkgOiAoKF9fYTEgPSAo KF9fY29uc3QgY2hhciAqKSAoX19yZWplY3QpKVsxXSwgX19hMSA9PSAnXDAnKSA/IChfX2V4dGVu c2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19hMCkgJiYgKF9fYTApID09ICdcMCcgPyAo Y2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWwsIF9fYTApIDogc3RyY2hyIChfX3JldHZhbCwg X19hMCkpKSA6ICgoX19hMiA9ICgoX19jb25zdCBjaGFyICopIChfX3JlamVjdCkpWzJdLCBfX2Ey ID09ICdcMCcpID8gX19zdHJwYnJrX2MyIChfX3JldHZhbCwgX19hMCwgX19hMSkgOiAoKChfX2Nv bnN0IGNoYXIgKikgKF9fcmVqZWN0KSlbM10gPT0gJ1wwJyA/IF9fc3RycGJya19jMyAoX19yZXR2 YWwsIF9fYTAsIF9fYTEsIF9fYTIpIDogc3RycGJyayAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSkg OiBzdHJwYnJrIChfX3JldHZhbCwgX19yZWplY3QpKTsgfSkpICE9ICgodm9pZCAqKTApKQogICAg KigqX19zKSsrID0gJ1wwJzsKICByZXR1cm4gX19yZXR2YWw7Cn0KIyAxMTg3ICIvdXNyL2luY2x1 ZGUvYml0cy9zdHJpbmcyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDEx ODggIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMiAzCiMgMzQ3ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDIgMwojIDE5ICJoaW50LmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAx IDMKIyAyNyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92 YWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNs dWRlL2JpdHMvaHVnZV92YWwuaCIgMiAzCiMgMzQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoK CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMSAzCiMgNDEgIi91c3IvaW5j bHVkZS9tYXRoLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo Y2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl IF9fYWNvcyAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpOyBl eHRlcm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRv dWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91 YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4y IChkb3VibGUgX195LCBkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9f eCk7IGV4dGVybiBkb3VibGUgX19jb3MgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBzaW4g KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194KTsKCmV4dGVybiBk b3VibGUgdGFuIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCk7 CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgY29z aCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19jb3NoIChkb3VibGUgX194KTsKCmV4dGVy biBkb3VibGUgc2luaCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUg X194KTsKCmV4dGVybiBkb3VibGUgdGFuaCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX190 YW5oIChkb3VibGUgX194KTsKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCk7IGV4 dGVybiBkb3VibGUgX19hY29zaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChk b3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KTsKCmV4dGVybiBk b3VibGUgYXRhbmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRvdWJsZSBf X3gpOwoKCgoKCmV4dGVybiBkb3VibGUgZXhwIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBf X2V4cCAoZG91YmxlIF9feCk7CiMgMTA2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIg MwpleHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpOyBleHRl cm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCk7CgoKZXh0ZXJu IGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpOyBleHRlcm4gZG91Ymxl IF9fbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KTsKCgpleHRlcm4gZG91YmxlIGxv ZyAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpOwoKCmV4dGVy biBkb3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJs ZSBfX3gpOwoKCmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIp OyBleHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpOwoKCgpl eHRlcm4gZG91YmxlIGV4cG0xIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChk b3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KTsgZXh0ZXJuIGRv dWJsZSBfX2xvZzFwIChkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBf X3gpOyBleHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9feCk7CiMgMTQzICIvdXNyL2luY2x1 ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91 YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoK CmV4dGVybiBkb3VibGUgc3FydCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChk b3VibGUgX194KTsKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9f eSk7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCgpl eHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91 YmxlIF9feCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlIF9feCk7IGV4dGVybiBk b3VibGUgX19jZWlsIChkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBf X3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRv dWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZs b29yIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KTsKCgpl eHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4gZG91Ymxl IF9fZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCgpleHRlcm4gaW50IF9faXNpbmYg KGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu dCBfX2Zpbml0ZSAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGluZm5hbiAoaW50IF9fZXJy b3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2luZm5hbiAo aW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91Ymxl IGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9fZHJlbSAoZG91 YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJs ZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpOwoKCgoKZXh0 ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY29weXNpZ24gKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAyMTcgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBpbnQgX19pc25hbiAoZG91YmxlIF9fdmFsdWUp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbiAoZG91Ymxl IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGow IChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fajAgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgajEg KGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBqbiAo aW50LCBkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91YmxlKTsKZXh0ZXJuIGRv dWJsZSB5MCAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX3kwIChkb3VibGUpOwpleHRlcm4gZG91 YmxlIHkxIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9feTEgKGRvdWJsZSk7CmV4dGVybiBkb3Vi bGUgeW4gKGludCwgZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSk7CgoK CgoKZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJs ZSk7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKGRv dWJsZSk7CmV4dGVybiBkb3VibGUgbGdhbW1hIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fbGdh bW1hIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHRnYW1tYSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJs ZSBfX3RnYW1tYSAoZG91YmxlKTsKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSk7IGV4 dGVybiBkb3VibGUgX19nYW1tYSAoZG91YmxlKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBsZ2FtbWFf ciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRv dWJsZSwgaW50ICpfX3NpZ25nYW1wKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUg X194KTsgZXh0ZXJuIGRvdWJsZSBfX3JpbnQgKGRvdWJsZSBfX3gpOwoKCmV4dGVybiBkb3VibGUg bmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRl ciAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194 LCBkb3VibGUgX19uKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3VibGUgX194LCBkb3VibGUg X19uKTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pOyBleHRl cm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKTsKCgpleHRlcm4gaW50IGls b2diIChkb3VibGUgX194KTsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KTsKIyA2NCAi L3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KTsgZXh0ZXJu IGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZsb2F0IF9f eCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGF0YW5m IChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KTsKCmV4dGVybiBm bG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYXRhbjJm IChmbG9hdCBfX3ksIGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0IF9feCk7 IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgc2luZiAoZmxv YXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCB0 YW5mIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpOwojIDc4ICIv dXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0 IF9feCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IHNp bmhmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KTsKCmV4dGVy biBmbG9hdCB0YW5oZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9f eCk7CgoKCmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2Fj b3NoZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCk7IGV4dGVy biBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0 IF9feCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoZmxvYXQgX194KTsKCgoKCgpleHRlcm4gZmxv YXQgZXhwZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194KTsKIyAx MDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBmcmV4cGYg KGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9h dCBfX3gsIGludCAqX19leHBvbmVudCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194 LCBpbnQgX19leHBvbmVudCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQg X19leHBvbmVudCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9h dCBfX2xvZ2YgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KTsg ZXh0ZXJuIGZsb2F0IF9fbG9nMTBmIChmbG9hdCBfX3gpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAo ZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9f eCwgZmxvYXQgKl9faXB0cik7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCk7IGV4 dGVybiBmbG9hdCBfX2V4cG0xZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChm bG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZs b2F0IGxvZ2JmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KTsK IyAxNDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBwb3dm IChmbG9hdCBfX3gsIGZsb2F0IF9feSk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwg ZmxvYXQgX195KTsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9h dCBfX3NxcnRmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gs IGZsb2F0IF9feSk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp OwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19jYnJ0 ZiAoZmxvYXQgX194KTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpOyBleHRl cm4gZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0 IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAo ZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZs b29yZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpOwoKCmV4 dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19m bW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxv YXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19m aW5pdGVmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpl eHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGluZm5hbmYgKGludCBfX2Vycm9yKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2luZm5hbmYgKGludCBf X2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1m IChmbG9hdCBfX3gsIGZsb2F0IF9feSk7IGV4dGVybiBmbG9hdCBfX2RyZW1mIChmbG9hdCBfX3gs IGZsb2F0IF9feSk7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2FuZGYgKGZsb2F0IF9feCk7IGV4 dGVybiBmbG9hdCBfX3NpZ25pZmljYW5kZiAoZmxvYXQgX194KTsKCgoKCmV4dGVybiBmbG9hdCBj b3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAyMTcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxs cy5oIiAzCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCk7IGV4dGVy biBmbG9hdCBfX2owZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCk7IGV4dGVybiBm bG9hdCBfX2oxZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0KTsgZXh0ZXJu IGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQpOyBleHRl cm4gZmxvYXQgX195MGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpOyBleHRlcm4g ZmxvYXQgX195MWYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9hdCk7IGV4dGVy biBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0 KTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgZXJmY2YgKGZsb2F0 KTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZs b2F0KTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgdGdhbW1h ZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCk7CgoKCgpleHRlcm4gZmxv YXQgZ2FtbWFmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpOwoKCgoKCgpl eHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsgZXh0ZXJuIGZs b2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsKCgoKCgoKZXh0ZXJuIGZs b2F0IHJpbnRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KTsK CgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194 LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gZmxv YXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19yZW1h aW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZs b2F0IF9feCwgZmxvYXQgX19uKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZs b2F0IF9fbik7CgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pOyBl eHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pOwoKCmV4dGVybiBpbnQg aWxvZ2JmIChmbG9hdCBfX3gpOyBleHRlcm4gaW50IF9faWxvZ2JmIChmbG9hdCBfX3gpOwojIDgz ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRl L2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJs ZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zbCAobG9uZyBkb3VibGUgX194KTsKCmV4 dGVybiBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmwg KGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5sIChsb25nIGRvdWJs ZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25n IGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9f eSwgbG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3Vi bGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBkb3VibGUgX194KTsKCmV4 dGVybiBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKGxv bmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9f eCk7CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRv dWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwg KGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91Ymxl IF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0 ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX190YW5obCAobG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3No bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRv dWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxv bmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f YXRhbmhsIChsb25nIGRvdWJsZSBfX3gpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChs b25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBf X3gpOwojIDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcg ZG91YmxlIGZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpOyBleHRlcm4g bG9uZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KTsK CgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9u ZW50KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBf X2V4cG9uZW50KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nbCAobG9uZyBkb3VibGUgX194KTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9u ZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19s b2cxMGwgKGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG1vZGZsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpOyBleHRlcm4gbG9uZyBkb3VibGUgX19t b2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKTsKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f ZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxcGwgKGxv bmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFwbCAobG9uZyBkb3VibGUg X194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJsZSBfX3gpOwojIDE0MyAiL3Vzci9pbmNs dWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0 bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91 YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2JydGwgKGxv bmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJsZSBf X3gpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25n IGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRv dWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCk7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVl KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxv bmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy biBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgaW5mbmFubCAo aW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9faW5mbmFubCAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgpleHRlcm4gbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbCAobG9uZyBkb3Vi bGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBf X3gpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDIxNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNh bGxzLmgiIDMKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUg X192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBqMGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJs ZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fajFsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9u ZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpOwpl eHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBf X3kwbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3Vi bGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQs IGxvbmcgZG91YmxlKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUp OyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRv dWJsZSBlcmZjbCAobG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9u ZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpOyBleHRl cm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJs ZSB0Z2FtbWFsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxv bmcgZG91YmxlKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSk7CgoKCgoKCmV4dGVybiBs b25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOyBleHRl cm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXAp OwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRv dWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFpbmRlcmwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxi bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pOyBleHRlcm4gbG9uZyBkb3VibGUg X19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKTsKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbik7IGV4dGVybiBsb25n IGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbik7CgoKZXh0ZXJuIGlu dCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91 YmxlIF9feCk7CiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5j bHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBzaWduZ2FtOwojIDIzNiAiL3Vzci9pbmNsdWRlL21h dGguaCIgMwp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5f LAogIF9QT1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJ Ql9WRVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOwojIDI2MSAiL3Vzci9pbmNsdWRlL21hdGguaCIg MwpzdHJ1Y3QgZXhjZXB0aW9uCgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAqbmFtZTsKICAg IGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFsOwogIH07CgoK CgpleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBleGNlcHRpb24gKl9fZXhjKSA7CiMgMjg5ICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBj LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAyOTAgIi91c3IvaW5jbHVkZS9t YXRoLmgiIDIgMwojIDM0OCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiMgMjM0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s aW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlKTsgZXh0ZXJuIF9f aW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlIF9feCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAu MCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgX19z Z25mIChmbG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBfX3NnbmYgKGZsb2F0IF9feCkgeyBy ZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBleHRl cm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lu bGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX194ID09 IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQoKCmV4dGVybiBfX2lubGlu ZSBkb3VibGUgX19wb3cyIChkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fcG93MiAo ZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25n IGRvdWJsZSBfX2V4cG9uZW50OyBfX2V4dGVuc2lvbl9fIGxvbmcgbG9uZyBpbnQgX19wID0gKGxv bmcgbG9uZyBpbnQpIF9feDsgaWYgKF9feCA9PSAobG9uZyBkb3VibGUpIF9fcCkgeyBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKDEuMCksICJ1IiAo X194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZAklJXN0KDAp XG5cdCIgImZybmRpbnQJCQkjIGludCh4KVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJ IyBmcmFjdCh4KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCkpIC0gMVxuXHQiIDogIj10IiAo X192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7 IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192 YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxp bmUgZmxvYXQgX19wb3cyZiAoZmxvYXQpOyBleHRlcm4gX19pbmxpbmUgZmxvYXQgX19wb3cyZiAo ZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fZXhwb25lbnQ7IF9fZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9u ZyBsb25nIGludCkgX194OyBpZiAoX194ID09IChsb25nIGRvdWJsZSkgX19wKSB7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoMS4wKSwgInUiIChf X3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19hc20gX192b2xhdGlsZV9fICgiZmxkCSUlc3QoMClc blx0IiAiZnJuZGludAkJCSMgaW50KHgpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkj IGZyYWN0KHgpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4KSkgLSAxXG5cdCIgOiAiPXQiIChf X3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsg X19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3Zh bHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGlu ZSBsb25nIGRvdWJsZSBfX3BvdzJsIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25n IGRvdWJsZSBfX3BvdzJsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBs b25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3g7IGlmIChfX3ggPT0gKGxvbmcg ZG91YmxlKSBfX3ApIHsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFs dWUpIDogIjAiICgxLjApLCAidSIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2FzbSBfX3Zv bGF0aWxlX18gKCJmbGQJJSVzdCgwKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeClcblx0IiAiZnhj aFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeClcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0 KHgpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAo X194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10 IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9f dmFsdWU7IH0KIyAyODMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4g X19pbmxpbmUgdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJs ZSAqX19jb3N4KTsKZXh0ZXJuIF9faW5saW5lIHZvaWQKX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRv dWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f Y29zcjsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19zaW5yOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm c2luY29zXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInRlc3RsCSQweDQwMCwgJSVlYXhcblx0IiAi anoJMWZcblx0IiAiZmxkcGlcblx0IiAiZmFkZAklJXN0KDApXG5cdCIgImZ4Y2gJJSVzdCgxKVxu XHQiICIyOiBmcHJlbTFcblx0IiAiZm5zdHN3CSUlYXhcblx0IiAidGVzdGwJJDB4NDAwLCAlJWVh eFxuXHQiICJqbnoJMmJcblx0IiAiZnN0cAklJXN0KDEpXG5cdCIgImZzaW5jb3Ncblx0IiAiMToi IDogIj10IiAoX19jb3NyKSwgIj11IiAoX19zaW5yKSA6ICIwIiAoX194KSk7ICpfX3NpbnggPSBf X3NpbnI7ICpfX2Nvc3ggPSBfX2Nvc3I7Cn0KCmV4dGVybiBfX2lubGluZSB2b2lkIF9fc2luY29z ZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KTsKZXh0ZXJuIF9faW5s aW5lIHZvaWQKX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nv c3gpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2Nvc3I7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fc2lucjsgX19hc20gX192b2xhdGlsZV9fICgiZnNpbmNvc1xuXHQiICJmbnN0c3cJJSVheFxu XHQiICJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIgImp6CTFmXG5cdCIgImZsZHBpXG5cdCIgImZh ZGQJJSVzdCgwKVxuXHQiICJmeGNoCSUlc3QoMSlcblx0IiAiMjogZnByZW0xXG5cdCIgImZuc3Rz dwklJWF4XG5cdCIgInRlc3RsCSQweDQwMCwgJSVlYXhcblx0IiAiam56CTJiXG5cdCIgImZzdHAJ JSVzdCgxKVxuXHQiICJmc2luY29zXG5cdCIgIjE6IiA6ICI9dCIgKF9fY29zciksICI9dSIgKF9f c2lucikgOiAiMCIgKF9feCkpOyAqX19zaW54ID0gX19zaW5yOyAqX19jb3N4ID0gX19jb3NyOwp9 CgpleHRlcm4gX19pbmxpbmUgdm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgKl9fc2lueCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3VibGUg Kl9fY29zeCk7CmV4dGVybiBfX2lubGluZSB2b2lkCl9fc2luY29zbCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KQp7CiAgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX19jb3NyOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3NpbnI7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZzaW5jb3Ncblx0IiAiZm5zdHN3CSUlYXhcblx0IiAidGVzdGwJJDB4NDAw LCAlJWVheFxuXHQiICJqegkxZlxuXHQiICJmbGRwaVxuXHQiICJmYWRkCSUlc3QoMClcblx0IiAi ZnhjaAklJXN0KDEpXG5cdCIgIjI6IGZwcmVtMVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJ0ZXN0 bAkkMHg0MDAsICUlZWF4XG5cdCIgImpuegkyYlxuXHQiICJmc3RwCSUlc3QoMSlcblx0IiAiZnNp bmNvc1xuXHQiICIxOiIgOiAiPXQiIChfX2Nvc3IpLCAiPXUiIChfX3NpbnIpIDogIjAiIChfX3gp KTsgKl9fc2lueCA9IF9fc2lucjsgKl9fY29zeCA9IF9fY29zcjsKfQojIDMyOCAiL3Vzci9pbmNs dWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX2V4 cG0xbCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19leHBtMWwg KGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3RlbXA7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAt IDFcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5c dCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUl c3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICog bG9nMihlKSkpIC0gMVxuXHQiICJmc2NhbGUJCQkjIDJeKHggKiBsb2cyKGUpKSAtIDJeKGludCh4 ICogbG9nMihlKSkpXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAi MCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUJCQkjIDJeaW50KHggKiBsb2cy KGUpKVxuXHQiIDogIj10IiAoX190ZW1wKSA6ICIwIiAoMS4wKSwgInUiIChfX2V4cG9uZW50KSk7 IF9fdGVtcCAtPSAxLjA7IHJldHVybiBfX3RlbXAgKyBfX3ZhbHVlOyB9CiMgMzQ4ICIvdXNyL2lu Y2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBleHAgKGRv dWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgZXhwIChkb3VibGUgX194KSB7IHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54ID0gMl4oeCAqIGxvZzIoZSkpXG5cdCIg ImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5k aW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkj IGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkp KSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194 KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAo X192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFs dWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGV4cGYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5l IGZsb2F0IGV4cGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRs MmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxv ZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUp KVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0 IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgOiAiPXQiIChfX3Zh bHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsgX19h c20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVl KSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBs b25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJs ZSBleHBsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxk bDJlCQkJIyBlXnggPSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBs b2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihl KSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5c dCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192 YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1 ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfQpleHRlcm4gX19pbmxpbmUg bG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQiICJmbXVsCSUlc3QoMSkJCSMg eCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBs b2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihl KSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgOiAiPXQi IChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEu MDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChf X3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9CgoKZXh0ZXJuIF9f aW5saW5lIGRvdWJsZSB0YW4gKGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgdGFuIChk b3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWUyIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZwdGFuIiA6ICI9dCIgKF9fdmFsdWUyKSwgIj11IiAoX192YWx1ZSkgOiAiMCIg KF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgdGFuZiAoZmxv YXQpOyBleHRlcm4gX19pbmxpbmUgZmxvYXQgdGFuZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmli dXRlX18gKChfX3VudXNlZF9fKSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFuIiA6ICI9dCIg KF9fdmFsdWUyKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsg fSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUpOyBleHRlcm4g X19pbmxpbmUgbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmli dXRlX18gKChfX3VudXNlZF9fKSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFuIiA6ICI9dCIg KF9fdmFsdWUyKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsg fQojIDM2NyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGlu ZSBkb3VibGUgYXRhbjIgKGRvdWJsZSwgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBh dGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIg KF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19p bmxpbmUgZmxvYXQgYXRhbjJmIChmbG9hdCwgZmxvYXQpOyBleHRlcm4gX19pbmxpbmUgZmxvYXQg YXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIg KF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19p bmxpbmUgbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOyBleHRl cm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91 YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJz dCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19h dGFuMmwgKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9 dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9f dmFsdWU7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGZtb2QgKGRvdWJsZSwgZG91YmxlKTsg ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVt XG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsg fSBleHRlcm4gX19pbmxpbmUgZmxvYXQgZm1vZGYgKGZsb2F0LCBmbG9hdCk7IGV4dGVybiBfX2lu bGluZSBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3 CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194 KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lu bGluZSBsb25nIGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKTsgZXh0ZXJu IF9faW5saW5lIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18g KCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9 dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJu IF9fdmFsdWU7IH0KIyAzODIgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRl cm4gX19pbmxpbmUgZG91YmxlIHBvdyAoZG91YmxlLCBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUg ZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2V4dGVuc2lvbl9f IGxvbmcgbG9uZyBpbnQgX19wID0gKGxvbmcgbG9uZyBpbnQpIF9feTsgaWYgKF9feCA9PSAwLjAg JiYgX195ID4gMC4wKSByZXR1cm4gMC4wOyBpZiAoX195ID09IChkb3VibGUpIF9fcCkgeyBsb25n IGRvdWJsZSBfX3IgPSAxLjA7IGlmIChfX3AgPT0gMCkgcmV0dXJuIDEuMDsgaWYgKF9fcCA8IDAp IHsgX19wID0gLV9fcDsgX194ID0gMS4wIC8gX194OyB9IHdoaWxlICgxKSB7IGlmIChfX3AgJiAx KSBfX3IgKj0gX194OyBfX3AgPj49IDE7IGlmIChfX3AgPT0gMCkgcmV0dXJuIF9fcjsgX194ICo9 IF9feDsgfSB9IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ5bDJ4IiA6ICI9dCIgKF9fdmFsdWUpIDog IjAiIChfX3gpLCAidSIgKDEuMCkgOiAic3QoMSkiKTsgX19hc20gX192b2xhdGlsZV9fICgiZm11 bAklJXN0KDEpCQkjIHkgKiBsb2cyKHgpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJ CQkjIGludCh5ICogbG9nMih4KSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJh Y3QoeSAqIGxvZzIoeCkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh5ICogbG9nMih4KSkpIC0g MVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3kpLCAi MSIgKF9fdmFsdWUpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2Fs ZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOyBy ZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgcG93ZiAoZmxvYXQsIGZsb2F0 KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25l bnQ7IF9fZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25nIGludCkgX195 OyBpZiAoX194ID09IDAuMCAmJiBfX3kgPiAwLjApIHJldHVybiAwLjA7IGlmIChfX3kgPT0gKGRv dWJsZSkgX19wKSB7IGxvbmcgZG91YmxlIF9fciA9IDEuMDsgaWYgKF9fcCA9PSAwKSByZXR1cm4g MS4wOyBpZiAoX19wIDwgMCkgeyBfX3AgPSAtX19wOyBfX3ggPSAxLjAgLyBfX3g7IH0gd2hpbGUg KDEpIHsgaWYgKF9fcCAmIDEpIF9fciAqPSBfX3g7IF9fcCA+Pj0gMTsgaWYgKF9fcCA9PSAwKSBy ZXR1cm4gX19yOyBfX3ggKj0gX194OyB9IH0gX19hc20gX192b2xhdGlsZV9fICgiZnlsMngiIDog Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoMS4wKSA6ICJzdCgxKSIpOyBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmbXVsCSUlc3QoMSkJCSMgeSAqIGxvZzIoeClcblx0IiAiZnN0CSUlc3Qo MSlcblx0IiAiZnJuZGludAkJCSMgaW50KHkgKiBsb2cyKHgpKVxuXHQiICJmeGNoXG5cdCIgImZz dWIJJSVzdCgxKQkJIyBmcmFjdCh5ICogbG9nMih4KSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0 KHkgKiBsb2cyKHgpKSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVu dCkgOiAiMCIgKF9feSksICIxIiAoX192YWx1ZSkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192 b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUi IChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBwb3dsIChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9u ZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsg X19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3k7IGlm IChfX3ggPT0gMC4wICYmIF9feSA+IDAuMCkgcmV0dXJuIDAuMDsgaWYgKF9feSA9PSAoZG91Ymxl KSBfX3ApIHsgbG9uZyBkb3VibGUgX19yID0gMS4wOyBpZiAoX19wID09IDApIHJldHVybiAxLjA7 IGlmIChfX3AgPCAwKSB7IF9fcCA9IC1fX3A7IF9feCA9IDEuMCAvIF9feDsgfSB3aGlsZSAoMSkg eyBpZiAoX19wICYgMSkgX19yICo9IF9feDsgX19wID4+PSAxOyBpZiAoX19wID09IDApIHJldHVy biBfX3I7IF9feCAqPSBfX3g7IH0gfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeWwyeCIgOiAiPXQi IChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgxLjApIDogInN0KDEpIik7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZtdWwJJSVzdCgxKQkJIyB5ICogbG9nMih4KVxuXHQiICJmc3QJJSVzdCgxKVxu XHQiICJmcm5kaW50CQkJIyBpbnQoeSAqIGxvZzIoeCkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1Ygkl JXN0KDEpCQkjIGZyYWN0KHkgKiBsb2cyKHgpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeSAq IGxvZzIoeCkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6 ICIwIiAoX195KSwgIjEiIChfX3ZhbHVlKSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9f ZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA0MjYgIi91c3IvaW5jbHVkZS9iaXRzL21h dGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIHNxcnQgKGRvdWJsZSk7IGV4dGVy biBfX2lubGluZSBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19y ZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIw IiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgc3FydGYg KGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHsgcmVnaXN0 ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9f cmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUg bG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91 YmxlIHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1 bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAo X194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19z cXJ0bCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zcXJ0bCAo bG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1 cm4gX19yZXN1bHQ7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGZhYnMgKGRvdWJsZSk7IGV4 dGVybiBfX2lubGluZSBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGlu X2ZhYnMgKF9feCk7IH0KZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZhYnNmIChmbG9hdCk7IGV4dGVy biBfX2lubGluZSBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFi c2YgKF9feCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJs ZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB7 IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91 YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9f ZmFic2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpOyB9 CgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgc2luIChkb3VibGUpOyBleHRlcm4gX19pbmxp bmUgZG91YmxlIHNpbiAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsg cmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBzaW5mIChmbG9hdCk7IGV4 dGVybiBfX2lubGluZSBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19y ZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAi IChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBz aW5sIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBzaW5sIChsb25n IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9f cmVzdWx0OyB9CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGNvcyAoZG91YmxlKTsgZXh0ZXJuIF9f aW5saW5lIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0 OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmY29zIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194 KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgY29zZiAoZmxvYXQp OyBleHRlcm4gX19pbmxpbmUgZmxvYXQgY29zZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0 IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmY29zIiA6ICI9dCIgKF9fcmVzdWx0KSA6 ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3Vi bGUgY29zbCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgY29zbCAo bG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmY29zIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVy biBfX3Jlc3VsdDsgfQoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhdGFuIChkb3VibGUpOyBleHRl cm4gX19pbmxpbmUgZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9f cmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1 bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19p bmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IGF0YW5mIChm bG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsg cmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFubCAobG9u ZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91Ymxl IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9f ICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIp OyByZXR1cm4gX19yZXN1bHQ7IH0KZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBsb2cgKGRvdWJsZSk7 IGV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGRvdWJs ZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yOyBmeGNoOyBmeWwyeCIgOiAi PXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9 IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2dmIChmbG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9h dCBsb2dmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZsZGxuMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChf X3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBk b3VibGUgbG9nbCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9n bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6 ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KZXh0ZXJuIF9faW5saW5l IGRvdWJsZSBsb2cxMCAoZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBsb2cxMCAoZG91 YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZsZGxnMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0 KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgbG9nMTBmIChm bG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgeyByZWdpc3Rl ciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbGcyOyBmeGNoOyBmeWwy eCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVz dWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlKTsg ZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsZzI7 IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyBy ZXR1cm4gX19yZXN1bHQ7IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXNpbiAoZG91YmxlKTsg ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhc2luIChkb3VibGUgX194KSB7IHJldHVybiBfX2F0YW4y bCAoX194LCBfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpKTsgfSBleHRlcm4gX19pbmxpbmUgZmxv YXQgYXNpbmYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gp IHsgcmV0dXJuIF9fYXRhbjJsIChfX3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9feCkpOyB9IGV4 dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19p bmxpbmUgbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19hdGFu MmwgKF9feCwgX19zcXJ0bCAoMS4wIC0gX194ICogX194KSk7IH0KZXh0ZXJuIF9faW5saW5lIGRv dWJsZSBhY29zIChkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIGFjb3MgKGRvdWJsZSBf X3gpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBfX3gpOyB9 IGV4dGVybiBfX2lubGluZSBmbG9hdCBhY29zZiAoZmxvYXQpOyBleHRlcm4gX19pbmxpbmUgZmxv YXQgYWNvc2YgKGZsb2F0IF9feCkgeyByZXR1cm4gX19hdGFuMmwgKF9fc3FydGwgKDEuMCAtIF9f eCAqIF9feCksIF9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3NsIChsb25n IGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUg X194KSB7IHJldHVybiBfX2F0YW4ybCAoX19zcXJ0bCAoMS4wIC0gX194ICogX194KSwgX194KTsg fQoKZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlKTsgZXh0 ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1 cm4gX194ID49IDAuMCA/IDEuMCA6IC0xLjA7IH0KCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBz aW5oIChkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIHNpbmggKGRvdWJsZSBfX3gpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkpOyBy ZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApICsgX19leG0xKSAqIF9fc2duMWwg KF9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IHNpbmhmIChmbG9hdCk7IGV4dGVybiBfX2lu bGluZSBmbG9hdCBzaW5oZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXht MSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19l eG0xICsgMS4wKSArIF9fZXhtMSkgKiBfX3NnbjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBs b25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3Vi bGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEg PSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXht MSArIDEuMCkgKyBfX2V4bTEpICogX19zZ24xbCAoX194KTsgfQoKCgpleHRlcm4gX19pbmxpbmUg ZG91YmxlIGNvc2ggKGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgY29zaCAoZG91Ymxl IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4ID0gX19leHBsIChfX3gpOyByZXR1cm4g MC41ICogKF9fZXggKyAxLjAgLyBfX2V4KTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgY29zaGYg KGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IGNvc2hmIChmbG9hdCBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX19leCA9IF9fZXhwbCAoX194KTsgcmV0dXJuIDAuNSAqIChfX2V4ICsg MS4wIC8gX19leCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRv dWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194 KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXggPSBfX2V4cGwgKF9feCk7IHJldHVybiAwLjUg KiAoX19leCArIDEuMCAvIF9fZXgpOyB9CgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgdGFuaCAo ZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsICgtX19mYWJzbCAoX194ICsgX194KSk7 IHJldHVybiBfX2V4bTEgLyAoX19leG0xICsgMi4wKSAqIF9fc2duMWwgKC1fX3gpOyB9IGV4dGVy biBfX2lubGluZSBmbG9hdCB0YW5oZiAoZmxvYXQpOyBleHRlcm4gX19pbmxpbmUgZmxvYXQgdGFu aGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAo LV9fZmFic2wgKF9feCArIF9feCkpOyByZXR1cm4gX19leG0xIC8gKF9fZXhtMSArIDIuMCkgKiBf X3NnbjFsICgtX194KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgdGFuaGwgKGxvbmcg ZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBf X3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKC1fX2ZhYnNsIChf X3ggKyBfX3gpKTsgcmV0dXJuIF9fZXhtMSAvIChfX2V4bTEgKyAyLjApICogX19zZ24xbCAoLV9f eCk7IH0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSk7IGV4dGVybiBf X2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1 bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIg OiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNt IF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9s YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRl cm4gX19pbmxpbmUgZmxvYXQgZmxvb3JmIChmbG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBm bG9vcmYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0 aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGlu dCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsg X19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZs ZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6 ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUw IiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25n IGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl IGZsb29ybCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7 IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQg c2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAo X19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZy bmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgi ZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA0NzkgIi91c3Iv aW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGNlaWwg KGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgeyByZWdp c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBf X2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2Zm KSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1w KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChf X3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVy biBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBjZWlsZiAoZmxvYXQpOyBleHRlcm4g X19pbmxpbmUgZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf X3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVu c2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6 ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20g X192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRp bGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xh dGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxp bmUgbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0 aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3 ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsg X19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9f dm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20g X192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9 CiMgNDk3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5l IGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9feSk7CmV4dGVybiBfX2lubGluZSBkb3Vi bGUKbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBf X3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCgoK CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGV4cG0xIChkb3VibGUpOyBleHRlcm4gX19pbmxpbmUg ZG91YmxlIGV4cG0xIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dGVtcDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXnggLSAxID0gMl4oeCAqIGxv ZzIoZSkpIC0gMVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUl c3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIg ImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZy YWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgImZzY2FsZQkJCSMgMl4oeCAqIGxvZzIoZSkpIC0g Ml4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9u ZW50KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZQkJCSMgMl5pbnQo eCAqIGxvZzIoZSkpXG5cdCIgOiAiPXQiIChfX3RlbXApIDogIjAiICgxLjApLCAidSIgKF9fZXhw b25lbnQpKTsgX190ZW1wIC09IDEuMDsgcmV0dXJuIF9fdGVtcCArIF9fdmFsdWU7IH0gZXh0ZXJu IF9faW5saW5lIGZsb2F0IGV4cG0xZiAoZmxvYXQpOyBleHRlcm4gX19pbmxpbmUgZmxvYXQgZXhw bTFmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAx XG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQi ICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0 KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxv ZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAq IGxvZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAi IChfX3gpKTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihl KSlcblx0IiA6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBf X3RlbXAgLT0gMS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUg bG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3RlbXA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54IC0gMSA9IDJeKHgg KiBsb2cyKGUpKSAtIDFcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIgImZz dAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhjaFxu XHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAy XihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiICJmc2NhbGUJCQkjIDJeKHggKiBsb2cyKGUp KSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19l eHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUJCQkjIDJe aW50KHggKiBsb2cyKGUpKVxuXHQiIDogIj10IiAoX190ZW1wKSA6ICIwIiAoMS4wKSwgInUiIChf X2V4cG9uZW50KSk7IF9fdGVtcCAtPSAxLjA7IHJldHVybiBfX3RlbXAgKyBfX3ZhbHVlOyB9CgoK CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBsb2cxcCAoZG91YmxlKTsgZXh0ZXJuIF9faW5saW5l IGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl OyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgw TCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgi ZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo X194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQg bG9nMXBmIChmbG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAg LSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9f eCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnls MnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192 YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSk7 IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAw LjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7 IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhw MSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1 ZTsgfQojIDUyOCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lu bGluZSBkb3VibGUgYXNpbmggKGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgYXNpbmgg KGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsg cmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsg MS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYXNp bmhmIChmbG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAo X195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9f c2duMWwgKF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcg ZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUg X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAo bG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBf X3kpICogX19zZ24xbCAoX194KSk7IH0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgYWNvc2gg KGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIHsgcmV0 dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjAp KTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYWNvc2hmIChmbG9hdCk7IGV4dGVybiBfX2lubGlu ZSBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAo X194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IGV4dGVybiBfX2lubGluZSBsb25n IGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl IGFjb3NobCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChf X3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91 YmxlIGF0YW5oIChkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIGF0YW5oIChkb3VibGUg X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAt MC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gp OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuaGYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5l IGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9f ZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsg X195KSkgKiBfX3NnbjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFu aGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5obCAobG9u ZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7 IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3Nn bjFsIChfX3gpOyB9CgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGh5cG90IChkb3VibGUsIGRv dWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBf X3kpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gZXh0ZXJuIF9f aW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQsIGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0 IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9f eCArIF9feSAqIF9feSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGh5cG90bCAobG9u ZyBkb3VibGUsIGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGh5cG90 bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9f eCAqIF9feCArIF9feSAqIF9feSk7IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nYiAoZG91 YmxlKTsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB7IHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20g X192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1 ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQg bG9nYmYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5r OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUi IChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGlu ZSBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBk b3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4 dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsg cmV0dXJuIF9fdmFsdWU7IH0KIyA2MjUgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg MwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGRyZW0gKGRvdWJsZSwgZG91YmxlKTsgZXh0ZXJuIF9f aW5saW5lIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJlZ2lzdGVyIGRv dWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVf XyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDog Ij10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195 KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgZHJlbWYg KGZsb2F0LCBmbG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2Ji ZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0 IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVk KSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKTsg ZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xv YmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxu XHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVy ZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA2 MzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgaW50 IF9fZmluaXRlIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVy biBfX2lubGluZSBpbnQKX19maW5pdGUgKGRvdWJsZSBfX3gpCnsKICByZXR1cm4gKF9fZXh0ZW5z aW9uX18KICAgICAgICAgICgoKCgodW5pb24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9KSB7 X19kOiBfX3h9KS5fX2lbMV0KICAgICAgICAgICAgIHwgMHg4MDBmZmZmZnUpICsgMSkgPj4gMzEp KTsKfQoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fY29zaG0xIChkb3VibGUpOyBleHRlcm4g X19pbmxpbmUgZG91YmxlIF9fY29zaG0xIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4 bTEgLyAoX19leG0xICsgMS4wKSkgKiBfX2V4bTE7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9f Y29zaG0xZiAoZmxvYXQpOyBleHRlcm4gX19pbmxpbmUgZmxvYXQgX19jb3NobTFmIChmbG9hdCBf X3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9f eCkpOyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApKSAqIF9fZXhtMTsgfSBl eHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19jb3NobTFsIChsb25nIGRvdWJsZSk7IGV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSBfX2Nvc2htMWwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdp c3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVy biAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkpICogX19leG0xOyB9CgoKCmV4dGVybiBf X2lubGluZSBkb3VibGUgX19hY29zaDFwIChkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgZG91Ymxl IF9fYWNvc2gxcCAoZG91YmxlIF9feCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChf X3gpICogX19zcXJ0bCAoX194ICsgMi4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fYWNv c2gxcGYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fYWNvc2gxcGYgKGZsb2F0IF9f eCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0bCAoX194ICsg Mi4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fYWNvc2gxcGwgKGxvbmcgZG91 YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fYWNvc2gxcGwgKGxvbmcgZG91Ymxl IF9feCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0bCAoX194 ICsgMi4wKSk7IH0KIyAzNDkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDIwICJoaW50Lmgi IDIKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK IyAzOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv dGltZS5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgNTcgIi91c3IvaW5j bHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1OCAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKIyA5 NSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50 IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGlu dCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsK CgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoK CgoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIDsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRp bWVfdCAqX190aW1lcikgOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUx LCB0aW1lX3QgX190aW1lMCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgOwoKCgoKCmV4dGVybiBzaXplX3Qg c3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0 IF9fdHApIDsKIyAxNDkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHN0cnVjdCB0bSAq Z210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgpleHRlcm4gc3RydWN0IHRtICps b2NhbHRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSA7CgoKCgpleHRlcm4gc3RydWN0IHRt ICpfX2dtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLCBzdHJ1Y3Qg dG0gKl9fcmVzdHJpY3QgX190cCkgOwoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9fY29u c3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Rw KSA7CgoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9f cmVzdHJpY3QgX190aW1lciwgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKCgpleHRl cm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIDsKCgpleHRlcm4gY2hh ciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSA7CgoKCgoKCmV4dGVybiBjaGFyICph c2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsIGNoYXIgKl9fcmVz dHJpY3QgX19idWYpIDsKCgoKZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpf X3Jlc3RyaWN0IF9fdGltZXIsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoKCgpleHRlcm4g Y2hhciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50 IF9fdGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0 enNldCAodm9pZCkgOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGlt ZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgOwoj IDIyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0 IHRtICpfX3RwKSA7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVjdCB0bSAqX190cCkg OwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSA7CgoKCgoKZXh0ZXJuIGludCBuYW5v c2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLCBzdHJ1Y3Qg dGltZXNwZWMgKl9fcmVtYWluaW5nKSA7CiMgMjEgImhpbnQuaCIgMgojIDM3ICJoaW50LmgiCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3Rp bWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNs dWRlL3N5cy90aW1lLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAyNSAi L3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0 LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2Jp dHMvdGltZS5oIiAyIDMKCgoKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7 CiAgICBfX3RpbWVfdCB0dl91c2VjOwogIH07CiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5o IiAyIDMKIyA0NiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKc3RydWN0IHRpbWV6b25lCiAg ewogICAgaW50IHR6X21pbnV0ZXN3ZXN0OwogICAgaW50IHR6X2RzdHRpbWU7CiAgfTsKCgoKCgoK ZXh0ZXJuIGludCBnZXR0aW1lb2ZkYXkgKHN0cnVjdCB0aW1ldmFsICpfX3R2LCBzdHJ1Y3QgdGlt ZXpvbmUgKl9fdHopIDsKCgoKCmV4dGVybiBpbnQgc2V0dGltZW9mZGF5IChfX2NvbnN0IHN0cnVj dCB0aW1ldmFsICpfX3R2LCBfX2NvbnN0IHN0cnVjdCB0aW1lem9uZSAqX190eikgOwoKCgoKCgpl eHRlcm4gaW50IGFkanRpbWUgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fZGVsdGEsIHN0cnVj dCB0aW1ldmFsICpfX29sZGRlbHRhKSA7CgoKCgplbnVtIF9faXRpbWVyX3doaWNoCiAgewoKICAg IElUSU1FUl9SRUFMID0gMCwKCgogICAgSVRJTUVSX1ZJUlRVQUwgPSAxLAoKCgogICAgSVRJTUVS X1BST0YgPSAyCgogIH07CgoKCnN0cnVjdCBpdGltZXJ2YWwKICB7CgogICAgc3RydWN0IHRpbWV2 YWwgaXRfaW50ZXJ2YWw7CgogICAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7CiAgfTsKCgoKZXh0 ZXJuIGludCBnZXRpdGltZXIgKGVudW0gX19pdGltZXJfd2hpY2ggX193aGljaCwgc3RydWN0IGl0 aW1lcnZhbCAqX192YWx1ZSkgOwoKCgoKCmV4dGVybiBpbnQgc2V0aXRpbWVyIChlbnVtIF9faXRp bWVyX3doaWNoIF9fd2hpY2gsIF9fY29uc3Qgc3RydWN0IGl0aW1lcnZhbCAqX19uZXcsIHN0cnVj dCBpdGltZXJ2YWwgKl9fb2xkKSA7CgoKCgoKZXh0ZXJuIGludCB1dGltZXMgKF9fY29uc3QgY2hh ciAqX19maWxlLCBzdHJ1Y3QgdGltZXZhbCBfX3R2cFsyXSkgOwojIDM4ICJoaW50LmgiIDIKIyAx MTQgImhpbnQuaCIKIyAxICJ0eXBlZGVmcy5oIiAxCiMgMTE1ICJoaW50LmgiIDIKCgoKCnR5cGVk ZWYgc3RydWN0IHsKICAgIGRvdWJsZSBhaGksCiAgICAgICAgICAgIGFsbywKICAgICAgICAgICAg ZHgsCiAgICAgICAgICAgIGZsaCwKICAgICAgICAgICAgZmxsLAogICAgICAgICAgICBmcmgsCiAg ICAgICAgICAgIGZybCwKICAgICAgICAgICAgeGwsCiAgICAgICAgICAgIHhyOwogICAgfVJFQ1Q7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBkb3VibGUgdCwKICAgICAgICAgICAgcXA7CiAgICBpbnQg bjsKICAgIH1TcGVlZDsKCnR5cGVkZWYgaW50IEVSUk9SOwoKCgoKCmV4dGVybiBkb3VibGUgV2hl bih2b2lkKTsKCmV4dGVybiBkb3VibGUgUnVuKGludCBsYXBzLCBkb3VibGUgKmdhbXV0LAogICAg ICAgICAgICAgICAgICBkb3VibGUgc2N4LCBkb3VibGUgc2N5LCBkb3VibGUgZG1heCwKICAgICAg ICAgICAgICAgICAgaW50IG1lbXJ5LCBFUlJPUiAqZWZsYWcpOwojIDE1OSAiaGludC5oIgpleHRl cm4gZG91YmxlCgpIaW50KGRvdWJsZSAqc2N4LCBkb3VibGUgKnNjeSwgZG91YmxlICpkbWF4LCBp bnQgKm1jbnQsIFJFQ1QgKnJlY3QsCiAgICAgZG91YmxlICplcnJzLCBpbnQgKml4ZXMsIEVSUk9S ICplZmxhZyk7CiMgMjEgImhpbnQuYyIgMgoKCgoKCgoKICAgIGNvbnN0IGNoYXIgZmlsbm1bXSA9 ICJET1VCTEUiOwojIDQ2ICJoaW50LmMiCnN0YXRpYyBpbnQgZ2xvYmFsX21heF9tZW07CnN0YXRp YyBkb3VibGUgYWR2YW5jZSA9IDEuMjU4OTsKCgoKc3RhdGljIHZvaWQgeGZyZWUodm9pZCAqcCk7 CgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgICAgIEZJTEUgKmN1cnY7 CiAgICAgICAgU3BlZWQgcWRhdGFbMzAwXTsKICAgICAgICBFUlJPUiBlZmxhZzsKCiAgICAgICAg aW50IGltYXg7CiAgICAgICAgaW50IGl0bTsKICAgICAgICBpbnQgbjsKICAgICAgICBpbnQgbnNj b3V0OwoKICAgICAgICB2b2xhdGlsZSBkb3VibGUgdG0xOwogICAgICAgIHZvbGF0aWxlIGludCBp dG0yOwoKICAgICAgICBkb3VibGUgZG1heDsKICAgICAgICBkb3VibGUgZ2FtdXQ7CgogICAgICAg IGRvdWJsZSBzY3g7CiAgICAgICAgZG91YmxlIHNjeTsKICAgICAgICBkb3VibGUgdG0sIHRtMjsK CiAgICAgICAgZG91YmxlIGRlbHE7CiAgICAgICAgZG91YmxlIHF1aXBzOwogICAgICAgIGRvdWJs ZSBxcG5ldDsKICAgICAgICBkb3VibGUgcXBlYWs7CiAgICAgICAgZG91YmxlIHFwcmF0OwogICAg ICAgIGRvdWJsZSBxcHRtcDsKICAgICAgICBkb3VibGUgdDsKICAgICAgICBkb3VibGUgdDA7CiAg ICAgICAgZG91YmxlIHQxOwogICAgICAgIGRvdWJsZSB0ZGVsdGE7CiAgICAgICAgZG91YmxlIHRs YXN0OwogICAgICAgIGRvdWJsZSB0c2NvdXQ7CgogICAgICAgIGludCBkYml0czsKICAgICAgICBp bnQgaWJpdHM7CiAgICAgICAgaW50IGksIGosIGs7CiAgICAgICAgaW50IGxhcHM7CiAgICAgICAg aW50IG1lbXVzZTsKCiAgICAgICAgZnB1dHMoIiAgICAgICAgIF8gICAgX1xuIgogICAgICAgICAg ICAgICIgICAgICAgICB8ICAgIHwgIF8gXyAgIF8gX19fX18gVE1cbiIKICAgICAgICAgICAgICAi ICAgICAgICAgfC0tICB8ICB8IHxcXCAgfCB8IHwgfFxuIgogICAgICAgICAgICAgICIgICAgICAg ICB8ICAtLXwgIHwgfCBcXCB8ICAgfFxuIgogICAgICAgICAgICAgICIgICAgICAgICB8ICAgIHwg IHwgfCAgXFx8ICAgfFxuIgogICAgICAgICAgICAgICIgICAgICAgICBeICAgIF4gIF4gXiAgIF4g ICBeXG5cbiIKICAgICAgICAgICAgICAiKioqIFRoZSAgSElOVCAgUEVSRk9STUFOQ0UgQU5BTFla RVIgKioqXG4iCiAgICAgICAgICAgICAgIiAgICAgICAgVmVyc2lvbiAxLjAgIEp1bmUgMTk5NFxu IgogICAgICAgICAgICAgICIgICBKb2huIEwuIEd1c3RhZnNvbiAmIFF1aW5uIE8uIFNuZWxsXG4i CiAgICAgICAgICAgICAgIiAgICAgU2NhbGFibGUgQ29tcHV0aW5nIExhYm9yYXRvcnlcbiIKICAg ICAgICAgICAgICAiICAgMjM2IFdpbGhlbG0sIElvd2EgU3RhdGUgVW5pdmVyc2l0eVxuIgogICAg ICAgICAgICAgICIgICAgICAgIEFtZXMsIElvd2EgICAgNTAwMTEtMzAyMFxuIgogICAgICAgICAg ICAgICIgICAgICAgICAgICAoNTE1KSAyOTQgLSA5Mjk0XG5cbiIKICAgICAgICAgICAgICAiQ29w eXJpZ2h0IChDKSAxOTk0IgogICAgICAgICAgICAgICIgSW93YSBTdGF0ZSBVbml2ZXJzaXR5IFJl c2VhcmNoIEZvdW5kYXRpb24sIEluYy5cbiIKICAgICAgICAgICAgICAiUGxlYXNlIHNlbmQgcmVz dWx0cyBhbmQgcXVlc3Rpb25zIHRvOiAgIGhpbnRAc2NsLmFtZXNsYWIuZ292XG4iCiAgICAgICAg ICAgICAgIldoZW4gc2VuZGluZyByZXN1bHRzIHBsZWFzZSBmb2xsb3cgdGhlIGZvcm0gaW4gUkVB RE1FXG4iCiAgICAgICAgICAgICAgIl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXG4iLAogICAgICAgICAgICAgIHN0ZG91dCk7CgoKCgoKICAg ICAgICBpZiAoKGN1cnYgPSBmb3BlbihmaWxubSwgInciKSkgPT0gKCh2b2lkICopMCkpIHsKICAg ICAgICAgICAgICAgIHByaW50ZigiQ291bGQgbm90IG9wZW4gZGF0YSBmaWxlICVzXG4iLCBmaWxu bSk7CiAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgIH0KCgogICAgICAgIGdsb2JhbF9t YXhfbWVtID0gMTAyNDsKICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CiAgICAg ICAgICAgICAgICBpZiAoX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVu OyAoX19idWlsdGluX2NvbnN0YW50X3AgKGFyZ3ZbaV0pICYmIF9fYnVpbHRpbl9jb25zdGFudF9w ICgiLW0iKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKGFyZ3ZbaV0pLCBfX3MyX2xlbiA9IHN0cmxl biAoIi1tIiksICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGFyZ3ZbaV0pICsgMSkgLSAoc2l6 ZV90KShjb25zdCB2b2lkICopKGFyZ3ZbaV0pID09IDEpIHx8IF9fczFfbGVuID49IDQpICYmICgh KChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCItbSIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk ICopKCItbSIpID09IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hh ciAqKSAoYXJndltpXSksIChfX2NvbnN0IGNoYXIgKikgKCItbSIpLCAoX19zMV9sZW4gPCBfX3My X2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3Ag KGFyZ3ZbaV0pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChhcmd2W2ldKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKShhcmd2W2ldKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4g KGFyZ3ZbaV0pLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgiLW0iKSAm JiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIi1tIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikoIi1tIikgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYXJndltp XSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgiLW0i KSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYXJndltpXSkpWzFd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi1tIikpWzFd KTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGFyZ3ZbaV0pKVsyXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCItbSIpKVsyXSk7IGlm IChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYXJndltpXSkpWzNdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi1tIikpWzNdKTsgfSB9IF9fcmVz dWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIg PSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCItbSIpOyByZWdp c3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoYXJndltpXSkpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19y ZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChhcmd2W2ldKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAm JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKGFyZ3ZbaV0pKVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4g PiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKGFyZ3ZbaV0pKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1 bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCItbSIpICYmICgoc2l6ZV90KShjb25z dCB2b2lkICopKCgiLW0iKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiLW0iKSA9PSAx KSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKCItbSIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRp bl9jb25zdGFudF9wIChhcmd2W2ldKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoYXJndltp XSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoYXJndltpXSkgPT0gMSkgPyAoX19leHRl bnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoYXJndltpXSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgiLW0iKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoYXJndltpXSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoIi1tIikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jl c3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKGFyZ3ZbaV0pKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCItbSIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQg PT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoYXJndltpXSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoIi1tIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAo eyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKGFyZ3ZbaV0pOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3Mx WzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi1tIikp WzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19z MVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCItbSIp KVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChf X3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi1t IikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChf X3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi1t IikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wIChhcmd2W2ldLCAiLW0iKSkpKTsg fSkgPT0gMCAmJiBpKzEgPCBhcmdjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbF9t YXhfbWVtID0gYXRvbChhcmd2WysraV0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGds b2JhbF9tYXhfbWVtIDw9IDAgfHwgZ2xvYmFsX21heF9tZW0gPiAxMDI0ICogMTAyNCkgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiYmFkIHBhcmFtZXRlciBmb3IgbWVt b3J5IHNpemU6ICVzLlxuIiwgYXJndlsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXhpdCgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBl bHNlIGlmIChfX2V4dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1 aWx0aW5fY29uc3RhbnRfcCAoYXJndltpXSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCItYSIp ICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoYXJndltpXSksIF9fczJfbGVuID0gc3RybGVuICgiLWEi KSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoYXJndltpXSkgKyAxKSAtIChzaXplX3QpKGNv bnN0IHZvaWQgKikoYXJndltpXSkgPT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVf dCkoY29uc3Qgdm9pZCAqKSgoIi1hIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoIi1h IikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChh cmd2W2ldKSwgKF9fY29uc3QgY2hhciAqKSAoIi1hIiksIChfX3MxX2xlbiA8IF9fczJfbGVuID8g X19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYXJndltp XSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGFyZ3ZbaV0pICsgMSkgLSAoc2l6ZV90KShj b25zdCB2b2lkICopKGFyZ3ZbaV0pID09IDEpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoYXJndltp XSksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCItYSIpICYmICgoc2l6 ZV90KShjb25zdCB2b2lkICopKCgiLWEiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgi LWEiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChhcmd2W2ldKSlbMF0g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCItYSIpKVswXSk7 IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChhcmd2W2ldKSlbMV0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLWEiKSlbMV0pOyBpZiAo X19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYXJndltpXSkpWzJdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi1hIikpWzJdKTsgaWYgKF9fczFf bGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChhcmd2W2ldKSlbM10gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLWEiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0p KSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi1hIik7IHJlZ2lzdGVyIGlu dCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChhcmd2W2ldKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKGFyZ3ZbaV0pKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVz dWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoYXJndltpXSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYg X19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoYXJndltpXSkpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkp KSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi1hIikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQg KikoKCItYSIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCItYSIpID09IDEpICYmIChf X3MyX2xlbiA9IHN0cmxlbiAoIi1hIiksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0 YW50X3AgKGFyZ3ZbaV0pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChhcmd2W2ldKSArIDEp IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShhcmd2W2ldKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9f ICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChhcmd2W2ldKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopKCItYSIpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1 bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChhcmd2W2ldKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopICgiLWEiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoYXJndltpXSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoIi1hIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChh cmd2W2ldKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgiLWEiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29u c3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoYXJndltpXSk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLWEiKSlbMF07IGlm IChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi1hIikpWzFdKTsg aWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLWEiKSlbMl0p OyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKF9fczFbM10g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLWEiKSlbM10p OyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKGFyZ3ZbaV0sICItYSIpKSkpOyB9KSA9PSAw ICYmIGkrMSA8IGFyZ2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSA9IGF0b2Yo YXJndlsrK2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkdmFuY2UgPD0gMS4wIHx8 IGFkdmFuY2UgPj0gMi4wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJiYWQgcGFyYW1ldGVyIGZvciBhZHZhbmNlOiAlcy5cbiIsIGFyZ3ZbaV0pOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi YmFkIHBhcmFtZXRlcjogJXMuXG4iLCBhcmd2W2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAg ZXhpdCgxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgICBmb3IgKHQwID0g V2hlbigpOyAoKHQxID0gV2hlbigpKSA9PSB0MCk7KTsKICAgICAgICB0ZGVsdGEgPSB0MSAtIHQw OwoKCiAgICAgICAgZGJpdHMgPSAwOwogICAgICAgIHRtID0gKGRvdWJsZSkxOwogICAgICAgIHRt MiA9IHRtICsgdG07CiAgICAgICAgdG0xID0gdG0yICsgMTsKCgogICAgICAgIHdoaWxlICgoKGRv dWJsZSkodG0xIC0gdG0yKSA9PSAoZG91YmxlKTEpICYmICh0bTIgPiAoZG91YmxlKTApKQoKCgog ICAgICAgIHsKICAgICAgICAgICAgICAgIGRiaXRzKys7CiAgICAgICAgICAgICAgICB0bSArPSB0 bTsKICAgICAgICAgICAgICAgIHRtMiArPSB0bTI7CiAgICAgICAgICAgICAgICB0bTEgPSB0bTIg KyAxOwogICAgICAgIH0KICAgICAgICBkYml0cysrOwoKCiAgICAgICAgZG1heCA9IHRtICsgKHRt IC0gMSk7CiAgICAgICAgcHJpbnRmKCJBcHBhcmVudCBudW1iZXIgb2YgYml0cyBvZiBhY2N1cmFj eTogJWRcbiIsIGRiaXRzKTsKICAgICAgICBmcHJpbnRmKGN1cnYsICIjIEFwcGFyZW50IG51bWJl ciBvZiBiaXRzIG9mIGFjY3VyYWN5OiAlZFxuIiwgZGJpdHMpOwogICAgICAgIHByaW50ZigiTWF4 aW11bSBhc3NvY2lhdGl2ZSB3aG9sZSBudW1iZXI6ICUuMGZcbiIsIChkb3VibGUpIGRtYXgpOwog ICAgICAgIGZwcmludGYoY3VydiwgIiMgTWF4aW11bSBhc3NvY2lhdGl2ZSB3aG9sZSBudW1iZXI6 ICUuMGZcbiIsCiAgICAgICAgICAgICAgICAoZG91YmxlKSBkbWF4KTsKCgogICAgICAgIGliaXRz ID0gMDsKICAgICAgICBpdG0gPSAoaW50KTE7CiAgICAgICAgaXRtMiA9IGl0bSArIGl0bTsKCiAg ICAgICAgd2hpbGUgKGl0bTIgPiAoaW50KTApIHsKICAgICAgICAgICAgICAgIGliaXRzKys7CiAg ICAgICAgICAgICAgICBpdG0gKz0gaXRtOwogICAgICAgICAgICAgICAgaXRtMiArPSBpdG0yOwog ICAgICAgIH0KICAgICAgICBpbWF4ID0gaXRtOwogICAgICAgIHByaW50ZigiTWF4aW11bSBudW1i ZXIgb2YgYml0cyBvZiBpbmRleDogJWRcbiIsIGliaXRzKTsKICAgICAgICBmcHJpbnRmKGN1cnYs ICIjIE1heGltdW0gbnVtYmVyIG9mIGJpdHMgb2YgaW5kZXg6ICVkXG4iLCBpYml0cyk7CiAgICAg ICAgcHJpbnRmKCJNYXhpbXVtIHJlcHJlc2VudGFibGUgaW5kZXg6ICUuMGZcblxuIiwgKGRvdWJs ZSkgaW1heCk7CiAgICAgICAgZnByaW50ZihjdXJ2LCAiIyBNYXhpbXVtIHJlcHJlc2VudGFibGUg aW5kZXg6ICUuMGZcbiIsIChkb3VibGUpIGltYXgpOwoKCiAgICAgICAgaWYgKChpYml0cyArIGli aXRzKSA8IGRiaXRzKSB7CiAgICAgICAgICAgICAgICBkbWF4ID0gKGRvdWJsZSlpbWF4ICogKGRv dWJsZSlpbWF4IC0gMTsKICAgICAgICAgICAgICAgIGRiaXRzID0gaWJpdHMgKyBpYml0czsKICAg ICAgICB9CiAgICAgICAgcHJpbnRmKCJJbmRleC1saW1pdGVkIGRhdGEgYWNjdXJhY3k6ICVkIGJp dHNcbiIsIGRiaXRzKTsKICAgICAgICBmcHJpbnRmKGN1cnYsICIjIEluZGV4LWxpbWl0ZWQgZGF0 YSBhY2N1cmFjeTogJWQgYml0c1xuIiwgZGJpdHMpOwogICAgICAgIHByaW50ZigiTWF4aW11bSB1 c2FibGUgd2hvbGUgbnVtYmVyOiAlLjBmXG4iLCAoZG91YmxlKSBkbWF4KTsKICAgICAgICBmcHJp bnRmKGN1cnYsICIjIE1heGltdW0gdXNhYmxlIHdob2xlIG51bWJlcjogJS4wZlxuIiwgKGRvdWJs ZSkgZG1heCk7CgoKICAgICAgICBqID0gKGRiaXRzKS8yOwoKCiAgICAgICAgZm9yIChpID0gMCwg c2N4ID0gMTsgaSA8IGo7IHNjeCArPSBzY3gsIGkrKykKICAgICAgICAgICAgICAgIDsKICAgICAg ICBmb3IgKGkgPSAwLCBzY3kgPSAxOyBpIDwgZGJpdHMgLSBqOyBzY3kgKz0gc2N5LCBpKyspCiAg ICAgICAgICAgICAgICA7CiAgICAgICAgcHJpbnRmKCJHcmlkOiAlLjBmIHdpZGUgYnkgJS4wZiBo aWdoLlxuIiwgKGRvdWJsZSkgc2N4LCAoZG91YmxlKSBzY3kpOwogICAgICAgIGZwcmludGYoY3Vy diwgIiMgR3JpZDogJS4wZiB3aWRlIGJ5ICUuMGYgaGlnaC5cbiIsCiAgICAgICAgICAgICAgICAo ZG91YmxlKSBzY3gsIChkb3VibGUpIHNjeSk7CgogICAgICAgIHByaW50ZigiTWF4bWVtOiAlbGRc bkFkdmFuY2U6ICVmXG4iLCAobG9uZykgZ2xvYmFsX21heF9tZW0sIGFkdmFuY2UpOwogICAgICAg IGZwcmludGYoY3VydiwgIiMgTWF4bWVtOiAlbGRcbiMgQWR2YW5jZTogJWZcbiIsCiAgICAgICAg ICAgICAgICAobG9uZykgZ2xvYmFsX21heF9tZW0sIGFkdmFuY2UpOwoKCiAgICAgICAgZm9yIChu c2NvdXQgPSAyLCBsYXBzID0gMzsgbnNjb3V0IDwgc2N4OyApIHsKICAgICAgICAgICAgICAgIHQg PSBSdW4obGFwcywgJmdhbXV0LCBzY3gsIHNjeSwgZG1heCwgbnNjb3V0LCAmZWZsYWcpOwogICAg ICAgICAgICAgICAgaWYgKGVmbGFnICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbnNj b3V0IC89IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg fSBlbHNlIGlmICgodCA+IDAuOCkgJiYgKGVmbGFnID09IDApKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgIHRzY291dCA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHNjb3V0ID0gdDsKICAg ICAgICAgICAgICAgICAgICAgICAgbnNjb3V0ICo9IDI7CiAgICAgICAgICAgICAgICAgICAgICAg IGlmIChuc2NvdXQgPiBzY3gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nv dXQgLz0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAo dHNjb3V0ID09IDApIHsKICAgICAgICAgICAgICAgIHByaW50ZiggIkRhdGEgdHlwZSBmb3IgJXMg aXMgdG9vIHNtYWxsXG4iLCBhcmd2WzBdKTsKICAgICAgICAgICAgICAgIGV4aXQoMCk7CiAgICAg ICAgfQogICAgICAgIGlmICh0c2NvdXQgPCAwLjgpIHsKICAgICAgICAgICAgICAgIGlmIChlZmxh ZyA9PSAyKQogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIk1lbW9yeSBpcyBub3Qgc3Vm ZmljaWVudCBmb3IgPiAlMy4xZiBzZWNvbmQgcnVucy5cbiIsIDAuOCk7CiAgICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiUHJlY2lzaW9uIGlzIG5vdCBz dWZmaWNpZW50IGZvciA+ICUzLjFmIHNlY29uZCBydW5zLlxuIiwgMC44KTsKICAgICAgICB9CgoK ICAgICAgICBmb3IgKHQgPSAwLCBpID0gMCwgbiA9IDIsIHFwZWFrID0gMCwgcXByYXQgPSAxLCB0 bGFzdCA9IDA7CiAgICAgICAgICAgICAoKGkgPCAzMDApICYmICh0IDwgMTAwKSAmJiAobiA8IHNj eCkgJiYgKHFwcmF0ID4gMC4xKSk7CiAgICAgICAgICAgICBpKyssIG4gPSAoKGludCkobiAqIGFk dmFuY2UpID4gbik/IChuICogYWR2YW5jZSkgOiBuICsgMSkKICAgICAgICB7CgogICAgICAgICAg ICAgICAgZnB1dGMoJy4nLCBzdGRvdXQpOwogICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7 CgoKICAgICAgICAgICAgICAgIGxhcHMgPSAoKCgwLjggKiBuc2NvdXQgLyAodHNjb3V0ICogbikp ID4gKDEpKT8gKDAuOCAqIG5zY291dCAvICh0c2NvdXQgKiBuKSk6ICgxKSk7CiAgICAgICAgICAg ICAgICB0ID0gUnVuKGxhcHMsICZnYW11dCwgc2N4LCBzY3ksIGRtYXgsIG4sICZlZmxhZyk7CiAg ICAgICAgICAgICAgICBpZiAodCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICB0ID0gdGRl bHRhOwogICAgICAgICAgICAgICAgaWYgKGVmbGFnICE9IDApCiAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwoKCgogICAgICAgICAgICAgICAgZGVscSA9IChkb3VibGUpZG1heCAvIGdhbXV0 IC0gMTsKICAgICAgICAgICAgICAgIHF1aXBzID0gZGVscSAvIHQgKyAxLjAgLyBnYW11dCAvIHQ7 CiAgICAgICAgICAgICAgICBxZGF0YVtpXS50ID0gdDsKICAgICAgICAgICAgICAgIHFkYXRhW2ld LnFwID0gcXVpcHM7CiAgICAgICAgICAgICAgICBxZGF0YVtpXS5uID0gbjsKICAgICAgICAgICAg ICAgIHFwZWFrID0gKCgocXBlYWspID4gKHF1aXBzKSk/IChxcGVhayk6IChxdWlwcykpOwogICAg ICAgICAgICAgICAgcXByYXQgPSBxdWlwcyAvIHFwZWFrOwogICAgICAgIH0KICAgICAgICBtZW11 c2UgPSAoaW50KSAocWRhdGFbaS0xXS5uICogKHNpemVvZihSRUNUKSArIHNpemVvZihkb3VibGUp ICsgc2l6ZW9mKGludCkpKTsKICAgICAgICBpZiAoKHFwcmF0ID4gMC4xKSAmJiAoZWZsYWcgPT0g MikpIHsKICAgICAgICAgICAgICAgIHByaW50ZigiXG5UaGlzIHJ1biB3YXMgbWVtb3J5IGxpbWl0 ZWQgYXQgJWQgc3ViaW50ZXJ2YWxzIC0+ICVkIGJ5dGVzXG4iLAogICAgICAgICAgICAgICAgICAg ICAgIG4sIG1lbXVzZSk7CiAgICAgICAgICAgICAgICBmcHJpbnRmKGN1cnYsICIjIFJ1biBtZW1v cnkgbGltaXRlZCBhdCAlZCBzdWJpbnRlcnZhbHMgLT4gJWQgYnl0ZXNcbiIsCiAgICAgICAgICAg ICAgICAgICAgICAgIG4sIG1lbXVzZSk7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiXG5Eb25l IHdpdGggZmlyc3QgcGFzcy4gTm93IGNvbXB1dGluZyBuZXQgUVVJUFNcbiIpOwogICAgICAgIGZw cmludGYoY3VydiwiJTEyLjEwZiAlMTAuMGYgJTEyLjBmICUxMi4wZiAlMTBkXG4iLAogICAgICAg ICAgICAgICAgcWRhdGFbaS0xXS50LCBxZGF0YVtpLTFdLnFwLCBxZGF0YVtpLTFdLnQgKiBxZGF0 YVtpLTFdLnFwLAogICAgICAgICAgICAgICAgKGRvdWJsZSkgcWRhdGFbaS0xXS5uLCBtZW11c2Up OwoKCgogICAgICAgIGZvciAocXBuZXQgPSBxZGF0YVtpLTFdLnFwLCBqID0gaSAtIDI7IGogPj0g MDsgai0tKSB7CgoKICAgICAgICAgICAgICAgIGZvciAoayA9IDA7CiAgICAgICAgICAgICAgICAg ICAgICgocWRhdGFbaisxXS50IDwgcWRhdGFbal0udCkgJiYgKGsgPCAxMCkpOwogICAgICAgICAg ICAgICAgICAgICBrKyspCiAgICAgICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICAgICAg ICAgIGZwdXRjKCcjJywgc3Rkb3V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0 ZG91dCk7CgogICAgICAgICAgICAgICAgICAgICAgICBsYXBzID0gKCgoMC44ICogbnNjb3V0IC8g KHRzY291dCAqIHFkYXRhW2pdLm4pKSA+ICgxKSk/ICgwLjggKiBuc2NvdXQgLyAodHNjb3V0ICog cWRhdGFbal0ubikpOiAoMSkpOwogICAgICAgICAgICAgICAgICAgICAgICB0ID0gUnVuKGxhcHMs ICZnYW11dCwgc2N4LCBzY3ksIGRtYXgsIHFkYXRhW2pdLm4sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmVmbGFnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT0gMCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdGRlbHRhOwogICAgICAgICAgICAg ICAgICAgICAgICBkZWxxID0gKGRvdWJsZSlkbWF4IC8gZ2FtdXQgLSAxOwogICAgICAgICAgICAg ICAgICAgICAgICBxdWlwcyA9IGRlbHEgLyB0ICsgMS4wIC8gZ2FtdXQgLyB0OwogICAgICAgICAg ICAgICAgICAgICAgICBxZGF0YVtqXS50ID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgcWRh dGFbal0ucXAgPSBxdWlwczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChx ZGF0YVtqKzFdLnQgPCBxZGF0YVtqXS50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiIEZvcmNpbmcgYSB0aW1lIGZvciAlZCBzdWJpbnRlcnZhbHNcbiIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBxZGF0YVtqXS5uKTsKICAgICAgICAgICAgICAgICAgICAgICAgZnBy aW50ZihjdXJ2LCAiIyBGb3JjaW5nIGEgdGltZSBmb3IgJWQgc3ViaW50ZXJ2YWxzXG4iLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFkYXRhW2pdLm4pOwogICAgICAgICAgICAgICAg ICAgICAgICBxZGF0YVtqXS50ID0gcWRhdGFbaisxXS50OwogICAgICAgICAgICAgICAgICAgICAg ICBkZWxxID0gKGRvdWJsZSkgZG1heCAvIGdhbXV0IC0gMTsKICAgICAgICAgICAgICAgICAgICAg ICAgcWRhdGFbal0ucXAgPSBkZWxxIC8gcWRhdGFbal0udCArIDEuMCAvIGdhbXV0IC8gcWRhdGFb al0udDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG1lbXVzZSA9IChpbnQpKHFk YXRhW2pdLm4gKiAoc2l6ZW9mKFJFQ1QpK3NpemVvZihkb3VibGUpK3NpemVvZihpbnQpKSk7CiAg ICAgICAgICAgICAgICBmcHJpbnRmKGN1cnYsICIlMTIuMTBmICUxMC4wZiAlMTIuMGYgJTEyLjBm ICUxMGRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHFkYXRhW2pdLnQsIHFkYXRhW2pdLnFw LCBxZGF0YVtqXS50ICogcWRhdGFbal0ucXAsCiAgICAgICAgICAgICAgICAgICAgICAgIChkb3Vi bGUpcWRhdGFbal0ubiwgbWVtdXNlKTsKCgoKCiAgICAgICAgICAgICAgICBxcHRtcCA9IHFkYXRh W2pdLnFwICogcWRhdGFbal0udCAvIHFkYXRhW2orMV0udDsKICAgICAgICAgICAgICAgIHFwbmV0 ICs9IChxZGF0YVtqXS5xcCAtIHFwdG1wKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJcbkZp bmlzaGVkIHdpdGggJWYgbmV0IFFVSVBzXG4iLCBxcG5ldCk7CiAgICAgICAgZnByaW50ZihjdXJ2 LCAiIyBGaW5pc2hlZCB3aXRoICVmIG5ldCBRVUlQc1xuIiwgcXBuZXQpOwogICAgICAgIGZjbG9z ZShjdXJ2KTsKfQoKCgoKCgpzdGF0aWMgdm9pZCAqbWFsbG9jX2FsaWduZWQodm9pZCAqKm9yaWcs IHNpemVfdCBjb3VudCwgc2l6ZV90IHNpemUpCnsKICAgICAgICB2b2lkICpwOwogICAgICAgIHVu c2lnbmVkIGxvbmcgYTsKCiAgICAgICAgYSA9IDE7CiAgICAgICAgd2hpbGUgKGEgPCBzaXplKQog ICAgICAgICAgICAgICAgYSA9IGEgKyBhOwogICAgICAgIGEtLTsKICAgICAgICAqb3JpZyA9IHAg PSBtYWxsb2MoY291bnQgKiBzaXplICsgYSk7CiAgICAgICAgaWYgKHAgPT0gKCh2b2lkICopMCkp CiAgICAgICAgICAgICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAgICAgICAgaWYgKCgodW5zaWdu ZWQgbG9uZykgKHApKSAmIGEpCiAgICAgICAgICAgICAgICBwID0gKHZvaWQgKikgKCgoKHVuc2ln bmVkIGxvbmcpIChwKSkgKyBhKSAmIH5hKTsKICAgICAgICByZXR1cm4gcDsKfQoKCgoKZG91Ymxl ClJ1bihpbnQgbGFwcywKICAgIGRvdWJsZSAqZ2FtdXQsIGRvdWJsZSBzY3gsIGRvdWJsZSBzY3ks IGRvdWJsZSBkbWF4LCBpbnQgbWVtcnksIEVSUk9SICplZmxhZykKewogICAgICAgIFJFQ1QgKnJl Y3QgPSAoKHZvaWQgKikwKTsKICAgICAgICBpbnQgKml4ZXMgPSAoKHZvaWQgKikwKTsKICAgICAg ICBkb3VibGUgKmVycnMgPSAoKHZvaWQgKikwKTsKCiAgICAgICAgaW50IGksIGo7CgogICAgICAg IGRvdWJsZSBtaW50OwoKCgoKCgoKICAgICAgICBSRUNUICpyZWN0X2FsaWduZWQ7CiAgICAgICAg aW50ICppeGVzX2FsaWduZWQ7CiAgICAgICAgZG91YmxlICplcnJzX2FsaWduZWQ7CiAgICAgICAg cmVjdF9hbGlnbmVkID0gbWFsbG9jX2FsaWduZWQoJnJlY3QsIG1lbXJ5LCBzaXplb2YgKFJFQ1Qp KTsKICAgICAgICBlcnJzX2FsaWduZWQgPSBtYWxsb2NfYWxpZ25lZCgmZXJycywgMiAqIG1lbXJ5 LCBzaXplb2YgKGRvdWJsZSkpOwogICAgICAgIGl4ZXNfYWxpZ25lZCA9IG1hbGxvY19hbGlnbmVk KCZpeGVzLCAyICogbWVtcnksIHNpemVvZiAoaW50KSk7CgoKCiAgICAgICAgaWYgKChyZWN0ID09 ICgodm9pZCAqKTApKSB8fCAoZXJycyA9PSAoKHZvaWQgKikwKSkgfHwgKGl4ZXMgPT0gKCh2b2lk ICopMCkpCiAgICAgICAgICAgIHx8IChtZW1yeSAqIHNpemVvZiAoUkVDVCkgPiBnbG9iYWxfbWF4 X21lbSAqIDEwMjQgKiAxMDI0KSkKICAgICAgICB7CiAgICAgICAgICAgICAgICB4ZnJlZShyZWN0 KTsKICAgICAgICAgICAgICAgIHhmcmVlKGVycnMpOwogICAgICAgICAgICAgICAgeGZyZWUoaXhl cyk7CiAgICAgICAgICAgICAgICAqZWZsYWcgPSAyOwogICAgICAgICAgICAgICAgcmV0dXJuICgt Mik7CiAgICAgICAgfQogICAgICAgIG1pbnQgPSAxLjBlMzIgKiBsYXBzOwogICAgICAgIGZvciAo aSA9IDA7IGkgPCA1OyBpKyspIHsKICAgICAgICAgICAgICAgIGRvdWJsZSB0ID0gV2hlbigpOwoK ICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsYXBzOyBqKyspIHsKICAgICAgICAgICAg ICAgICAgICAgICAgKmdhbXV0ID0gSGludCgKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmc2N4LCAmc2N5LCAmZG1heCwgJm1lbXJ5LAoKCgoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWN0X2FsaWduZWQsIGVycnNfYWxpZ25lZCwgaXhlc19h bGlnbmVkLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmxhZyk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0ID0gV2hlbigpIC0gdDsKICAgICAgICAg ICAgICAgIGlmICh0IDwgbWludCkKICAgICAgICAgICAgICAgICAgICAgICAgbWludCA9IHQ7CiAg ICAgICAgfQoKCiAgICAgICAgZnJlZShyZWN0KTsKICAgICAgICBmcmVlKGVycnMpOwogICAgICAg IGZyZWUoaXhlcyk7CiAgICAgICAgcmV0dXJuIG1pbnQgLyBsYXBzOwp9CiMgNDQyICJoaW50LmMi CmRvdWJsZSBXaGVuKHZvaWQpCnsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0cDsKICAgICAgICBn ZXR0aW1lb2ZkYXkoJnRwLCAoKHZvaWQgKikwKSk7CiAgICAgICAgcmV0dXJuIChkb3VibGUpIHRw LnR2X3NlYyArIChkb3VibGUpIHRwLnR2X3VzZWMgKiAxLjBlLTY7Cn0KCgoKc3RhdGljIHZvaWQg eGZyZWUodm9pZCAqcCkKewogICAgICAgIGlmIChwICE9ICgodm9pZCAqKTApKQogICAgICAgICAg ICAgICAgZnJlZShwKTsKfQojIDEgImhrZXJuZWwuYyIgMQojIDE5ICJoa2VybmVsLmMiCiMgMSAi aGludC5oIiAxCiMgMjAgImhrZXJuZWwuYyIgMgoKCgpkb3VibGUKSGludChkb3VibGUgKl9fcmVz dHJpY3RfXyBzY3gsIGRvdWJsZSAqX19yZXN0cmljdF9fIHNjeSwgZG91YmxlICpfX3Jlc3RyaWN0 X18gZG1heCwgaW50ICpfX3Jlc3RyaWN0X18gbWNudCwgUkVDVCAqX19yZXN0cmljdF9fIHJlY3Qs CiAgICAgZG91YmxlICpfX3Jlc3RyaWN0X18gZXJycywgaW50ICpfX3Jlc3RyaWN0X18gaXhlcywg RVJST1IgKl9fcmVzdHJpY3RfXyBlZmxhZykKewogICAgZG91YmxlIGVycmlvLAogICAgICAgICAg ICBlcnJqbywKICAgICAgICAgICAgc2gsCiAgICAgICAgICAgIHNsLAogICAgICAgICAgICB0bSwK ICAgICAgICAgICAgdG0yLAogICAgICAgICAgICB0bWVycjsKCiAgICBpbnQgaW5jLCBqbmMsCiAg ICAgICAgICAgIGlvLAogICAgICAgICAgICBpcSwKICAgICAgICAgICAgaXQsCiAgICAgICAgICAg IGl0bXAsCiAgICAgICAgICAgIGpvLAogICAgICAgICAgICBtYTsKCgoKICAgICAgcmVjdFswXS54 bCA9IChkb3VibGUpMDsKICAgICAgcmVjdFswXS54ciA9ICpzY3g7CiAgICAgIHJlY3RbMF0uZHgg PSAqc2N4OwogICAgICByZWN0WzBdLmZsbCA9ICpzY3k7CiAgICAgIHJlY3RbMF0uZmxoID0gKnNj eTsKICAgICAgcmVjdFswXS5mcmwgPSAoZG91YmxlKTA7CiAgICAgIHJlY3RbMF0uZnJoID0gKGRv dWJsZSkwOwogICAgICByZWN0WzBdLmFoaSA9ICpkbWF4OwogICAgICByZWN0WzBdLmFsbyA9IChk b3VibGUpMDsKICAgICAgaXEgPSAwOwogICAgICBlcnJzW2lxXSA9IHJlY3RbMF0uYWhpIC0gcmVj dFswXS5hbG87CiAgICAgIGl4ZXNbaXFdID0gaXE7CiAgICAgIHNoID0gcmVjdFswXS5haGk7CiAg ICAgIHNsID0gcmVjdFswXS5hbG87CgogICAgICBmb3IgKGl0ID0gMDsgKChpdCA8ICptY250IC0g MSkgJiYgKGl0IDw9IGlxKSk7IGl0KyspCiAgICAgIHsKICAgICAgICAgIGlvID0gbWEgPSBpeGVz W2l0XTsKICAgICAgICAgIGpvID0gaXQgKyAxOwoKICAgICAgICAgIHRtID0gcmVjdFttYV0uZHg7 CgogICAgICAgICAgcmVjdFtpb10uZHggPSByZWN0W2pvXS5keCA9IHRtIC8gKGRvdWJsZSkyOwoK CiAgICAgICAgICByZWN0W2pvXS54ciA9IHJlY3RbbWFdLnhyOwoKICAgICAgICAgIHJlY3RbaW9d LnhyID0gcmVjdFtpb10ueGwgKwogICAgICAgICAgICAgICAgICAgICAgICAgcmVjdFtpb10uZHg7 CiAgICAgICAgICByZWN0W2pvXS54bCA9IHJlY3RbaW9dLnhyOwoKICAgICAgICAgIHJlY3Rbam9d LmZybCA9IHJlY3RbbWFdLmZybDsKICAgICAgICAgIHJlY3Rbam9dLmZyaCA9IHJlY3RbbWFdLmZy aDsKCgoKICAgICAgICAgIHRtID0gKCpzY3ggKyByZWN0W2lvXS54cik7CiAgICAgICAgICB0bTIg PSAoKnNjeSAqICgqc2N4IC0gcmVjdFtpb10ueHIpKTsKICAgICAgICAgIGl0bXAgPSB0bTIgLyB0 bTsKICAgICAgICAgIHJlY3RbaW9dLmZybCA9IGl0bXA7CgoKICAgICAgICAgIHJlY3RbaW9dLmZy aCA9IHJlY3RbaW9dLmZybCArICgodG0gKiByZWN0W2lvXS5mcmwpICE9IHRtMik7CiAgICAgICAg ICByZWN0W2pvXS5mbGwgPSByZWN0W2lvXS5mcmw7CiAgICAgICAgICByZWN0W2pvXS5mbGggPSBy ZWN0W2lvXS5mcmg7CgoKICAgICAgICAgIHRtID0gKHJlY3RbaW9dLmZsbCAtIHJlY3RbaW9dLmZy aCkgKiAocmVjdFtpb10uZHggLSAoZG91YmxlKTIpOwogICAgICAgICAgaWYgKHRtIDwgKGRvdWJs ZSkwKQogICAgICAgICAgICAgIHRtID0gKGRvdWJsZSkwOwogICAgICAgICAgZXJyaW8gPSAocmVj dFtpb10uZmxoIC0gcmVjdFtpb10uZnJoICsKICAgICAgICAgICAgICAgICAgIHJlY3RbaW9dLmZs bCAtIHJlY3RbaW9dLmZybCkgKgogICAgICAgICAgICAgICAgICAocmVjdFtpb10uZHggLSAoZG91 YmxlKTEpIC0gdG07CgoKICAgICAgICAgIHRtID0gKHJlY3Rbam9dLmZsbCAtIHJlY3Rbam9dLmZy aCkgKiAocmVjdFtqb10uZHggLSAoZG91YmxlKTIpOwogICAgICAgICAgaWYgKHRtIDwgKGRvdWJs ZSkwKQogICAgICAgICAgICAgIHRtID0gKGRvdWJsZSkwOwogICAgICAgICAgZXJyam8gPSAocmVj dFtqb10uZmxoIC0gcmVjdFtqb10uZnJoICsKICAgICAgICAgICAgICAgICAgIHJlY3Rbam9dLmZs bCAtIHJlY3Rbam9dLmZybCkgKgogICAgICAgICAgICAgICAgICAocmVjdFtqb10uZHggLSAoZG91 YmxlKTEpIC0gdG07CgoKCiAgICAgICAgICBpbmMgPSAoZXJyaW8gPCBlcnJqbykgKyAxOwogICAg ICAgICAgam5jID0gMyAtIGluYzsKCgogICAgICAgICAgZXJyc1tpcSArIGluY10gPSBlcnJpbzsK ICAgICAgICAgIGl4ZXNbaXEgKyBpbmNdID0gaW87CiAgICAgICAgICBlcnJzW2lxICsgam5jXSA9 IGVycmpvOwogICAgICAgICAgaXhlc1tpcSArIGpuY10gPSBqbzsKCgogICAgICAgICAgaXEgPSBp cSArIChlcnJzW2lxICsgMl0gIT0gMCkgKyAxOwoKCiAgICAgICAgICB0bSA9IHJlY3RbbWFdLmFs bzsKICAgICAgICAgIHJlY3RbaW9dLmFsbyA9IHJlY3RbaW9dLmZybCAqIHJlY3RbaW9dLmR4Owog ICAgICAgICAgcmVjdFtqb10uYWxvID0gcmVjdFtqb10uZnJsICogcmVjdFtqb10uZHg7CiAgICAg ICAgICBzbCAtPSB0bTsKICAgICAgICAgIHNsICs9IHJlY3RbaW9dLmFsbyArIHJlY3Rbam9dLmFs bzsKICAgICAgICAgIHRtID0gcmVjdFttYV0uYWhpOwogICAgICAgICAgcmVjdFtpb10uYWhpID0g cmVjdFtpb10uZmxoICogcmVjdFtpb10uZHg7CiAgICAgICAgICByZWN0W2pvXS5haGkgPSByZWN0 W2pvXS5mbGggKiByZWN0W2pvXS5keDsKICAgICAgICAgIHNoIC09IHRtOwogICAgICAgICAgc2gg Kz0gcmVjdFtpb10uYWhpICsgcmVjdFtqb10uYWhpOwogICAgICB9CiAgICAgIGlmIChpdCA+IGlx KQogICAgICAgICAgKmVmbGFnID0gMTsKICAgICAgZWxzZQogICAgICAgICAgKmVmbGFnID0gMDsK CiAgICAgIHJldHVybiAoc2ggLSBzbCk7Cn0KIyA0NTcgImhpbnQuYyIgMgo=
next reply other threads:[~2001-06-18 8:26 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2001-06-18 8:26 chr.breitkopf [this message] 2002-01-08 5:46 Christoph Breitkopf 2002-01-08 7:34 neil
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20010618151915.28268.qmail@sourceware.cygnus.com \ --to=chr.breitkopf@magrathea.de \ --cc=gcc-gnats@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).