diff options
Diffstat (limited to 'tests')
115 files changed, 11673 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 0000000..428e4b2 --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,483 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +TESTS = $(check_PROGRAMS) options.cn + +# The script testwrapper.sh will run most tests as is. A couple tests +# in the suite end in .reject, .table and the like so that we can pass +# different arguments to the test runner. We list those extensions so +# automake knows how to distinguish between the various kinds of tests +# we have. + +TEST_EXTENSIONS = .reject .table .direct .cn .i3 .pthread .one .opt .ser .ver + +LOG_COMPILER = $(srcdir)/testwrapper.sh +AM_LOG_FLAGS = -d $(srcdir) -r + +REJECT_LOG_COMPILER = $(srcdir)/testwrapper.sh +AM_REJECT_LOG_FLAGS = -d $(srcdir) -i $(srcdir)/reject.txt -r + +TABLE_LOG_COMPILER = $(srcdir)/testwrapper.sh +AM_TABLE_LOG_FLAGS = -d $(builddir) -i $(srcdir)/reject.txt -t + +DIRECT_LOG_COMPILER=$(srcdir)/testwrapper.sh +AM_DIRECT_LOG_FLAGS = -d $(srcdir) + +CN_LOG_COMPILER=$(srcdir)/options.cn +AM_CN_LOG_FLAGS=$(FLEX) + +I3_LOG_COMPILER=$(srcdir)/testwrapper.sh +AM_I3_LOG_FLAGS=-i $(srcdir)/cxx_yywrap.txt -i $(srcdir)/cxx_yywrap.txt -i $(srcdir)/cxx_yywrap.txt + +PTHREAD_LOG_COMPILER=$(srcdir)/testwrapper.sh +AM_PTHREAD_LOG_FLAGS=-i $(srcdir)/pthread_1.txt -i $(srcdir)/pthread_2.txt -i $(srcdir)/pthread_3.txt -i $(srcdir)/pthread_4.txt -i $(srcdir)/pthread_5.txt + +ONE_LOG_COMPILER = $(srcdir)/testwrapper.sh +AM_ONE_LOG_FLAGS = -1 -d $(srcdir) + +AM_YFLAGS = -d -p test +AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src + +check_PROGRAMS = $(simple_tests) $(reject_tests) $(TABLE_TESTS) $(DIRECT_TESTS) $(I3_TESTS) $(PTHREAD_TESTS) $(ONE_TESTS) $(TABLEOPTS_TESTS) + +simple_tests = \ + alloc_extra \ + array_nr \ + array_r \ + basic_nr \ + basic_r \ + bison_nr \ + bison_yylloc \ + bison_yylval \ + c_cxx_nr \ + c_cxx_r \ + ccl \ + cxx_basic \ + cxx_multiple_scanners \ + debug_nr \ + debug_r \ + extended \ + header_nr \ + header_r \ + mem_nr \ + mem_r \ + multiple_scanners_nr \ + multiple_scanners_r \ + noansi_nr \ + noansi_r \ + posix \ + posixly_correct \ + prefix_nr \ + prefix_r \ + quotes \ + string_nr \ + string_r \ + top \ + yyextra + +reject_tests = \ + reject_nr.reject \ + reject_r.reject + +TABLE_TESTS = \ + reject_ver.table \ + reject_ser.table + +DIRECT_TESTS = \ + include_by_buffer.direct \ + include_by_push.direct \ + include_by_reentrant.direct \ + rescan_nr.direct \ + rescan_r.direct + +I3_TESTS = \ + cxx_yywrap.i3 + +if want_pthread +PTHREAD_TESTS = \ + pthread.pthread +endif + +ONE_TESTS = \ + lineno_nr.one \ + lineno_r.one \ + lineno_trailing.one + +alloc_extra_SOURCES = alloc_extra.l +array_nr_SOURCES = array_nr.l +array_r_SOURCES = array_r.l +basic_nr_SOURCES = basic_nr.l +basic_r_SOURCES = basic_r.l +bison_nr_SOURCES = bison_nr_scanner.l bison_nr_parser.y bison_nr_main.c +bison_yylloc_SOURCES = bison_yylloc_scanner.l bison_yylloc_parser.y bison_yylloc_main.c +bison_yylval_SOURCES = bison_yylval_scanner.l bison_yylval_parser.y bison_yylval_main.c +c_cxx_nr_SOURCES = c_cxx_nr.lll +c_cxx_r_SOURCES = c_cxx_r.lll +ccl_SOURCES = ccl.l +cxx_basic_SOURCES = cxx_basic.ll +cxx_multiple_scanners_SOURCES = cxx_multiple_scanners_main.cc cxx_multiple_scanners_1.ll cxx_multiple_scanners_2.ll +cxx_yywrap_i3_SOURCES = cxx_yywrap.ll +debug_nr_SOURCES = debug_nr.l +debug_r_SOURCES = debug_r.l +extended_SOURCES = extended.l +header_nr_SOURCES = header_nr_scanner.l header_nr_main.c +header_r_SOURCES = header_r_scanner.l header_r_main.c +include_by_buffer_direct_SOURCES = include_by_buffer.direct.l +include_by_push_direct_SOURCES = include_by_push.direct.l +include_by_reentrant_direct_SOURCES = include_by_reentrant.direct.l +lineno_nr_one_SOURCES = lineno_nr.l +lineno_r_one_SOURCES = lineno_r.l +lineno_trailing_one_SOURCES = lineno_trailing.l +mem_nr_SOURCES = mem_nr.l +mem_r_SOURCES = mem_r.l +multiple_scanners_nr_SOURCES = multiple_scanners_nr_main.c multiple_scanners_nr_1.l multiple_scanners_nr_2.l +multiple_scanners_r_SOURCES = multiple_scanners_r_main.c multiple_scanners_r_1.l multiple_scanners_r_2.l +noansi_nr_SOURCES = noansi_nr.l +noansi_r_SOURCES = noansi_r.l +posix_SOURCES = posix.l +posixly_correct_SOURCES = posixly_correct.l +prefix_nr_SOURCES = prefix_nr.l +prefix_r_SOURCES = prefix_r.l +pthread_pthread_SOURCES = pthread.l +quotes_SOURCES = quotes.l +reject_nr_reject_SOURCES = reject.l4 +reject_r_reject_SOURCES = reject.l4 +reject_ver_table_SOURCES = reject.l4 +reject_ser_table_SOURCES = reject.l4 +rescan_nr_direct_SOURCES = rescan_nr.direct.l +rescan_r_direct_SOURCES = rescan_r.direct.l +string_nr_SOURCES = string_nr.l +string_r_SOURCES = string_r.l +top_SOURCES = top.l top_main.c +yyextra_SOURCES = yyextra.l + +BUILT_SOURCES = \ + bison_nr_parser.h \ + bison_nr_scanner.h \ + bison_yylloc_parser.h \ + bison_yylloc_scanner.h \ + bison_yylval_parser.h \ + bison_yylval_scanner.h \ + header_nr_scanner.h \ + header_r_scanner.h \ + multiple_scanners_nr_1.h \ + multiple_scanners_nr_2.h \ + multiple_scanners_r_1.h \ + multiple_scanners_r_2.h \ + top.h + +# Normally, automake would distribute files built by flex. Since the +# point of the test suite is to test the files that flex builds, and +# since anyone who has the flex distribution can build a flex binary +# without having a flex binary, we want to not distribute the files +# built by flex in the test suite. The dist-hook target accomplishes +# this goal. It's also handy to have the list of files to clean since +# automake doesn't know about the whacky ways in which we're abusing +# it. + +CLEANFILES = \ + array_nr.c \ + array_r.c \ + basic_nr.c \ + basic_r.c \ + bison_nr_parser.c \ + bison_nr_parser.h \ + bison_nr_scanner.c \ + bison_nr_scanner.h \ + bison_yylloc_parser.c \ + bison_yylloc_parser.h \ + bison_yylloc_scanner.c \ + bison_yylloc_scanner.h \ + bison_yylval_parser.c \ + bison_yylval_parser.h \ + bison_yylval_scanner.c \ + bison_yylval_scanner.h \ + c_cxx_nr.cc \ + c_cxx_r.cc \ + ccl.c \ + cxx_basic.cc \ + cxx_multiple_scanners_1.cc \ + cxx_multiple_scanners_2.cc \ + cxx_yywrap.cc \ + debug_nr.c \ + debug_r.c \ + extended.c \ + header_nr_scanner.c \ + header_nr_scanner.h \ + header_r_scanner.c \ + header_r_scanner.h \ + include_by_buffer.direct.c \ + include_by_push.direct.c \ + include_by_reentrant.direct.c \ + lineno_nr.c \ + lineno_r.c \ + lineno_trailing.c \ + mem_nr.c \ + mem_r.c \ + multiple_scanners_nr_1.c \ + multiple_scanners_nr_1.h \ + multiple_scanners_nr_2.c \ + multiple_scanners_nr_2.h \ + multiple_scanners_r_1.c \ + multiple_scanners_r_1.h \ + multiple_scanners_r_2.c \ + multiple_scanners_r_2.h \ + noansi_nr.c \ + noansi_r.c \ + posix.c \ + posixly_correct.c \ + prefix_nr.c \ + prefix_r.c \ + pthread.c \ + quotes.c \ + reject_nr.reject.c \ + reject_r.reject.c \ + reject_ser.table.c \ + reject_ser.table.tables \ + reject_ver.table.c \ + reject_ver.table.tables \ + rescan_nr.direct.c \ + rescan_r.direct.c \ + string_nr.c \ + string_r.c \ + top.c \ + top.h \ + yyextra.c \ +alloc_extra.c \ + $(tableopts_c) \ + $(tableopts_tables) + +dist-hook: + for file in $(CLEANFILES) ; do \ + rm -f $(distdir)/$$file \ + ; done + +EXTRA_DIST = \ + README \ + alloc_extra.txt \ + array_nr.txt \ + array_r.txt \ + basic_nr.txt \ + basic_r.txt \ + bison_nr.txt \ + bison_yylloc.txt \ + bison_yylval.txt \ + c_cxx_nr.txt \ + c_cxx_r.txt \ + ccl.txt \ + cxx_basic.txt \ + cxx_multiple_scanners.txt \ + cxx_yywrap.txt \ + debug_nr.txt \ + debug_r.txt \ + extended.txt \ + header_nr.txt \ + header_r.txt \ + include_by_buffer.direct.txt \ + include_by_buffer.direct_2.txt \ + include_by_buffer.direct_3.txt \ + include_by_push.direct.txt \ + include_by_push.direct_2.txt \ + include_by_push.direct_3.txt \ + include_by_reentrant.direct.txt \ + include_by_reentrant.direct_2.txt \ + include_by_reentrant.direct_3.txt \ + lineno_nr.one.txt \ + lineno_r.one.txt \ + lineno_trailing.one.txt \ + mem_nr.txt \ + mem_r.txt \ + noansi_nr.txt \ + noansi_r.txt \ + prefix_nr.txt \ + prefix_r.txt \ + pthread_1.txt \ + pthread_2.txt \ + pthread_3.txt \ + pthread_4.txt \ + pthread_5.txt \ + reject.txt \ + rescan_nr.direct.txt \ + rescan_r.direct.txt \ + quotes.txt \ + top.txt \ + yyextra.txt \ + tableopts.txt + +dist_noinst_SCRIPTS = \ + tableopts.sh + +dist_check_SCRIPTS = \ + options.cn \ + testwrapper.sh + +pthread_pthread_LDADD = -lpthread + +# specify how to process .l files in order to test the flex built by make all + +FLEX = $(top_builddir)/src/flex + +.l.c: $(FLEX) + $(FLEX) -o $@ $< + +.ll.cc: $(FLEX) + $(FLEX) -+ -o $@ $< + +bison_nr_main.($OBJEXT): bison_nr_parser.h bison_nr_scanner.h +bison_nr_scanner.h: bison_nr_scanner.c + +bison_yylloc_main.$(OBJEXT): bison_yylloc_parser.h bison_yylloc_scanner.h +bison_yylloc_scanner.h: bison_yylloc_scanner.c + +bison_yylval_main.$(OBJEXT): bison_yylval_parser.h bison_yylval_scanner.h +bison_yylval_scanner.h: bison_yylval_scanner.c + +# automake does not support compiling flex scanners output in C as C++ +# so we explicitly sayhow, using the .lll suffix for the lex input file + +.lll.cc: $(FLEX) + $(FLEX) -o $@ $< + +header_nr_main.$(OBJEXT): header_nr_scanner.h +header_nr_scanner.h: header_nr_scanner.c + +header_r_main.$(OBJEXT): header_r_scanner.h +header_r_scanner.h: header_r_scanner.c + +include_by_buffer.direct$(EXE): include_by_buffer.direct.txt include_by_buffer.direct_2.txt include_by_buffer.direct_3.txt + +include_by_push.direct$(EXE): include_by_push.direct.txt include_by_push.direct_2.txt include_by_push.direct_3.txt + +include_by_reentrant.direct$(EXE): include_by_reentrant.direct.txt include_by_reentrant.direct_2.txt include_by_reentrant.direct_3.txt + +multiple_scanners_nr_main.$(OBJEXT): multiple_scanners_nr_1.h multiple_scanners_nr_2.h +multiple_scanners_nr_1.h: multiple_scanners_nr_1.c +multiple_scanners_nr_2.h: multiple_scanners_nr_2.c + +multiple_scanners_r_main.$(OBJEXT): multiple_scanners_r_1.h multiple_scanners_r_2.h +multiple_scanners_r_1.h: multiple_scanners_r_1.c +multiple_scanners_r_2.h: multiple_scanners_r_2.c + +posixly_correct.c: posixly_correct.l $(FLEX) + POSIXLY_CORRECT=1 $(FLEX) -o $@ $< + +reject_nr.reject.c: reject.l4 $(FLEX) + $(FLEX) -o $@ $< + +reject_nr.reject$(EXEEXT): reject_nr.reject.$(OBJEXT) + $(LINK) $^ + +reject_r.reject.c: reject.l4 $(FLEX) + $(FLEX) --reentrant -o $@ $< + +reject_r.reject.$(OBJEXT): reject_r.reject.c + $(COMPILE) -DTEST_IS_REENTRANT -c -o $@ $< + +reject_r.reject$(EXEEXT): reject_r.reject.$(OBJEXT) + $(LINK) $^ + +reject_ver.table.c: reject.l4 $(FLEX) + $(FLEX) -o $@ --tables-verify --tables-file=$(basename $@).tables $< + +reject_ver.table.$(OBJEXT): reject_ver.table.c + $(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< + +reject_ver.table$(EXEEXT): reject_ver.table.$(OBJEXT) + $(LINK) $^ + +reject_ser.table.c: reject.l4 $(FLEX) + $(FLEX) -o $@ --tables-file=$(basename $@).tables $< + +reject_ser.table.$(OBJEXT): reject_ser.table.c + $(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< + +reject_ser.table$(EXEEXT): reject_ser.table.$(OBJEXT) + $(LINK) $^ + +top_main.$(OBJEXT): top.h +top.h: top.c + +# We separate out the tableopts _SOURCES variables and the linking +# rules for those programs because automake has no way to specify such +# things with a loop in a variable (even though make can do such +# things) and the resultant list is both long an unenlightening. And +# it can be / is generated by a shell script, tableopts.sh. + +tableopts.am: tableopts.sh + $(srcdir)/tableopts.sh > $(srcdir)/tableopts.am + +include $(srcdir)/tableopts.am + +tableopts := -Ca -Ce -Cf -CF -Cm -Cem -Cae -Caef -CaeF -Cam -Caem +tableopts_opt_tests := $(foreach opt,$(tableopts), tableopts_opt_nr$(opt) tableopts_opt_r$(opt)) +tableopts_sertests := $(foreach opt,$(tableopts), tableopts_ser_nr$(opt) tableopts_ser_r$(opt)) +tableopts_vertests := $(foreach opt,$(tableopts), tableopts_ver_nr$(opt) tableopts_ver_r$(opt)) +tableopts_tests := $(tableopts_opttests) $(tableopts_vertests) $(tableopts_sertests) + +tableopts_c := $(addsuffix .c,$(tableopts_tests)) + +OPT_LOG_COMPILER = $(srcdir)/testwrapper.sh +AM_OPT_LOG_FLAGS = -d $(srcdir) -i $(srcdir)/tableopts.txt -r + +tableopts_opt_nr%.c: tableopts.l4 $(FLEX) + $(FLEX) -P $(subst -,_,$(basename $(*F))) $* -o $@ $< + +tableopts_opt_nr%.$(OBJEXT): tableopts_opt_nr%.c + $(COMPILE) -c -o $@ $< + +tableopts_opt_r%.c: tableopts.l4 $(FLEX) + $(FLEX) -P $(subst -,_,$(basename $(*F))) --reentrant $* -o $@ $< + +tableopts_opt_r%.$(OBJEXT): tableopts_opt_r%.c + $(COMPILE) -DTEST_IS_REENTRANT -c -o $@ $< + +SER_LOG_COMPILER = $(srcdir)/testwrapper.sh +AM_SER_LOG_FLAGS = -d $(builddir) -i $(srcdir)/tableopts.txt -r -t + +tableopts_ser_nr%.c: tableopts.l4 $(FLEX) + $(FLEX) -P $(subst -,_,$(basename $(*F))) --tables-file="tableopts_ser_nr$*.ser.tables" $* -o $@ $< + +tableopts_ser_nr%.$(OBJEXT): tableopts_ser_nr%.c + $(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< + +tableopts_ser_r%.c: tableopts.l4 $(FLEX) + $(FLEX) -P $(subst -,_,$(basename $(*F))) -R --tables-file="tableopts_ser_r$*.ser.tables" $* -o $@ $< + +tableopts_ser_r%.$(OBJEXT): tableopts_ser_r%.c + $(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -DTEST_IS_REENTRANT -c -o $@ $< + +VER_LOG_COMPILER = $(srcdir)/testwrapper.sh +AM_VER_LOG_FLAGS = -d $(builddir) -i $(srcdir)/tableopts.txt -r -t + +tableopts_ver_nr%.c: tableopts.l4 $(FLEX) + $(FLEX) -P $(subst -,_,$(basename $(*F))) --tables-file="tableopts_ver_nr$*.ver.tables" --tables-verify $* -o $@ $< + +tableopts_ver_nr%.$(OBJEXT): tableopts_ver_nr%.c + $(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< + +tableopts_ver_nr%.ver$(EXEEXT): tableopts_ver_nr%.$(OBJEXT) + $(LINK) -o $@ $^ + +tableopts_ver_r%.c: tableopts.l4 $(FLEX) + $(FLEX) -P $(subst -,_,$(basename $(*F))) -R --tables-file="tableopts_ver_r$*.ver.tables" --tables-verify $* -o $@ $< + +tableopts_ver_r%.$(OBJEXT): tableopts_ver_r%.c + $(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -DTEST_IS_REENTRANT -c -o $@ $< diff --git a/tests/README b/tests/README new file mode 100644 index 0000000..43387f4 --- /dev/null +++ b/tests/README @@ -0,0 +1,57 @@ +This file describes the flex test suite. + +* WHO SHOULD USE THE TEST SUITE? + +The test suite is intended to be used by flex developers, i.e., anyone hacking +the flex distribution. If you are simply installing flex, then you can ignore +this directory and its contents. + +* STRUCTURE OF THE TEST SUITE + +The testsuite consists of several tests. Each test is centered around +a scanner known to work with the most recent version of flex. In +general, after you modify your copy of the flex distribution, you +should re-run the test suite. Some of the tests may require certain +tools to be available (e.g., bison, diff). If any test returns an +error or generates an error message, then your modifications *may* +have broken a feature of flex. At a minimum, you'll want to +investigate the failure and determine if it's truly significant. + +* HOW TO RUN THE TEST SUITE + +To build and execute all tests from the top level of the flex source tree: + + $ make check + +To build and execute a single test: + + $ cd tests/ # from the top level of the flex tree. + $ make testname.log + + where "testname" is the name of the test. This is an automake-ism + that will create (or re-create, if need be), a log of the particular + test run that you're working on. + +* HOW TO ADD A NEW TEST TO THE TEST SUITE + +** List your test in the TESTS variable in Makefile.am in this + directory. Note that due to the large number of tests, we use + variables to group similar tests together. This also helps with + handling the automake test suite requirements. Hopefully your test + can be listed in SIMPLE_TESTS. You'll need to add the appropriate + automake _SOURCES variable as well. If you're unsure, then consult + the automake manual, paying attention to the parallel test harness + section. + +** On success, your test should return zero. + +** On error, your test should return 1 (one) and print a message to +stderr, which will have been redirected to the log file created by the +automake test suite harness. + +** If your test is skipped (e.g., because bison was not found), then + the test should return 2 (two). + +** Once your work is done, submit a patch via the flex development + mailing list, the github pull request mechanism or some other + suitable means. diff --git a/tests/alloc_extra.l b/tests/alloc_extra.l new file mode 100644 index 0000000..2c582a8 --- /dev/null +++ b/tests/alloc_extra.l @@ -0,0 +1,123 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A file to build "scanner.c". */ +/* This tests that we can use "yyextra". + We buffer all input into a growable array, then print it. + We run diff on the input and output. +*/ + +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + + +/* We'll store the entire input in this buffer, growing as necessary. */ +struct Check { + char foo; + char *bar; + char qux; +}; + +/* Save char into junk array at next position. */ +static void check_extra ( yyscan_t scanner ); + +/* Special yyalloc */ +void *yyalloc ( size_t size, yyscan_t scanner ); + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap nodefault noinput +%option warn +%option extra-type="struct Check *" +%option reentrant +%option noyyalloc + + +%% + +.|\r|\n { check_extra (yyscanner); } + +%% + +int main(void); + +int +main () +{ + yyscan_t scanner; + struct Check check; + + check.foo = 'a'; + check.bar = NULL; + check.qux = 'z'; + + testlex_init_extra(&check, &scanner); + testset_in(stdin, scanner); + testset_out(stdout, scanner); + + /* Test to confirm that yyalloc was called from + * yylex_init_extra with the yyextra argument. + */ + check_extra(scanner); + + testlex(scanner); + + testlex_destroy(scanner); + return 0; +} + +void *yyalloc(size_t size, yyscan_t scanner) +{ + struct Check *check; + check = testget_extra(scanner); + + if (!check->bar) + check->bar = "Hello World"; + + check_extra(scanner); + + return malloc(size); +} + +/* Save char into junk array at next position. */ +static void check_extra(yyscan_t scanner) +{ + struct Check *check; + check = testget_extra(scanner); + + if (check->foo != 'a') { + fprintf(stderr, "foo is not 'a'\n"); + exit(1); + } + if (strcmp(check->bar, "Hello World") != 0) { + fprintf(stderr, "bar is not Hello World\n"); + exit(1); + } + if (check->qux != 'z') { + fprintf(stderr, "qux is not 'z'\n"); + exit(1); + } +} diff --git a/tests/alloc_extra.txt b/tests/alloc_extra.txt new file mode 100644 index 0000000..243df29 --- /dev/null +++ b/tests/alloc_extra.txt @@ -0,0 +1,795 @@ + + THE UNITED STATES CONSTITUTION + _________________________________________________________________ + + (See Note 1) + + We the People of the United States, in Order to form a more perfect + Union, establish Justice, insure domestic Tranquility, provide for the + common defence, promote the general Welfare, and secure the Blessings + of Liberty to ourselves and our Posterity, do ordain and establish + this Constitution for the United States of America. + +Article. I. + + Section 1. + + All legislative Powers herein granted shall be vested in a Congress of + the United States, which shall consist of a Senate and House of + Representatives. + + Section. 2. + + Clause 1: The House of Representatives shall be composed of Members + chosen every second Year by the People of the several States, and the + Electors in each State shall have the Qualifications requisite for + Electors of the most numerous Branch of the State Legislature. + + Clause 2: No Person shall be a Representative who shall not have + attained to the Age of twenty five Years, and been seven Years a + Citizen of the United States, and who shall not, when elected, be an + Inhabitant of that State in which he shall be chosen. + + Clause 3: Representatives and direct Taxes shall be apportioned among + the several States which may be included within this Union, according + to their respective Numbers, which shall be determined by adding to + the whole Number of free Persons, including those bound to Service for + a Term of Years, and excluding Indians not taxed, three fifths of all + other Persons. (See Note 2) The actual Enumeration shall be made + within three Years after the first Meeting of the Congress of the + United States, and within every subsequent Term of ten Years, in such + Manner as they shall by Law direct. The Number of Representatives + shall not exceed one for every thirty Thousand, but each State shall + have at Least one Representative; and until such enumeration shall be + made, the State of New Hampshire shall be entitled to chuse three, + Massachusetts eight, Rhode-Island and Providence Plantations one, + Connecticut five, New-York six, New Jersey four, Pennsylvania eight, + Delaware one, Maryland six, Virginia ten, North Carolina five, South + Carolina five, and Georgia three. + + Clause 4: When vacancies happen in the Representation from any State, + the Executive Authority thereof shall issue Writs of Election to fill + such Vacancies. + + Clause 5: The House of Representatives shall chuse their Speaker and + other Officers; and shall have the sole Power of Impeachment. + + Section. 3. + + Clause 1: The Senate of the United States shall be composed of two + Senators from each State, chosen by the Legislature thereof, (See Note + 3) for six Years; and each Senator shall have one Vote. + + Clause 2: Immediately after they shall be assembled in Consequence of + the first Election, they shall be divided as equally as may be into + three Classes. The Seats of the Senators of the first Class shall be + vacated at the Expiration of the second Year, of the second Class at + the Expiration of the fourth Year, and of the third Class at the + Expiration of the sixth Year, so that one third may be chosen every + second Year; and if Vacancies happen by Resignation, or otherwise, + during the Recess of the Legislature of any State, the Executive + thereof may make temporary Appointments until the next Meeting of the + Legislature, which shall then fill such Vacancies. (See Note 4) + + Clause 3: No Person shall be a Senator who shall not have attained to + the Age of thirty Years, and been nine Years a Citizen of the United + States, and who shall not, when elected, be an Inhabitant of that + State for which he shall be chosen. + + Clause 4: The Vice President of the United States shall be President + of the Senate, but shall have no Vote, unless they be equally divided. + + Clause 5: The Senate shall chuse their other Officers, and also a + President pro tempore, in the Absence of the Vice President, or when + he shall exercise the Office of President of the United States. + + Clause 6: The Senate shall have the sole Power to try all + Impeachments. When sitting for that Purpose, they shall be on Oath or + Affirmation. When the President of the United States is tried, the + Chief Justice shall preside: And no Person shall be convicted without + the Concurrence of two thirds of the Members present. + + Clause 7: Judgment in Cases of Impeachment shall not extend further + than to removal from Office, and disqualification to hold and enjoy + any Office of honor, Trust or Profit under the United States: but the + Party convicted shall nevertheless be liable and subject to + Indictment, Trial, Judgment and Punishment, according to Law. + + Section. 4. + + Clause 1: The Times, Places and Manner of holding Elections for + Senators and Representatives, shall be prescribed in each State by the + Legislature thereof; but the Congress may at any time by Law make or + alter such Regulations, except as to the Places of chusing Senators. + + Clause 2: The Congress shall assemble at least once in every Year, and + such Meeting shall be on the first Monday in December, (See Note 5) + unless they shall by Law appoint a different Day. + + Section. 5. + + Clause 1: Each House shall be the Judge of the Elections, Returns and + Qualifications of its own Members, and a Majority of each shall + constitute a Quorum to do Business; but a smaller Number may adjourn + from day to day, and may be authorized to compel the Attendance of + absent Members, in such Manner, and under such Penalties as each House + may provide. + + Clause 2: Each House may determine the Rules of its Proceedings, + punish its Members for disorderly Behaviour, and, with the Concurrence + of two thirds, expel a Member. + + Clause 3: Each House shall keep a Journal of its Proceedings, and from + time to time publish the same, excepting such Parts as may in their + Judgment require Secrecy; and the Yeas and Nays of the Members of + either House on any question shall, at the Desire of one fifth of + those Present, be entered on the Journal. + + Clause 4: Neither House, during the Session of Congress, shall, + without the Consent of the other, adjourn for more than three days, + nor to any other Place than that in which the two Houses shall be + sitting. + + Section. 6. + + Clause 1: The Senators and Representatives shall receive a + Compensation for their Services, to be ascertained by Law, and paid + out of the Treasury of the United States. (See Note 6) They shall in + all Cases, except Treason, Felony and Breach of the Peace, + beprivileged from Arrest during their Attendance at the Session of + their respective Houses, and in going to and returning from the same; + and for any Speech or Debate in either House, they shall not be + questioned in any other Place. + + Clause 2: No Senator or Representative shall, during the Time for + which he was elected, be appointed to any civil Office under the + Authority of the United States, which shall have been created, or the + Emoluments whereof shall have been encreased during such time; and no + Person holding any Office under the United States, shall be a Member + of either House during his Continuance in Office. + + Section. 7. + + Clause 1: All Bills for raising Revenue shall originate in the House + of Representatives; but the Senate may propose or concur with + Amendments as on other Bills. + + Clause 2: Every Bill which shall have passed the House of + Representatives and the Senate, shall, before it become a Law, be + presented to the President of the United States; If he approve he + shall sign it, but if not he shall return it, with his Objections to + that House in which it shall have originated, who shall enter the + Objections at large on their Journal, and proceed to reconsider it. If + after such Reconsideration two thirds of that House shall agree to + pass the Bill, it shall be sent, together with the Objections, to the + other House, by which it shall likewise be reconsidered, and if + approved by two thirds of that House, it shall become a Law. But in + all such Cases the Votes of both Houses shall be determined by yeas + and Nays, and the Names of the Persons voting for and against the Bill + shall be entered on the Journal of each House respectively. If any + Bill shall not be returned by the President within ten Days (Sundays + excepted) after it shall have been presented to him, the Same shall be + a Law, in like Manner as if he had signed it, unless the Congress by + their Adjournment prevent its Return, in which Case it shall not be a + Law. + + Clause 3: Every Order, Resolution, or Vote to which the Concurrence of + the Senate and House of Representatives may be necessary (except on a + question of Adjournment) shall be presented to the President of the + United States; and before the Same shall take Effect, shall be + approved by him, or being disapproved by him, shall be repassed by two + thirds of the Senate and House of Representatives, according to the + Rules and Limitations prescribed in the Case of a Bill. + + Section. 8. + + Clause 1: The Congress shall have Power To lay and collect Taxes, + Duties, Imposts and Excises, to pay the Debts and provide for the + common Defence and general Welfare of the United States; but all + Duties, Imposts and Excises shall be uniform throughout the United + States; + + Clause 2: To borrow Money on the credit of the United States; + + Clause 3: To regulate Commerce with foreign Nations, and among the + several States, and with the Indian Tribes; + + Clause 4: To establish an uniform Rule of Naturalization, and uniform + Laws on the subject of Bankruptcies throughout the United States; + + Clause 5: To coin Money, regulate the Value thereof, and of foreign + Coin, and fix the Standard of Weights and Measures; + + Clause 6: To provide for the Punishment of counterfeiting the + Securities and current Coin of the United States; + + Clause 7: To establish Post Offices and post Roads; + + Clause 8: To promote the Progress of Science and useful Arts, by + securing for limited Times to Authors and Inventors the exclusive + Right to their respective Writings and Discoveries; + + Clause 9: To constitute Tribunals inferior to the supreme Court; + + Clause 10: To define and punish Piracies and Felonies committed on the + high Seas, and Offences against the Law of Nations; + + Clause 11: To declare War, grant Letters of Marque and Reprisal, and + make Rules concerning Captures on Land and Water; + + Clause 12: To raise and support Armies, but no Appropriation of Money + to that Use shall be for a longer Term than two Years; + + Clause 13: To provide and maintain a Navy; + + Clause 14: To make Rules for the Government and Regulation of the land + and naval Forces; + + Clause 15: To provide for calling forth the Militia to execute the + Laws of the Union, suppress Insurrections and repel Invasions; + + Clause 16: To provide for organizing, arming, and disciplining, the + Militia, and for governing such Part of them as may be employed in the + Service of the United States, reserving to the States respectively, + the Appointment of the Officers, and the Authority of training the + Militia according to the discipline prescribed by Congress; + + Clause 17: To exercise exclusive Legislation in all Cases whatsoever, + over such District (not exceeding ten Miles square) as may, byCession + of particular States, and the Acceptance of Congress, become the Seat + of the Government of the United States, and to exercise like Authority + over all Places purchased by the Consent of the Legislature of the + State in which the Same shall be, for the Erection of Forts, + Magazines, Arsenals, dock-Yards, and other needful Buildings;--And + + Clause 18: To make all Laws which shall be necessary and proper for + carrying into Execution the foregoing Powers, and all other Powers + vested by this Constitution in the Government of the United States, or + in any Department or Officer thereof. + + Section. 9. + + Clause 1: The Migration or Importation of such Persons as any of the + States now existing shall think proper to admit, shall not be + prohibited by the Congress prior to the Year one thousand eight + hundred and eight, but a Tax or duty may be imposed on such + Importation, not exceeding ten dollars for each Person. + + Clause 2: The Privilege of the Writ of Habeas Corpus shall not be + suspended, unless when in Cases of Rebellion or Invasion the public + Safety may require it. + + Clause 3: No Bill of Attainder or ex post facto Law shall be passed. + + Clause 4: No Capitation, or other direct, Tax shall be laid, unless in + Proportion to the Census or Enumeration herein before directed to be + taken. (See Note 7) + + Clause 5: No Tax or Duty shall be laid on Articles exported from any + State. + + Clause 6: No Preference shall be given by any Regulation of Commerce + or Revenue to the Ports of one State over those of another: nor shall + Vessels bound to, or from, one State, be obliged to enter, clear, or + pay Duties in another. + + Clause 7: No Money shall be drawn from the Treasury, but in + Consequence of Appropriations made by Law; and a regular Statement and + Account of the Receipts and Expenditures of all public Money shall be + published from time to time. + + Clause 8: No Title of Nobility shall be granted by the United States: + And no Person holding any Office of Profit or Trust under them, shall, + without the Consent of the Congress, accept of any present, Emolument, + Office, or Title, of any kind whatever, from any King, Prince, or + foreign State. + + Section. 10. + + Clause 1: No State shall enter into any Treaty, Alliance, or + Confederation; grant Letters of Marque and Reprisal; coin Money; emit + Bills of Credit; make any Thing but gold and silver Coin a Tender in + Payment of Debts; pass any Bill of Attainder, ex post facto Law, or + Law impairing the Obligation of Contracts, or grant any Title of + Nobility. + + Clause 2: No State shall, without the Consent of the Congress, lay any + Imposts or Duties on Imports or Exports, except what may be absolutely + necessary for executing it's inspection Laws: and the net Produce of + all Duties and Imposts, laid by any State on Imports or Exports, shall + be for the Use of the Treasury of the United States; and all such Laws + shall be subject to the Revision and Controul of the Congress. + + Clause 3: No State shall, without the Consent of Congress, lay any + Duty of Tonnage, keep Troops, or Ships of War in time of Peace, enter + into any Agreement or Compact with another State, or with a foreign + Power, or engage in War, unless actually invaded, or in such imminent + Danger as will not admit of delay. + +Article. II. + + Section. 1. + + Clause 1: The executive Power shall be vested in a President of the + United States of America. He shall hold his Office during the Term of + four Years, and, together with the Vice President, chosen for the same + Term, be elected, as follows + + Clause 2: Each State shall appoint, in such Manner as the Legislature + thereof may direct, a Number of Electors, equal to the whole Number of + Senators and Representatives to which the State may be entitled in the + Congress: but no Senator or Representative, or Person holding an + Office of Trust or Profit under the United States, shall be appointed + an Elector. + + Clause 3: The Electors shall meet in their respective States, and vote + by Ballot for two Persons, of whom one at least shall not be an + Inhabitant of the same State with themselves. And they shall make a + List of all the Persons voted for, and of the Number of Votes for + each; which List they shall sign and certify, and transmit sealed to + the Seat of the Government of the United States, directed to the + President of the Senate. The President of the Senate shall, in the + Presence of the Senate and House of Representatives, open all the + Certificates, and the Votes shall then be counted. The Person having + the greatest Number of Votes shall be the President, if such Number be + a Majority of the whole Number of Electors appointed; and if there be + more than one who have such Majority, and have an equal Number of + Votes, then the House of Representatives shall immediately chuse by + Ballot one of them for President; and if no Person have a Majority, + then from the five highest on the List the said House shall in like + Manner chuse the President. But in chusing the President, the Votes + shall be taken by States, the Representation from each State having + one Vote; A quorum for this Purpose shall consist of a Member or + Members from two thirds of the States, and a Majority of all the + States shall be necessary to a Choice. In every Case, after the Choice + of the President, the Person having the greatest Number of Votes of + the Electors shall be the Vice President. But if there should remain + two or more who have equal Votes, the Senate shall chuse from them by + Ballot the Vice President. (See Note 8) + + Clause 4: The Congress may determine the Time of chusing the Electors, + and the Day on which they shall give their Votes; which Day shall be + the same throughout the United States. + + Clause 5: No Person except a natural born Citizen, or a Citizen of the + United States, at the time of the Adoption of this Constitution, shall + be eligible to the Office of President; neither shall any Person be + eligible to that Office who shall not have attained to the Age of + thirty five Years, and been fourteen Years a Resident within the + United States. + + Clause 6: In Case of the Removal of the President from Office, or of + his Death, Resignation, or Inability to discharge the Powers and + Duties of the said Office, (See Note 9) the Same shall devolve on the + VicePresident, and the Congress may by Law provide for the Case of + Removal, Death, Resignation or Inability, both of the President and + Vice President, declaring what Officer shall then act as President, + and such Officer shall act accordingly, until the Disability be + removed, or a President shall be elected. + + Clause 7: The President shall, at stated Times, receive for his + Services, a Compensation, which shall neither be encreased nor + diminished during the Period for which he shall have been elected, and + he shall not receive within that Period any other Emolument from the + United States, or any of them. + + Clause 8: Before he enter on the Execution of his Office, he shall + take the following Oath or Affirmation:--"I do solemnly swear (or + affirm) that I will faithfully execute the Office of President of the + United States, and will to the best of my Ability, preserve, protect + and defend the Constitution of the United States." + + Section. 2. + + Clause 1: The President shall be Commander in Chief of the Army and + Navy of the United States, and of the Militia of the several States, + when called into the actual Service of the United States; he may + require the Opinion, in writing, of the principal Officer in each of + the executive Departments, upon any Subject relating to the Duties of + their respective Offices, and he shall have Power to grant Reprieves + and Pardons for Offences against the United States, except in Cases of + Impeachment. + + Clause 2: He shall have Power, by and with the Advice and Consent of + the Senate, to make Treaties, provided two thirds of the Senators + present concur; and he shall nominate, and by and with the Advice and + Consent of the Senate, shall appoint Ambassadors, other public + Ministers and Consuls, Judges of the supreme Court, and all other + Officers of the United States, whose Appointments are not herein + otherwise provided for, and which shall be established by Law: but the + Congress may by Law vest the Appointment of such inferior Officers, as + they think proper, in the President alone, in the Courts of Law, or in + the Heads of Departments. + + Clause 3: The President shall have Power to fill up all Vacancies that + may happen during the Recess of the Senate, by granting Commissions + which shall expire at the End of their next Session. + + Section. 3. + + He shall from time to time give to the Congress Information of the + State of the Union, and recommend to their Consideration such Measures + as he shall judge necessary and expedient; he may, on extraordinary + Occasions, convene both Houses, or either of them, and in Case of + Disagreement between them, with Respect to the Time of Adjournment, he + may adjourn them to such Time as he shall think proper; he shall + receive Ambassadors and other public Ministers; he shall take Care + that the Laws be faithfully executed, and shall Commission all the + Officers of the United States. + + Section. 4. + + The President, Vice President and all civil Officers of the United + States, shall be removed from Office on Impeachment for, and + Conviction of, Treason, Bribery, or other high Crimes and + Misdemeanors. + +Article. III. + + Section. 1. + + The judicial Power of the United States, shall be vested in one + supreme Court, and in such inferior Courts as the Congress may from + time to time ordain and establish. The Judges, both of the supreme and + inferior Courts, shall hold their Offices during good Behaviour, and + shall, at stated Times, receive for their Services, a Compensation, + which shall not be diminished during their Continuance in Office. + + Section. 2. + + Clause 1: The judicial Power shall extend to all Cases, in Law and + Equity, arising under this Constitution, the Laws of the United + States, and Treaties made, or which shall be made, under their + Authority;--to all Cases affecting Ambassadors, other public Ministers + and Consuls;--to all Cases of admiralty and maritime Jurisdiction;--to + Controversies to which the United States shall be a Party;--to + Controversies between two or more States;--between a State and + Citizens of another State; (See Note 10)--between Citizens of + different States, --between Citizens of the same State claiming Lands + under Grants of different States, and between a State, or the Citizens + thereof, and foreign States, Citizens or Subjects. + + Clause 2: In all Cases affecting Ambassadors, other public Ministers + and Consuls, and those in which a State shall be Party, the supreme + Court shall have original Jurisdiction. In all the other Cases before + mentioned, the supreme Court shall have appellate Jurisdiction, both + as to Law and Fact, with such Exceptions, and under such Regulations + as the Congress shall make. + + Clause 3: The Trial of all Crimes, except in Cases of Impeachment, + shall be by Jury; and such Trial shall be held in the State where the + said Crimes shall have been committed; but when not committed within + any State, the Trial shall be at such Place or Places as the Congress + may by Law have directed. + + Section. 3. + + Clause 1: Treason against the United States, shall consist only in + levying War against them, or in adhering to their Enemies, giving them + Aid and Comfort. No Person shall be convicted of Treason unless on the + Testimony of two Witnesses to the same overt Act, or on Confession in + open Court. + + Clause 2: The Congress shall have Power to declare the Punishment of + Treason, but no Attainder of Treason shall work Corruption of Blood, + or Forfeiture except during the Life of the Person attainted. + +Article. IV. + + Section. 1. + + Full Faith and Credit shall be given in each State to the public Acts, + Records, and judicial Proceedings of every other State. And the + Congress may by general Laws prescribe the Manner in which such Acts, + Records and Proceedings shall be proved, and the Effect thereof. + + Section. 2. + + Clause 1: The Citizens of each State shall be entitled to all + Privileges and Immunities of Citizens in the several States. + + Clause 2: A Person charged in any State with Treason, Felony, or other + Crime, who shall flee from Justice, and be found in another State, + shall on Demand of the executive Authority of the State from which he + fled, be delivered up, to be removed to the State having Jurisdiction + of the Crime. + + Clause 3: No Person held to Service or Labour in one State, under the + Laws thereof, escaping into another, shall, in Consequence of any Law + or Regulation therein, be discharged from such Service or Labour, but + shall be delivered up on Claim of the Party to whom such Service or + Labour may be due. (See Note 11) + + Section. 3. + + Clause 1: New States may be admitted by the Congress into this Union; + but no new State shall be formed or erected within the Jurisdiction of + any other State; nor any State be formed by the Junction of two or + more States, or Parts of States, without the Consent of the + Legislatures of the States concerned as well as of the Congress. + + Clause 2: The Congress shall have Power to dispose of and make all + needful Rules and Regulations respecting the Territory or other + Property belonging to the United States; and nothing in this + Constitution shall be so construed as to Prejudice any Claims of the + United States, or of any particular State. + + Section. 4. + + The United States shall guarantee to every State in this Union a + Republican Form of Government, and shall protect each of them against + Invasion; and on Application of the Legislature, or of the Executive + (when the Legislature cannot be convened) against domestic Violence. + +Article. V. + + The Congress, whenever two thirds of both Houses shall deem it + necessary, shall propose [1]Amendments to this Constitution, or, on + the Application of the Legislatures of two thirds of the several + States, shall call a Convention for proposing Amendments, which, in + either Case, shall be valid to all Intents and Purposes, as Part of + this Constitution, when ratified by the Legislatures of three fourths + of the several States, or by Conventions in three fourths thereof, as + the one or the other Mode of Ratification may be proposed by the + Congress; Provided that no Amendment which may be made prior to the + Year One thousand eight hundred and eight shall in any Manner affect + the first and fourth Clauses in the Ninth Section of the first + Article; and that no State, without its Consent, shall be deprived of + its equal Suffrage in the Senate. + +Article. VI. + + Clause 1: All Debts contracted and Engagements entered into, before + the Adoption of this Constitution, shall be as valid against the + United States under this Constitution, as under the Confederation. + + Clause 2: This Constitution, and the Laws of the United States which + shall be made in Pursuance thereof; and all Treaties made, or which + shall be made, under the Authority of the United States, shall be the + supreme Law of the Land; and the Judges in every State shall be bound + thereby, any Thing in the Constitution or Laws of any State to the + Contrary notwithstanding. + + Clause 3: The Senators and Representatives before mentioned, and the + Members of the several State Legislatures, and all executive and + judicial Officers, both of the United States and of the several + States, shall be bound by Oath or Affirmation, to support this + Constitution; but no religious Test shall ever be required as a + Qualification to any Office or public Trust under the United States. + +Article. VII. + + The Ratification of the Conventions of nine States, shall be + sufficient for the Establishment of this Constitution between the + States so ratifying the Same. + + done in Convention by the Unanimous Consent of the States present the + Seventeenth Day of September in the Year of our Lord one thousand + seven hundred and Eighty seven and of the Independence of the United + States of America the Twelfth In witness whereof We have hereunto + subscribed our Names, + + GO WASHINGTON--Presidt. and deputy from Virginia + + [Signed also by the deputies of twelve States.] + + Delaware + + Geo: Read + Gunning Bedford jun + John Dickinson + Richard Bassett + Jaco: Broom + + Maryland + + James MCHenry + Dan of ST ThoS. Jenifer + DanL Carroll. + + Virginia + + John Blair-- + James Madison Jr. + + North Carolina + + WM Blount + RichD. Dobbs Spaight. + Hu Williamson + + South Carolina + + J. Rutledge + Charles 1ACotesworth Pinckney + Charles Pinckney + Pierce Butler. + + Georgia + + William Few + Abr Baldwin + + New Hampshire + + John Langdon + Nicholas Gilman + + Massachusetts + + Nathaniel Gorham + Rufus King + + Connecticut + WM. SamL. Johnson + Roger Sherman + + New York + + Alexander Hamilton + + New Jersey + + Wil: Livingston + David Brearley. + WM. Paterson. + Jona: Dayton + + Pennsylvania + + B Franklin + Thomas Mifflin + RobT Morris + Geo. Clymer + ThoS. FitzSimons + Jared Ingersoll + James Wilson. + Gouv Morris + + Attest William Jackson Secretary + + NOTES + + Note 1: This text of the Constitution follows the engrossed copy + signed by Gen. Washington and the deputies from 12 States. The small + superior figures preceding the paragraphs designate Clauses, and were + not in the original and have no reference to footnotes. + + The Constitution was adopted by a convention of the States on + September 17, 1787, and was subsequently ratified by the several + States, on the following dates: Delaware, December 7, 1787; + Pennsylvania, December 12, 1787; New Jersey, December 18, 1787; + Georgia, January 2, 1788; Connecticut, January 9, 1788; Massachusetts, + February 6, 1788; Maryland, April 28, 1788; South Carolina, May 23, + 1788; New Hampshire, June 21, 1788. + + Ratification was completed on June 21, 1788. + + The Constitution was subsequently ratified by Virginia, June 25, 1788; + New York, July 26, 1788; North Carolina, November 21, 1789; Rhode + Island, May 29, 1790; and Vermont, January 10, 1791. + + In May 1785, a committee of Congress made a report recommending an + alteration in the Articles of Confederation, but no action was taken + on it, and it was left to the State Legislatures to proceed in the + matter. In January 1786, the Legislature of Virginia passed a + resolution providing for the appointment of five commissioners, who, + or any three of them, should meet such commissioners as might be + appointed in the other States of the Union, at a time and place to be + agreed upon, to take into consideration the trade of the United + States; to consider how far a uniform system in their commercial + regulations may be necessary to their common interest and their + permanent harmony; and to report to the several States such an act, + relative to this great object, as, when ratified by them, will enable + the United States in Congress effectually to provide for the same. The + Virginia commissioners, after some correspondence, fixed the first + Monday in September as the time, and the city of Annapolis as the + place for the meeting, but only four other States were represented, + viz: Delaware, New York, New Jersey, and Pennsylvania; the + commissioners appointed by Massachusetts, New Hampshire, North + Carolina, and Rhode Island failed to attend. Under the circumstances + of so partial a representation, the commissioners present agreed upon + a report, (drawn by Mr. Hamilton, of New York,) expressing their + unanimous conviction that it might essentially tend to advance the + interests of the Union if the States by which they were respectively + delegated would concur, and use their endeavors to procure the + concurrence of the other States, in the appointment of commissioners + to meet at Philadelphia on the Second Monday of May following, to take + into consideration the situation of the United States; to devise such + further provisions as should appear to them necessary to render the + Constitution of the Federal Government adequate to the exigencies of + the Union; and to report such an act for that purpose to the United + States in Congress assembled as, when agreed to by them and afterwards + confirmed by the Legislatures of every State, would effectually + provide for the same. + + Congress, on the 21st of February, 1787, adopted a resolution in favor + of a convention, and the Legislatures of those States which had not + already done so (with the exception of Rhode Island) promptly + appointed delegates. On the 25th of May, seven States having convened, + George Washington, of Virginia, was unanimously elected President, and + the consideration of the proposed constitution was commenced. On the + 17th of September, 1787, the Constitution as engrossed and agreed upon + was signed by all the members present, except Mr. Gerry of + Massachusetts, and Messrs. Mason and Randolph, of Virginia. The + president of the convention transmitted it to Congress, with a + resolution stating how the proposed Federal Government should be put + in operation, and an explanatory letter. Congress, on the 28th of + September, 1787, directed the Constitution so framed, with the + resolutions and letter concerning the same, to "be transmitted to the + several Legislatures in order to be submitted to a convention of + delegates chosen in each State by the people thereof, in conformity to + the resolves of the convention." + + On the 4th of March, 1789, the day which had been fixed for commencing + the operations of Government under the new Constitution, it had been + ratified by the conventions chosen in each State to consider it, as + follows: Delaware, December 7, 1787; Pennsylvania, December 12, 1787; + New Jersey, December 18, 1787; Georgia, January 2, 1788; Connecticut, + January 9, 1788; Massachusetts, February 6, 1788; Maryland, April 28, + 1788; South Carolina, May 23, 1788; New Hampshire, June 21, 1788; + Virginia, June 25, 1788; and New York, July 26, 1788. + + The President informed Congress, on the 28th of January, 1790, that + North Carolina had ratified the Constitution November 21, 1789; and he + informed Congress on the 1st of June, 1790, that Rhode Island had + ratified the Constitution May 29, 1790. Vermont, in convention, + ratified the Constitution January 10, 1791, and was, by an act of + Congress approved February 18, 1791, "received and admitted into this + Union as a new and entire member of the United States." + + Note 2: The part of this Clause relating to the mode of apportionment + of representatives among the several States has been affected by + Section 2 of amendment XIV, and as to taxes on incomes without + apportionment by amendment XVI. + + Note 3: This Clause has been affected by Clause 1 of amendment XVII. + + Note 4: This Clause has been affected by Clause 2 of amendment XVIII. + + Note 5: This Clause has been affected by amendment XX. + + Note 6: This Clause has been affected by amendment XXVII. + + Note 7: This Clause has been affected by amendment XVI. + + Note 8: This Clause has been superseded by amendment XII. + + Note 9: This Clause has been affected by amendment XXV. + + Note 10: This Clause has been affected by amendment XI. + + Note 11: This Clause has been affected by amendment XIII. + + Note 12: The first ten amendments to the Constitution of the United + States (and two others, one of which failed of ratification and the + other which later became the 27th amendment) were proposed to the + legislatures of the several States by the First Congress on September + 25, 1789. The first ten amendments were ratified by the following + States, and the notifications of ratification by the Governors thereof + were successively communicated by the President to Congress: New + Jersey, November 20, 1789; Maryland, December 19, 1789; North + Carolina, December 22, 1789; South Carolina, January 19, 1790; New + Hampshire, January 25, 1790; Delaware, January 28, 1790; New York, + February 24, 1790; Pennsylvania, March 10, 1790; Rhode Island, June 7, + 1790; Vermont, November 3, 1791; and Virginia, December 15, 1791. + + Ratification was completed on December 15, 1791. + + The amendments were subsequently ratified by the legislatures of + Massachusetts, March 2, 1939; Georgia, March 18, 1939; and + Connecticut, April 19, 1939. + + Note 13: Only the 13th, 14th, 15th, and 16th articles of amendment had + numbers assigned to them at the time of ratification. + + Note 14: This sentence has been superseded by section 3 of amendment + XX. + + Note 15: See amendment XIX and section 1 of amendment XXVI. + + Note 16: Repealed by section 1 of amendment XXI. + +References + + 1. http://www.house.gov/Constitution/Amend.html diff --git a/tests/array_nr.l b/tests/array_nr.l new file mode 100644 index 0000000..52e0753 --- /dev/null +++ b/tests/array_nr.l @@ -0,0 +1,55 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +/*#include "parser.h" */ + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn array + + +%% + +.|\n { } + + +%% + +int main (void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + yylex(); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/array_nr.txt b/tests/array_nr.txt new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/array_nr.txt @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/array_r.l b/tests/array_r.l new file mode 100644 index 0000000..556d26f --- /dev/null +++ b/tests/array_r.l @@ -0,0 +1,62 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +/*#include "parser.h" */ + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn array reentrant + + +%% + +.|\n { } + + +%% + +int main(void); + +int +main () +{ + yyscan_t lexer; + + yylex_init(&lexer); + yyset_in(stdin, lexer); + yyset_out(stdout, lexer); + + yylex( lexer ); + + yylex_destroy( lexer); + printf("TEST RETURNING OK.\n"); + + return 0; +} diff --git a/tests/array_r.txt b/tests/array_r.txt new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/array_r.txt @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/basic_nr.l b/tests/basic_nr.l new file mode 100644 index 0000000..3c29757 --- /dev/null +++ b/tests/basic_nr.l @@ -0,0 +1,64 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* TEST scanner. + Basic non-reentrant scanner. + + Sample Input: + # this is a comment + foo = true + bar = "string value" + integer = 43 +*/ +%{ +#include "config.h" +%} + +%option prefix="test" +%option nounput noyywrap noyylineno warn nodefault noinput + +IDENT [[:alnum:]_-] +WS [[:blank:]] +%% + +^{IDENT}+{WS}*={WS}*(true|false){WS}*\r?\n { return 100;} +^{IDENT}+{WS}*={WS}*\"[^\"\n\r]*\"{WS}*\r?\n { return 101;} +^{IDENT}+{WS}*={WS}*[[:digit:]]+{WS}*\r?\n { return 102;} +^{WS}*#.*\r?\n { } +^{WS}*\r?\n { } +.|\n { fprintf(stderr,"Invalid line.\n"); exit(-1);} + +%% + +int main(void); + +int main () +{ + yyin = stdin; + yyout = stdout; + while( yylex() ) + { + } + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/basic_nr.txt b/tests/basic_nr.txt new file mode 100644 index 0000000..642e0fb --- /dev/null +++ b/tests/basic_nr.txt @@ -0,0 +1,5 @@ +# this is a comment +foo = "bar" +num = 43 +setting = false + diff --git a/tests/basic_r.l b/tests/basic_r.l new file mode 100644 index 0000000..e9ff59f --- /dev/null +++ b/tests/basic_r.l @@ -0,0 +1,68 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* A reentrant scanner. + This file will not compile under flex version <= 2.5.4. + Sample Input: + # this is a comment + foo = true + bar = "string value" + integer = 43 +*/ +%{ +#include "config.h" +%} + +%option prefix="test" +%option nounput noyywrap noyylineno warn nodefault noinput +%option reentrant + +IDENT [[:alnum:]_-] +WS [[:blank:]] +%% + +^{IDENT}+{WS}*={WS}*(true|false){WS}*\r?\n { return 100;} +^{IDENT}+{WS}*={WS}*\"[^\"\n\r]*\"{WS}*\r?\n { return 101;} +^{IDENT}+{WS}*={WS}*[[:digit:]]+{WS}*\r?\n { return 102;} +^{WS}*#.*\r?\n { } +^{WS}*\r?\n { } +.|\n { fprintf(stderr,"Invalid line.\n"); exit(-1);} + +%% + +int main(void); + +int main () +{ + yyscan_t lexer; + yylex_init( &lexer ); + yyset_out ( stdout,lexer); + yyset_in ( stdin, lexer); + while( yylex(lexer) ) + { + } + yylex_destroy( lexer ); + printf("TEST RETURNING OK.\n"); + return 0; +} + diff --git a/tests/basic_r.txt b/tests/basic_r.txt new file mode 100644 index 0000000..2160628 --- /dev/null +++ b/tests/basic_r.txt @@ -0,0 +1,4 @@ +# this is a comment +foo = "bar" +num = 43 +setting = false diff --git a/tests/bison_nr.txt b/tests/bison_nr.txt new file mode 100644 index 0000000..94adcb2 --- /dev/null +++ b/tests/bison_nr.txt @@ -0,0 +1,4 @@ +0001: FIRSTNAME=firstname +0002: MIDDLENAME=middle +0003: LASTNAME=lastname +0004: ADDRESS=address diff --git a/tests/bison_nr_main.c b/tests/bison_nr_main.c new file mode 100644 index 0000000..f5dd98a --- /dev/null +++ b/tests/bison_nr_main.c @@ -0,0 +1,42 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "bison_nr_parser.h" +#include "bison_nr_scanner.h" + +extern int testparse(void); + +int main ( int argc, char** argv ) +{ + (void)argc; + (void)argv; + + /*yydebug =1;*/ + testin = stdin; + testparse ( ); + return 0; +} + + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/bison_nr_parser.y b/tests/bison_nr_parser.y new file mode 100644 index 0000000..cbb4f2c --- /dev/null +++ b/tests/bison_nr_parser.y @@ -0,0 +1,98 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* + How to compile: + bison --defines --output-file="parser.c" --name-prefix="test" parser.y + */ +%{ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "config.h" +#include "bison_nr_parser.h" +#include "bison_nr_scanner.h" + +#define YYERROR_VERBOSE 1 +/* #define YYPARSE_PARAM scanner */ +/* #define YYLEX_PARAM scanner */ + +int yyerror(const char* msg); +extern int testget_lineno(void); + + +/* A dummy function. A check against seg-faults in yylval->str. */ +int process_text(char* s) { + int total =0; + while(*s) { + total += (int) *s; + ++s; + } + return total; +} + + +%} + +%pure-parser + +%union { + int lineno; + char * str; +} +%token <str> IDENT +%token <lineno> LINENO +%token EQUAL "=" +%token COLON ":" +%token SPACE " " +%% + +file: + line + | file line + ; + +line: + LINENO COLON SPACE IDENT EQUAL IDENT + { + process_text($4); + process_text($6); + /* Check lineno. */ + if( $1 != @1.first_line || $1 != testget_lineno()) + { + yyerror("Parse failed: Line numbers do not match."); + YYABORT; + } + + /* Recreate the line to stdout. */ + printf ( "%04d: %s=%s\n", @1.first_line, $4, $6); + } + ; + +%% + +int yyerror(const char* msg) { + fprintf(stderr,"%s\n",msg); + return 0; +} + diff --git a/tests/bison_nr_scanner.l b/tests/bison_nr_scanner.l new file mode 100644 index 0000000..0bd871c --- /dev/null +++ b/tests/bison_nr_scanner.l @@ -0,0 +1,62 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* The scanner expects to link to bison yylval . */ +#include <stdio.h> +#include <stdlib.h> +#include "bison_nr_parser.h" +#include "config.h" +static char* STRDUP(char* s1); +#define YY_EXTRA_TYPE int +%} + +%option 8bit prefix="test" +%option bison-locations yylineno +%option prefix="test" header="bison_nr_scanner.h" yylineno +%option nomain nounput noyy_top_state noyywrap nodefault noinput warn + + +%% + +^[[:digit:]]+ { + yylval->lineno = yylineno; + yylloc->first_line = (int)strtol(yytext,NULL,10); + return LINENO; + } +":" { return COLON; } +" " { return SPACE; } +"=" { return EQUAL; } +[[:alnum:]_]+ { yylval->str = STRDUP(yytext); return IDENT;} + +\r|\n { } +. { yyterminate();} +%% + + +static char* STRDUP(char* s1) +{ + char* s2 = malloc(strlen(s1)+1); + sprintf(s2,"%s",s1); + return s2; +} diff --git a/tests/bison_yylloc.txt b/tests/bison_yylloc.txt new file mode 100644 index 0000000..94adcb2 --- /dev/null +++ b/tests/bison_yylloc.txt @@ -0,0 +1,4 @@ +0001: FIRSTNAME=firstname +0002: MIDDLENAME=middle +0003: LASTNAME=lastname +0004: ADDRESS=address diff --git a/tests/bison_yylloc_main.c b/tests/bison_yylloc_main.c new file mode 100644 index 0000000..0274d39 --- /dev/null +++ b/tests/bison_yylloc_main.c @@ -0,0 +1,44 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "bison_yylloc_parser.h" +#include "bison_yylloc_scanner.h" + +int main ( int argc, char** argv ) +{ + yyscan_t scanner; + + (void)argc; + (void)argv; + + /*yydebug =1;*/ + testlex_init ( &scanner ); + testset_in(stdin,scanner); + testparse ( scanner ); + testlex_destroy ( scanner ); + return 0; +} + + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/bison_yylloc_parser.y b/tests/bison_yylloc_parser.y new file mode 100644 index 0000000..8737291 --- /dev/null +++ b/tests/bison_yylloc_parser.y @@ -0,0 +1,102 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%parse-param { void* scanner } +%lex-param { void* scanner } + +/* + How to compile: + bison --defines --output-file="bison_yylloc_parser.c" --name-prefix="test" parser.y + */ +%{ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "config.h" +#include "bison_yylloc_parser.h" +#include "bison_yylloc_scanner.h" + +int yyerror(YYLTYPE *location, void* scanner, const char* msg); + +#define YYERROR_VERBOSE 1 + +extern int testget_lineno(void*); + + +/* A dummy function. A check against seg-faults in yylval->str. */ +int process_text(char* s) { + int total =0; + while(*s) { + total += (int) *s; + ++s; + } + return total; +} + + +%} + +%pure-parser + +%union { + int lineno; + char * str; +} +%token <str> IDENT +%token <lineno> LINENO +%token EQUAL "=" +%token COLON ":" +%token SPACE " " +%% + +file: + line + | file line + ; + +line: + LINENO COLON SPACE IDENT EQUAL IDENT + { + process_text($4); + process_text($6); + /* Check lineno. */ + if( $1 != @1.first_line || $1 != testget_lineno(scanner)) + { + yyerror(0, 0, "Parse failed: Line numbers do not match."); + YYABORT; + } + + /* Recreate the line to stdout. */ + printf ( "%04d: %s=%s\n", @1.first_line, $4, $6); + } + ; + +%% + +int yyerror(YYLTYPE *location, void* scanner, const char* msg) { + (void)location; + (void)scanner; + fprintf(stderr,"%s\n",msg); + return 0; +} + diff --git a/tests/bison_yylloc_scanner.l b/tests/bison_yylloc_scanner.l new file mode 100644 index 0000000..eab898c --- /dev/null +++ b/tests/bison_yylloc_scanner.l @@ -0,0 +1,65 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* The scanner expects to link to bison yylval . */ +#include <stdio.h> +#include <stdlib.h> +#include "bison_yylloc_parser.h" +#include "config.h" +static char* STRDUP(char* s1); +#define YY_EXTRA_TYPE int +%} + +%option 8bit prefix="test" +%option reentrant bison-bridge bison-locations yylineno +%option header="bison_yylloc_scanner.h" +%option nomain nounput noyy_top_state noyywrap nodefault noinput warn + + +%% + + if ( !yyextra) + yyextra = 1; + +^[[:digit:]]+ { + yylval->lineno = yyextra++; + yylloc->first_line = (int)strtol(yytext,NULL,10); + return LINENO; + } +":" { return COLON; } +" " { return SPACE; } +"=" { return EQUAL; } +[[:alnum:]_]+ { yylval->str = STRDUP(yytext); return IDENT;} + +\r|\n { } +. { yyterminate();} +%% + + +static char* STRDUP(char* s1) +{ + char* s2 = malloc(strlen(s1)+1); + sprintf(s2,"%s",s1); + return s2; +} diff --git a/tests/bison_yylval.txt b/tests/bison_yylval.txt new file mode 100644 index 0000000..846f206 --- /dev/null +++ b/tests/bison_yylval.txt @@ -0,0 +1,5 @@ +<html> +<body bgcolor="white"> + This is a <b>test</b> +</body> +</html> diff --git a/tests/bison_yylval_main.c b/tests/bison_yylval_main.c new file mode 100644 index 0000000..fb04538 --- /dev/null +++ b/tests/bison_yylval_main.c @@ -0,0 +1,43 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "bison_yylval_parser.h" +#include "bison_yylval_scanner.h" + +int main ( int argc, char** argv ) +{ + yyscan_t scanner; + + (void)argc; + (void)argv; + + /*yydebug =1;*/ + testlex_init ( &scanner ); + testset_in(stdin,scanner); + testparse ( scanner ); + testlex_destroy ( scanner ); + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/bison_yylval_parser.y b/tests/bison_yylval_parser.y new file mode 100644 index 0000000..4159d7b --- /dev/null +++ b/tests/bison_yylval_parser.y @@ -0,0 +1,84 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* Accepts html-like input. + How to compile: + bison --defines --output-file="parser.c" --name-prefix="test" parser.y + */ +%parse-param { void* scanner } +%lex-param { void* scanner } +%{ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "config.h" +#include "bison_yylval_parser.h" +#include "bison_yylval_scanner.h" + +#define YYERROR_VERBOSE 1 + +int yyerror(void* scanner, const char* msg); + +/* A dummy function. A check against seg-faults in yylval->str. */ +int process_text(char* s) { + int total =0; + while(*s) { + total += (int) *s; + ++s; + } + return total; +} + + +%} + +%pure-parser + +%union { + long unused; + char * str; +} + +%token <str> TAGNAME TEXT +%token LT +%token GT +%token LTSLASH "</" + +%% + +html: + TEXT { process_text($1); free($1);} + | starttag html endtag + | html TEXT { process_text($2); free($2);} + | html starttag html endtag + ; + +starttag: LT TAGNAME GT { process_text($2); free($2);} ; +endtag: LTSLASH TAGNAME GT { process_text($2);free($2);} ; +%% + +int yyerror(void* scanner, const char* msg) { + (void)scanner; + fprintf(stderr,"%s\n",msg); + return 0; +} diff --git a/tests/bison_yylval_scanner.l b/tests/bison_yylval_scanner.l new file mode 100644 index 0000000..1e93fc1 --- /dev/null +++ b/tests/bison_yylval_scanner.l @@ -0,0 +1,81 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* The scanner expects to link to bison yylval . */ +#include <stdio.h> +#include <stdlib.h> +#include "bison_yylval_parser.h" +#include "config.h" +static char* STRDUP(char* s1); + +enum yesno_t { no=0, yes=1 }; +#define YY_EXTRA_TYPE enum yesno_t +%} + +%option 8bit prefix="test" +%option reentrant bison-bridge +%option header="bison_yylval_scanner.h" +%option noyywrap nomain nounput noyy_top_state noyywrap nodefault noinput warn +%option stack + + +%x IN_TAG +%x DISCARD_THRU_GT +%% + + #define YY_USER_INIT yyextra = no; + #define NEED_TAG_NAME yyextra + + +<INITIAL>{ +"</" { NEED_TAG_NAME= yes; yy_push_state( IN_TAG, yyscanner); return LTSLASH;} +"<"[^[:alpha:]] { yy_push_state(DISCARD_THRU_GT,yyscanner); } +"<" { NEED_TAG_NAME= yes; yy_push_state( IN_TAG, yyscanner); return LT; } +[^<]{1,512} { yyget_lval(yyscanner)->str = STRDUP(yytext); return TEXT;} +} +<IN_TAG>{ +">" { yy_pop_state( yyscanner ); return GT; } +[[:alpha:]][[:alnum:]]* { + if( NEED_TAG_NAME == yes){ + NEED_TAG_NAME=no; + yylval->str = STRDUP(yytext); + return TAGNAME; + } + } + +.|\r|\n { } +} +<DISCARD_THRU_GT>{ +[^>]{1,512} { } +">" { yy_pop_state(yyscanner);} +} +%% + + +static char* STRDUP(char* s1) +{ + char* s2 = malloc(strlen(s1)+1); + sprintf(s2,"%s",s1); + return s2; +} diff --git a/tests/c_cxx_nr.lll b/tests/c_cxx_nr.lll new file mode 100644 index 0000000..c9e0fb6 --- /dev/null +++ b/tests/c_cxx_nr.lll @@ -0,0 +1,57 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + The scanner is not really important -- we only care if + it compiles under a c++ compiler, and runs. */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +/*#include "parser.h" */ + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap +%option warn + + +%% + +. { } + +%% + +int main(void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + yylex(); + yylex_destroy(); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/c_cxx_nr.txt b/tests/c_cxx_nr.txt new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/c_cxx_nr.txt @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/c_cxx_r.lll b/tests/c_cxx_r.lll new file mode 100644 index 0000000..83a39d7 --- /dev/null +++ b/tests/c_cxx_r.lll @@ -0,0 +1,61 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + The scanner is not really important -- we only care if + it compiles under a c++ compiler, and runs. */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +/*#include "parser.h" */ + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap +%option warn reentrant + + +%% + +. { } + +%% + +int main(void); + +int +main () +{ + yyscan_t lexer; + yylex_init( &lexer ); + yyset_out ( stdout,lexer); + yyset_in ( stdin, lexer); + while( yylex(lexer) ) + { + } + yylex_destroy( lexer ); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/c_cxx_r.txt b/tests/c_cxx_r.txt new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/c_cxx_r.txt @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/ccl.l b/tests/ccl.l new file mode 100644 index 0000000..c244892 --- /dev/null +++ b/tests/ccl.l @@ -0,0 +1,95 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +/*#include "parser.h" */ + +#define err_abort() do{printf("ERROR: flex line %d. input line %d.\n", __LINE__, yylineno); abort();} while(0) +#define a_ok() do{printf("OK: flex line %d. input line %d.\n", __LINE__, yylineno); return 1;}while(0) +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn + + +%% + +^"^alpha:"[[:^alpha:]]+@alpha@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"^digit:"[[:^digit:]]+@digit@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"^alnum:"[[:^alnum:]]+@alnum@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"^upper:"[[:^upper:]]+@upper@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"^lower:"[[:^lower:]]+@lower@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"^space:"[[:^space:]]+@space@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"^blank:"[[:^blank:]]+@blank@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"^punct:"[[:^punct:]]+@punct@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"^cntrl:"[[:^cntrl:]]+@cntrl@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"^xdigit:"[[:^xdigit:]]+@xdigit@\n printf("OK: %s", yytext); ++yylineno; return 1; + +^"a-d:"[[:alpha:]]{-}[[:digit:]]+@a-d@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"l-xyz:"([[:lower:]]{-}[xyz])+@l-xyz@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"abcd-bc:"([abcd]{-}[bc])+@abcd-bc@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"abcde-b-c:"([abcde]{-}[b]{-}[c])+@abcde-b-c@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"^XY-^XYZ:"([^XY]{-}[^XYZ])+@^XY-^XYZ@\n printf("OK: %s", yytext); ++yylineno; return 1; + +^"a+d:"([[:alpha:]]{+}[[:digit:]])+"@a+d@"\n a_ok(); +^"a-u+Q:"([[:alpha:]]{-}[[:upper:]]{+}[Q])+"@a-u+Q@"\n a_ok(); + +^"ia:"(?i:a)+@ia@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"iabc:"(?i:abc)+@iabc@\n printf("OK: %s", yytext); ++yylineno; return 1; +^"ia-c:"(?i:[a-c]+)@ia-c@\n printf("OK: %s", yytext); ++yylineno; return 1; + + /* We don't want this one to match. */ +^"check-a:"(?i:(?-i:A))@\n err_abort(); +^"check-a:"(?i:(?-i:(?i:A)))@\n printf("OK: %s", yytext); ++yylineno; return 1; + + /* We don't want this one to match. */ +^"dot-all-1:"(?-s:XXX.*)@dot-all-1@\n err_abort(); +^"dot-all-1:"(?s:XXX.*)@dot-all-1@\n a_ok(); + +^"x1:"(?x: a | b )+@x1@\n a_ok(); +^"x2:"(?x: a | + (?# Comment ) + b + )+@x2@\n a_ok(); + + +.|\n { err_abort(); } +%% + +int main(void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + while (yylex()) + ; + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/ccl.txt b/tests/ccl.txt new file mode 100644 index 0000000..b318fe6 --- /dev/null +++ b/tests/ccl.txt @@ -0,0 +1,27 @@ +^alpha:0123456789 ~!@#$%^&*(){}[]':;"<>,./?\+=_-`@alpha@ +^digit:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ~!@#$%^&*(){}[]':;"<>,./?\+=_-`@digit@ +^alnum:~!@#$%^&*(){}[]':;"<>,./?\+=_-`@alnum@ +^upper:abcdefghijklmnopqrstuvwxyz0123456789 ~!@#$%^&*(){}[]':;"<>,./?\+=_-`@upper@ +^lower:ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF ~!@#$%^&*(){}[]':;"<>,./?\+=_-`@lower@ +^space:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF~!@#$%^&*(){}[]':;"<>,./?\+=_-`@space@ +^blank:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF~!@#$%^&*(){}[]':;"<>,./?\+=_-`@blank@ +^punct:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF Z@punct@ +^cntrl:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF~!@#$%^&*(){}[]':;"<>,./?\+=_-`@cntrl@ +^xdigit:ghijklmnopqrstuvwxyzGHIJKLMNOPQRSTUVWXYZ ~!@#$%^&*(){}[]':;"<>,./?\+=_-`@xdigit@ +a-d:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@a-d@ +l-xyz:abcdefghijklmnopqrstuvw@l-xyz@ +abcd-bc:aaaaddddaaaa@abcd-bc@ +abcde-b-c:aaaaddddeeee@abcde-b-c@ +^XY-^XYZ:ZZZZZZZZZZZ@^XY-^XYZ@ +a+d:abc0123xyz789@a+d@ +a-u+Q:abcQQQQxyz@a-u+Q@ +ia:AaAa@ia@ +iabc:ABCabcAbCaBc@iabc@ +ia-c:ABCabcAbCaBc@ia-c@ +check-a:a@ +dot-all-1:XXX junk + junk + junk + @dot-all-1@ +x1:abaabb@x1@ +x2:abaabb@x2@ diff --git a/tests/cxx_basic.ll b/tests/cxx_basic.ll new file mode 100644 index 0000000..6ffa39c --- /dev/null +++ b/tests/cxx_basic.ll @@ -0,0 +1,50 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ + +#include "config.h" + +%} + +%option 8bit prefix="test" +%option warn c++ +%option nounput nomain noinput noyywrap + +%% + +. { } + +%% + +int main(void); + +int +main (void) +{ + yyFlexLexer f; + f.switch_streams(&std::cin, &std::cout); + f.yylex(); + std::cout << "TEST RETURNING OK." << std::endl; + return 0; +} diff --git a/tests/cxx_basic.txt b/tests/cxx_basic.txt new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/cxx_basic.txt @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/cxx_multiple_scanners.txt b/tests/cxx_multiple_scanners.txt new file mode 100644 index 0000000..08498fa --- /dev/null +++ b/tests/cxx_multiple_scanners.txt @@ -0,0 +1 @@ +foo on bar off diff --git a/tests/cxx_multiple_scanners_1.ll b/tests/cxx_multiple_scanners_1.ll new file mode 100644 index 0000000..f4adb9d --- /dev/null +++ b/tests/cxx_multiple_scanners_1.ll @@ -0,0 +1,44 @@ + // This file is part of flex. + // + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions + // are met: + // + // 1. Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // 2. Redistributions in binary form must reproduce the above copyright + // notice, this list of conditions and the following disclaimer in the + // documentation and/or other materials provided with the distribution. + // + // Neither the name of the University nor the names of its contributors + // may be used to endorse or promote products derived from this software + // without specific prior written permission. + // + // THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + // IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + // PURPOSE. + +%{ +#include "config.h" + +%} + +%option 8bit prefix="S1_" +%option nounput nomain noyywrap +%option warn stack noyy_top_state + +%x ON +%x OFF +%% +<INITIAL>{ +on yy_push_state(ON); return 10; +off yy_push_state(OFF); return 11; +.|\n return 12; +} +<ON>.|\n yy_pop_state(); return 13; + +<OFF>.|\n yy_pop_state(); return 14; + +%% + diff --git a/tests/cxx_multiple_scanners_2.ll b/tests/cxx_multiple_scanners_2.ll new file mode 100644 index 0000000..d84c530 --- /dev/null +++ b/tests/cxx_multiple_scanners_2.ll @@ -0,0 +1,48 @@ + // This file is part of flex. + // + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions + // are met: + // + // 1. Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // 2. Redistributions in binary form must reproduce the above copyright + // notice, this list of conditions and the following disclaimer in the + // documentation and/or other materials provided with the distribution. + // + // Neither the name of the University nor the names of its contributors + // may be used to endorse or promote products derived from this software + // without specific prior written permission. + // + // THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + // IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + // PURPOSE. + +%{ +#include "config.h" + +%} + +%option 8bit prefix="S2_" +%option nounput nomain +%option warn stack noyy_top_state + +%x OFF +%x ON +%% +<INITIAL>{ +on yy_push_state(ON); return 3; +off yy_push_state(OFF); return 4; +.|\n return 5; +} +<ON>.|\n yy_pop_state(); return 6; + +<OFF>.|\n yy_pop_state(); return 7; +%% + +int S2_FlexLexer::yywrap() +{ + std::cout << "NOW WRAPPING." << std::endl; + return 1; +} diff --git a/tests/cxx_multiple_scanners_main.cc b/tests/cxx_multiple_scanners_main.cc new file mode 100644 index 0000000..08fe2c1 --- /dev/null +++ b/tests/cxx_multiple_scanners_main.cc @@ -0,0 +1,56 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include <stdio.h> + +#undef yyFlexLexer +#define yyFlexLexer S1_FlexLexer +#include <FlexLexer.h> + +#undef yyFlexLexer +#define yyFlexLexer S2_FlexLexer +#include <FlexLexer.h> + +int +main ( int argc, char** argv ) +{ + int S1_ok=1, S2_ok=1; + S1_FlexLexer* S1 = new S1_FlexLexer; + S2_FlexLexer* S2 = new S2_FlexLexer; + + // scan simultaneously. + while(S1_ok || S2_ok) + { + if (S1_ok) + S1_ok = S1->yylex(); + if (S2_ok) + S2_ok = S2->yylex(); + } + printf("TEST RETURNING OK.\n"); + delete S1; + delete S2; + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/cxx_yywrap.ll b/tests/cxx_yywrap.ll new file mode 100644 index 0000000..0947cec --- /dev/null +++ b/tests/cxx_yywrap.ll @@ -0,0 +1,70 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ + +#include "config.h" +#include <fstream> + +%} + +%option 8bit prefix="test" +%option nounput nomain +%option warn c++ + + +%% + +. { } + +%% + +#define MAX_FILES 10 + +char *files[MAX_FILES] = { 0 }; +int filecounter = 0; + +int testFlexLexer::yywrap() +{ + if (filecounter-- > 0) { + std::cout << "NOW WRAPPING TO READ " << files[filecounter] << std::endl; + std::ifstream *ifs = new std::ifstream(files[filecounter]); + switch_streams(ifs); + return 0; + } + return 1; +} + +int +main (int argc, char *argv[]) +{ + for (int i = 1; i < argc && i <= MAX_FILES; i++) { + files[i-1] = argv[i]; + filecounter++; + } + testFlexLexer* f = new testFlexLexer; + f->yywrap(); + f->yylex(); + std::cout << "TEST RETURNING OK." << std::endl; + return 0; +} diff --git a/tests/cxx_yywrap.txt b/tests/cxx_yywrap.txt new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/cxx_yywrap.txt @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/debug_nr.l b/tests/debug_nr.l new file mode 100644 index 0000000..0596dce --- /dev/null +++ b/tests/debug_nr.l @@ -0,0 +1,52 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn debug + +%% +.+ { } +\n { } +%% + +int main(void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + yy_flex_debug = 1; + yylex(); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/debug_nr.txt b/tests/debug_nr.txt new file mode 100644 index 0000000..8d6476c --- /dev/null +++ b/tests/debug_nr.txt @@ -0,0 +1,2 @@ +Any input will do for this test. +We are only testing if it actually runs in debug mode. diff --git a/tests/debug_r.l b/tests/debug_r.l new file mode 100644 index 0000000..0d40e0e --- /dev/null +++ b/tests/debug_r.l @@ -0,0 +1,59 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn debug reentrant + +%% +.+ { } +\n { } +%% + +int main(void); + +int main () +{ + yyscan_t lexer; + yylex_init( &lexer ); + yyset_out ( stdout,lexer); + yyset_in ( stdin, lexer); + + /* Just see if the next line compiles. */ + testset_debug (testget_debug(lexer), lexer); + + while( yylex(lexer) ) + { + } + yylex_destroy( lexer ); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/debug_r.txt b/tests/debug_r.txt new file mode 100644 index 0000000..8d6476c --- /dev/null +++ b/tests/debug_r.txt @@ -0,0 +1,2 @@ +Any input will do for this test. +We are only testing if it actually runs in debug mode. diff --git a/tests/extended.l b/tests/extended.l new file mode 100644 index 0000000..a113fac --- /dev/null +++ b/tests/extended.l @@ -0,0 +1,73 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* This test is for correctness of extended (?...) patterns. */ + +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn + + +%% + + /* Output should match the input. */ + +abc(?# Single Line Comment )def ECHO; +ghi(?# + multi-line + comment + )jkl ECHO; + +mno(?# + multi-line // + comment with ## + ~~!@#$ %^&*(@-_+=\|,.<>/ ?: ; + punctuation + )pqr ECHO; +(?# Start of a rule.)stu ECHO; +vwxyz(?#End of a rule.) ECHO; +A(?x: B + /* comment */ + C D) ECHO; + +\n ECHO; +%% + +int main(void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + yylex(); + //printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/extended.txt b/tests/extended.txt new file mode 100644 index 0000000..829e23d --- /dev/null +++ b/tests/extended.txt @@ -0,0 +1,2 @@ +abcdefghijklmnopqrstuvwxyz +ABCD diff --git a/tests/header_nr.txt b/tests/header_nr.txt new file mode 100644 index 0000000..2ce5001 --- /dev/null +++ b/tests/header_nr.txt @@ -0,0 +1,3 @@ +Any input is ok for this scanner. +We only care if it links. + diff --git a/tests/header_nr_main.c b/tests/header_nr_main.c new file mode 100644 index 0000000..bb14749 --- /dev/null +++ b/tests/header_nr_main.c @@ -0,0 +1,40 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "header_nr_scanner.h" + +int +main ( int argc, char** argv ) +{ + (void)argc; + (void)argv; + + testin = stdin; + testout = stdout; + testlex(); + printf("TEST RETURNING OK.\n"); + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/header_nr_scanner.l b/tests/header_nr_scanner.l new file mode 100644 index 0000000..b429a6c --- /dev/null +++ b/tests/header_nr_scanner.l @@ -0,0 +1,42 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit prefix="test" header="header_nr_scanner.h" +%option nounput nomain noyywrap noinput +%option warn + + +%% + +.|\n { } + +%% + diff --git a/tests/header_r.txt b/tests/header_r.txt new file mode 100644 index 0000000..2ce5001 --- /dev/null +++ b/tests/header_r.txt @@ -0,0 +1,3 @@ +Any input is ok for this scanner. +We only care if it links. + diff --git a/tests/header_r_main.c b/tests/header_r_main.c new file mode 100644 index 0000000..22b397d --- /dev/null +++ b/tests/header_r_main.c @@ -0,0 +1,67 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include <assert.h> + +#include "header_r_scanner.h" + +/* The scanner itself is not important here. + * We simply try to use all the functions that are exported in the + * header, to see if we get any compiler warnings. + */ +int +main ( int argc, char** argv ) +{ + (void)argc; + (void)argv; + + yyscan_t scanner; + FILE *fp; + char * extra = "EXTRA"; + + testlex_init(&scanner); + testset_in(stdin,scanner); + testset_out(stdout,scanner); + testset_extra(extra,scanner); + + fp = testget_in(scanner); + assert(fp == stdin); + fp = testget_out(scanner); + assert(fp == stdout); + + while(testlex(scanner)) { + char * text; + int line; + line = testget_lineno(scanner); + text = testget_text(scanner); + + if( (char*)testget_extra(scanner) != extra) + break; + + if ( !text || line < 0) + continue; + } + testlex_destroy(scanner); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/header_r_scanner.l b/tests/header_r_scanner.l new file mode 100644 index 0000000..bfad8ba --- /dev/null +++ b/tests/header_r_scanner.l @@ -0,0 +1,46 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* Build "scanner.c". + The scanner is not important. + This test is really about compilation. See "main.c". +*/ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option reentrant +%option 8bit prefix="test" header="header_r_scanner.h" +%option nounput nomain noyywrap noinput +%option warn + + +%% + +.|\n { } + +%% + diff --git a/tests/include_by_buffer.direct.l b/tests/include_by_buffer.direct.l new file mode 100644 index 0000000..f3b2d2a --- /dev/null +++ b/tests/include_by_buffer.direct.l @@ -0,0 +1,102 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions +f * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A scanner file to build "scanner.c". + Input language is any text. + "#include <filename>" causes a buffer switch. + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn + +%x GET_FILENAME +%{ + +#define MAX_INCLUDE_DEPTH 10 +YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; +int include_stack_ptr = 0; +%} +%% + +<INITIAL>{ +^"#include"[[:blank:]]+"<" { BEGIN(GET_FILENAME); } +.|\n { ECHO; } +} + +<GET_FILENAME>{ +[[:alnum:]_.-]+> { + /* recurse */ + yytext[yyleng-1]='\0'; + include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER; + if((yyin=fopen(yytext,"r"))==NULL) { + fprintf(stderr,"*** Error: Could not open include file \"%s\".\n",yytext); + yyterminate(); + } + yy_switch_to_buffer( yy_create_buffer( yyin, YY_BUF_SIZE )); + BEGIN(0); + } +.|\n { + fprintf(stderr,"Invalid input \"%s\".\n", yytext); + yyterminate(); + } +} + +<<EOF>> { + if ( --include_stack_ptr < 0 ) { + yyterminate(); + } + else { + fclose(yyin); + yy_delete_buffer( YY_CURRENT_BUFFER ); + yy_switch_to_buffer( include_stack[include_stack_ptr] ); + } + } + +%% + +int main(int argc, char** argv); + +int +main ( int argc, char** argv ) +{ + FILE * fp; + if( argc != 2 ) { + fprintf(stderr,"*** Error: Must specify one filename.\n"); + exit(-1); + } + if((fp=fopen(argv[1],"r"))==NULL) { + fprintf(stderr,"*** Error: fopen(%s) failed.\n",argv[1]); + exit(-1); + } + yyin = fp; + yyout = stdout; + yylex(); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/include_by_buffer.direct.txt b/tests/include_by_buffer.direct.txt new file mode 100644 index 0000000..56f1ed2 --- /dev/null +++ b/tests/include_by_buffer.direct.txt @@ -0,0 +1,3 @@ +Beginning of "include_by_buffer.direct.txt" +#include <include_by_buffer.direct_2.txt> +End of "include_by_buffer.direct.txt" diff --git a/tests/include_by_buffer.direct_2.txt b/tests/include_by_buffer.direct_2.txt new file mode 100644 index 0000000..52e61ea --- /dev/null +++ b/tests/include_by_buffer.direct_2.txt @@ -0,0 +1,3 @@ +Beginning of "include_by_buffer.direct_2.txt" +#include <include_by_buffer.direct_3.txt> +End of "include_by_buffer.direct_2.txt" diff --git a/tests/include_by_buffer.direct_3.txt b/tests/include_by_buffer.direct_3.txt new file mode 100644 index 0000000..3cfdd0f --- /dev/null +++ b/tests/include_by_buffer.direct_3.txt @@ -0,0 +1,2 @@ +Beginning of "include_by_buffer.direct_3.txt" +End of "include_by_buffer.direct_3.txt" diff --git a/tests/include_by_push.direct.l b/tests/include_by_push.direct.l new file mode 100644 index 0000000..6b7a5fa --- /dev/null +++ b/tests/include_by_push.direct.l @@ -0,0 +1,92 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A scanner file to build "scanner.c". + Input language is any text. + "#include <filename>" causes a buffer switch. + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn + +%x GET_FILENAME + +%% + +<INITIAL>{ +^"#include"[[:blank:]]+"<" { BEGIN(GET_FILENAME); } +.|\n { ECHO; } +} + +<GET_FILENAME>{ +[[:alnum:]_.-]+> { + /* recurse */ + yytext[yyleng-1]='\0'; + if((yyin=fopen(yytext,"r"))==NULL) { + fprintf(stderr,"*** Error: Could not open include file \"%s\".\n",yytext); + yyterminate(); + } + yypush_buffer_state( yy_create_buffer( yyin, YY_BUF_SIZE )); + BEGIN(0); + } +.|\n { + fprintf(stderr,"Invalid input \"%s\".\n", yytext); + yyterminate(); + } +} + +<<EOF>> { + fclose(yyin); + yypop_buffer_state(); + if(!YY_CURRENT_BUFFER) + yyterminate(); + } + +%% + +int main(int argc, char** argv); + +int +main ( int argc, char** argv ) +{ + FILE * fp; + if( argc != 2 ) { + fprintf(stderr,"*** Error: Must specify one filename.\n"); + exit(-1); + } + if((fp=fopen(argv[1],"r"))==NULL) { + fprintf(stderr,"*** Error: fopen(%s) failed.\n",argv[1]); + exit(-1); + } + yyin = fp; + yyout = stdout; + yylex(); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/include_by_push.direct.txt b/tests/include_by_push.direct.txt new file mode 100644 index 0000000..93136f6 --- /dev/null +++ b/tests/include_by_push.direct.txt @@ -0,0 +1,3 @@ +Beginning of "include_by_push.direct.txt" +#include <include_by_push.direct_2.txt> +End of "include_by_push.direct.txt" diff --git a/tests/include_by_push.direct_2.txt b/tests/include_by_push.direct_2.txt new file mode 100644 index 0000000..8b378e8 --- /dev/null +++ b/tests/include_by_push.direct_2.txt @@ -0,0 +1,3 @@ +Beginning of "include_by_push.direct_2.txt" +#include <include_by_push.direct_3.txt> +End of "include_by_push.direct_2.txt" diff --git a/tests/include_by_push.direct_3.txt b/tests/include_by_push.direct_3.txt new file mode 100644 index 0000000..8b8f9a5 --- /dev/null +++ b/tests/include_by_push.direct_3.txt @@ -0,0 +1,2 @@ +Beginning of "include_by_push.direct_3.txt" +End of "include_by_push.direct_3.txt" diff --git a/tests/include_by_reentrant.direct.l b/tests/include_by_reentrant.direct.l new file mode 100644 index 0000000..8cd4900 --- /dev/null +++ b/tests/include_by_reentrant.direct.l @@ -0,0 +1,101 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A scanner file to build "scanner.c". + Input language is any text. + "#include <filename>" causes a new scanner to be created. + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option reentrant +%option warn + +%x GET_FILENAME + +%% + +<INITIAL>{ +^"#include"[[:blank:]]+"<" { BEGIN(GET_FILENAME); } +.|\n { ECHO; } +} + +<GET_FILENAME>{ +[[:alnum:]_.-]+> { + /* recurse */ + yyscan_t scanner; + FILE * fp; + yytext[yyleng-1]='\0'; + if((fp=fopen(yytext,"r"))==NULL) { + fprintf(stderr,"*** Error: Could not open include file \"%s\".\n", + yytext); + yyterminate(); + } + yylex_init(&scanner); + yyset_in( fp, scanner); + yyset_out( stdout, scanner); + yylex(scanner); + yylex_destroy(scanner); + + BEGIN(0); + } +.|\n { + fprintf(stderr,"Invalid input \"%s\".\n", yytext); + yyterminate(); + } +} + +<<EOF>> { fclose(yyin); yyterminate();} + +%% + +int main (int argc, char** argv); + +int +main ( argc, argv ) + int argc; + char ** argv; +{ + FILE * fp; + yyscan_t scanner; + if( argc != 2 ) { + fprintf(stderr,"*** Error: Must specify one filename.\n"); + exit(-1); + } + if((fp=fopen(argv[1],"r"))==NULL) { + fprintf(stderr,"*** Error: fopen(%s) failed.\n",argv[1]); + exit(-1); + } + yylex_init(&scanner); + yyset_in( fp, scanner); + yyset_out( stdout, scanner); + yylex(scanner); + yylex_destroy(scanner); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/include_by_reentrant.direct.txt b/tests/include_by_reentrant.direct.txt new file mode 100644 index 0000000..190a600 --- /dev/null +++ b/tests/include_by_reentrant.direct.txt @@ -0,0 +1,3 @@ +Beginning of "include_by_reentrant.direct.txt". +#include <include_by_reentrant.direct_2.txt> +End of "include_by_reentrant.direct.txt". diff --git a/tests/include_by_reentrant.direct_2.txt b/tests/include_by_reentrant.direct_2.txt new file mode 100644 index 0000000..84a647b --- /dev/null +++ b/tests/include_by_reentrant.direct_2.txt @@ -0,0 +1,3 @@ +Beginning of "include_by_reentrant.direct_2.txt". +#include <include_by_reentrant.direct_3.txt> +End of "include_by_reentrant.direct_2.txt". diff --git a/tests/include_by_reentrant.direct_3.txt b/tests/include_by_reentrant.direct_3.txt new file mode 100644 index 0000000..b0fba64 --- /dev/null +++ b/tests/include_by_reentrant.direct_3.txt @@ -0,0 +1,2 @@ +Beginning of "include_by_reentrant.direct_3.txt". +End of "include_by_reentrant.direct_3.txt". diff --git a/tests/lineno_nr.l b/tests/lineno_nr.l new file mode 100644 index 0000000..8e35fc1 --- /dev/null +++ b/tests/lineno_nr.l @@ -0,0 +1,96 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + Run as: + test-lineno-nr # report flex's yylineno + test-lineno-nr 1 # report count_newlines(stdin) +*/ + +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput yylineno +%option warn + +WORD [[:alpha:]]+ +DIGIT [[:digit:]] + +%% + /* The goal here is to test the yylineno processing by: + - providing some rules than CAN match newlines and + other rules that can NOT match newlines, + - matching several newlines in one rule, + - directly modifying yylineno. + */ + +"yylineno++" yylineno++; +"yylineno--" yylineno--; +[[:blank:]]+ +{WORD} +{DIGIT}+(\n{DIGIT}+)* +\n +. +<<EOF>> { printf("%d\n", yylineno); + yyterminate(); + } + +%% + +/* returns number of '\n' characters in input, plus one. + This is what flex does, essentially. */ + +static int +count_newlines (FILE* in) +{ + int n=1,c; + while ((c=fgetc(in)) != EOF) + if( c == '\n') + n++; + return n; +} + +int main ( int, char**); + +int +main ( argc, argv ) + int argc; + char** argv; +{ + (void)argv; + + if( argc > 1 ) + printf("%d\n", count_newlines(stdin)); + + else{ + yyin = stdin; + yyout = stdout; + yylex(); + } + return 0; +} diff --git a/tests/lineno_nr.one.txt b/tests/lineno_nr.one.txt new file mode 100644 index 0000000..c1eb961 --- /dev/null +++ b/tests/lineno_nr.one.txt @@ -0,0 +1,19 @@ +These words +are separated +by newlines +and sometimes + spaces +too. +The next three lines are numbers with only intervening newlines +01123 +581321 +34 +And now for some blank lines.... + + +Finally, we directly modify yylineno, but then change it back afterwards +(see scanner.l): + +yylineno++ + +yylineno-- diff --git a/tests/lineno_r.l b/tests/lineno_r.l new file mode 100644 index 0000000..e6207c6 --- /dev/null +++ b/tests/lineno_r.l @@ -0,0 +1,99 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + Run as: + test-lineno-r # report flex's yylineno + test-lineno-r 1 # report count_newlines(stdin) +*/ + +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput yylineno reentrant +%option warn + +WORD [[:alpha:]]+ +DIGIT [[:digit:]] + +%% + /* The goal here is to test the yylineno processing by: + - providing some rules than CAN match newlines and + other rules that can NOT match newlines, + - matching several newlines in one rule, + - directly modifying yylineno. + */ + +"yylineno++" yylineno++; +"yylineno--" yylineno--; +[[:blank:]]+ +{WORD} +{DIGIT}+(\n{DIGIT}+)* +\n +. +<<EOF>> { printf("%d\n", yylineno); + yyterminate(); + } + +%% + +/* returns number of '\n' characters in input, plus one. + This is what flex does, essentially. */ + +static int +count_newlines (FILE* in) +{ + int n=1,c; + while ((c=fgetc(in)) != EOF) + if( c == '\n') + n++; + return n; +} + +int main ( int argc, char** argv ); + +int +main (argc, argv) + int argc; + char ** argv; +{ + (void)argv; + + if( argc > 1 ) + printf("%d\n", count_newlines(stdin)); + + else{ + yyscan_t s; + yylex_init(&s); + yyset_in(stdin,s); + yyset_out(stdout,s); + yylex(s); + yylex_destroy(s); + } + return 0; +} diff --git a/tests/lineno_r.one.txt b/tests/lineno_r.one.txt new file mode 100644 index 0000000..c1eb961 --- /dev/null +++ b/tests/lineno_r.one.txt @@ -0,0 +1,19 @@ +These words +are separated +by newlines +and sometimes + spaces +too. +The next three lines are numbers with only intervening newlines +01123 +581321 +34 +And now for some blank lines.... + + +Finally, we directly modify yylineno, but then change it back afterwards +(see scanner.l): + +yylineno++ + +yylineno-- diff --git a/tests/lineno_trailing.l b/tests/lineno_trailing.l new file mode 100644 index 0000000..3a8a683 --- /dev/null +++ b/tests/lineno_trailing.l @@ -0,0 +1,89 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + Run as: + test-lineno-trailing # report flex's yylineno + test-lineno-trailing 1 # report count_newlines(stdin) +*/ + +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput yylineno +%option warn + +WORD [[:alpha:]]+ + +%% + /* The goal here is to test the yylineno in the context of trailing-contexts. + Using rules that have newlines in look-ahead. + */ +"Fixed_trailing:"/[\n]"test"[\n] {} +"Var_trailing:"{WORD}/[\n] {} +"Var_prefix_and_trailing:"{WORD}":"/(\n{WORD})* {} +\n {} +. {} +<<EOF>> { printf("%d\n", yylineno); + yyterminate(); + } + +%% + +/* returns number of '\n' characters in input, plus one. + This is what flex does, essentially. */ + +static int +count_newlines (FILE* in) +{ + int n=1,c; + while ((c=fgetc(in)) != EOF) + if( c == '\n') + n++; + return n; +} + +int main ( int, char**); + +int +main ( argc, argv ) + int argc; + char** argv; +{ + (void)argv; + + if( argc > 1 ) + printf("%d\n", count_newlines(stdin)); + + else{ + yyin = stdin; + yyout = stdout; + yylex(); + } + return 0; +} diff --git a/tests/lineno_trailing.one.txt b/tests/lineno_trailing.one.txt new file mode 100644 index 0000000..201164d --- /dev/null +++ b/tests/lineno_trailing.one.txt @@ -0,0 +1,13 @@ +We are testing rules with trailing contexts containing newlines (see scanner.l): + +Fixed_trailing: +test + +Var_trailing:word +test + +Var_prefix_and_trailing:word: +more +text +comes +here diff --git a/tests/mem_nr.l b/tests/mem_nr.l new file mode 100644 index 0000000..f25848f --- /dev/null +++ b/tests/mem_nr.l @@ -0,0 +1,179 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + * The whole idea is to cause memory realloc by + * 1. pushing a lot on the condition stack, and + * 2. eating input greater than YY_BUF_SIZE + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +/* Insanely small read buffer. This pretty much guarantees at least one realloc. */ +#ifdef YY_BUF_SIZE +#undef YY_BUF_SIZE +#endif +#define YY_BUF_SIZE 8 + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput noyy_top_state +%option warn stack nodefault +%option noyyalloc noyyrealloc noyyfree + +%x parens + +%% + +<INITIAL>{ +"(" { printf("yy_push_state(parens)\n"); yy_push_state(parens); } +len=[0-9]+ { printf("About read token where %s\n",yytext); } +0+ { } +.|\n { } +} + +<parens>{ +"(" { printf("yy_push_state(parens)\n"); yy_push_state(parens); } +")" { printf("yy_pop_state()\n");yy_pop_state();} +[^()\n]+ { } +.|\n { } +} + +%% +/* total memory allocated */ +static size_t total_mem=0; + +/* track the amount of memory for ptr. */ +struct memsz { + void* p; + size_t sz; +}; + +static struct memsz * ptrs=0; /* Array of pairs. */ +static int nptrs=0; /* Number of pairs in array. */ +static int arrsz=0; /* Capacity of array. */ + +static void dump_mem(FILE* fp){ + int i; + fprintf(fp,"\tptrs[%d] = {", nptrs); + for (i=0; i < arrsz; i++) + fprintf(fp," {%#lx,%ld},", (long)ptrs[i].p, (long)ptrs[i].sz); + + fprintf(fp,"}\n"); +} + +void * yyalloc(yy_size_t n) +{ + void * p; + int i; + + total_mem += n; + p = malloc(n); + + if( nptrs >= arrsz){ + /* increase array size by 1 */ + arrsz++; + ptrs = realloc(ptrs, arrsz * sizeof(struct memsz)); + ptrs[nptrs].p = 0; + ptrs[nptrs].sz = 0; + } + + /* find a null slot */ + for(i=0; i < arrsz ; i++) + if (ptrs[i].p == 0) { + ptrs[i].p = p; + ptrs[i].sz = n; + } + + nptrs++; + printf("yyflex_alloc(%8ld) total=%8ld return=%#10lx\n",(long)n,(long)total_mem,(long)p); + dump_mem(stdout); + return p; +} + +void * yyrealloc(void* p, yy_size_t n) +{ + int i; + for (i=0; i < arrsz; i++) + if ( ptrs[i].p == p){ + total_mem -= ptrs[i].sz; + total_mem += n; + ptrs[i].p = realloc(p,n); + ptrs[i].sz = n; + + printf("yyflex_realloc(%#10lx,%8ld) total=%8ld return=%8lx\n", + (long)p,(long)n,(long)total_mem,(long)ptrs[i].p); + dump_mem(stdout); + return ptrs[i].p; + } + + fprintf(stderr,"ERROR: yyflex_realloc could not locate pointer %#lx.\n",(long)p); + dump_mem(stdout); + exit(1); +} + +void yyfree(void* p) +{ + int i; + for (i=0; i < arrsz; i++) + if ( ptrs[i].p == p){ + total_mem -= ptrs[i].sz; + free(p); + ptrs[i].p = 0; + ptrs[i].sz = 0; + nptrs--; + printf("yyflex_free(%#10lx) total=%8ld\n",(long)p,(long)total_mem); + dump_mem(stdout); + return; + } + + fprintf(stderr,"ERROR: yyflex_free could not locate pointer %#lx.\n",(long)p); + dump_mem(stdout); + exit(1); +} + +int main(void); + +int +main () +{ + arrsz = 1; + ptrs = calloc(1, sizeof(struct memsz)); + nptrs = 0; + + yyin = stdin; + yyout = stdout; + yylex(); + yylex_destroy(); + free(ptrs); + + if ( nptrs > 0 || total_mem > 0){ + fprintf(stderr,"Oops. Looks like a memory leak: nptrs=%d, unfreed memory=%ld\n",nptrs,(long)total_mem); + exit(1); + } + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/mem_nr.txt b/tests/mem_nr.txt new file mode 100644 index 0000000..79aa16a --- /dev/null +++ b/tests/mem_nr.txt @@ -0,0 +1,25 @@ +First we push a lot on the stack by nesting parenthesis: + +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +((((((((((((((((((((((((((((((((((((((((((( + +(should be 200 states pushed here) + +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +))))))))))))))))))))))))))))))))))))))))))) + +Now we match progressively bigger tokens to increase the read buffer: + +len=1 0 +len=2 00 +len=4 0000 +len=8 00000000 +len=16 0000000000000000 +len=32 00000000000000000000000000000000 +len=64 0000000000000000000000000000000000000000000000000000000000000000 +len=128 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=256 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=512 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=1024 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/tests/mem_r.l b/tests/mem_r.l new file mode 100644 index 0000000..33b9888 --- /dev/null +++ b/tests/mem_r.l @@ -0,0 +1,187 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + * The whole idea is to cause memory realloc by + * 1. pushing a lot on the condition stack, and + * 2. eating input greater than YY_BUF_SIZE + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +/* Insanely small read buffer. This pretty much guarantees at least one realloc. */ +#ifdef YY_BUF_SIZE +#undef YY_BUF_SIZE +#endif +#define YY_BUF_SIZE 8 + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput noyy_top_state +%option warn stack nodefault reentrant +%option noyyalloc noyyrealloc noyyfree + +%x parens + +%% + +<INITIAL>{ +"(" { printf("yy_push_state(parens)\n"); yy_push_state(parens,yyscanner); } +len=[0-9]+ { printf("About read token where %s\n",yytext); } +0+ { } +.|\n { } +} + +<parens>{ +"(" { printf("yy_push_state(parens)\n"); yy_push_state(parens,yyscanner); } +")" { printf("yy_pop_state()\n");yy_pop_state(yyscanner);} +[^()\n]+ { } +.|\n { } +} + +%% +/* total memory allocated */ +static size_t total_mem=0; + +/* track the amount of memory for ptr. */ +struct memsz { + void* p; + size_t sz; +}; + +static struct memsz * ptrs=0; /* Array of pairs. */ +static int nptrs=0; /* Number of pairs in array. */ +static int arrsz=0; /* Capacity of array. */ + +static void dump_mem(FILE* fp){ + int i; + fprintf(fp,"\tptrs[%d] = {", nptrs); + for (i=0; i < arrsz; i++) + fprintf(fp," {%#lx,%ld},", (long)ptrs[i].p, (long)ptrs[i].sz); + + fprintf(fp,"}\n"); +} + +void * yyalloc(yy_size_t n , void* yyscanner) +{ + (void)yyscanner; + + void * p; + int i; + + total_mem += n; + p = malloc(n); + + if( nptrs >= arrsz){ + /* increase array size by 1 */ + arrsz++; + ptrs = realloc(ptrs, arrsz * sizeof(struct memsz)); + ptrs[nptrs].p = 0; + ptrs[nptrs].sz = 0; + } + + /* find a null slot */ + for(i=0; i < arrsz ; i++) + if (ptrs[i].p == 0) { + ptrs[i].p = p; + ptrs[i].sz = n; + } + + nptrs++; + printf("yyflex_alloc(%8ld) total=%8ld return=%#10lx\n",(long)n,(long)total_mem,(long)p); + dump_mem(stdout); + return p; +} + +void * yyrealloc(void* p, yy_size_t n , void* yyscanner) +{ + (void)yyscanner; + + int i; + for (i=0; i < arrsz; i++) + if ( ptrs[i].p == p){ + total_mem -= ptrs[i].sz; + total_mem += n; + ptrs[i].p = realloc(p, n); + ptrs[i].sz = n; + + printf("yyflex_realloc(%#10lx,%8ld) total=%8ld return=%8lx\n", + (long)p,(long)n,(long)total_mem,(long)ptrs[i].p); + dump_mem(stdout); + return ptrs[i].p; + } + + fprintf(stderr,"ERROR: yyflex_realloc could not locate pointer %#lx.\n",(long)p); + dump_mem(stdout); + exit(1); +} + +void yyfree(void* p , void* yyscanner) +{ + (void)yyscanner; + + int i; + for (i=0; i < arrsz; i++) + if ( ptrs[i].p == p){ + total_mem -= ptrs[i].sz; + free(p); + ptrs[i].p = 0; + ptrs[i].sz = 0; + nptrs--; + printf("yyflex_free(%#10lx) total=%8ld\n",(long)p,(long)total_mem); + dump_mem(stdout); + return; + } + + fprintf(stderr,"ERROR: yyflex_free could not locate pointer %#lx.\n",(long)p); + dump_mem(stdout); + exit(1); +} + +int main(void); + +int +main () +{ + yyscan_t scanner; + arrsz = 1; + ptrs = calloc(1, sizeof(struct memsz)); + nptrs = 0; + + yylex_init(&scanner); + yyset_in(stdin,scanner); + yyset_out(stdout,scanner); + yylex(scanner); + yylex_destroy(scanner); + free(ptrs); + + if ( nptrs > 0 || total_mem > 0){ + fprintf(stderr,"Oops. Looks like a memory leak: nptrs=%d, unfreed memory=%ld\n",nptrs,(long)total_mem); + exit(1); + } + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/mem_r.txt b/tests/mem_r.txt new file mode 100644 index 0000000..79aa16a --- /dev/null +++ b/tests/mem_r.txt @@ -0,0 +1,25 @@ +First we push a lot on the stack by nesting parenthesis: + +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +((((((((((((((((((((((((((((((((((((((((((( + +(should be 200 states pushed here) + +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +))))))))))))))))))))))))))))))))))))))))))) + +Now we match progressively bigger tokens to increase the read buffer: + +len=1 0 +len=2 00 +len=4 0000 +len=8 00000000 +len=16 0000000000000000 +len=32 00000000000000000000000000000000 +len=64 0000000000000000000000000000000000000000000000000000000000000000 +len=128 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=256 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=512 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=1024 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/tests/multiple_scanners_nr_1.l b/tests/multiple_scanners_nr_1.l new file mode 100644 index 0000000..fcba194 --- /dev/null +++ b/tests/multiple_scanners_nr_1.l @@ -0,0 +1,50 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner-1.c" and "scanner-1.h". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option header="multiple_scanners_nr_1.h" +%option 8bit prefix="S1_" +%option nounput nomain noyywrap noinput +%option warn stack noyy_top_state + +%x ON +%x OFF +%% +<INITIAL>{ +on yy_push_state(ON); return 10; +off yy_push_state(OFF); return 11; +.|\n return 12; +} +<ON>.|\n yy_pop_state(); return 13; + +<OFF>.|\n yy_pop_state(); return 14; + +%% + diff --git a/tests/multiple_scanners_nr_2.l b/tests/multiple_scanners_nr_2.l new file mode 100644 index 0000000..fff2e88 --- /dev/null +++ b/tests/multiple_scanners_nr_2.l @@ -0,0 +1,49 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner-2.c" and "scanner-2.h". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option header="multiple_scanners_nr_2.h" +%option 8bit prefix="S2_" +%option nounput nomain noyywrap noinput +%option warn stack noyy_top_state + +%x OFF +%x ON +%% +<INITIAL>{ +on yy_push_state(ON); return 3; +off yy_push_state(OFF); return 4; +.|\n return 5; +} +<ON>.|\n yy_pop_state(); return 6; + +<OFF>.|\n yy_pop_state(); return 7; +%% + diff --git a/tests/multiple_scanners_nr_main.c b/tests/multiple_scanners_nr_main.c new file mode 100644 index 0000000..497bd9f --- /dev/null +++ b/tests/multiple_scanners_nr_main.c @@ -0,0 +1,51 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "multiple_scanners_nr_1.h" +#include "multiple_scanners_nr_2.h" + +int +main ( int argc, char** argv ) +{ + (void)argc; + (void)argv; + + int S1_ok=1, S2_ok=1; + YY_BUFFER_STATE buff1, buff2; + S1_out = S2_out = stdout; + buff1 = S1__scan_string("foo on bar off"); + buff2 = S2__scan_string("on blah blah off foo on bar off"); + + /* scan simultaneously. */ + while(S1_ok || S2_ok) + { + if (S1_ok) + S1_ok = S1_lex(); + if (S2_ok) + S2_ok = S2_lex(); + } + S1__delete_buffer(buff1); + S2__delete_buffer(buff2); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/multiple_scanners_r_1.l b/tests/multiple_scanners_r_1.l new file mode 100644 index 0000000..75ef179 --- /dev/null +++ b/tests/multiple_scanners_r_1.l @@ -0,0 +1,50 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner-1.c" and "scanner-1.h". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option header="multiple_scanners_r_1.h" +%option 8bit prefix="S1_" +%option nounput nomain noyywrap noinput noyy_top_state +%option warn stack reentrant + +%x ON +%x OFF +%% +<INITIAL>{ +on yy_push_state(ON, yyscanner); return 10; +off yy_push_state(OFF, yyscanner); return 11; +.|\n return 12; +} +<ON>.|\n yy_pop_state(yyscanner); return 13; + +<OFF>.|\n yy_pop_state(yyscanner); return 14; + +%% + diff --git a/tests/multiple_scanners_r_2.l b/tests/multiple_scanners_r_2.l new file mode 100644 index 0000000..a10d63d --- /dev/null +++ b/tests/multiple_scanners_r_2.l @@ -0,0 +1,49 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner-2.c" and "scanner-2.h". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option header="multiple_scanners_r_2.h" +%option 8bit prefix="S2_" +%option nounput nomain noyywrap noinput +%option warn stack reentrant noyy_top_state + +%x OFF +%x ON +%% +<INITIAL>{ +on yy_push_state(ON, yyscanner); return 3; +off yy_push_state(OFF, yyscanner); return 4; +.|\n return 5; +} +<ON>.|\n yy_pop_state(yyscanner); return 6; + +<OFF>.|\n yy_pop_state(yyscanner); return 7; +%% + diff --git a/tests/multiple_scanners_r_main.c b/tests/multiple_scanners_r_main.c new file mode 100644 index 0000000..ea73806 --- /dev/null +++ b/tests/multiple_scanners_r_main.c @@ -0,0 +1,65 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "multiple_scanners_r_1.h" +#include "multiple_scanners_r_2.h" + +int +main ( int argc, char** argv ) +{ + (void)argc; + (void)argv; + + int S1_ok=1, S2_ok=1; + FILE * fp; + YY_BUFFER_STATE buff1, buff2; + yyscan_t scan1, scan2; + + S1_lex_init(&scan1); + S2_lex_init(&scan2); + + S1_set_out(stdout,scan1); + S2_set_out(S1_get_out(scan1),scan2); + + buff1 = S1__scan_string("foo on bar off", scan1); + buff2 = S2__scan_string("on blah blah off foo on bar off", scan2); + + /* scan simultaneously. */ + while(S1_ok || S2_ok) + { + if (S1_ok) + S1_ok = S1_lex(scan1); + if (S2_ok) + S2_ok = S2_lex(scan2); + } + S1__delete_buffer(buff1, scan1); + S2__delete_buffer(buff2, scan2); + + S1_lex_destroy(scan1); + S2_lex_destroy(scan2); + printf("TEST RETURNING OK.\n"); + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/noansi_nr.l b/tests/noansi_nr.l new file mode 100644 index 0000000..db075a4 --- /dev/null +++ b/tests/noansi_nr.l @@ -0,0 +1,67 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* TEST scanner. + Basic non-reentrant scanner, but with non-ansi function defs. + Compile with: flex scanner.l + + Sample Input: + # this is a comment + foo = true + bar = "string value" + integer = 43 +*/ +%{ +#include "config.h" +%} + +%option prefix="test" +%option nounput noyywrap noyylineno warn nodefault noinput +%option noansi-prototypes noansi-definitions + +IDENT [[:alnum:]_-] +WS [[:blank:]] +%% + +^{IDENT}+{WS}*={WS}*(true|false){WS}*\r?\n { return 100;} +^{IDENT}+{WS}*={WS}*\"[^\"\n\r]*\"{WS}*\r?\n { return 101;} +^{IDENT}+{WS}*={WS}*[[:digit:]]+{WS}*\r?\n { return 102;} +^{WS}*#.*\r?\n { } +^{WS}*\r?\n { } +.|\n { fprintf(stderr,"Invalid line.\n"); exit(-1);} + +%% + +int main(void); + +int main () +{ + yyin = stdin; + yyout = stdout; + while( yylex() ) + { + } + printf("TEST RETURNING OK.\n"); + return 0; +} + diff --git a/tests/noansi_nr.txt b/tests/noansi_nr.txt new file mode 100644 index 0000000..642e0fb --- /dev/null +++ b/tests/noansi_nr.txt @@ -0,0 +1,5 @@ +# this is a comment +foo = "bar" +num = 43 +setting = false + diff --git a/tests/noansi_r.l b/tests/noansi_r.l new file mode 100644 index 0000000..5a3b778 --- /dev/null +++ b/tests/noansi_r.l @@ -0,0 +1,69 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* A reentrant scanner. + This file will not compile under flex version <= 2.5.4. + Sample Input: + # this is a comment + foo = true + bar = "string value" + integer = 43 +*/ +%{ +#include "config.h" +%} + +%option prefix="test" +%option nounput noyywrap noyylineno warn nodefault noinput +%option reentrant +%option noansi-definitions noansi-prototypes + +IDENT [[:alnum:]_-] +WS [[:blank:]] +%% + +^{IDENT}+{WS}*={WS}*(true|false){WS}*\r?\n { return 100;} +^{IDENT}+{WS}*={WS}*\"[^\"\n\r]*\"{WS}*\r?\n { return 101;} +^{IDENT}+{WS}*={WS}*[[:digit:]]+{WS}*\r?\n { return 102;} +^{WS}*#.*\r?\n { } +^{WS}*\r?\n { } +.|\n { fprintf(stderr,"Invalid line.\n"); exit(-1);} + +%% + +int main(void); + +int main () +{ + yyscan_t lexer; + yylex_init( &lexer ); + yyset_out ( stdout,lexer); + yyset_in ( stdin, lexer); + while( yylex(lexer) ) + { + } + yylex_destroy( lexer ); + printf("TEST RETURNING OK.\n"); + return 0; +} + diff --git a/tests/noansi_r.txt b/tests/noansi_r.txt new file mode 100644 index 0000000..2160628 --- /dev/null +++ b/tests/noansi_r.txt @@ -0,0 +1,4 @@ +# this is a comment +foo = "bar" +num = 43 +setting = false diff --git a/tests/options.cn b/tests/options.cn new file mode 100755 index 0000000..2f592e9 --- /dev/null +++ b/tests/options.cn @@ -0,0 +1,5 @@ +#!/bin/bash + +# Test that flex handles the grouped noop options -c and -n properly. + +echo %% | $1 -cn -o /dev/null diff --git a/tests/posix.l b/tests/posix.l new file mode 100644 index 0000000..38e8d3b --- /dev/null +++ b/tests/posix.l @@ -0,0 +1,79 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* The goal of this test is to verify that we are getting the counter-intuitive + * posix behavior of the repeat operator `{}'. + * + * ab{3} - In traditional flex, this matches "abbb". + * In posix, this matches "ababab". + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#define NUM_TESTS 1 +char * tests[NUM_TESTS] = { "ababab"}; +int main(void); + +int tests_ok[NUM_TESTS] = { 0 }; + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn posix-compat + + +%% + +ab{3} tests_ok[0] = 1; return 0; +.|\n return 0; + +%% + + +int main () +{ + YY_BUFFER_STATE state; + int i; + + yyin = stdin; + yyout = stdout; + + /* Run the tests */ + for (i=0; i < NUM_TESTS; i++){ + printf("Testing: yy_scan_string(%s): ", tests[i]); + state = yy_scan_string(tests[i]); + yylex(); + yy_delete_buffer(state); + printf("... %s\n", tests_ok[i] ? "OK" : "FAILED"); + } + + for (i=0; i < NUM_TESTS; i++) + if (!tests_ok[i]) + exit(1); + + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/posixly_correct.l b/tests/posixly_correct.l new file mode 100644 index 0000000..aff9cbd --- /dev/null +++ b/tests/posixly_correct.l @@ -0,0 +1,79 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* The goal of this test is to verify that we are getting the counter-intuitive + * posix behavior of the repeat operator `{}'. + * + * ab{3} - In traditional flex, this matches "abbb". + * In posix, this matches "ababab". + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#define NUM_TESTS 1 +char * tests[NUM_TESTS] = { "ababab"}; +int main(void); + +int tests_ok[NUM_TESTS] = { 0 }; + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn + + +%% + +ab{3} tests_ok[0] = 1; return 0; +.|\n return 0; + +%% + + +int main () +{ + YY_BUFFER_STATE state; + int i; + + yyin = stdin; + yyout = stdout; + + /* Run the tests */ + for (i=0; i < NUM_TESTS; i++){ + printf("Testing: yy_scan_string(%s): ", tests[i]); + state = yy_scan_string(tests[i]); + yylex(); + yy_delete_buffer(state); + printf("... %s\n", tests_ok[i] ? "OK" : "FAILED"); + } + + for (i=0; i < NUM_TESTS; i++) + if (!tests_ok[i]) + exit(1); + + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/prefix_nr.l b/tests/prefix_nr.l new file mode 100644 index 0000000..c1665df --- /dev/null +++ b/tests/prefix_nr.l @@ -0,0 +1,75 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* Builds "scanner.c". */ +/* The scanner itself is a no-op. A successful compilation is all we want. */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit prefix="FOO" +%option nounput nomain noyywrap noinput +%option warn + + +%% + +.|\n|\r { + + /* Compile, but do not execute the following code. */ + if( 0) { + FOO_create_buffer((FILE*)0,0); + FOO_delete_buffer((YY_BUFFER_STATE)0); + FOO_flush_buffer((YY_BUFFER_STATE)0); + FOO_init_buffer((YY_BUFFER_STATE)0,(FILE*)0); + FOO_load_buffer_state(); + FOO_scan_buffer((char*)0,(yy_size_t)0); + FOO_scan_bytes((yyconst char*)0, 0); + FOO_scan_string((yyconst char*)0); + FOO_switch_to_buffer((YY_BUFFER_STATE)0); + yyin = (FILE*)0; + yyout = (FILE*)0; + yyleng = 0; + yylex(); + yyrestart((FILE*)0); + yytext = (char*)0; + } + } +%% + + +int main(void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + FOOlex(); + printf("TEST RETURNING OK.\n"); + return 0; +} + diff --git a/tests/prefix_nr.txt b/tests/prefix_nr.txt new file mode 100644 index 0000000..0e6c88f --- /dev/null +++ b/tests/prefix_nr.txt @@ -0,0 +1 @@ +Dummy input. diff --git a/tests/prefix_r.l b/tests/prefix_r.l new file mode 100644 index 0000000..a2d4c1a --- /dev/null +++ b/tests/prefix_r.l @@ -0,0 +1,83 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* Builds "scanner.c". */ +/* The scanner itself is a no-op. A successful compilation is all we want. */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} +%option reentrant +%option 8bit prefix="FOO" +%option nounput nomain noyywrap noinput +%option warn + + +%% + + +.|\n|\r { + + /* Compile, but do not execute the following code. */ + if( 0 ) { + FOO_create_buffer( (FILE*)0, 0, yyscanner); + FOO_delete_buffer( (YY_BUFFER_STATE)0, yyscanner); + FOO_flush_buffer( (YY_BUFFER_STATE)0, yyscanner); + FOO_init_buffer( (YY_BUFFER_STATE)0, (FILE*)0, yyscanner); + FOO_load_buffer_state( yyscanner); + FOO_scan_buffer( (char*)0, (yy_size_t)0, yyscanner); + FOO_scan_bytes( (yyconst char*)0, 0, yyscanner); + FOO_scan_string( (yyconst char*)0, yyscanner); + FOO_switch_to_buffer( (YY_BUFFER_STATE)0, yyscanner); + FOOrestart( (FILE*)0, (yyscan_t )0); + + FOOget_extra( (yyscan_t )0 ); + FOOget_in( (yyscan_t )0 ); + FOOget_leng( (yyscan_t )0 ); + FOOget_out( (yyscan_t )0 ); + FOOget_text( (yyscan_t )0 ); + FOOlex( (yyscan_t )0 ); + FOOlex_destroy( (yyscan_t )0 ); + FOOlex_init( (yyscan_t *)0 ); + FOOset_extra( (void *)0, (yyscan_t )0 ); + FOOset_in( (FILE*)0, (yyscan_t )0 ); + FOOset_out( (FILE*)0, (yyscan_t )0 ); + } + } +%% + +int main(void); + +int +main () +{ + yyscan_t scanner; + FOOlex_init( &scanner); + FOOlex( scanner); + FOOlex_destroy( scanner); + printf( "TEST RETURNING OK.\n"); + return 0; +} + diff --git a/tests/prefix_r.txt b/tests/prefix_r.txt new file mode 100644 index 0000000..0e6c88f --- /dev/null +++ b/tests/prefix_r.txt @@ -0,0 +1 @@ +Dummy input. diff --git a/tests/pthread.l b/tests/pthread.l new file mode 100644 index 0000000..c40c024 --- /dev/null +++ b/tests/pthread.l @@ -0,0 +1,210 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A scanner file to build "scanner.c". + Input language is any text made of spaces, newlines, and alphanumerics. + + We create N_THREADS number of threads. Each thread has it's own scanner. + Each thread selects one of the files specified in ARGV, scans it, then + closes it. This is repeated N_SCANS numebr of times for each thread. + + The idea is to press the scanner to break under threads. + If we see "Scanner Jammed", then we know + +*/ +#include <stdio.h> +#include <stdlib.h> +#include <config.h> + +#ifdef HAVE_PTHREAD_H +#include <pthread.h> +#endif + +/* A naive test for segfaults when accessing yytext. */ +static int process_text(char* s, yyscan_t scanner); + +%} + +%option 8bit prefix="test" +%option nounput nomain nodefault noinput +%option yywrap +%option reentrant +%option warn + + /* Arbitrary states.*/ +%x STATE_1 +%x STATE_2 + +%% + + #define NUMBER 200 + #define WORD 201 + +<INITIAL>[[:digit:]]+ { BEGIN(STATE_1); process_text(yytext,yyscanner); return NUMBER; } +<INITIAL>[[:alpha:]]+ { BEGIN(STATE_2); process_text(yytext,yyscanner); return WORD; } + +<STATE_1>[[:alpha:]]+ { BEGIN(0); process_text(yytext,yyscanner); return WORD; } +<STATE_1>[[:digit:]]+ { BEGIN(0); process_text(yytext,yyscanner); return NUMBER; } + +<STATE_2>[[:alpha:]]+ { BEGIN(0); process_text(yytext,yyscanner); return WORD; } +<STATE_2>[[:digit:]]+ { BEGIN(0); process_text(yytext,yyscanner); return NUMBER; } + +<INITIAL,STATE_1,STATE_2>" "|\t|\r|\n { process_text(yytext,yyscanner); } +<INITIAL,STATE_1,STATE_2>[^[:alnum:][:space:]\t\r\n] { + /*fprintf(stderr,"*** Error: bad input char '%c'.\n", yytext[0]); */ + yyterminate(); + } +<INITIAL,STATE_1,STATE_2>[[:space:]\r\n]+ { } +%% + +int yywrap( yyscan_t scanner) { + (void)scanner; + return 1; +} +static int process_text(char* s, yyscan_t scanner) +{ + (void)scanner; + return (int)(*s) + (int) *(s + yyget_leng(scanner)-1); +} + +int main(int ARGC, char *ARGV[]); + +#ifndef HAVE_LIBPTHREAD + int main (int ARGC, char *ARGV[]) { + printf( + "TEST ABORTED because pthread library not available \n" + "-- This is expected on some systems. It is not a flex error.\n" ); + return 0; + } +#else + +#define N_THREADS 4 +#define N_SCANS 20 +#define INPUT_FILE "test.input" + +/* Each thread selects the next file to scan in round-robin fashion. + If there are less files than threads, some threads may block. */ + +static pthread_mutex_t next_lock = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t go_ahead = PTHREAD_MUTEX_INITIALIZER; +static int n_files, next_file; + +static pthread_mutex_t *file_locks; +static char **filenames; + + +void * thread_func ( void* arg ) +{ + int i; + + (void)arg; + + /* Wait for go-ahead. */ + pthread_mutex_lock( &go_ahead); + pthread_mutex_unlock(&go_ahead); + + for( i =0 ; i < N_SCANS ; i++ ) + { + int main(int ARGC, char *ARGV[]); + + int next; + yyscan_t scanner; + FILE * fp; + + pthread_mutex_lock ( &next_lock ); + next = (next_file++) % n_files; + pthread_mutex_unlock ( &next_lock ); + + pthread_mutex_lock ( &file_locks[ next ] ); + + yylex_init( &scanner ); + /*printf("Scanning file %s #%d\n",filenames[next],i); fflush(stdout); */ + if((fp = fopen(filenames[next],"r"))==NULL) { + perror("fopen"); + return NULL; + } + yyset_in(fp,scanner); + + while( yylex( scanner) != 0) + { + } + fclose(fp); + yylex_destroy(scanner); + pthread_mutex_unlock ( &file_locks[ next ] ); + } + return NULL; +} + +int main (int ARGC, char *ARGV[]) +{ + int i; + pthread_t threads[N_THREADS]; + + if( ARGC < 2 ) { + fprintf(stderr,"*** Error: No filenames specified.\n"); + exit(-1); + } + + /* Allocate and initialize the locks. One for each filename in ARGV. */ + file_locks = malloc((ARGC-1) * sizeof(pthread_mutex_t)); + for( i = 0; i < ARGC-1; i++) + pthread_mutex_init( &file_locks[i], NULL ); + + n_files = ARGC -1; + filenames = ARGV + 1; + next_file = 0; + + /* prevent threads from starting until all threads have been created. */ + pthread_mutex_lock(&go_ahead); + + /* Create N threads then wait for them. */ + for(i =0; i < N_THREADS ; i++ ) { + if( pthread_create( &threads[i], NULL, thread_func, NULL) != 0) + { + fprintf(stderr, "*** Error: pthread_create failed.\n"); + exit(-1); + } + printf("Created thread %d.\n",i); fflush(stdout); + } + + /* Tell threads to begin. */ + pthread_mutex_unlock(&go_ahead); + + for(i =0; i < N_THREADS ; i++ ) { + pthread_join ( threads[i], NULL ); + printf("Thread %d done.\n", i ); fflush(stdout); + } + + for( i = 0; i < ARGC-1; i++) + pthread_mutex_destroy( &file_locks[i] ); + + pthread_mutex_destroy( &next_lock ); + pthread_mutex_destroy( &go_ahead ); + free( file_locks ); + printf("TEST RETURNING OK.\n"); + return 0; +} + +#endif /* HAVE_LIBPTHREAD */ + diff --git a/tests/pthread_1.txt b/tests/pthread_1.txt new file mode 100644 index 0000000..234774b --- /dev/null +++ b/tests/pthread_1.txt @@ -0,0 +1,847 @@ +Many lines of numbers and words +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar diff --git a/tests/pthread_2.txt b/tests/pthread_2.txt new file mode 100644 index 0000000..234774b --- /dev/null +++ b/tests/pthread_2.txt @@ -0,0 +1,847 @@ +Many lines of numbers and words +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar diff --git a/tests/pthread_3.txt b/tests/pthread_3.txt new file mode 100644 index 0000000..234774b --- /dev/null +++ b/tests/pthread_3.txt @@ -0,0 +1,847 @@ +Many lines of numbers and words +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar diff --git a/tests/pthread_4.txt b/tests/pthread_4.txt new file mode 100644 index 0000000..234774b --- /dev/null +++ b/tests/pthread_4.txt @@ -0,0 +1,847 @@ +Many lines of numbers and words +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar diff --git a/tests/pthread_5.txt b/tests/pthread_5.txt new file mode 100644 index 0000000..234774b --- /dev/null +++ b/tests/pthread_5.txt @@ -0,0 +1,847 @@ +Many lines of numbers and words +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar diff --git a/tests/quotes.l b/tests/quotes.l new file mode 100644 index 0000000..c1386c3 --- /dev/null +++ b/tests/quotes.l @@ -0,0 +1,101 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* The point of this test is to be sure our M4 madness does not + * interfere with user code. I particular, we are looking + * for instances of M4 quotes, [[ and ]], in here to make it through the flex + * machinery unscathed. + */ + +/* sect 1 [ 1 ] TEST_XXX */ +/* sect 1 [[ 2 ]] TEST_XXX */ +/* sect 1 [[[ 3 ]]] TEST_XXX */ +/* sect 1 [[[[ 4 ]]]] TEST_XXX */ +/* sect 1 ]] unmatched [[ TEST_XXX */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +/*#include "parser.h" */ + +/* sect 1 block [ 1 ] TEST_XXX */ +/* sect 1 block [[ 2 ]] TEST_XXX */ +/* sect 1 block [[[ 3 ]]] TEST_XXX */ +/* sect 1 block [[[[ 4 ]]]] TEST_XXX */ +/* sect 1 block ]] unmatched [[ TEST_XXX */ + +static int a[1] = {0}; +static int b[1] = {0}; +static int c[1] = {0}; + +static int foo (int i){ + return a[b[c[i]]]; /* sect 1 code TEST_XXX */ +} +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn + + +%% + +a /* action comment [ 1 ] */ ; +b /* action comment [[ 2 ]] */ ; +c /* action comment [[[ 3 ]]] */ ; +d /* action comment [[[[ 4 ]]]] */ ; +e /* action comment ]] unmatched [[ */ ; +f return 1+foo(a[b[c[0]]]); +.|\n { + /* action block [ 1 ] TEST_XXX */ + /* action block [[ 2 ]] TEST_XXX */ + /* action block [[[ 3 ]]] TEST_XXX */ + /* action block [[[[ 4 ]]]] TEST_XXX */ + /* action block ]] unmatched [[ TEST_XXX */ + return 1+foo(a[b[c[0]]]); // TEST_XXX + } +%% + +/* sect 3 [ 1 ] TEST_XXX */ +/* sect 3 [[ 2 ]] TEST_XXX */ +/* sect 3 [[[ 3 ]]] TEST_XXX */ +/* sect 3 [[[[ 4 ]]]] TEST_XXX */ +/* sect 3 ]] unmatched [[ TEST_XXX */ +static int bar (int i){ + return c[b[a[i]]]; /* sect 3 code TEST_XXX */ +} +int main(void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + while (yylex()) + ; + printf("TEST RETURNING OK.\n"); + return bar(0); +} + diff --git a/tests/quotes.txt b/tests/quotes.txt new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/quotes.txt @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/reject.l4 b/tests/reject.l4 new file mode 100644 index 0000000..7eda4a5 --- /dev/null +++ b/tests/reject.l4 @@ -0,0 +1,82 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn reject + + +%% + +. { REJECT; } +.|\n ; + +%% + +int main ( int argc, char** argv ) +{ + FILE* fp = NULL; + void *yyscanner=0; + M4_YY_DECL_GUTS_VAR(); + +#ifdef TEST_IS_REENTRANT + yylex_init(&yyscanner); +#else + (void)yyscanner; +#endif + +#ifdef TEST_HAS_TABLES_EXTERNAL + if((fp = fopen(argv[1],"rb"))== NULL) + YY_FATAL_ERROR("could not open tables file for reading"); + + if(yytables_fload(fp M4_YY_CALL_LAST_ARG) < 0) + YY_FATAL_ERROR("yytables_fload returned < 0"); + if(M4_YY_TABLES_VERIFY) + exit(0); +#endif + + if(argc > 2){ + if((fp = fopen(argv[2],"r"))== NULL) + YY_FATAL_ERROR("could not open input file for reading"); + yyin = fp; + } + while(yylex(M4_YY_CALL_ONLY_ARG) != 0) + ; + +#ifdef TEST_HAS_TABLES_EXTERNAL + yytables_destroy(M4_YY_CALL_ONLY_ARG); +#endif + yylex_destroy(M4_YY_CALL_ONLY_ARG); + + if(argc < 0) /* silence the compiler */ + yyscanner = (void*)fp; + + return 0; +} diff --git a/tests/reject.txt b/tests/reject.txt new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/reject.txt @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/rescan_nr.direct.l b/tests/rescan_nr.direct.l new file mode 100644 index 0000000..86103aa --- /dev/null +++ b/tests/rescan_nr.direct.l @@ -0,0 +1,72 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput +%option warn stack never-interactive +%x STATE_1 + +%% + +<INITIAL>{ +0 yy_push_state (STATE_1); +.|\n return 1; +} +<STATE_1>{ +1 yy_pop_state(); +.|\n return yy_top_state() + 1; +} + +%% + +int +main (int argc, char* const argv[]) +{ + FILE* fp; + int i; + + (void)argc; + + if ((fp = fopen(argv[1],"r")) == NULL){ + perror("Failed to open input file."); + return 1; + } + + yyset_out ( stdout); + + for (i=0; i < 4; ++i){ + rewind(fp); + yyset_in ( fp); + while( yylex() ) + ; + yylex_destroy(); + } + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/rescan_nr.direct.txt b/tests/rescan_nr.direct.txt new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/rescan_nr.direct.txt @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/rescan_r.direct.l b/tests/rescan_r.direct.l new file mode 100644 index 0000000..2255ee2 --- /dev/null +++ b/tests/rescan_r.direct.l @@ -0,0 +1,97 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap noinput reentrant +%option warn stack never-interactive +%x STATE_1 + +%% + +<INITIAL>{ +0 yy_push_state (STATE_1, yyscanner); +.|\n return 1; +} +<STATE_1>{ +1 yy_pop_state(yyscanner); +.|\n return yy_top_state(yyscanner) + 1; +} + +%% + +int +main (int argc, char* const argv[]) +{ + FILE* fp; + int i; + yyscan_t yyscanner; + + (void)argc; + + if ((fp = fopen(argv[1],"r")) == NULL){ + perror("Failed to open input file."); + return 1; + } + + printf("Test 1: Reusing same scanner.\n"); + yylex_init( &yyscanner ); + yyset_out ( stdout, yyscanner); + + for (i=0; i < 4; ++i){ + + rewind(fp); + yyset_in ( fp, yyscanner); + + while( yylex(yyscanner) ) + ; + } + yylex_destroy( yyscanner ); + printf("Test 1 OK\n\n"); + + printf("Test 2: Rescanning with new scanner each time.\n"); + + memset(&yyscanner,0,sizeof(yyscanner)); // Just to be clean about it. + + for (i=0; i < 4; ++i){ + yyscan_t s; + yylex_init( &s ); + yyset_out ( stdout, s); + rewind(fp); + yyset_in ( fp, s); + + while( yylex(s) ) + ; + yylex_destroy( s ); + } + printf("Test 2 OK\n\n"); + + + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/rescan_r.direct.txt b/tests/rescan_r.direct.txt new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/rescan_r.direct.txt @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/string_nr.l b/tests/string_nr.l new file mode 100644 index 0000000..e909b2d --- /dev/null +++ b/tests/string_nr.l @@ -0,0 +1,96 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#define NUMBER 200 +#define WORD 201 + +%} + +%option 8bit prefix="test" +%option nounput nomain nodefault noyywrap noinput +%option warn + + +%% + +[[:space:]]+ { } +[[:digit:]]+ { printf("NUMBER "); fflush(stdout);} +[[:alpha:]]+ { printf("WORD "); fflush(stdout);} +. { + fprintf(stderr,"*** Error: Unrecognized character '%c' while scanning.\n", + yytext[0]); + yyterminate(); + } + +<<EOF>> { printf("<<EOF>>\n"); yyterminate();} + +%% + + +#define INPUT_STRING_1 "1234 foo bar" +#define INPUT_STRING_2 "1234 foo bar *@&@&###@^$#&#*" + +int main(void); + +int +main () +{ + char * buf; + int len; + YY_BUFFER_STATE state; + + + /* Scan a good string. */ + printf("Testing: yy_scan_string(%s): ",INPUT_STRING_1); fflush(stdout); + state = yy_scan_string ( INPUT_STRING_1 ); + yylex(); + yy_delete_buffer(state); + + /* Scan only the first 12 chars of a string. */ + printf("Testing: yy_scan_bytes(%s): ",INPUT_STRING_2); fflush(stdout); + state = yy_scan_bytes ( INPUT_STRING_2, 12 ); + yylex(); + yy_delete_buffer(state); + + /* Scan directly from a buffer. + We make a copy, since the buffer will be modified by flex.*/ + printf("Testing: yy_scan_buffer(%s): ",INPUT_STRING_1); fflush(stdout); + len = strlen(INPUT_STRING_1) + 2; + buf = malloc(len); + strcpy( buf, INPUT_STRING_1); + buf[ len -2 ] = 0; /* Flex requires two NUL bytes at end of buffer. */ + buf[ len -1 ] =0; + + state = yy_scan_buffer( buf, len ); + yylex(); + yy_delete_buffer(state); + + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/string_r.l b/tests/string_r.l new file mode 100644 index 0000000..633004a --- /dev/null +++ b/tests/string_r.l @@ -0,0 +1,103 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#define NUMBER 200 +#define WORD 201 + +%} + +%option 8bit prefix="test" +%option nounput nomain nodefault noyywrap noinput +%option warn reentrant + + +%% + +[[:space:]]+ { } +[[:digit:]]+ { printf("NUMBER "); fflush(stdout);} +[[:alpha:]]+ { printf("WORD "); fflush(stdout);} +. { + fprintf(stderr,"*** Error: Unrecognized character '%c' while scanning.\n", + yytext[0]); + yyterminate(); + } + +<<EOF>> { printf("<<EOF>>\n"); yyterminate();} + +%% + + +#define INPUT_STRING_1 "1234 foo bar" +#define INPUT_STRING_2 "1234 foo bar *@&@&###@^$#&#*" + +int main(void); + +int +main () +{ + char * buf; + int len; + YY_BUFFER_STATE state; + yyscan_t scanner=NULL; + + + /* Scan a good string. */ + printf("Testing: yy_scan_string(%s): ",INPUT_STRING_1); fflush(stdout); + yylex_init(&scanner); + state = yy_scan_string ( INPUT_STRING_1 ,scanner); + yylex(scanner); + yy_delete_buffer(state, scanner); + yylex_destroy(scanner); + + /* Scan only the first 12 chars of a string. */ + printf("Testing: yy_scan_bytes(%s): ",INPUT_STRING_2); fflush(stdout); + yylex_init(&scanner); + state = yy_scan_bytes ( INPUT_STRING_2, 12 ,scanner); + yylex(scanner); + yy_delete_buffer(state,scanner); + yylex_destroy(scanner); + + /* Scan directly from a buffer. + We make a copy, since the buffer will be modified by flex.*/ + printf("Testing: yy_scan_buffer(%s): ",INPUT_STRING_1); fflush(stdout); + len = strlen(INPUT_STRING_1) + 2; + buf = malloc(len); + strcpy( buf, INPUT_STRING_1); + buf[ len -2 ] = 0; /* Flex requires two NUL bytes at end of buffer. */ + buf[ len -1 ] =0; + + yylex_init(&scanner); + state = yy_scan_buffer( buf, len ,scanner); + yylex(scanner); + yy_delete_buffer(state,scanner); + yylex_destroy(scanner); + + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/tableopts.am b/tests/tableopts.am new file mode 100644 index 0000000..bbb20d0 --- /dev/null +++ b/tests/tableopts.am @@ -0,0 +1,333 @@ +tableopts_opt_nr_Ca_opt_SOURCES = tableopts.l4 + +tableopts_opt_nr-Ca.opt$(EXEEXT): tableopts_opt_nr-Ca.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_nr_Ce_opt_SOURCES = tableopts.l4 + +tableopts_opt_nr-Ce.opt$(EXEEXT): tableopts_opt_nr-Ce.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_nr_Cf_opt_SOURCES = tableopts.l4 + +tableopts_opt_nr-Cf.opt$(EXEEXT): tableopts_opt_nr-Cf.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_nr_CF_opt_SOURCES = tableopts.l4 + +tableopts_opt_nr-CF.opt$(EXEEXT): tableopts_opt_nr-CF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_nr_Cm_opt_SOURCES = tableopts.l4 + +tableopts_opt_nr-Cm.opt$(EXEEXT): tableopts_opt_nr-Cm.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_nr_Cem_opt_SOURCES = tableopts.l4 + +tableopts_opt_nr-Cem.opt$(EXEEXT): tableopts_opt_nr-Cem.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_nr_Cae_opt_SOURCES = tableopts.l4 + +tableopts_opt_nr-Cae.opt$(EXEEXT): tableopts_opt_nr-Cae.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_nr_Caef_opt_SOURCES = tableopts.l4 + +tableopts_opt_nr-Caef.opt$(EXEEXT): tableopts_opt_nr-Caef.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_nr_CaeF_opt_SOURCES = tableopts.l4 + +tableopts_opt_nr-CaeF.opt$(EXEEXT): tableopts_opt_nr-CaeF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_nr_Cam_opt_SOURCES = tableopts.l4 + +tableopts_opt_nr-Cam.opt$(EXEEXT): tableopts_opt_nr-Cam.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_nr_Caem_opt_SOURCES = tableopts.l4 + +tableopts_opt_nr-Caem.opt$(EXEEXT): tableopts_opt_nr-Caem.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_r_Ca_opt_SOURCES = tableopts.l4 + +tableopts_opt_r-Ca.opt$(EXEEXT): tableopts_opt_r-Ca.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_r_Ce_opt_SOURCES = tableopts.l4 + +tableopts_opt_r-Ce.opt$(EXEEXT): tableopts_opt_r-Ce.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_r_Cf_opt_SOURCES = tableopts.l4 + +tableopts_opt_r-Cf.opt$(EXEEXT): tableopts_opt_r-Cf.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_r_CF_opt_SOURCES = tableopts.l4 + +tableopts_opt_r-CF.opt$(EXEEXT): tableopts_opt_r-CF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_r_Cm_opt_SOURCES = tableopts.l4 + +tableopts_opt_r-Cm.opt$(EXEEXT): tableopts_opt_r-Cm.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_r_Cem_opt_SOURCES = tableopts.l4 + +tableopts_opt_r-Cem.opt$(EXEEXT): tableopts_opt_r-Cem.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_r_Cae_opt_SOURCES = tableopts.l4 + +tableopts_opt_r-Cae.opt$(EXEEXT): tableopts_opt_r-Cae.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_r_Caef_opt_SOURCES = tableopts.l4 + +tableopts_opt_r-Caef.opt$(EXEEXT): tableopts_opt_r-Caef.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_r_CaeF_opt_SOURCES = tableopts.l4 + +tableopts_opt_r-CaeF.opt$(EXEEXT): tableopts_opt_r-CaeF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_r_Cam_opt_SOURCES = tableopts.l4 + +tableopts_opt_r-Cam.opt$(EXEEXT): tableopts_opt_r-Cam.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_opt_r_Caem_opt_SOURCES = tableopts.l4 + +tableopts_opt_r-Caem.opt$(EXEEXT): tableopts_opt_r-Caem.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_nr_Ca_ser_SOURCES = tableopts.l4 + +tableopts_ser_nr-Ca.ser$(EXEEXT): tableopts_ser_nr-Ca.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_nr_Ce_ser_SOURCES = tableopts.l4 + +tableopts_ser_nr-Ce.ser$(EXEEXT): tableopts_ser_nr-Ce.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_nr_Cf_ser_SOURCES = tableopts.l4 + +tableopts_ser_nr-Cf.ser$(EXEEXT): tableopts_ser_nr-Cf.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_nr_CF_ser_SOURCES = tableopts.l4 + +tableopts_ser_nr-CF.ser$(EXEEXT): tableopts_ser_nr-CF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_nr_Cm_ser_SOURCES = tableopts.l4 + +tableopts_ser_nr-Cm.ser$(EXEEXT): tableopts_ser_nr-Cm.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_nr_Cem_ser_SOURCES = tableopts.l4 + +tableopts_ser_nr-Cem.ser$(EXEEXT): tableopts_ser_nr-Cem.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_nr_Cae_ser_SOURCES = tableopts.l4 + +tableopts_ser_nr-Cae.ser$(EXEEXT): tableopts_ser_nr-Cae.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_nr_Caef_ser_SOURCES = tableopts.l4 + +tableopts_ser_nr-Caef.ser$(EXEEXT): tableopts_ser_nr-Caef.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_nr_CaeF_ser_SOURCES = tableopts.l4 + +tableopts_ser_nr-CaeF.ser$(EXEEXT): tableopts_ser_nr-CaeF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_nr_Cam_ser_SOURCES = tableopts.l4 + +tableopts_ser_nr-Cam.ser$(EXEEXT): tableopts_ser_nr-Cam.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_nr_Caem_ser_SOURCES = tableopts.l4 + +tableopts_ser_nr-Caem.ser$(EXEEXT): tableopts_ser_nr-Caem.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_r_Ca_ser_SOURCES = tableopts.l4 + +tableopts_ser_r-Ca.ser$(EXEEXT): tableopts_ser_r-Ca.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_r_Ce_ser_SOURCES = tableopts.l4 + +tableopts_ser_r-Ce.ser$(EXEEXT): tableopts_ser_r-Ce.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_r_Cf_ser_SOURCES = tableopts.l4 + +tableopts_ser_r-Cf.ser$(EXEEXT): tableopts_ser_r-Cf.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_r_CF_ser_SOURCES = tableopts.l4 + +tableopts_ser_r-CF.ser$(EXEEXT): tableopts_ser_r-CF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_r_Cm_ser_SOURCES = tableopts.l4 + +tableopts_ser_r-Cm.ser$(EXEEXT): tableopts_ser_r-Cm.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_r_Cem_ser_SOURCES = tableopts.l4 + +tableopts_ser_r-Cem.ser$(EXEEXT): tableopts_ser_r-Cem.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_r_Cae_ser_SOURCES = tableopts.l4 + +tableopts_ser_r-Cae.ser$(EXEEXT): tableopts_ser_r-Cae.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_r_Caef_ser_SOURCES = tableopts.l4 + +tableopts_ser_r-Caef.ser$(EXEEXT): tableopts_ser_r-Caef.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_r_CaeF_ser_SOURCES = tableopts.l4 + +tableopts_ser_r-CaeF.ser$(EXEEXT): tableopts_ser_r-CaeF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_r_Cam_ser_SOURCES = tableopts.l4 + +tableopts_ser_r-Cam.ser$(EXEEXT): tableopts_ser_r-Cam.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ser_r_Caem_ser_SOURCES = tableopts.l4 + +tableopts_ser_r-Caem.ser$(EXEEXT): tableopts_ser_r-Caem.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_nr_Ca_ver_SOURCES = tableopts.l4 + +tableopts_ver_nr-Ca.ver$(EXEEXT): tableopts_ver_nr-Ca.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_nr_Ce_ver_SOURCES = tableopts.l4 + +tableopts_ver_nr-Ce.ver$(EXEEXT): tableopts_ver_nr-Ce.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_nr_Cf_ver_SOURCES = tableopts.l4 + +tableopts_ver_nr-Cf.ver$(EXEEXT): tableopts_ver_nr-Cf.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_nr_CF_ver_SOURCES = tableopts.l4 + +tableopts_ver_nr-CF.ver$(EXEEXT): tableopts_ver_nr-CF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_nr_Cm_ver_SOURCES = tableopts.l4 + +tableopts_ver_nr-Cm.ver$(EXEEXT): tableopts_ver_nr-Cm.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_nr_Cem_ver_SOURCES = tableopts.l4 + +tableopts_ver_nr-Cem.ver$(EXEEXT): tableopts_ver_nr-Cem.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_nr_Cae_ver_SOURCES = tableopts.l4 + +tableopts_ver_nr-Cae.ver$(EXEEXT): tableopts_ver_nr-Cae.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_nr_Caef_ver_SOURCES = tableopts.l4 + +tableopts_ver_nr-Caef.ver$(EXEEXT): tableopts_ver_nr-Caef.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_nr_CaeF_ver_SOURCES = tableopts.l4 + +tableopts_ver_nr-CaeF.ver$(EXEEXT): tableopts_ver_nr-CaeF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_nr_Cam_ver_SOURCES = tableopts.l4 + +tableopts_ver_nr-Cam.ver$(EXEEXT): tableopts_ver_nr-Cam.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_nr_Caem_ver_SOURCES = tableopts.l4 + +tableopts_ver_nr-Caem.ver$(EXEEXT): tableopts_ver_nr-Caem.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_r_Ca_ver_SOURCES = tableopts.l4 + +tableopts_ver_r-Ca.ver$(EXEEXT): tableopts_ver_r-Ca.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_r_Ce_ver_SOURCES = tableopts.l4 + +tableopts_ver_r-Ce.ver$(EXEEXT): tableopts_ver_r-Ce.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_r_Cf_ver_SOURCES = tableopts.l4 + +tableopts_ver_r-Cf.ver$(EXEEXT): tableopts_ver_r-Cf.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_r_CF_ver_SOURCES = tableopts.l4 + +tableopts_ver_r-CF.ver$(EXEEXT): tableopts_ver_r-CF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_r_Cm_ver_SOURCES = tableopts.l4 + +tableopts_ver_r-Cm.ver$(EXEEXT): tableopts_ver_r-Cm.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_r_Cem_ver_SOURCES = tableopts.l4 + +tableopts_ver_r-Cem.ver$(EXEEXT): tableopts_ver_r-Cem.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_r_Cae_ver_SOURCES = tableopts.l4 + +tableopts_ver_r-Cae.ver$(EXEEXT): tableopts_ver_r-Cae.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_r_Caef_ver_SOURCES = tableopts.l4 + +tableopts_ver_r-Caef.ver$(EXEEXT): tableopts_ver_r-Caef.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_r_CaeF_ver_SOURCES = tableopts.l4 + +tableopts_ver_r-CaeF.ver$(EXEEXT): tableopts_ver_r-CaeF.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_r_Cam_ver_SOURCES = tableopts.l4 + +tableopts_ver_r-Cam.ver$(EXEEXT): tableopts_ver_r-Cam.$(OBJEXT) + $(LINK) -o $@ $< + +tableopts_ver_r_Caem_ver_SOURCES = tableopts.l4 + +tableopts_ver_r-Caem.ver$(EXEEXT): tableopts_ver_r-Caem.$(OBJEXT) + $(LINK) -o $@ $< + +TABLEOPTS_TESTS = tableopts_opt_nr-Ca.opt tableopts_opt_nr-Ce.opt tableopts_opt_nr-Cf.opt tableopts_opt_nr-CF.opt tableopts_opt_nr-Cm.opt tableopts_opt_nr-Cem.opt tableopts_opt_nr-Cae.opt tableopts_opt_nr-Caef.opt tableopts_opt_nr-CaeF.opt tableopts_opt_nr-Cam.opt tableopts_opt_nr-Caem.opt tableopts_opt_r-Ca.opt tableopts_opt_r-Ce.opt tableopts_opt_r-Cf.opt tableopts_opt_r-CF.opt tableopts_opt_r-Cm.opt tableopts_opt_r-Cem.opt tableopts_opt_r-Cae.opt tableopts_opt_r-Caef.opt tableopts_opt_r-CaeF.opt tableopts_opt_r-Cam.opt tableopts_opt_r-Caem.opt tableopts_ser_nr-Ca.ser tableopts_ser_nr-Ce.ser tableopts_ser_nr-Cf.ser tableopts_ser_nr-CF.ser tableopts_ser_nr-Cm.ser tableopts_ser_nr-Cem.ser tableopts_ser_nr-Cae.ser tableopts_ser_nr-Caef.ser tableopts_ser_nr-CaeF.ser tableopts_ser_nr-Cam.ser tableopts_ser_nr-Caem.ser tableopts_ser_r-Ca.ser tableopts_ser_r-Ce.ser tableopts_ser_r-Cf.ser tableopts_ser_r-CF.ser tableopts_ser_r-Cm.ser tableopts_ser_r-Cem.ser tableopts_ser_r-Cae.ser tableopts_ser_r-Caef.ser tableopts_ser_r-CaeF.ser tableopts_ser_r-Cam.ser tableopts_ser_r-Caem.ser tableopts_ver_nr-Ca.ver tableopts_ver_nr-Ce.ver tableopts_ver_nr-Cf.ver tableopts_ver_nr-CF.ver tableopts_ver_nr-Cm.ver tableopts_ver_nr-Cem.ver tableopts_ver_nr-Cae.ver tableopts_ver_nr-Caef.ver tableopts_ver_nr-CaeF.ver tableopts_ver_nr-Cam.ver tableopts_ver_nr-Caem.ver tableopts_ver_r-Ca.ver tableopts_ver_r-Ce.ver tableopts_ver_r-Cf.ver tableopts_ver_r-CF.ver tableopts_ver_r-Cm.ver tableopts_ver_r-Cem.ver tableopts_ver_r-Cae.ver tableopts_ver_r-Caef.ver tableopts_ver_r-CaeF.ver tableopts_ver_r-Cam.ver tableopts_ver_r-Caem.ver + +tableopts_tables = tableopts_ser_nr-Ca.ser.tables tableopts_ser_nr-Ce.ser.tables tableopts_ser_nr-Cf.ser.tables tableopts_ser_nr-CF.ser.tables tableopts_ser_nr-Cm.ser.tables tableopts_ser_nr-Cem.ser.tables tableopts_ser_nr-Cae.ser.tables tableopts_ser_nr-Caef.ser.tables tableopts_ser_nr-CaeF.ser.tables tableopts_ser_nr-Cam.ser.tables tableopts_ser_nr-Caem.ser.tables tableopts_ser_r-Ca.ser.tables tableopts_ser_r-Ce.ser.tables tableopts_ser_r-Cf.ser.tables tableopts_ser_r-CF.ser.tables tableopts_ser_r-Cm.ser.tables tableopts_ser_r-Cem.ser.tables tableopts_ser_r-Cae.ser.tables tableopts_ser_r-Caef.ser.tables tableopts_ser_r-CaeF.ser.tables tableopts_ser_r-Cam.ser.tables tableopts_ser_r-Caem.ser.tables tableopts_ver_nr-Ca.ver.tables tableopts_ver_nr-Ce.ver.tables tableopts_ver_nr-Cf.ver.tables tableopts_ver_nr-CF.ver.tables tableopts_ver_nr-Cm.ver.tables tableopts_ver_nr-Cem.ver.tables tableopts_ver_nr-Cae.ver.tables tableopts_ver_nr-Caef.ver.tables tableopts_ver_nr-CaeF.ver.tables tableopts_ver_nr-Cam.ver.tables tableopts_ver_nr-Caem.ver.tables tableopts_ver_r-Ca.ver.tables tableopts_ver_r-Ce.ver.tables tableopts_ver_r-Cf.ver.tables tableopts_ver_r-CF.ver.tables tableopts_ver_r-Cm.ver.tables tableopts_ver_r-Cem.ver.tables tableopts_ver_r-Cae.ver.tables tableopts_ver_r-Caef.ver.tables tableopts_ver_r-CaeF.ver.tables tableopts_ver_r-Cam.ver.tables tableopts_ver_r-Caem.ver.tables diff --git a/tests/tableopts.l4 b/tests/tableopts.l4 new file mode 100644 index 0000000..ac85c29 --- /dev/null +++ b/tests/tableopts.l4 @@ -0,0 +1,84 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +%} + +%option 8bit +%option nounput nomain noyywrap noinput +%option warn yylineno + + + +%% + +foo|bar ; +[[:digit:]]+ ; +[[:blank:]]+ ; +.|\n ; +%% + +int main ( int argc, char** argv ) +{ + FILE* fp = NULL; + void *yyscanner=0; + M4_YY_DECL_GUTS_VAR(); + +#ifdef TEST_IS_REENTRANT + yylex_init(&yyscanner); +#else + (void)yyscanner; +#endif + +#ifdef TEST_HAS_TABLES_EXTERNAL + if((fp = fopen(argv[1],"rb"))== NULL) + YY_FATAL_ERROR("could not open tables file for reading"); + + if(yytables_fload(fp M4_YY_CALL_LAST_ARG) < 0) + YY_FATAL_ERROR("yytables_fload returned < 0"); + if(M4_YY_TABLES_VERIFY) + exit(0); +#endif + + if(argc > 2){ + if((fp = fopen(argv[2],"r"))== NULL) + YY_FATAL_ERROR("could not open input file for reading"); + yyin = fp; + } + while(yylex(M4_YY_CALL_ONLY_ARG) != 0) + ; + +#ifdef TEST_HAS_TABLES_EXTERNAL + yytables_destroy(M4_YY_CALL_ONLY_ARG); +#endif + yylex_destroy(M4_YY_CALL_ONLY_ARG); + + if(argc < 0) /* silence the compiler */ + yyscanner = (void*)fp; + + return 0; +} diff --git a/tests/tableopts.sh b/tests/tableopts.sh new file mode 100755 index 0000000..63a36d3 --- /dev/null +++ b/tests/tableopts.sh @@ -0,0 +1,44 @@ +#!/bin/bash +set -euo pipefail +IFS=$'\n\t' + +# This script is present to generate the automake _SOURCES variables +# for the tableopts_* tests. It also generates the linking rules for +# each test since automake isn't able to handle the pattern rules that +# would be natural to use. Output is written to standard output for +# inclusion in a Makefile.am, typically by redirecting the output and then an automake include directive. + +TABLEOPTS_TESTS="" +tableopts_tables="" + +for kind in opt ser ver ; do + for threading in nr r ; do + for opt in -Ca -Ce -Cf -CF -Cm -Cem -Cae -Caef -CaeF -Cam -Caem ; do + testname=tableopts_${kind}_${threading}${opt}.${kind} + if [ "${TABLEOPTS_TESTS}" = "" ] ;then + TABLEOPTS_TESTS=${testname} + if [ "$kind" = "ser" -o "$kind" = "ver" ] ; then + tableopts_tables=${testname}.tables + fi + else + TABLEOPTS_TESTS="${TABLEOPTS_TESTS} ${testname}" + if [ "$kind" = "ser" -o "$kind" = "ver" ] ; then + tableopts_tables="${tableopts_tables} ${testname}.tables" + fi + fi + + bare_opt=${opt#-} + cat << EOF +tableopts_${kind}_${threading}_${bare_opt}_${kind}_SOURCES = tableopts.l4 + +${testname}\$(EXEEXT): tableopts_${kind}_${threading}${opt}.\$(OBJEXT) + \$(LINK) -o \$@ \$< + +EOF + done + done +done + +echo TABLEOPTS_TESTS = ${TABLEOPTS_TESTS} +echo +echo tableopts_tables = ${tableopts_tables} diff --git a/tests/tableopts.txt b/tests/tableopts.txt new file mode 100644 index 0000000..aec9276 --- /dev/null +++ b/tests/tableopts.txt @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar foobar +0000 foo 1111 foo 0000 bar foobar diff --git a/tests/testwrapper.sh b/tests/testwrapper.sh new file mode 100755 index 0000000..051e20b --- /dev/null +++ b/tests/testwrapper.sh @@ -0,0 +1,53 @@ +#!/bin/bash -vx +set -euo pipefail + +# testwrapper.sh: run a flex test, typically called by a Makefile + +# Each test will exercise some feature or aspect of flex. Run the test with any input it may need. + +INPUT_DIRECTORY="" +INPUT_NAME="" +INPUT_COUNT=0 +USE_REDIRECT=0 +DO_COMPARISON=0 + +while getopts :d:i:rt1 OPTION ; do + case $OPTION in + d) INPUT_DIRECTORY=$OPTARG ;; + i) + if [ "$INPUT_NAME" == "" ] ; then + INPUT_NAME="$OPTARG" + else + INPUT_NAME="$INPUT_NAME $OPTARG" + fi + INPUT_COUNT=$(($INPUT_COUNT+1)) + ;; + r) USE_REDIRECT=1 ;; + t) USE_TABLES=1 ;; + 1) DO_COMPARISON=1 ;; + esac + done + +TESTNAME="${!OPTIND}" + +INPUT_NAME=${INPUT_NAME:-$INPUT_DIRECTORY/`basename $TESTNAME`.txt} + +if [ "$DO_COMPARISON" -eq "1" ] ; then + test `$TESTNAME 1 < $INPUT_NAME` -eq `$TESTNAME < $INPUT_NAME` + exit $? + fi + +if [ $INPUT_COUNT -gt 1 ] ; then + $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME}.tables} ${INPUT_NAME} + exit $? + fi + +if [ -f ${INPUT_NAME} ] ; then + if [ $USE_REDIRECT == 1 ] ; then + $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME}.tables} < $INPUT_NAME + else + $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME}.tables} $INPUT_NAME + fi +else + $TESTNAME +fi diff --git a/tests/top.l b/tests/top.l new file mode 100644 index 0000000..25f4773 --- /dev/null +++ b/tests/top.l @@ -0,0 +1,53 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* Build "scanner.c". + The scanner is not important. + This test is really about compilation. See "main.c". +*/ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#ifndef DEFINE_ME +#error "DEFINE_ME undefined!" +#endif +%} + +%top{ +#define DEFINE_ME 1 +} + +%option reentrant +%option 8bit header="top.h" prefix="test" +%option nounput nomain noyywrap noinput +%option warn + + +%% + +.|\n { } + +%% + diff --git a/tests/top.txt b/tests/top.txt new file mode 100644 index 0000000..2ce5001 --- /dev/null +++ b/tests/top.txt @@ -0,0 +1,3 @@ +Any input is ok for this scanner. +We only care if it links. + diff --git a/tests/top_main.c b/tests/top_main.c new file mode 100644 index 0000000..b273214 --- /dev/null +++ b/tests/top_main.c @@ -0,0 +1,67 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include <assert.h> + +#include "top.h" + +/* The scanner itself is not important here. + * We simply try to use all the functions that are exported in the + * header, to see if we get any compiler warnings. + */ +int +main ( int argc, char** argv ) +{ + (void)argc; + (void)argv; + + yyscan_t scanner; + FILE *fp; + char * extra = "EXTRA"; + + testlex_init(&scanner); + testset_in(stdin,scanner); + testset_out(stdout,scanner); + testset_extra(extra,scanner); + + fp = testget_in(scanner); + assert(fp == stdin); + fp = testget_out(scanner); + assert(fp == stdout); + + while(testlex(scanner)) { + char * text; + int line; + line = testget_lineno(scanner); + text = testget_text(scanner); + + if( (char*)testget_extra(scanner) != extra) + break; + + if ( !text || line < 0) + continue; + } + testlex_destroy(scanner); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/yyextra.l b/tests/yyextra.l new file mode 100644 index 0000000..8957cbb --- /dev/null +++ b/tests/yyextra.l @@ -0,0 +1,121 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A file to build "scanner.c". */ +/* This tests that we can use "yyextra". + We buffer all input into a growable array, then print it. + We run diff on the input and output. +*/ + +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + + +/* We'll store the entire input in this buffer, growing as necessary. */ +struct Buffer { + int curr_len; + int max_len; + int grow_len; + char * data; +}; +#define YY_EXTRA_TYPE struct Buffer * + +/* Save char into junk array at next position. */ +static void append_char (char c, yyscan_t scanner ); + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap nodefault noinput +%option warn +%option reentrant + + +%% + +.|\r|\n { append_char (yytext[0],yyscanner); } + +%% + +int main(void); + +int +main () +{ + yyscan_t scanner; + struct Buffer * buf; + int i; + + buf = malloc(sizeof(struct Buffer)); + buf->curr_len =0; + buf->max_len = 4; + buf->grow_len = 100; + buf->data = malloc(buf->max_len); + + testlex_init(&scanner); + testset_in( stdin, scanner); + testset_out( stdout, scanner); + testset_extra( buf, scanner ); + testlex(scanner); + + buf = testget_extra(scanner); + for(i=0; i < buf->curr_len; i++) + fputc( buf->data[i], stdout ); + free( buf->data); + free( buf); + + testlex_destroy(scanner); + return 0; +} + +/* Save char into junk array at next position. */ +static void append_char (char c, yyscan_t scanner ) +{ + struct Buffer *buf, *new_buf; + buf = testget_extra(scanner); + + /* Grow buffer if necessary. */ + + if( buf->curr_len >= buf->max_len ) + { + new_buf = malloc(sizeof(struct Buffer)); + new_buf->max_len = buf->max_len + buf->grow_len; + new_buf->grow_len = buf->grow_len; + new_buf->data = malloc(new_buf->max_len); + for( new_buf->curr_len = 0; + new_buf->curr_len < buf->curr_len; + new_buf->curr_len++ ) + { + new_buf->data[ new_buf->curr_len] = buf->data [ new_buf->curr_len]; + } + free( buf->data ); + free( buf ); + buf = new_buf; + testset_extra( buf, scanner ); + } + + + buf->data[ buf->curr_len++ ] = c; +} diff --git a/tests/yyextra.txt b/tests/yyextra.txt new file mode 100644 index 0000000..243df29 --- /dev/null +++ b/tests/yyextra.txt @@ -0,0 +1,795 @@ + + THE UNITED STATES CONSTITUTION + _________________________________________________________________ + + (See Note 1) + + We the People of the United States, in Order to form a more perfect + Union, establish Justice, insure domestic Tranquility, provide for the + common defence, promote the general Welfare, and secure the Blessings + of Liberty to ourselves and our Posterity, do ordain and establish + this Constitution for the United States of America. + +Article. I. + + Section 1. + + All legislative Powers herein granted shall be vested in a Congress of + the United States, which shall consist of a Senate and House of + Representatives. + + Section. 2. + + Clause 1: The House of Representatives shall be composed of Members + chosen every second Year by the People of the several States, and the + Electors in each State shall have the Qualifications requisite for + Electors of the most numerous Branch of the State Legislature. + + Clause 2: No Person shall be a Representative who shall not have + attained to the Age of twenty five Years, and been seven Years a + Citizen of the United States, and who shall not, when elected, be an + Inhabitant of that State in which he shall be chosen. + + Clause 3: Representatives and direct Taxes shall be apportioned among + the several States which may be included within this Union, according + to their respective Numbers, which shall be determined by adding to + the whole Number of free Persons, including those bound to Service for + a Term of Years, and excluding Indians not taxed, three fifths of all + other Persons. (See Note 2) The actual Enumeration shall be made + within three Years after the first Meeting of the Congress of the + United States, and within every subsequent Term of ten Years, in such + Manner as they shall by Law direct. The Number of Representatives + shall not exceed one for every thirty Thousand, but each State shall + have at Least one Representative; and until such enumeration shall be + made, the State of New Hampshire shall be entitled to chuse three, + Massachusetts eight, Rhode-Island and Providence Plantations one, + Connecticut five, New-York six, New Jersey four, Pennsylvania eight, + Delaware one, Maryland six, Virginia ten, North Carolina five, South + Carolina five, and Georgia three. + + Clause 4: When vacancies happen in the Representation from any State, + the Executive Authority thereof shall issue Writs of Election to fill + such Vacancies. + + Clause 5: The House of Representatives shall chuse their Speaker and + other Officers; and shall have the sole Power of Impeachment. + + Section. 3. + + Clause 1: The Senate of the United States shall be composed of two + Senators from each State, chosen by the Legislature thereof, (See Note + 3) for six Years; and each Senator shall have one Vote. + + Clause 2: Immediately after they shall be assembled in Consequence of + the first Election, they shall be divided as equally as may be into + three Classes. The Seats of the Senators of the first Class shall be + vacated at the Expiration of the second Year, of the second Class at + the Expiration of the fourth Year, and of the third Class at the + Expiration of the sixth Year, so that one third may be chosen every + second Year; and if Vacancies happen by Resignation, or otherwise, + during the Recess of the Legislature of any State, the Executive + thereof may make temporary Appointments until the next Meeting of the + Legislature, which shall then fill such Vacancies. (See Note 4) + + Clause 3: No Person shall be a Senator who shall not have attained to + the Age of thirty Years, and been nine Years a Citizen of the United + States, and who shall not, when elected, be an Inhabitant of that + State for which he shall be chosen. + + Clause 4: The Vice President of the United States shall be President + of the Senate, but shall have no Vote, unless they be equally divided. + + Clause 5: The Senate shall chuse their other Officers, and also a + President pro tempore, in the Absence of the Vice President, or when + he shall exercise the Office of President of the United States. + + Clause 6: The Senate shall have the sole Power to try all + Impeachments. When sitting for that Purpose, they shall be on Oath or + Affirmation. When the President of the United States is tried, the + Chief Justice shall preside: And no Person shall be convicted without + the Concurrence of two thirds of the Members present. + + Clause 7: Judgment in Cases of Impeachment shall not extend further + than to removal from Office, and disqualification to hold and enjoy + any Office of honor, Trust or Profit under the United States: but the + Party convicted shall nevertheless be liable and subject to + Indictment, Trial, Judgment and Punishment, according to Law. + + Section. 4. + + Clause 1: The Times, Places and Manner of holding Elections for + Senators and Representatives, shall be prescribed in each State by the + Legislature thereof; but the Congress may at any time by Law make or + alter such Regulations, except as to the Places of chusing Senators. + + Clause 2: The Congress shall assemble at least once in every Year, and + such Meeting shall be on the first Monday in December, (See Note 5) + unless they shall by Law appoint a different Day. + + Section. 5. + + Clause 1: Each House shall be the Judge of the Elections, Returns and + Qualifications of its own Members, and a Majority of each shall + constitute a Quorum to do Business; but a smaller Number may adjourn + from day to day, and may be authorized to compel the Attendance of + absent Members, in such Manner, and under such Penalties as each House + may provide. + + Clause 2: Each House may determine the Rules of its Proceedings, + punish its Members for disorderly Behaviour, and, with the Concurrence + of two thirds, expel a Member. + + Clause 3: Each House shall keep a Journal of its Proceedings, and from + time to time publish the same, excepting such Parts as may in their + Judgment require Secrecy; and the Yeas and Nays of the Members of + either House on any question shall, at the Desire of one fifth of + those Present, be entered on the Journal. + + Clause 4: Neither House, during the Session of Congress, shall, + without the Consent of the other, adjourn for more than three days, + nor to any other Place than that in which the two Houses shall be + sitting. + + Section. 6. + + Clause 1: The Senators and Representatives shall receive a + Compensation for their Services, to be ascertained by Law, and paid + out of the Treasury of the United States. (See Note 6) They shall in + all Cases, except Treason, Felony and Breach of the Peace, + beprivileged from Arrest during their Attendance at the Session of + their respective Houses, and in going to and returning from the same; + and for any Speech or Debate in either House, they shall not be + questioned in any other Place. + + Clause 2: No Senator or Representative shall, during the Time for + which he was elected, be appointed to any civil Office under the + Authority of the United States, which shall have been created, or the + Emoluments whereof shall have been encreased during such time; and no + Person holding any Office under the United States, shall be a Member + of either House during his Continuance in Office. + + Section. 7. + + Clause 1: All Bills for raising Revenue shall originate in the House + of Representatives; but the Senate may propose or concur with + Amendments as on other Bills. + + Clause 2: Every Bill which shall have passed the House of + Representatives and the Senate, shall, before it become a Law, be + presented to the President of the United States; If he approve he + shall sign it, but if not he shall return it, with his Objections to + that House in which it shall have originated, who shall enter the + Objections at large on their Journal, and proceed to reconsider it. If + after such Reconsideration two thirds of that House shall agree to + pass the Bill, it shall be sent, together with the Objections, to the + other House, by which it shall likewise be reconsidered, and if + approved by two thirds of that House, it shall become a Law. But in + all such Cases the Votes of both Houses shall be determined by yeas + and Nays, and the Names of the Persons voting for and against the Bill + shall be entered on the Journal of each House respectively. If any + Bill shall not be returned by the President within ten Days (Sundays + excepted) after it shall have been presented to him, the Same shall be + a Law, in like Manner as if he had signed it, unless the Congress by + their Adjournment prevent its Return, in which Case it shall not be a + Law. + + Clause 3: Every Order, Resolution, or Vote to which the Concurrence of + the Senate and House of Representatives may be necessary (except on a + question of Adjournment) shall be presented to the President of the + United States; and before the Same shall take Effect, shall be + approved by him, or being disapproved by him, shall be repassed by two + thirds of the Senate and House of Representatives, according to the + Rules and Limitations prescribed in the Case of a Bill. + + Section. 8. + + Clause 1: The Congress shall have Power To lay and collect Taxes, + Duties, Imposts and Excises, to pay the Debts and provide for the + common Defence and general Welfare of the United States; but all + Duties, Imposts and Excises shall be uniform throughout the United + States; + + Clause 2: To borrow Money on the credit of the United States; + + Clause 3: To regulate Commerce with foreign Nations, and among the + several States, and with the Indian Tribes; + + Clause 4: To establish an uniform Rule of Naturalization, and uniform + Laws on the subject of Bankruptcies throughout the United States; + + Clause 5: To coin Money, regulate the Value thereof, and of foreign + Coin, and fix the Standard of Weights and Measures; + + Clause 6: To provide for the Punishment of counterfeiting the + Securities and current Coin of the United States; + + Clause 7: To establish Post Offices and post Roads; + + Clause 8: To promote the Progress of Science and useful Arts, by + securing for limited Times to Authors and Inventors the exclusive + Right to their respective Writings and Discoveries; + + Clause 9: To constitute Tribunals inferior to the supreme Court; + + Clause 10: To define and punish Piracies and Felonies committed on the + high Seas, and Offences against the Law of Nations; + + Clause 11: To declare War, grant Letters of Marque and Reprisal, and + make Rules concerning Captures on Land and Water; + + Clause 12: To raise and support Armies, but no Appropriation of Money + to that Use shall be for a longer Term than two Years; + + Clause 13: To provide and maintain a Navy; + + Clause 14: To make Rules for the Government and Regulation of the land + and naval Forces; + + Clause 15: To provide for calling forth the Militia to execute the + Laws of the Union, suppress Insurrections and repel Invasions; + + Clause 16: To provide for organizing, arming, and disciplining, the + Militia, and for governing such Part of them as may be employed in the + Service of the United States, reserving to the States respectively, + the Appointment of the Officers, and the Authority of training the + Militia according to the discipline prescribed by Congress; + + Clause 17: To exercise exclusive Legislation in all Cases whatsoever, + over such District (not exceeding ten Miles square) as may, byCession + of particular States, and the Acceptance of Congress, become the Seat + of the Government of the United States, and to exercise like Authority + over all Places purchased by the Consent of the Legislature of the + State in which the Same shall be, for the Erection of Forts, + Magazines, Arsenals, dock-Yards, and other needful Buildings;--And + + Clause 18: To make all Laws which shall be necessary and proper for + carrying into Execution the foregoing Powers, and all other Powers + vested by this Constitution in the Government of the United States, or + in any Department or Officer thereof. + + Section. 9. + + Clause 1: The Migration or Importation of such Persons as any of the + States now existing shall think proper to admit, shall not be + prohibited by the Congress prior to the Year one thousand eight + hundred and eight, but a Tax or duty may be imposed on such + Importation, not exceeding ten dollars for each Person. + + Clause 2: The Privilege of the Writ of Habeas Corpus shall not be + suspended, unless when in Cases of Rebellion or Invasion the public + Safety may require it. + + Clause 3: No Bill of Attainder or ex post facto Law shall be passed. + + Clause 4: No Capitation, or other direct, Tax shall be laid, unless in + Proportion to the Census or Enumeration herein before directed to be + taken. (See Note 7) + + Clause 5: No Tax or Duty shall be laid on Articles exported from any + State. + + Clause 6: No Preference shall be given by any Regulation of Commerce + or Revenue to the Ports of one State over those of another: nor shall + Vessels bound to, or from, one State, be obliged to enter, clear, or + pay Duties in another. + + Clause 7: No Money shall be drawn from the Treasury, but in + Consequence of Appropriations made by Law; and a regular Statement and + Account of the Receipts and Expenditures of all public Money shall be + published from time to time. + + Clause 8: No Title of Nobility shall be granted by the United States: + And no Person holding any Office of Profit or Trust under them, shall, + without the Consent of the Congress, accept of any present, Emolument, + Office, or Title, of any kind whatever, from any King, Prince, or + foreign State. + + Section. 10. + + Clause 1: No State shall enter into any Treaty, Alliance, or + Confederation; grant Letters of Marque and Reprisal; coin Money; emit + Bills of Credit; make any Thing but gold and silver Coin a Tender in + Payment of Debts; pass any Bill of Attainder, ex post facto Law, or + Law impairing the Obligation of Contracts, or grant any Title of + Nobility. + + Clause 2: No State shall, without the Consent of the Congress, lay any + Imposts or Duties on Imports or Exports, except what may be absolutely + necessary for executing it's inspection Laws: and the net Produce of + all Duties and Imposts, laid by any State on Imports or Exports, shall + be for the Use of the Treasury of the United States; and all such Laws + shall be subject to the Revision and Controul of the Congress. + + Clause 3: No State shall, without the Consent of Congress, lay any + Duty of Tonnage, keep Troops, or Ships of War in time of Peace, enter + into any Agreement or Compact with another State, or with a foreign + Power, or engage in War, unless actually invaded, or in such imminent + Danger as will not admit of delay. + +Article. II. + + Section. 1. + + Clause 1: The executive Power shall be vested in a President of the + United States of America. He shall hold his Office during the Term of + four Years, and, together with the Vice President, chosen for the same + Term, be elected, as follows + + Clause 2: Each State shall appoint, in such Manner as the Legislature + thereof may direct, a Number of Electors, equal to the whole Number of + Senators and Representatives to which the State may be entitled in the + Congress: but no Senator or Representative, or Person holding an + Office of Trust or Profit under the United States, shall be appointed + an Elector. + + Clause 3: The Electors shall meet in their respective States, and vote + by Ballot for two Persons, of whom one at least shall not be an + Inhabitant of the same State with themselves. And they shall make a + List of all the Persons voted for, and of the Number of Votes for + each; which List they shall sign and certify, and transmit sealed to + the Seat of the Government of the United States, directed to the + President of the Senate. The President of the Senate shall, in the + Presence of the Senate and House of Representatives, open all the + Certificates, and the Votes shall then be counted. The Person having + the greatest Number of Votes shall be the President, if such Number be + a Majority of the whole Number of Electors appointed; and if there be + more than one who have such Majority, and have an equal Number of + Votes, then the House of Representatives shall immediately chuse by + Ballot one of them for President; and if no Person have a Majority, + then from the five highest on the List the said House shall in like + Manner chuse the President. But in chusing the President, the Votes + shall be taken by States, the Representation from each State having + one Vote; A quorum for this Purpose shall consist of a Member or + Members from two thirds of the States, and a Majority of all the + States shall be necessary to a Choice. In every Case, after the Choice + of the President, the Person having the greatest Number of Votes of + the Electors shall be the Vice President. But if there should remain + two or more who have equal Votes, the Senate shall chuse from them by + Ballot the Vice President. (See Note 8) + + Clause 4: The Congress may determine the Time of chusing the Electors, + and the Day on which they shall give their Votes; which Day shall be + the same throughout the United States. + + Clause 5: No Person except a natural born Citizen, or a Citizen of the + United States, at the time of the Adoption of this Constitution, shall + be eligible to the Office of President; neither shall any Person be + eligible to that Office who shall not have attained to the Age of + thirty five Years, and been fourteen Years a Resident within the + United States. + + Clause 6: In Case of the Removal of the President from Office, or of + his Death, Resignation, or Inability to discharge the Powers and + Duties of the said Office, (See Note 9) the Same shall devolve on the + VicePresident, and the Congress may by Law provide for the Case of + Removal, Death, Resignation or Inability, both of the President and + Vice President, declaring what Officer shall then act as President, + and such Officer shall act accordingly, until the Disability be + removed, or a President shall be elected. + + Clause 7: The President shall, at stated Times, receive for his + Services, a Compensation, which shall neither be encreased nor + diminished during the Period for which he shall have been elected, and + he shall not receive within that Period any other Emolument from the + United States, or any of them. + + Clause 8: Before he enter on the Execution of his Office, he shall + take the following Oath or Affirmation:--"I do solemnly swear (or + affirm) that I will faithfully execute the Office of President of the + United States, and will to the best of my Ability, preserve, protect + and defend the Constitution of the United States." + + Section. 2. + + Clause 1: The President shall be Commander in Chief of the Army and + Navy of the United States, and of the Militia of the several States, + when called into the actual Service of the United States; he may + require the Opinion, in writing, of the principal Officer in each of + the executive Departments, upon any Subject relating to the Duties of + their respective Offices, and he shall have Power to grant Reprieves + and Pardons for Offences against the United States, except in Cases of + Impeachment. + + Clause 2: He shall have Power, by and with the Advice and Consent of + the Senate, to make Treaties, provided two thirds of the Senators + present concur; and he shall nominate, and by and with the Advice and + Consent of the Senate, shall appoint Ambassadors, other public + Ministers and Consuls, Judges of the supreme Court, and all other + Officers of the United States, whose Appointments are not herein + otherwise provided for, and which shall be established by Law: but the + Congress may by Law vest the Appointment of such inferior Officers, as + they think proper, in the President alone, in the Courts of Law, or in + the Heads of Departments. + + Clause 3: The President shall have Power to fill up all Vacancies that + may happen during the Recess of the Senate, by granting Commissions + which shall expire at the End of their next Session. + + Section. 3. + + He shall from time to time give to the Congress Information of the + State of the Union, and recommend to their Consideration such Measures + as he shall judge necessary and expedient; he may, on extraordinary + Occasions, convene both Houses, or either of them, and in Case of + Disagreement between them, with Respect to the Time of Adjournment, he + may adjourn them to such Time as he shall think proper; he shall + receive Ambassadors and other public Ministers; he shall take Care + that the Laws be faithfully executed, and shall Commission all the + Officers of the United States. + + Section. 4. + + The President, Vice President and all civil Officers of the United + States, shall be removed from Office on Impeachment for, and + Conviction of, Treason, Bribery, or other high Crimes and + Misdemeanors. + +Article. III. + + Section. 1. + + The judicial Power of the United States, shall be vested in one + supreme Court, and in such inferior Courts as the Congress may from + time to time ordain and establish. The Judges, both of the supreme and + inferior Courts, shall hold their Offices during good Behaviour, and + shall, at stated Times, receive for their Services, a Compensation, + which shall not be diminished during their Continuance in Office. + + Section. 2. + + Clause 1: The judicial Power shall extend to all Cases, in Law and + Equity, arising under this Constitution, the Laws of the United + States, and Treaties made, or which shall be made, under their + Authority;--to all Cases affecting Ambassadors, other public Ministers + and Consuls;--to all Cases of admiralty and maritime Jurisdiction;--to + Controversies to which the United States shall be a Party;--to + Controversies between two or more States;--between a State and + Citizens of another State; (See Note 10)--between Citizens of + different States, --between Citizens of the same State claiming Lands + under Grants of different States, and between a State, or the Citizens + thereof, and foreign States, Citizens or Subjects. + + Clause 2: In all Cases affecting Ambassadors, other public Ministers + and Consuls, and those in which a State shall be Party, the supreme + Court shall have original Jurisdiction. In all the other Cases before + mentioned, the supreme Court shall have appellate Jurisdiction, both + as to Law and Fact, with such Exceptions, and under such Regulations + as the Congress shall make. + + Clause 3: The Trial of all Crimes, except in Cases of Impeachment, + shall be by Jury; and such Trial shall be held in the State where the + said Crimes shall have been committed; but when not committed within + any State, the Trial shall be at such Place or Places as the Congress + may by Law have directed. + + Section. 3. + + Clause 1: Treason against the United States, shall consist only in + levying War against them, or in adhering to their Enemies, giving them + Aid and Comfort. No Person shall be convicted of Treason unless on the + Testimony of two Witnesses to the same overt Act, or on Confession in + open Court. + + Clause 2: The Congress shall have Power to declare the Punishment of + Treason, but no Attainder of Treason shall work Corruption of Blood, + or Forfeiture except during the Life of the Person attainted. + +Article. IV. + + Section. 1. + + Full Faith and Credit shall be given in each State to the public Acts, + Records, and judicial Proceedings of every other State. And the + Congress may by general Laws prescribe the Manner in which such Acts, + Records and Proceedings shall be proved, and the Effect thereof. + + Section. 2. + + Clause 1: The Citizens of each State shall be entitled to all + Privileges and Immunities of Citizens in the several States. + + Clause 2: A Person charged in any State with Treason, Felony, or other + Crime, who shall flee from Justice, and be found in another State, + shall on Demand of the executive Authority of the State from which he + fled, be delivered up, to be removed to the State having Jurisdiction + of the Crime. + + Clause 3: No Person held to Service or Labour in one State, under the + Laws thereof, escaping into another, shall, in Consequence of any Law + or Regulation therein, be discharged from such Service or Labour, but + shall be delivered up on Claim of the Party to whom such Service or + Labour may be due. (See Note 11) + + Section. 3. + + Clause 1: New States may be admitted by the Congress into this Union; + but no new State shall be formed or erected within the Jurisdiction of + any other State; nor any State be formed by the Junction of two or + more States, or Parts of States, without the Consent of the + Legislatures of the States concerned as well as of the Congress. + + Clause 2: The Congress shall have Power to dispose of and make all + needful Rules and Regulations respecting the Territory or other + Property belonging to the United States; and nothing in this + Constitution shall be so construed as to Prejudice any Claims of the + United States, or of any particular State. + + Section. 4. + + The United States shall guarantee to every State in this Union a + Republican Form of Government, and shall protect each of them against + Invasion; and on Application of the Legislature, or of the Executive + (when the Legislature cannot be convened) against domestic Violence. + +Article. V. + + The Congress, whenever two thirds of both Houses shall deem it + necessary, shall propose [1]Amendments to this Constitution, or, on + the Application of the Legislatures of two thirds of the several + States, shall call a Convention for proposing Amendments, which, in + either Case, shall be valid to all Intents and Purposes, as Part of + this Constitution, when ratified by the Legislatures of three fourths + of the several States, or by Conventions in three fourths thereof, as + the one or the other Mode of Ratification may be proposed by the + Congress; Provided that no Amendment which may be made prior to the + Year One thousand eight hundred and eight shall in any Manner affect + the first and fourth Clauses in the Ninth Section of the first + Article; and that no State, without its Consent, shall be deprived of + its equal Suffrage in the Senate. + +Article. VI. + + Clause 1: All Debts contracted and Engagements entered into, before + the Adoption of this Constitution, shall be as valid against the + United States under this Constitution, as under the Confederation. + + Clause 2: This Constitution, and the Laws of the United States which + shall be made in Pursuance thereof; and all Treaties made, or which + shall be made, under the Authority of the United States, shall be the + supreme Law of the Land; and the Judges in every State shall be bound + thereby, any Thing in the Constitution or Laws of any State to the + Contrary notwithstanding. + + Clause 3: The Senators and Representatives before mentioned, and the + Members of the several State Legislatures, and all executive and + judicial Officers, both of the United States and of the several + States, shall be bound by Oath or Affirmation, to support this + Constitution; but no religious Test shall ever be required as a + Qualification to any Office or public Trust under the United States. + +Article. VII. + + The Ratification of the Conventions of nine States, shall be + sufficient for the Establishment of this Constitution between the + States so ratifying the Same. + + done in Convention by the Unanimous Consent of the States present the + Seventeenth Day of September in the Year of our Lord one thousand + seven hundred and Eighty seven and of the Independence of the United + States of America the Twelfth In witness whereof We have hereunto + subscribed our Names, + + GO WASHINGTON--Presidt. and deputy from Virginia + + [Signed also by the deputies of twelve States.] + + Delaware + + Geo: Read + Gunning Bedford jun + John Dickinson + Richard Bassett + Jaco: Broom + + Maryland + + James MCHenry + Dan of ST ThoS. Jenifer + DanL Carroll. + + Virginia + + John Blair-- + James Madison Jr. + + North Carolina + + WM Blount + RichD. Dobbs Spaight. + Hu Williamson + + South Carolina + + J. Rutledge + Charles 1ACotesworth Pinckney + Charles Pinckney + Pierce Butler. + + Georgia + + William Few + Abr Baldwin + + New Hampshire + + John Langdon + Nicholas Gilman + + Massachusetts + + Nathaniel Gorham + Rufus King + + Connecticut + WM. SamL. Johnson + Roger Sherman + + New York + + Alexander Hamilton + + New Jersey + + Wil: Livingston + David Brearley. + WM. Paterson. + Jona: Dayton + + Pennsylvania + + B Franklin + Thomas Mifflin + RobT Morris + Geo. Clymer + ThoS. FitzSimons + Jared Ingersoll + James Wilson. + Gouv Morris + + Attest William Jackson Secretary + + NOTES + + Note 1: This text of the Constitution follows the engrossed copy + signed by Gen. Washington and the deputies from 12 States. The small + superior figures preceding the paragraphs designate Clauses, and were + not in the original and have no reference to footnotes. + + The Constitution was adopted by a convention of the States on + September 17, 1787, and was subsequently ratified by the several + States, on the following dates: Delaware, December 7, 1787; + Pennsylvania, December 12, 1787; New Jersey, December 18, 1787; + Georgia, January 2, 1788; Connecticut, January 9, 1788; Massachusetts, + February 6, 1788; Maryland, April 28, 1788; South Carolina, May 23, + 1788; New Hampshire, June 21, 1788. + + Ratification was completed on June 21, 1788. + + The Constitution was subsequently ratified by Virginia, June 25, 1788; + New York, July 26, 1788; North Carolina, November 21, 1789; Rhode + Island, May 29, 1790; and Vermont, January 10, 1791. + + In May 1785, a committee of Congress made a report recommending an + alteration in the Articles of Confederation, but no action was taken + on it, and it was left to the State Legislatures to proceed in the + matter. In January 1786, the Legislature of Virginia passed a + resolution providing for the appointment of five commissioners, who, + or any three of them, should meet such commissioners as might be + appointed in the other States of the Union, at a time and place to be + agreed upon, to take into consideration the trade of the United + States; to consider how far a uniform system in their commercial + regulations may be necessary to their common interest and their + permanent harmony; and to report to the several States such an act, + relative to this great object, as, when ratified by them, will enable + the United States in Congress effectually to provide for the same. The + Virginia commissioners, after some correspondence, fixed the first + Monday in September as the time, and the city of Annapolis as the + place for the meeting, but only four other States were represented, + viz: Delaware, New York, New Jersey, and Pennsylvania; the + commissioners appointed by Massachusetts, New Hampshire, North + Carolina, and Rhode Island failed to attend. Under the circumstances + of so partial a representation, the commissioners present agreed upon + a report, (drawn by Mr. Hamilton, of New York,) expressing their + unanimous conviction that it might essentially tend to advance the + interests of the Union if the States by which they were respectively + delegated would concur, and use their endeavors to procure the + concurrence of the other States, in the appointment of commissioners + to meet at Philadelphia on the Second Monday of May following, to take + into consideration the situation of the United States; to devise such + further provisions as should appear to them necessary to render the + Constitution of the Federal Government adequate to the exigencies of + the Union; and to report such an act for that purpose to the United + States in Congress assembled as, when agreed to by them and afterwards + confirmed by the Legislatures of every State, would effectually + provide for the same. + + Congress, on the 21st of February, 1787, adopted a resolution in favor + of a convention, and the Legislatures of those States which had not + already done so (with the exception of Rhode Island) promptly + appointed delegates. On the 25th of May, seven States having convened, + George Washington, of Virginia, was unanimously elected President, and + the consideration of the proposed constitution was commenced. On the + 17th of September, 1787, the Constitution as engrossed and agreed upon + was signed by all the members present, except Mr. Gerry of + Massachusetts, and Messrs. Mason and Randolph, of Virginia. The + president of the convention transmitted it to Congress, with a + resolution stating how the proposed Federal Government should be put + in operation, and an explanatory letter. Congress, on the 28th of + September, 1787, directed the Constitution so framed, with the + resolutions and letter concerning the same, to "be transmitted to the + several Legislatures in order to be submitted to a convention of + delegates chosen in each State by the people thereof, in conformity to + the resolves of the convention." + + On the 4th of March, 1789, the day which had been fixed for commencing + the operations of Government under the new Constitution, it had been + ratified by the conventions chosen in each State to consider it, as + follows: Delaware, December 7, 1787; Pennsylvania, December 12, 1787; + New Jersey, December 18, 1787; Georgia, January 2, 1788; Connecticut, + January 9, 1788; Massachusetts, February 6, 1788; Maryland, April 28, + 1788; South Carolina, May 23, 1788; New Hampshire, June 21, 1788; + Virginia, June 25, 1788; and New York, July 26, 1788. + + The President informed Congress, on the 28th of January, 1790, that + North Carolina had ratified the Constitution November 21, 1789; and he + informed Congress on the 1st of June, 1790, that Rhode Island had + ratified the Constitution May 29, 1790. Vermont, in convention, + ratified the Constitution January 10, 1791, and was, by an act of + Congress approved February 18, 1791, "received and admitted into this + Union as a new and entire member of the United States." + + Note 2: The part of this Clause relating to the mode of apportionment + of representatives among the several States has been affected by + Section 2 of amendment XIV, and as to taxes on incomes without + apportionment by amendment XVI. + + Note 3: This Clause has been affected by Clause 1 of amendment XVII. + + Note 4: This Clause has been affected by Clause 2 of amendment XVIII. + + Note 5: This Clause has been affected by amendment XX. + + Note 6: This Clause has been affected by amendment XXVII. + + Note 7: This Clause has been affected by amendment XVI. + + Note 8: This Clause has been superseded by amendment XII. + + Note 9: This Clause has been affected by amendment XXV. + + Note 10: This Clause has been affected by amendment XI. + + Note 11: This Clause has been affected by amendment XIII. + + Note 12: The first ten amendments to the Constitution of the United + States (and two others, one of which failed of ratification and the + other which later became the 27th amendment) were proposed to the + legislatures of the several States by the First Congress on September + 25, 1789. The first ten amendments were ratified by the following + States, and the notifications of ratification by the Governors thereof + were successively communicated by the President to Congress: New + Jersey, November 20, 1789; Maryland, December 19, 1789; North + Carolina, December 22, 1789; South Carolina, January 19, 1790; New + Hampshire, January 25, 1790; Delaware, January 28, 1790; New York, + February 24, 1790; Pennsylvania, March 10, 1790; Rhode Island, June 7, + 1790; Vermont, November 3, 1791; and Virginia, December 15, 1791. + + Ratification was completed on December 15, 1791. + + The amendments were subsequently ratified by the legislatures of + Massachusetts, March 2, 1939; Georgia, March 18, 1939; and + Connecticut, April 19, 1939. + + Note 13: Only the 13th, 14th, 15th, and 16th articles of amendment had + numbers assigned to them at the time of ratification. + + Note 14: This sentence has been superseded by section 3 of amendment + XX. + + Note 15: See amendment XIX and section 1 of amendment XXVI. + + Note 16: Repealed by section 1 of amendment XXI. + +References + + 1. http://www.house.gov/Constitution/Amend.html |